本章主要介绍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条,分别如下:
-
become=True:登录到被管理主机时要切换到其他用户。
-
become_method=sudo:以 sudo的方式切换。
-
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 ~]$
这里加了一行node[10: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模块名”来查看。
下章内容会详细讲解