1.模块介绍
明确一点:模块的执行就类似是linux命令的一条命令,就单单的是为了执行一条语句,不是批量的操作,批量操作需要用到playbook内类似shell编写脚本进行批量。
1.1.模块的使用方法
查看ansible支持的所有模块:ansible-doc -l 然后在 ansible-doc -l | grep [ module_name ] 找到想用的模块名字 ;再使用ansible-doc -s [module_name]来查看此模块的用法,也可以使用ansible-doc help module来查看该模块更详细的信息。下面给出
官方模块列表和说明:https://docs.ansible.com/ansible/latest/modules_by_category.html
1.2.模块注意事项
关于模块的使用方法,需要注意的是"state"。很多模块都会有该选项,且其值几乎都包含有"present"和"absent",表示肯定和否定的意思,
另ansible的多数的模块都是具有幂等性的,只有极少数模块如shell和command模块不具备幂等性。所谓的幂等性是指多次执行同一个操作不会影响最终结果,ansible具有幂等性的模块在执行时,都会自动判断是否要执行。
例如: file模块创建目录时,如果创建过的目录已经创建过了,则再次或多次执行安装操作都不会真正的执行下去。
再例如:copy模块拷贝文件时,如果目标主机上已经有了完全相同的文件,则多次执行copy模块不会真正的拷贝。
2.常用模块
2.1 setup和ping 模块
功能:收集远端主机的系统信息,如网络,硬件,等
setup:
1 ansible-doc -s setup 2 - name: Gathers facts about remote hosts 3 setup: 4 gather_timeout #设置收集的主机信息默认超时时间(秒)
ping:用于ping 测主机是否连通
1 ansible-doc -s ping 2 - name: Try to connect to host, verify a usable python and return `pong' on success 3 ping:
使用方法:
1 [root@log1 ~]# ansible all -m ping -o 2 192.168.188.136 | SUCCESS => {"changed": false, "ping": "pong"}
2.2 command 和shell 模块
默认的ansible使用的摸块是command,用法是一样的,好多场景的是shell模块他们两个很像,但是shell要比command强大
1 ansible-doc -s command 2 - name: Executes a command on a remote node 3 command: 4 chdir: #在执行命令之前,先切换到指定的目录 5 creates: #判断该命令是否执行,如果指定的文件存在(支持通配符)命令不执行 6 removes: #判断该命令是否执行,如果指定的文件不存在(支持通配符)命令不执行 7 executable: #切换shell来执行指令,该执行路径必须是一个绝对路径
注意:
(1)使用Command模块执行脚本时,要注意规范,shebang机制,否则将执行失败
(2)不支持管道“|”,变量“$”,“&”,以及重定向,需使用shell模块替代
(3)在使用这2个模块的时候,因为他们没有幂等性,多次执行会导致重复执行一条语句,但是有特殊场景是不可以这样做的例如:mysql初始化的时候,执行一次就可以的了,多次执行会导致不必要的麻烦,这里就需要使用模块的creates和removes选项进行判断,但无论如何,在执行这两个模块的时候都需要考虑要执行的命令是否应该实现幂等性。
2.3 Hostname模块
功能:
1 ansible-doc -s hostname 2 - name: Manage hostname 3 hostname: 4 name: # 修改后的主机名名称
使用方法:
1 ansible all -m hostname -a “name=webserver1”
注意:
(1)Host模块不会修改/etc/hosts文件中的主机名解析,注意修改
(2)批量修改主机名时最好加变量,防止所有主机名一致