Ansible之批量执行简单指令

先来看一眼inventory,配置文件使用默认的。

[root@master ansible]# pwd
/root/ansible
[root@master ansible]# ls
inventory  pushssh.yaml
[root@master ansible]# cat inventory 
[k8s_master]
master
slave
node1

[k8s_nodes]
node1
node2
node3

[etcd_cluster]
master
slave
node1

[ha_keepalive]
master
slave

[flannel]
node1
node2
node3

[harbor]
node4

[all:children]
k8s_master
k8s_nodes

第一条批量命令 ansible k8s_master -i inventory -m ping

命令格式:

k8s_master 表示主机或主机组

-i inventory 指定清单文件

-m ping -m 指定模块,ping 是模块的名称

image-20210817200619043

输出说明:

master | SUCCESS 前面表示主机名,SUCCESS 表示命令被成功执行。

changed 值为false,而且整个命令的输出着色为绿色,有关着色的定义存在于ansible.cfg文件中,当changed值为true时,显示为黄色,为false时显示绿色。

幂等性(Idempotency):
幂等性是数学和计算机科学上一个常见的概念,多次执行产生的结果不会发生改变,这样的特性就被成为幂等性。幂等性是Idempotency的中文翻译,幂在数学上表示乘方结果,乘方的结果相等可以简洁地描述多次执行后得到相同结果这一概念的意思。

Ansible在大部分模块具有幂等性,所谓幂等性是指如果多次执行相同的命令产生的结果不变,那么此命令只会执行一次,不会重复执行,比如copy模块,当目标不存在此文件时,会从源拷贝到目标,当目标存在一模一样的文件时,再次执行命令便不会再从源到目标的拷贝,除非源和目标文件的hash值不同。

ping :pong 表示 ping命令的返回结果为pong

第二条ansible指令:ansible k8s_nodes -i inventory -m shell -a “hostname”

本次使用shell模块,-a “hostname” 表示shell模块中要执行的具体命令和参数

image-20210817202758399

输出说明:

rc=0 表示命令在远程主机执行后的返回结果,0表示成功执行,就像shell命令的执行结果状态一样,为0正常,其它值表示异常或特有含义。

changed 此时着色为黄色,可知change值为true,当再次执行此命令时返回还是黄色,这是因为shell模块没有实现幂等性。

ansible模块

ansible支持众多模块,可以通过ansible-doc -l命令查看所有模块,统计了一下,v2.9.23支持3387个模块,每个模块都有相应的帮助文档,使用ansible-doc -s module查看帮助信息。比如,查看copy模块的帮助:

image-20210817212203793

众多的模块不可能都全部掌握,常用的也就那么几个,如:file,shell,command,raw,copy,yum,service等,大家只要会看帮助,掌握起来也不是什么难事。模块结合playbook才是ansible最强大的地方,后面在playbook学习中会用到模块,到时再把模块一并学了。

posted @ 2021-08-17 21:43  mfyang  阅读(1615)  评论(1编辑  收藏  举报