Ansible常用模块
每个Ansible模块都是一个独立的小程序或脚本,设计用来完成特定的任务。它们通常以Python编写,但也可以用其他语言。模块被设计为幂等的(idempotent),这意味着无论执行多少次,结果都是一样的,并且不会对系统造成不必要的改变。Ansible拥有大量的内置模块,同时用户也可以创建自定义模块来满足特定需求。
1.command模块
功能:在远程主机执行命令,此为默认模块,可忽略-m选项
参数说明:
- chdir: # 在执行命令之前,先切换到该目录
- executable: # 切换shell来执行命令,需要使用命令的绝对路径
- free_form: # 要执行的Linux指令,一般使用Ansible的-a参数代替。
- creates: # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
- removes: # 一个文件名,这个文件不存在,则该命令不执行
注意:此命令不支持 $VARNAME<>|;&等,可能用shell模块实现
此模块不具有幂等性
[root@ansible ~]# ansible websrvs -m command -a 'chdir=/etc cat centos-release'
192.168.20.11 | CHANGED | rc=0 >>
CentOS Linux release 7.5.1804 (Core)
192.168.20.12 | CHANGED | rc=0 >>
CentOS Linux release 7.5.1804 (Core)

[root@ansible ~]# ansible websrvs -m command -a 'service vsftpd start'
[WARNING]: Consider using the service module rather than running 'service'. If
you need to use command because service is insufficient you can add 'warn:
false' to this command task or set 'command_warnings=False' in ansible.cfg to
get rid of this message.
192.168.20.11 | CHANGED | rc=0 >>
Redirecting to /bin/systemctl start vsftpd.service
192.168.20.12 | CHANGED | rc=0 >>
Redirecting to /bin/systemctl start vsftpd.service

2.shell模块
功能:和command相似,用shell执行命令,支持各种符号,比如:*,$,>
注意:此模块不具有幂等性
[root@ansible ~]# ansible websrvs -m shell -a 'echo hello > /data/hello.log'
192.168.20.11 | CHANGED | rc=0 >>
192.168.20.12 | CHANGED | rc=0 >>
[root@ansible ~]# ansible websrvs -m shell -a 'cat /data/hello.log'
192.168.20.11 | CHANGED | rc=0 >>
hello
192.168.20.12 | CHANGED | rc=0 >>
hello

注意:调用bash执行命令类似 cat /tmp/test.md|awk -F'''{print$1,$2}'&>/tmp/example.txt 这些复杂命令,即使使用shell也可能会失败,解决办法:写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器。
3.script模块
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意:此模块不具有幂等性
[root@ansible ~]# ansible websrvs -m script -a /data/test.sh
192.168.20.11 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.20.11 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.20.11 closed."
],
"stdout": "hello world\r\n",
"stdout_lines": [
"hello world"
]
}
192.168.20.12 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.20.12 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.20.12 closed."
],
"stdout": "hello world\r\n",
"stdout_lines": [
"hello world"
]
}

4.copy模块
功能:从ansible服务器主控端复制文件到远程主机
参数说明:
- src: 源文件绝对路径或相对路径
- dest: 必选项,将源文件复制到的远程主机的绝对路径
- content: 用于替换"src",可以直接指定文件的值
- backup: 当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息
- directory_mode: 递归设定目录的权限,默认为系统默认权限
- force: 当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"
- others: 所有的 file 模块中的选项可以在这里使用
- mode: 设置文件权限
- owner: 属主
- group: 属组
注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件
#如目标存在,默认覆盖,此处指定先备份
[root@ansible ~]# ansible websrvs -m copy -a "src=/data/test.sh dest=/root/test 2.sh owner=root mode=600 backup=yes"
192.168.20.11 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"


3667

被折叠的 条评论
为什么被折叠?



