虚拟化容器,大数据,DBA,中间件,监控。

Ansible 制定演员表inventory即hosts解析

20 12月
作者:admin|分类:系统运维

记录目标主机∶ 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"

 

 

 

浏览335 评论0
返回
目录
返回
首页
Ansible 变量的使用详解 Shell for语句实战案例