一、Inventory 库存清单文件
1.Inventory 作用
Ansible 可以在同一时间针对多个系统设施进行管理工作。它通过选择 Ansible 资源清单文件中列出的系统,该清单文件默认是在 / etc/ansible/hosts,也可以使用 -i <path> 进行路径的指定。文件内的格式 INI 风格,中括号内为分组名。 除了这个文件之后,还可以同时使用多个清单文件,可以动态的获取,也可以从外部获取外部库存清单文件。云平台上去拉取(如 AWS,或者 Cobbler 的 API 结合)。
2.hosts 文件格式是 INI 的格式,以及如何添加主机
和之前我们上篇文中的一样,如下所示:
- [centos_group]
- 172.17.0.2
- 172.17.0.3
为了有所区别,学习需要,我们在添加 1 个 centos-3 主机(创建完成后,记得将 management 的公钥放到该主机上去,实现免密码登陆)
- [root@docker ~]# docker run -d -it --name centos-3 --expose 222 centos_sshd_3
查看下新主机的 ip
- [root@docker ~]# docker exec centos-3 hostname -I
- 172.17.0.4
然后,我们在 hosts 文件中原有 centos_group 组下面,在添加单个组名 webserver,组内主机设备为刚创建的 centos-3,也可以以单个主机 ip 的方式存在(不过建议同一功能类型都分在组名里,为了后期管理方便)完整内容如下:
- [centos_group]
- 172.17.0.2
- 172.17.0.3
- [webserver]
- 172.17.0.4
[webserver 是组名,用于对系统主机进行功能分类,便于你在统一给 web 服务器部署管理时,不影响其它主机。这样你在使用 ansible 命令执行时,输入组名就可以对. 2 和 .3 进行管理了。如下:
- [root@docker ~]# ansible webserver -m ping
- 172.17.0.4 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
3. 非标准的 ssh 端口
重启后,端口运行在配置文件里指定的端口上啦。
如果你的主机 ssh 服务不是运行在 标准的 22 端口时,在 hosts 里面就得更改定义方法了,目前有 2 种方式:
第一种:
- [webserver]
- 172.17.0.4:222
第二种:
- [webserver]
- web1 ansible_port=222 ansible_host=172.17.0.4
这里的 web1 相当于是个别名。验证下:
- [root@docker ~]# ansible webserver -m ping
- web1 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
- [root@docker ~]# ansible web1 -m ping
- web1 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
4. 大量的主机
如果有很多同一网段和功能,并有规律的主机的话,可以使用像正则匹配的方式去修改 hosts 文件。如下:
- [webserver]
- web1 ansible_port=222 ansible_host=172.17.0.4
- [test]
- 172.17.0.[2:3]
运行 ansible 验证下:
- [root@docker ~]# ansible test -m ping
- 172.17.0.2 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
- 172.17.0.3 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
除了用数字 定义范围外,还可以用字母的方式去匹配主机名,如 a 到 z,a 到 c 等。
5. 包含组的组名
如果你的 webserver 组的主机由于 centos 系统需要更新一个系统文件,这个时候你在更新 centos_group 组的组机时,就可以把 webserver 组的主机带上。就出现了带有 :children 关键字的组名.
配置文件如下:
- [root@docker ~]# cat /etc/ansible/hosts
- [centos_group]
- 172.17.0.2
- 172.17.0.3
- [webserver]
- web1 ansible_port=222 ansible_host=172.17.0.4
- [centos:children]
- centos_group
- webserver
验证下:
- [root@docker ~]# ansible centos -m ping
- web1 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
- 172.17.0.2 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
- 172.17.0.3 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
二、Inventory 清单参数列表
1. 主机连接:
ansible_connection:连接主机的类型,这里可以是 ansible 连接插件的名称中的一个,如 ssh 协议中的 smart,ssh 或者 paramiko。默认值是 smart。
2.ssh 连接
使用特权命令(如 sudo)
远程主机环境参数
ansible_shell_type:目标系统的 shell 类型,你不应该设置这个参数,除非你设置的 ansible_shell_executable 与默认的 sh 不兼容。默认情况下,命令是在 sh shell 环境风格下运行的。此处可以设置为 csh 或 fish shell。
- some_host ansible_port=2222 ansible_user=manager
- aws_host ansible_ssh_private_key_file=/home/example/.ssh/aws.pem
- freebsd_host ansible_python_interpreter=/usr/local/bin/python
- ruby_module_host ansible_ruby_interpreter=/usr/bin/ruby.1.9.3
非 SSH 的连接类型
如上面所说,ansible 执行剧本时通过 ssh 连接,但是它又不仅仅只局限于 ssh 这种连接类型。连接的类型是可以变的。如下面的几种
local:该连接类型将在控制机本身上执行剧本。
docker:该连接类型将使用本地 docker 直接将 剧本部署到 docker 容器中。以下是有连接器处理的参数:
ansible_host :要连接的 docker 容器名称
ansible_user :在容器中操作的用户名,必须是容器内存在的用户
ansible_become :如果设置为 true,这个用户将被用于在容器内进行操作
ansible_docker_extra_args :可以是 Docker 程序 启动时支持的额外参数,不是特定的命令,此参数主要用于配置远程 Docker 守护进程使用。
如下是一个创建容器并进行部署的示例:
- - name: create jenkins container
- docker:
- name: my_jenkins
- image: jenkins
- - name: add container to inventory
- add_host:
- name: my_jenkins
- ansible_connection: docker
- ansible_docker_extra_args: "--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243"
- ansible_user: jenkins
- changed_when: false
- - name: create directory for ssh keys
- delegate_to: my_jenkins
- file:
- path: "/var/jenkins_home/.ssh/jupiter"
- state: directory
如果文中有错误之处,还希望大家多多指出,互相学习,谢谢。
下一篇再学习下 ansible 里的 patterns。
来源: http://www.cnblogs.com/hanyifeng/p/6137905.html