常用模块
列出所有模块
ansible-doc -l
查看指定模块的帮助信息
ansible-doc 模块名
ansible-doc -s 模块名 #比较简洁的帮助信息
·
ping 模块
一个普通的测试模块,测试被管理节点的连通性。这不是 ICMP ping。
ansible all -m ping
ansible wpf1 -m ping
·
command 模块
在远程主机上执行命令。不加 -m 默认使用 command 模块。
它不会经过远程主机的 shell 处理,所以像 “$HOME” 这样的变量和像 “<”、">"、"|"、";"、"&" 这样的操作将不起作用。如果需要这些功能,请使用 [shell] 模块。
ansible all -m command -a 'ls /root'
ansible all -a 'ls /root'
主要参数:
chdir:在运行该命令之前,请切换到此目录
[root@wpf002 ~]# ls /tmp/test/filename111
/tmp/test/filename111
[root@wpf ~]# ansible all -i wpf002, -m command -a 'chdir=/tmp ls test'
wpf002 | CHANGED | rc=0 >>
filename111
creates:如果文件已经存在,则不会运行此步骤;反之则运行。
[root@wpf ~]# ansible all -i wpf002, -m command -a 'creates=/tmp/test echo "No File"'
wpf002 | SUCCESS | rc=0 >>
skipped, since /tmp/test exists
[root@wpf ~]# ansible all -i wpf002, -m command -a 'creates=/tmp/aaa echo "No File"'
wpf002 | CHANGED | rc=0 >>
No File
removes:如果文件不存在,则不会运行此步骤;反之则运行。与 creates 正好相反。
·
shell 模块
在远程主机上调用 shell 解析器(/bin/sh)运行命令。主要参数和 command 模块相同。
·
script 模块
将管理节点上的脚本传递到被管理节点上进行执行。主要参数和 command 模块相同。
[root@wpf ~]# cat test.sh
#!/bin/bash
echo $(hostname)
[root@wpf ~]# ansible wpf002 -i /etc/ansible/inventory.ini -m script -a '/root/test.sh'
wpf002 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to wpf002 closed.\r\n",
"stderr_lines": [
"Shared connection to wpf002 closed."
],
"stdout": "wpf002\r\n",
"stdout_lines": [
"wpf002"
]
}
·
copy 模块
将文件从本地复制到远程计算机上的某个位置。使用 [fetch] 模块可以将文件从远程位置复制到本地。
ansible all -m copy -a 'src=/tmp/filename dest=/tmp/filename'
主要参数:
src:指定源文件或目录。
dest:指定文件将被拷贝到远程主机的哪个目录中。
force:当远程主机的目标路径中已经存在同名文件时,是否强制覆盖(默认为 yes)。
backup:当远程主机的目标路径中已经存在同名文件时,是否对远程主机的文件进行备份。当设置为 yes 时,会先备份远程主机中的同名文件,然后再将管理节点的文件拷贝到远程主机。备份文件命名规则会以当前时间为参考。例如:“nginx.conf.1550.2021-02-21@21:52:14~”。
owner:指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
group:指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
mode:指定文件拷贝到远程主机后的权限。可以使用 “mode=0644” 或 “mode=u+x” 表示。
拷贝文件
ansible all -m copy -a 'src=/tmp/filename dest=/tmp/filename backup=yes'
拷贝文件,并设置属性
ansible all -m copy -a 'src=/tmp/filename dest=/tmp/filename backup=yes owner=ceshi group=ceshi mode=0755'
注意: 拷贝目录时和拷贝文件不同,如果远程主机已经存在拷贝目录,则会拷贝为此目录的子目录。
·
fetch 模块
将文件从远程位置复制到本地。注意:不支持目录。常用参数只有 src 和 dest。
ansible all -m fetch -a 'src=/tmp/filename dest=/tmp/aaa'
[root@wpf ~]# tree /tmp/aaa/
/tmp/aaa/
├── wpf002
│ └── tmp
│ └── filename
├── wpf003
│ └── tmp
│ └── filename
└── wpf004
└── tmp
└── filename
·
yum 模块
等同于 Linux 上的 yum 命令。
主要参数:
name:指定需要管理的软件包,多个以逗号隔开。
state:用于指定的软件进行安装、删除。默认值为空,但是会进行 present 操作。支持的参数:
- present 和 installed:确保安装了所需的包
- latest:确保安装了所需的包,并且升级为最新版本
- absent 和 removed:删除指定的包
enablerepo:用于指定安装软件包时临时启用的 yum 源。
disablerepo:用于指定安装软件包时临时禁用的 yum 源。
·
安装 ntp
ansible all -m yum -a 'name=ntp state=installed'
安装 ntp 时,临时禁用 local 源。
ansible all -m yum -a 'name=ntp state=installed disablerepo=local'
卸载ntp
ansible all -m yum -a 'name=ntp state=removed'
·
systemd 模块
等同于 Linux上 的 systemd 命令。
主要参数:
daemon_reload:重新载入 systemd。
enabled:是否开机自启。
name:服务名。
state:对指定的服务进行启动、停止、重启、重新加载等操作。支持的参数:
- started
- stopped
- restarted
- reloaded
启动&&自启 ntpd 服务
ansible all -m systemd -a 'name=ntpd state=started enabled=yes'
·
group 模块
对用户组进行管理。
主要参数:
name:组名称。
system:是否为系统组(默认 no)。
state:创建或删除指定组。默认为创建(present),设置为 absent 表示删除。
gid:用于指定组的 gid。
创建组
ansible all -m group -a 'name=ansible gid=10086'
删除组
ansible all -m group -a 'name=ansible state=absent'
·
user 模块
对用户进行管理。
主要参数:
name:指定用户名。
password:设置用户的密码。这里的值必须为一个加密的散列值,可参考官方文档生成。默认不设置密码。
update_password:更新密码。
home:指定用户家目录。
shell:指定用户的 shell。
comment:用户的描述信息。
create_home:创建用户时,是否创建其家目录。默认为创建(yes)。
group:指定用户主组。
groups:将用户加入到其他组,多个用逗号隔开。默认会把用户从其他已经加入的组中删除。
append:和 groups 配合使用。配置为 yes 时,不会把用户从其他已经加入的组中删除。
system:配置为 yes 时,将会创建一个系统账号。
expires:设置用户的过期时间。值为时间戳,会转换为天数,放在 shadow 的第八个字段里。
generate_ssh_key:配置为 yes 时,将会为用户生成秘钥,不会覆盖原来的秘钥。
ssh_key_type:指定用户的秘钥类型。默认为 rsa。
state:创建或删除指定用户。默认为创建(present),设置为 absent 表示删除。
remove:当与 state=absent 一起使用时,删除一个用户及关联的目录。比如家目录、邮箱目录。可选值为 yes/no。
创建一个用户,并设置密码
ansible all -m user -a "name=wpf password='{{ '123456' | password_hash('sha512', 'mysecretsalt') }}'"
创建一个用户,并且创建秘钥对
ansible all -m user -a 'name=wpf generate_ssh_key=yes ssh_key_type=rsa'
创建用户,设置有效期,并且加入到 ansible 组中,不删除用户已经加入的组。
ansible all -m user -a "name=wpf groups=ansible append=yes expires='$(date +%s -d 20210303)'"
·
file 模块
直接对远程节点的文件进行操作。
主要参数:
owner:定义文件/目录的属主。
group:定义文件/目录的属组。
mode:定义文件/目录的权限。
path:指定要操作文件/目录的路径。
recurse:递归的设置文件的属性。只对目录生效。默认为 False
src:要被软/硬连接的源文件路径。只适用于 state=link 的情况。
dest:软/硬连接到的路径。只适用于 state=link 的情况。
state:支持的参数:
- directory:如果目录不存在,创建目录
- file:文件不存在,不会被创建;存在则返回文件的信息。常用于检查文件是否存在。
- link:创建软连接
- hard:创建硬连接
- touch:如果文件不存在,创建一个新文件;如果存在,则更新最后修改时间。
- absent:删除目录、文件或者取消连接文件。
创建一个文件
ansible all -m file -a 'path=/tmp/test.txt state=touch'
修改文件的属性
ansible all -m file -a 'path=/tmp/test.txt owner=wpf group=wpf mode=0755'
创建一个目录
ansible all -m file -a 'path=/tmp/dirtest state=directory'
递归修改目录的属性
ansible all -m file -a 'path=/tmp/dirtest owner=wpf group=ansible recurse=true mode=0700'
创建一个软连接
ansible all -m file -a 'src=/etc/passwd dest=/tmp/passwd state=link'
删除一个文件、软连接、目录
ansible all -m file -a 'path=/tmp/passwd state=absent'
ansible all -m file -a 'path=/tmp/test.txt state=absent'
ansible all -m file -a 'path=/tmp/test state=absent'
·
cron 模块
管理远程节点的 cron 服务。等同于 Linux 中的计划任务。
主要参数:
name:制定一个 cron job 的名字。一定要指定名字,便于后期管理。
minute:指定分钟。可以设置成(0-59、*、*/2等)格式。默认是*。
hour:指定小时。可以设置成(0-23、*、*/2等)格式。默认是*。
day:指定天。可以设置成(1-31、*、*/2等)格式。默认是*。
month:指定月。可以设置成(1-12、*、*/2等)格式。默认是*。
weekday:指定星期。可以设置成(0-6、*、Sunday-Saturday等)格式。默认是*。
job:指定要执行的内容。通常可以写一个脚本或者一段内容。
state:指定这个 job 的状态。默认为新增(present)。absent 为删除。
创建一个cron job
ansible all -m cron -a 'name="Cron Job Test" job="/usr/bin/date >> /tmp/cron.log" hour=21 day=20 month=2'
删除一个cron job。一定要正确指定cron job name,防止误删。
ansible all -m cron -a 'name="Cron Job Test" state=absent'
·
setup 模块
主要用于收集远程节点的基本信息。其实就是收集 Ansible 的 Facts 变量信息,结合后面介绍的 Facts 变量更好理解。
[root@wpf ~]# ansible wpf002 -i /etc/ansible/inventory.ini -m setup
wpf002 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.1.213"
],
"ansible_all_ipv6_addresses": [
"fe80::5054:ff:fe01:b2ca"
],
......
主要参数:
filter:用于进行条件过滤。过滤条件必须是变量名,可以使用通配符。
[root@wpf ~]# ansible wpf002 -i /etc/ansible/inventory.ini -m setup -a 'filter=ansible_all_ipv*_addresses'
wpf002 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.1.213"
],
"ansible_all_ipv6_addresses": [
"fe80::5054:ff:fe01:b2ca"
],
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}