Ansible :一个配置管理和IT自动化工具(1/3)

 ansible,一个由 Python 编写的强大的配置管理解决方案。尽管市面上已经有不少可供选择的配置管理解决方案,但他们各有优劣,而 ansible 的特色就在于它的简洁。让 ansible 在主流的配置管理系统中不同凡响的一点即是,它并不须要你在想要配置的每一个节点上安装本身的组件。同时提供的一个优势在于,若是须要的话,你能够在不止一个地方控制你的整个基础架构。最后一点是它的正确性,或许这里有些争议,可是我认为在大多数时候这仍然能够做为它的一个优势。说得足够多了,让咱们来着手在 RHEL/CentOS 和基于 Debian/Ubuntu 的系统中安装和配置 Ansible。html

准备工做

  1. 发行版:RHEL/CentOS/Debian/Ubuntu Linux
  2. Jinja2:Python 的一个对设计师友好的现代模板语言
  3. PyYAML:Python 的一个 YAML 编码/反编码函数库
  4. paramiko:纯 Python 编写的 SSHv2 协议函数库 (译者注:原文对函数库名有拼写错误)
  5. httplib2:一个功能全面的 HTTP 客户端函数库
  6. 本文中列出的绝大部分操做已经假设你将在 bash 或者其余任何现代的 shell 中以 root 用户执行。

Ansible 如何工做

Ansible 工具并不使用守护进程,它也不须要任何额外的自定义安全架构,所以它的部署能够说是十分容易。你须要的所有东西即是 SSH 客户端和服务器了。linux

+-----------------+ +---------------+

|安装了 Ansible 的| SSH | 文件服务器1 |

|Linux/Unix 工做站|<------------------>| 数据库服务器2 | 在本地或远程

+-----------------+ 模块 | 代理服务器3 | 数据中心的

192.168.1.100 +---------------+ Unix/Linux 服务器

其中:git

  1. 192.168.1.100 - 在你本地的工做站或服务器上安装 Ansible。
  2. 文件服务器1到代理服务器3 - 使用 192.168.1.100 和 Ansible 来自动管理全部的服务器。
  3. SSH - 在 192.168.1.100 和本地/远程的服务器之间设置 SSH 密钥。

Ansible 安装教程

ansible 的安装垂手可得,许多发行版的第三方软件仓库中都有现成的软件包,能够直接安装。其余简单的安装方法包括使用 pip 安装它,或者从 github 里获取最新的版本。若想使用你的软件包管理器安装,在基于 RHEL/CentOS Linux 的系统里你极可能须要 EPEL 仓库github

A、在基于 RHEL/CentOS Linux 的系统中安装 ansible

输入以下 yum 命令:shell

$ sudo yum install ansible

B、在基于 Debian/Ubuntu Linux 的系统中安装 ansible

输入以下 apt-get 命令:数据库

$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible

C、使用 pip 安装 ansible

pip 命令是一个安装和管理 Python 软件包的工具,好比它能管理 Python Package Index 中的那些软件包。ubuntu

以下方式在 Linux 和类 Unix 系统中通用:centos

$ sudo pip install ansible

D、从源代码安装最新版本的 ansible

你能够经过以下命令从 github 中安装最新版本:安全

$ cd ~
$ git clone git://github.com/ansible/ansible.git
$ cd ./ansible
$ source ./hacking/env-setup

当你从一个 git checkout 中运行 ansible 的时候,请记住你每次用它以前都须要设置你的环境,或者把这个设置过程加入你的 bash rc 文件中:bash

# 加入 BASH RC
$ echo "export ANSIBLE_HOSTS=~/ansible_hosts" >> ~/.bashrc
$ echo "source ~/ansible/hacking/env-setup" >> ~/.bashrc

ansible 的 hosts 文件包括了一系列它能操做的主机。默认状况下 ansible 经过路径 /etc/ansible/hosts 查找 hosts 文件,不过这个行为也是能够更改的,这样当你想操做不止一个 ansible 或者针对不一样的数据中心的不一样客户操做的时候也是很方便的。你能够经过命令行参数 -i 指定 hosts 文件:

$ ansible all -m shell -a "hostname" --ask-pass -i /etc/some/other/dir/ansible_hosts

不过我更倾向于使用一个环境变量,这能够在你想要经过 source 一个不一样的文件来切换工做目标的时候起到做用。这里的环境变量是 $ANSIBLE_HOSTS,能够这样设置:

$ export ANSIBLE_HOSTS=~/ansible_hosts

一旦全部须要的组件都已经安装完毕,并且你也准备好了你的 hosts 文件,你就能够来试一试它了。为了快速测试,这里我把 127.0.0.1 写到了 ansible 的 hosts 文件里:

$ echo "127.0.0.1" > ~/ansible_hosts

如今来测试一个简单的 ping:

$ ansible all -m ping

或者提示 ssh 密码:

$ ansible all -m ping --ask-pass

我在刚开始的设置中遇到过几回问题,所以这里强烈推荐为 ansible 设置 SSH 公钥认证。不过在刚刚的测试中咱们使用了 --ask-pass,在一些机器上你会须要安装 sshpass 或者像这样指定 -c paramiko:

$ ansible all -m ping --ask-pass -c paramiko

固然你也能够安装 sshpass,然而 sshpass 并不老是在标准的仓库中提供,所以 paramiko 可能更为简单。

下一步: