誉天教育,武汉誉天,誉天ICT认证培训.png/

Datapass

数通
当前位置:首页 > 誉天学堂 > 运维 > 【誉天红帽学习指南】Ansible的主机清单和配置文件

【誉天红帽学习指南】Ansible的主机清单和配置文件

  • 2023/09/06

实验概述


在本章我们将了解在ansible内如何定义主机和组以及怎么选择主机和组、如何去配置文件优先级并列出配置文件的详解。那么主机清单是什么呢?在使用Ansible来批量管理主机的时候,通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做Inventory,也叫主机清单。


1.png


该文件默认位于/etc/ansible/hosts。当然我们也可以通过修改ansible配置文件的Inventory配置项来修改默认inventory的位置。


640.png


ansible配置文件: /etc/ansible/ansible.cfg


640 (1).png


2.png


1、简单的定义主机和组

在ansible的配置文件目录下寻找hosts文件,用vim编辑hosts文件;


640 (2).png


中括号中的名字代表组名,可以根据自己的需求将庞大的主机分成具有标识的组,如上面分了两个组webservers和dbservers组;主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址;


2、同时我们还可以指定主机范围:# vim /etc/ansible/hosts ;下面指定了从web01到web50,webservers组共计50台主机;databases组有db-a到db-f共6台主机。


640 (3).png


3、定义主机组嵌套:如下图示例中,production组包含两个子组,分别为webservers和dbservers,webservers和dbservers组分别包含若干主机,注意:“在定义主机嵌套组时需加上:children”


640 (4).png


3.png


1、在前面定义Inventory的时候,我们会把所有被管理主机通过主机组的方式定义到inventory当中,但是当我们实际使用的时候,可能只需要对某一主机或主机组进行操作,这个时候就需要通过匹配的方式指定某一特定主机或主机组。则需要用到以下命令:


① 匹配所有主机

# ansible all --list-hosts    all  表示匹配所有的主机。


640 (5).png


② 匹配指定的主机或主机组

# ansible prod --list-hosts    匹配单个组


640 (6).png


# ansible db2.example.com --list-hosts    匹配单个主机


640 (7).png


#ansible'lb1.lab.example.com,s1.lab.example.com,db1.example.com' --list-hosts   匹配多个主机


640 (8).png


# ansible 'london,boston' --list-hosts   匹配多个组


640 (9).png


# ansible ungrouped --list-hosts   匹配不属于任何组的主机


640 (10).png


③ 通配符匹配(方法同上)

# ansible '*.example.com' --list-hosts 匹配'*.example.com’
# ansible '172.25.*' --list-hosts   匹配172.25.*的主机
# ansible 's*' --list-hosts    匹配以s开头的主机及主机组


④ 通配符组合匹配

# ansible '*.example.com,!*.lab.example.com' --list-hosts 匹配包含*.example.com但不包含*.lab.example.com的主机

# ansible 'prod,172*,*lab*' --list-hosts 匹配包含prod以及172开头、包含lab关键字的主机或组

# ansible 'db,&london' --list-hosts 匹配属于db组同时还属于london组的主机

# ansible 'boston,london,&prod,!lb' --list-hosts  匹配在london组或者boston组,还必须在prod组中且必须不在lb组中的主机


⑤ 正则表达式匹配

# ansible '~(s|db).*\.example\.com' --list-hosts

在开头的地方使用”~”,用来表示这是一个正则表达式,以s或者db开头的,中间包含任意长度字符串,并且以example.com结尾的主机或者组。


⑥ 通过—limit明确指定主机或组

# ansible all --limit srv1.example.com --list-hosts 选定的组中明确指定主机

# ansible all --limit @retry.txt --list-hosts 指定一个文件,该文件中定义明确指定的主机的列表;

定义一个名为retry.txt的主机文件:内容为srv1.example.com


640 (11).png


4.png


配置文件优先级:ansible的配置文件名为ansible.cfg,它一般会存在于四个地方:

1:ANSIBLE_CONFIG:首先,Ansible命令会检查该环境变量,及这个环境变量将指向的配置文件。

2:./ansible.cfg:当前工作目录,即当前执行ansible指令的目录,如果ANSIBEL_CONFIG环境变量未定义,则优先使用该配置文件。

3:~/.ansible.cfg:当前用户家目录下的一个隐藏文件,如果当前工作目录下不存4:在ansible.cfg配置文件,则会查找用户家目录下的该隐藏文件/etc/ansible/ansible.cfg:默认配置文件,如果上面两个路径下的ansible.cfg都不存在,则使用该文件。


5.png


1. ansible.cfg的配置默认分为十段:

[defaults]:通用配置项

[inventory]:与主机清单相关的配置项

[privilege_escalation]:特权升级相关的配置项

[paramiko_connection]:使用paramiko连接的相关配置项,Paramiko在RHEL6之后的版本中默认使用的ssh连接方式

[ssh_connection]:使用OpenSSH连接的相关配置项,OpenSSH是Ansible在RHEL6之后默认使用的ssh连接方式

[persistent_connection]:持久连接的配置项

[accelerate]:加速模式配置项

[selinux]:selinux相关的配置项

[colors]:ansible命令输出的颜色相关的配置项

[diff]:定义是否在运行时打印diff(变更前与变更后的差异)


2. 配置参数说明:

inventory:定义默认使用的主机清单

remote_user:ansible在操作远程主机时,使用远程主机上的哪个用户身份,默认是root

ask_pass:ansible在操作远程主机时,获取远程主机上的用户身份,是否交互提示密码验证,默认为true。如果使用密钥认证的话,建议将其设置为false

log_path:默认ansible 执行的时候,并不会输出日志到文件,打开该配置项,所有的命令执行后,都会将日志输出到/var/log/ansible.log文件。

become:如果ansible在操作远程主机时,使用的是远程主机上的普通用户,该普通用户是否允许提权

become_method:如果允许提权,使用何种提权方式,默认是sudo

become_user:提权到哪个用户身份,默认是root

become_ask_pass:提权时,是否交互提示密码验证,默认为False

ssh_args:ansible通过ssh连接远程被管理机,这里用于定义一些ssh连接时的参数,如-C启用压缩传输,ControlPersist用于提升性能。

host_key_checking:通过ssh首次连接远程主机时,由于在本机的~/.ssh/known_hosts文件中并有fingerprint key串,ssh第一次连接的时候一般会提示输入yes/no进行确认将key字符串加入到~/.ssh/known_hosts文件中。将此项设置为False将跳过该确认过程。或者在ssh_args中添加参数-o StrictHostKeyChecking=no,也可以实现该功能。


6.png


1. ansible在执行ad-hoc的时候,需要使用远程管理机上的一个用户身份,默认这个用户是root,而在实际生产环境中,不建议直接使用root,而推荐使用一个普通用户,需要配置该普通用户可通过sudo提权。


配置步骤如下:


① 在被管理机上创建一个普通用户ansible,并配置sudo提权:

# useradd ansible 创建ansible用户
# vim /etc/sudoers.d/ansible设置ansible用户可免密提权
ansible ALL=(ALL)  NOPASSWD:ALL


640 (12).png


② 在管理端修改ansible.cfg

配置文件如下:(注:需要去掉#注释符号)


[default]

remote_user = ansible

ask_pass = False

640 (18).png


640 (13).png


[privilege_escalation]

become=True

become_method=sudo

become_user=root

become_ask_pass=False

640 (14).png


③ ssh的秘钥验证在管理端修改ansible.cfg配置文件如下:

# ssh-keygen  生成密钥对


640 (15).png


测试


640 (16).png


说明:通过上面的操作,需要为ansible用户先创建密码,在实际生产当中,不建议为该用户设置密码。可在安装系统时,提前将管理端公钥直接写入到被管理节点的ansible用户下。


640 (17).png


返回列表
上一篇:
【誉天红帽学习指南】Ansible自动化运维之Ansible原理与安装
下一篇:
懂技术,更精彩!Linux进程-动态监测进程
免费试听
姓名
电话
城市
咨询课程