RHCL8_Linux_ansible的使用

本章主要介绍ansible的基本使用

  • 编写ansible.cfg和清单文件
  • ansible的基本用法

1.编写ansible.cfg和清单文件

执行ansible或ansible-playbook命令时,优先使用当前目录中ansible.cfg的配置。如果当前目录中没有,则使用默认的/etc/ansible.cfg中的配置。

1)下面的操作都是node01上的blab用户操作的,先在家目录下创建ansible.cfg,内容如下。
复制代码
[blab@node01 ~]$ cat ansible.cfg 
[defaults]
inventory = ./hosts

[privilege_escalation]
become=True
become_method=sudo
become_user=root

[blab@node01 ~]$ 

这里在defaults字段下只添加了一句inventory = ./hosts,表示把当前目录下名称为hosts的文件当作清单文件(什么是清单文件马上就要讲到)。
privilege_escalation字段下定义了如何提升权限,因为是使用lduan用户登录到被管理主机的,所以需要提升权限。这个字段下写了3条,分别如下:

  1. become=True:登录到被管理主机时要切换到其他用户。
  2. become_method=sudo:以 sudo的方式切换。
  3. become_user-root :切换到root用户。

这三句的意思是,当用ssh登录到被管理主机时,以 sudo的方式切换到root,这也是为什么一开始要在被管理主机上配置好sudo的原因。

2)所有的被管理机器都要写入清单文件中。在实验环境中有两台被管理主机,那么分别写在hosts中,内容如下。
复制代码
[blab@node01 ~]$ cat hosts 
node02
node03
[blab@node01 ~]$

这里一行一台主机,我们在使用ansible或ansible-playbook命令时,指定的主机名必须是这个名称才行。要确保能解析node02和node03,写成相应的IP也可以。
如果环境中被管理的主机很多,把主机一台台地写进去太冗繁,所以可以改成如下写法。

复制代码
[blab@node01 ~]$ cat hosts 
node02
node03
node[10:15]
[blab@node01 ~]$ 

这里加了一行node10:15,表示 node10到 node15,这样在清单文件中就写了8台主机(需要注意的是,在我们的练习环境中node10到node15不存在)。
如果在执行ansible命令时只是想在部分主机上执行,那么在清单文件中可以对主机进行分组。定义主机组时,组名写在中括号"\[\]"中,在[下面写的主机名都属于这个组,直到定义下一个组的位置为止。修改清单文件的内容如下。

复制代码
[blab@node01 ~]$ cat hosts 
node02
node03
node[10:15]

[db1]
node[2:5]

[db2]
node6
node7
[blab@node01 ~]$ 

这里定义了两个主机组db1和db2,db1组中包括的主机有server2到server5,db2组中包括的主机有server6和 server7。
如果想定义一个主机组,这个组中包括db1和db2两个主机组的主机,可以用 children关键字,修改hosts的内容如下。

复制代码
[blab@node01 ~]$ cat hosts 
node02
node03

[db1]
node02
node03
node04
node05

[db2]
node6
node7

[db3:children]
db1
db2
[blab@node01 ~]$ 

这里定义了一个主机组db3,但是后面加了":children",则这个主机组下面的db1和db2就不再表示主机了,而是表示主机组。所以,db3这个主机组中所包括的主机是node01到node02及node06和 node07这6台主机。

3)下面查看每个主机组中有多少主机。首先查看主机组db1中的主机
复制代码
[blab@node01 ~]$ ansible db1 --list-hosts
  hosts (4):
    node02
    node03
    node04
    node05
[blab@node01 ~]$ 
4)查看主机组db2中的主机,命令如下。
复制代码
[blab@node01 ~]$ ansible db2 --list-hosts
  hosts (2):
    node6
    node7
[blab@node01 ~]$ 
5)查看主机组 db3中的主机,命令如下。
复制代码
[blab@node01 ~]$ ansible db3 --list-hosts
  hosts (6):
    node02
    node03
    node04
    node05
    node6
    node7
[blab@node01 ~]$ 

共6台主机,与分析的是一样的。还有一个内置主机组叫作all,表示所有主机。

6)了解了清单文件的写法之后,最终把清单文件写成如下内容。
复制代码
[blab@node01 ~]$ cat hosts 
node02
node03

[db1]
node02
node04
[blab@node01 ~]$ 

这里就包括了一个主机组 db,里面含有node01和node03。

2.ansible的基本用法

ansible的基本用法如下
ansible 机器名 -m 模块x -a "模块的参数"
这里的机器名必须出现在清单文件中,整体的意思是在指定的机器上执行模块x。

1)例如,在server2上执行hostname命令,命令如下。
复制代码
[blab@node01 ~]$ ansible node02 -m shell -a "hostname"
node02 | CHANGED | rc=0 >>
node02
[blab@node01 ~]$ 

shell模块用于执行操作系统命令,执行的命令就作为shell模块的参数,这里在-a中写要执行的系统命令。所以,上面的命令就是在node02上执行hostname命令,显示的结果是node02
机器名称是不同的本实验机器用的是纯机器名称 修改/etc/hosts文件可以修改多个主机名
要完成不同的任务就需要调用不同的模块来实现,系统中存在的所有 ansible模块可以通过ansible-doc -l来查看。
不同的模块有不同的参数,模块的参数及使用方法可以通过"ansible-doc模块名"来查看。
下章内容会详细讲解

相关推荐
明航咨询_贾老师21 小时前
RHCA Ansible高级自动化(DO374)认证信息整理
运维·自动化·ansible·rhca·红帽认证
有毒的教程5 天前
Ansible批量操作自动化完整教程:批量部署服务、配置同步、软件更新实战
运维·自动化·ansible
Hy行者勇哥10 天前
用Cursor智能编写Ansible/Terraform脚本,打通CI/CD链路
ci/cd·ansible·terraform
芷栀夏12 天前
飞牛NAS怎么部署Immich?家庭照片自动备份与远程访问教程
服务器·nginx·ansible
悠然南风22 天前
Ansible常见模块总结及LDAP Role 编写与调试
ansible
祺风挽楠1 个月前
ansible编辑
网络·ansible
芳心粽伙饭1 个月前
Ansible课后作业
ansible
烁3471 个月前
Ansible初识
ansible
烁3471 个月前
Ansible安装部署调试
ansible
烁3471 个月前
Ansible命令
ansible