Ansible 制定演员表inventory即hosts解析
记录目标主机∶ inventory
在没有对Ansible做任何配置的时候,Ansible只能通过localhost来控制本机,我们都是让Ansible指挥本机去执行任务,这离我们批量控制远程主机的目标还有点远。Ansible肯定是支持指挥远程主机执行任务的,如何指定哪些远程主机执行任务呢?
让Ansible发挥强大作用的第一步是配置inventory。inventory表示清单的意思,在计算机领域里往往表示的资源清单,在Ansible中它表示主机节点清单,也是资源的一种。通过配置inventory,就可以定义哪些目标主机是可以被控制的。
这有点像是拍电影前先确定好演员表一样,演员表就是inventory,定好了演员,电影就可以正式开拍,演员则各自就位去完成剧本分派给他们的任务(之后我们会发现,使用Ansible跟拍电影在很多方面是相似的)。
inventory文件路径
默认的inventory文件是/etc/ansible/hosts,可以通过Ansible配置文件的inventory配置指令去修改路径。
[root@real-server2 ~]# grep '/etc/ansible/hosts' /etc/ansible/ansible.cfg
#inventory = /etc/ansible/hosts
但通常我们不会去修改这个配置项,如果在其它地方定义了inventory文件,可以直接在ansible的命令行中使用-i 选项去指定我们自定义的inventory文件。
anible-i /mp/myinv.ini..
ansible-playook-i tmp/myinvini.
配置inventory
Ansible inventory文件的书写格式遵循ini配置格式。从Ansible2.4开始支持其它格式,比如yaml格式的inventory。此处以ini格式为例,循序渐进地介绍inventory的规则。假设所有的规则都定义在/etc/ansible/hosts文件中。
一行一主机的定义方式
Ansible默认是基于ssh连接的,所以一般情况下inventory中的每个目标节点都配置主机名或P地址、sshd监听的端口号、连接的用户名和密码、ssh连接时的参数等等。当然,很多参数有默认值,所以最简单的是直接指定主机名或P地址即可。例如,在默认的inventory文件/etc/ansible/hosts添加几个目标主机∶
node1
node2 ansible_host=192.168.200.28
192.168.200.31
192.168.200.32:22
192.168.200.3[2:3] ansible port=22
上面的inventory配置中∶
(1).第一行通过主机名定义,在ansible连接该节点时会进行主机名DNS解析
(2).第二行也是通过主机名定义,但是使用了一个主机变量ansible_host-IP,此时An sible去连接该主机时将直接通过P地址进行连接,而不会进行DNS解析,所以此时的n ode2相当于是主机别名,它可以命名为任何其它名称,如node2
(3)第三行通过IP地址定义主机节点
(4)第四行定义时还指定了端口号
(5)最后一行通过范围的方式展开成了两个主机节点192.168.290.32和192.168.200.3 3,同时还定义了这两个节点的主机变量ansible port-22表示连接这两个节点时的端口号为22
范围展开的方式还支持字母范围。下面都是有效的∶
这样定义之后,Ansible就可以控制任何一个目标主机了∶
[root@real-server2 ~]# ansible node1 -m shell -a "pwd"
node2 | CHANGED | rc=0 >>
/root
[root@real-server2 ~]# ansible node2 -m copy -a "src=/etc/passwd dest=/tmp"
node2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
目录 返回
首页