自动化批量部署工具Ansible笔记之ansible安装与Inventory文件

    一、ansible简介

    ansible是一款自动化运维部署工具,与saltstack,pupet等不同的是,ansible没有采用C/S的架构,即没有客户端与服务端之分。这也就意味着,ansible的安装更加方便,管理节点更加灵活(任何一台安装了ansible的机器都可以充当管理节点)。

    ansible提供了丰富的模块来方便的完成管理任务,对于复杂的管理任务来说,ansible通过编写playbook的方式来批量执行。而且ansible也可以并发的执行操作,可以同时在多台机器上执行playbook中的各个任务。

    对了,顺便说一句,ansible是基于ssh协议来实现的。


    二、ansible安装部署

    你可以访问ansible的github来找到ansible的源码,地址:https://github.com/ansible/ansible

    安装ansible时,并不会在你的机器上安装一个数据库或者任何的守护程序,你只需要很方便的在一台可以远程管理你的主机的机器上安装ansible就可以了,甚至可以是一台笔记本电脑。

    ansible管理节点的主机要求:

    1、python2.6或python2.7

    2、管理节点不支持windows系统

    3、适用系统包括Red Hat,CentOS,Debian,OS X,以及BSD系列的系统

    ansible被管理节点的主机要求:

    被管理节点需要安装python2.4以上的版本,但是如果python的版本低于python2.5的话需要安装依赖包python-simplejson(试用yum方式安装即可)

    注意:

    1、ansible的“raw”模块和“script”模块不需要python-simplejson,所以你可以使用这两个模块来安装这个文件;

    2、如果你在远程管理节点上开启了SElinux,那么在你使用“copy/file/template”功能前,要安装libselinux-python包,你可以用ansible的yum模块来安装这个包;

    3、在默认没有安装python2.X而是安装了python3.X的系统上,你可以自己安装python2.X版本,然后通过设置ansible_python_interpreter环境变量来指定你安装的python2.6的路径。

    在管理节点上安装ansible:

    本文在CentOS 6.5系统上通过yum方式安装ansible且机器上已经安装了epel源,其他系统安装方式请参照官方文档。

    [root@localhost ~]# yum -y install ansible

    ansible配置文件中常用的配置项:

[defaults]
inventory      = /etc/ansible/hosts    //指定hosts文件路径,文件中记录了被管理节点以及其分组
sudo_user      = root        //指定sudo用户为root
timeout = 10        //指定ssh的超时时间,该值适当改大一些,避免ssh超时引起的错误


    三、ansible命令常用选项

ansible命令格式:

ansible <主机组> [选项] [-m 模块名称] [-a 参数]

常用选项如下:
 -v, --verbose
	冗长模式,输出更多的成功任务信息

-i PATH, --inventory=PATH
	指定默认的inventory文件路径,默认为/etc/ansible/hosts

-f NUM, --forks=NUM
	并发数,此处的NUM应该被设定为一个整数,默认为5

--private-key=PRIVATE_KEY_FILE
	设置默认的ssh链接认证的文件

-m NAME, --module-name=NAME
	指定模块名称

-M DIRECTORY, --module-path=DIRECTORY
	指定寻找模块的路径,默认路径在/usr/share/ansible。这个功能也可以通过设置环境变量ANSIBLE_LIBRARY来实现

-a 'ARGUMENTS', --args='ARGUMENTS'
	传递给模块的参数

-k, --ask-pass
	提示输入ssh登录密码

-K, --ask-sudo-pass
	提示输入sudo密码

-o, --one-line
	单行输出

-s, --sudo
	使用-u选项指定的用户执行命令和sudo到root用户(翻译的有点问题)

-t DIRECTORY, --tree=DIRECTORY
	将输出的内容保存到指定的目录下,文件以主机地址的形式被保存在该目录下

-T SECONDS, --timeout=SECONDS
	连接主机的超时时间

-B NUM, --background=NUM
	在后台运行命了,超过该选项设置的时间后杀死任务

-P NUM, --poll=NUM
	每NUM秒检查后台运行的任务,需要-B选项

-u USERNAME, --user=USERNAME
	使用该远程用户名替换当前的用户名

-U SUDO_USERNAME, --sudo-user=SUDO_USERNAME
	从root用户sudo到该选项指定的用户

-c CONNECTION, --connection=CONNECTION
	连接类型,可选的类型有paramiko(SSH),ssh和local。local最常用于crontab和kickstarts

-l SUBSET, --limit=SUBSET
	进一步限制被选择的主机/主机组模式

-l ~REGEX, --limit=~REGEX
	使用正则表达式进一步限制主机

--list-hosts
	列出匹配到的所有主机,不执行任何操作


四、Inventory文件

ansible通过inventory文件来获取操作的主机,默认情况下,该文件被存储在/etc/ansible/hosts。而且可以同时使用多个inventory文件,或者动态的获取inventory文件。

1、主机和主机组

如下是一个inventory文件的内容,内容具有INI风格:

[webserver]
192.168.1.125
192.168.1.126

[dbserver]
192.168.1.10
www.example.com
192.168.1.12:3300

其中,“[]”内的内容是组名,其下为各主机的IP或域名,同一主机可以同时放在不同的组中,其后可以指定端口号。


当有大量的主机名类似的主机时,可以不用一条一条添加,可以如下所示来添加:

[webserver]
www[01:50].example.com


上述方法可以一次添加50台机器。除了使用数字范围外,还可以使用字母范围。比如:

[dbserver]
db-[a:f].example.com


在inventory文件中可以指定每台主机的链接类型和链接用户:

[testserver]
10.1.1.1ansible_connection=local
10.1.1.2ansible_connection=sshansible_ssh_user=test


2、主机变量

在inventory文件中可以为每台主机指定变量,变量可以用于playbook中:

[testserver]
host1http_port=80
host2http_port=8088


3、主机组变量

如果某个主机组中所有主机都需要指定相同的变量,即可使用主机组变量,使用:vars后缀可以使变量生效:

[testserver]
host1
host2

[testserver:vars]
ntp_server=ntp.example.com
proxy=proxy.example.com


4、主机组的组,和组变量

可以将主机组再放入另一个组中使用:children后缀来组成新的组,也可以使用变量:

[testserver]
host1
host2

[webserver]
host2
host3

[group:children]
testserver
webserver

[group:vars]
system_timeout=30

(本文部分翻译自ansible官方文档,如有翻译不准的地方烦请指正!)