自动化批量部署工具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官方文档,如有翻译不准的地方烦请指正!)