Ansible--常用模块使用(2)

时间:2024-08-08 09:32:56

Ansible常用模块

cron 模块

用途:cron模块⽤于设置定时任务,也⽤于管理定时任务中的环境变量
使用方法:

[root@ansible ~]# ansible-doc -s cron
- name: Manage cron.d and crontab entries
cron:
backup: # (yes/on)如果设置了,则会在修改远程cron_file前备份这些文件
cron_file: # 自定义cron_file的文件名,使用相对路径则表示在/etc/cron.d/中,必选同时制定user选项
minute: # 分(0-59,*,/N),不写时默认为*
hour: # 时(0-23,*,/N),不写时默认为*
day: # 日(1-31,*,/N),不写时默认为*
month: # 月(1-12,*,/N),不写时默认为*
weekday: # 周(0-6 for Sunday-Saturday,*),不写时默认为*
disabled: # 禁用crontab中的某个任务,要求state=present
env: # (yes/on)设置一个环境变量,将添加在crontab的顶端,使用name=value定义变量名和值.
job: # 需要执行的命令,如果设置了env,则表示环境变量的值,此时job="xxxx"等价于value="xxxx"
name: # 描述crontab的字符串,但如果设置的是env,则name为环境变量的名称,要求state=absent,注意,若没有设置name,且state=present,则总会创建一条新的job条目,即使cron_file中已经存在同样的条目.
reboot: # 如果任务应该在重新启动时运行。不赞成使用此选项。用户应该使用special_time.
special_time: # 定时任务的别称,用于定义何时运行job条目.有效值有reboot/hourly/daily/weekly/monthly/yearly/annually
state: # job或者env的状态是present(默认)还是absent,present用于创建,absent用于删除
user: # 指定那个用户的crontab任务将要被修改,默认root.

示例:

1)每分钟执行一次同步阿里云的时间
[root@ansible ~]# ansible all -m cron -a "name='ntpdate aly' minute=*/1 job='/usr/sbin/ntpdate ntp1.aliyun.com'"
192.168.192.129 | CHANGED => {
"changed": true,
"envs": [],
"jobs": [
"ntpdate aly"
]
}
查看结果(已经创建一条同步时间的计划任务)
[root@ansible ~]# ansible all -m shell -a "crontab -l"
192.168.192.129 | CHANGED | rc=0 >>
#Ansible: ntpdate aly
*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com 2)backup参数(备份cron文件)
[root@ansible ~]# ansible all -m cron -a "name='ntpdate aly' minute=0 hour=0 day=* month=* weekday=* backup=yes job='/usr/sbin/ntpdate ntp1.aliyun.com'"
192.168.192.129 | CHANGED => {
"backup_file": "/tmp/crontabJOrXXY",
"changed": true,
"envs": [],
"jobs": [
"ntpdate aly"
]
}
上面返回的结果中包含一个backup_file,备份的文件在被控制端的/tmp下面
查看结果(可以看到计划任务改变,和被控制端的备份文件)
[root@ansible ~]# ansible all -m shell -a "crontab -l && ls -l /tmp | grep crontab"
192.168.192.129 | CHANGED | rc=0 >>
#Ansible: ntpdate aly
0 0 * * * /usr/sbin/ntpdate ntp1.aliyun.com
-rw------- 1 root root 68 Dec 27 10:47 crontabJOrXXY 3)env参数(设置环境变量)
[root@ansible ~]# ansible all -m cron -a "env=yes name='TEST' backup=yes job='echo test'"
192.168.192.129 | CHANGED => {
"backup_file": "/tmp/crontabFgNUhH",
"changed": true,
"envs": [
"TEST"
],
"jobs": [
"ntpdate aly"
]
}
查看结果(发现在开头多了个TEST="echo test",也就是说明env=yes的时候name='TEST'就是变量名job='echo test'就是变量的值)
[root@ansible ~]# ansible all -m shell -a "crontab -l"
192.168.192.129 | CHANGED | rc=0 >>
TEST="echo test"
#Ansible: ntpdate aly
0 0 * * * /usr/sbin/ntpdate ntp1.aliyun.com 4)special_time参数
重启时执行任务
[root@ansible ~]# ansible all -m cron -a "name='special time reboot' special_time=reboot job='echo test'"
192.168.192.129 | CHANGED => {
"changed": true,
"envs": [
"TEST"
],
"jobs": [
"ntpdate aly",
"special time reboot"
]
}
查看结果
[root@ansible ~]# ansible all -m shell -a "crontab -l"
192.168.192.129 | CHANGED | rc=0 >>
TEST="echo test"
#Ansible: ntpdate aly
0 0 * * * /usr/sbin/ntpdate ntp.aliyun.com
#Ansible: special time reboot
@reboot echo test 每小时执行一次计划任务
[root@ansible ~]# ansible all -m cron -a "name='special time reboot' special_time=hourly job='echo test'"
192.168.192.129 | CHANGED => {
"changed": true,
"envs": [
"TEST"
],
"jobs": [
"ntpdate aly",
"special time reboot"
]
}
查看结果
[root@ansible ~]# ansible all -m shell -a "crontab -l"
192.168.192.129 | CHANGED | rc=0 >>
TEST="echo test"
#Ansible: ntpdate aly
0 0 * * * /usr/sbin/ntpdate ntp.aliyun.com
#Ansible: special time reboot
@hourly echo test 上面发现@reboot echo test换成了@hourly echo test原因是因为两次执行的name的名字是一样的所有直接就覆盖了 5)state=absent(删除计划任务)
[root@ansible ~]# ansible all -m cron -a "name='special time reboot' backup=yes state=absent"
192.168.192.129 | CHANGED => {
"backup_file": "/tmp/crontab02rAD6",
"changed": true,
"envs": [
"TEST"
],
"jobs": [
"ntpdate aly"
]
}
查看结果(发现special time reboot任务已经删除了)
[root@ansible ~]# ansible all -m shell -a "crontab -l"
192.168.192.129 | CHANGED | rc=0 >>
TEST="echo test"
#Ansible: ntpdate aly
0 0 * * * /usr/sbin/ntpdate ntp.aliyun.com

service 模块

用途:service 模块可以帮助我们管理远程主机上的服务。比如,启动或停止远程主机中的 nginx 服务
使用方法:

[root@ansible ~]# ansible-doc -s service
- name: Manage services
service:
arguments: # 服务命令行参数传递
enabled: # 设置服务为开机自启(yes/no),默认为no
name: # (必选项)指定服务名.
pattern: # 如果服务没有做出相应,可以通过这个参数指定使用ps或者其他方式查看服务的状态.
runlevel: # 设置服务启动级别
sleep: # 如果服务正在"重新启动",那么在停止和开始命令之间设置休眠时间.
state: # started和stoped分别是启动和停止服务,它们是幂等操作,多次启动或者停止服务都是一样的,也就是说对于运行中的服务不会再次启动操作,同理停止也是一样的;
# restarted重启服务,restarted总是重读配置文件如果服务是未运⾏状态,则reloaded会启动服务(state和enabled两者⾄少要给⼀个)

示例:

以nginx服务为例做示例(这里面返回的打印的数据太多了就不放到博客了)
1)state=started(启动服务)
[root@ansible ~]# ansible all -m service -a "name=nginx state=started" 2)state=stopped(停止服务)
[root@ansible ~]# ansible all -m service -a "name=nginx state=stopped" 3)state=restarted(重启服务)
[root@ansible ~]# ansible all -m service -a "name=nginx state=restarted" 4)state=reloaded(重载服务)
[root@ansible ~]# ansible all -m service -a "name=nginx state=reloaded" 5)enabled(设置开机自启)
[root@ansible ~]# ansible all -m service -a "name=nginx enabled=yes"

systemd 模块

用途:systemd 模块可以帮助我们使用systemd管理远程主机上的服务。比如,启动或停止远程主机中的 nginx 服务
使用方法:

[root@ansible ~]# ansible-doc -s systemd
- name: Manage services
systemd:
daemon_reload: # 在执行任何其他操作之前运行守护进程重新加载,以确保systemd已经读取其他更改.
enabled: # 设置服务为开机自启(yes/no),默认为no
force: # 是否覆盖现有符号链接(yes/on).
masked: # 是否将服务设置为masked状态(yes/no),被mask的服务是无法启动的
name: # 指定服务名称.
no_block: # 不要同步等待操作请求完成(yes/no)
state: # started和stoped分别是启动和停止服务,它们是幂等操作,多次启动或者停止服务都是一样的,也就是说对于运行中的服务不会再次启动操作,同理停止也是一样的;

示例:

以nginx服务为例做示例(这里面返回的打印的数据太多了就不放到博客了)
1)state=started(启动服务)
[root@ansible ~]# ansible all -m systemd -a "name=nginx state=started" 2)state=stopped(停止服务)
[root@ansible ~]# ansible all -m systemd -a "name=nginx state=stopped" 3)state=restarted(重启服务)
[root@ansible ~]# ansible all -m systemd -a "name=nginx state=restarted" 4)state=reloaded(重载服务)
[root@ansible ~]# ansible all -m systemd -a "name=nginx state=reloaded" 5)enabled(设置开机自启)
[root@ansible ~]# ansible all -m systemd -a "name=nginx enabled=yes"

user 模块

用途:user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作
使用方法:

[root@ansible ~]# ansible-doc -s user
- name: Manage user accounts
user:
append: # 如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时,当前设置会覆盖原来的附加组设置
# 如果不想覆盖原来的附加组设置,需要结合 append 参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no.
comment: # 设置用户的描述信息
create_home: # 创建家⽬录,或者已有的⽤户但家⽬录不存在也会创建。设置为no则不创建家⽬录
expires: # 此参数用于指定用户的过期时间,相当于设置 /etc/shadow 文件中的的第8列
# 比如,你想要设置用户的过期日期为2018年12月31日,那么你首先要获取到2018年12月31日的 unix 时间戳,使用命令 “date -d 2018-12-31 +%s” 获取到的时间戳为1546185600,
# 所以,当设置 expires=1546185600 时,表示用户的过期时间为2018年12月31日0点0分,
# 设置成功后,查看远程主机的 /etc/shadow 文件,对应用户的第8八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算,
# 目前此参数只支持在 Linux 和 FreeBSD 系统中使用。
force: # 强制删除用户、用户目录,只在state=absent中生效,相当于userdel --force命令
generate_ssh_key: # 是否为相关用户生成SSH密钥。这将“不会”覆盖现有SSH密钥.
group: # 设置⽤户的primary group(主组).
groups: # 将⽤户加⼊到辅助组列表中。如果设置"groups=",则会将此⽤户从所有辅助组中移除
home: # 指定要创建的家⽬录路径
move_home: # 如果设置为yes,则"home="则表⽰将家⽬录移动到此选项指定的路径下
name: # (必选项)要创建、修改、移除的⽤户名.
non_unique: # 当与 -u 选项一起使用时,该选项允许将用户ID更改为非唯一值
password: # 设置⽤户密码。此处只能使⽤加密密码作为值.
password_lock: # 锁定用户的密码(等价于usermod -L命令)这个选项并不总是意味着用户不能通过其他方法登录。这个选项没有禁用用户,只锁定密码.
remove: # 配合'state=absent'时,等价于'userdel --remove',即删除家⽬录和邮件列表
seuser: # 在启用selinux的系统上设置seuser类型.
shell: # 设置⽤户的shell
ssh_key_bits: # 当 generate_ssh_key 参数的值为 yes 时,使用此参数指定要创建的SSH密钥中的位数.
ssh_key_comment: # 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置公钥中的注释信息。但是如果同名的密钥对已经存在,则并不会修改原来的注释信息,即不做任何操作。
# 当不指定此参数时,默认的注释信息为”ansible-generated on 远程主机的主机名.
ssh_key_file: # 当 generate_ssh_key 参数的值为 yes 时,使用此参数自定义生成 ssh 私钥的路径和名称,对应公钥会在同路径下生成,公钥名以私钥名开头,以”.pub”结尾.
ssh_key_passphrase: # 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置私钥的密码。但是如果同名的密钥对已经存在,则并不会修改原来的密码,即不做任何操作.
ssh_key_type: # 当 generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置密钥对的类型。默认密钥类型为 rsa,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作.
state: # 创建⽤户(present)还是删除⽤户(absent)。默认为present.
system: # 设置为yes表⽰创建⼀个系统⽤户,只能⽤于创建,不能⽤于修改已有⽤户为系统⽤户
uid: # 设置用户的UID
update_password: # user是幂等模块,"always"将总是修改密码。"on_create"将只在创建⽤户时设置密码

示例:

1)name参数(创建用户)
创建名为brian的用户,如果用户已经存在,则不进行任何操作
[root@ansible ~]# ansible all -m user -a "name=brian"
192.168.192.129 | CHANGED => {
"changed": true,
"comment": "",
"create_home": true,
"group": 1000,
"home": "/home/brian",
"name": "brian",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1000
} 2)state=absent参数(删除用户但不删除目录)
删除名为brian的用户,但是不会删除 brian 用户的家目录
[root@ansible ~]# ansible all -m user -a "name=brian state=absent"
192.168.192.129 | CHANGED => {
"changed": true,
"force": false,
"name": "brian",
"remove": false,
"state": "absent"
} 3)state=absent remove=yes参数(删除用户并删除用户目录)
删除名为brian的用户,同时会删除brian用户的家目录等信息。如果已经不存在brian的用户,则不做任何操作
[root@ansible ~]# ansible all -m user -a "name=brian state=absent remove=yes"
192.168.192.129 | SUCCESS => {
"changed": false,
"name": "brian",
"state": "absent"
} 4)group参数(为用户指定组)
指定brian用户的主组为yunwei,yunwei组需要提前存在,当不使用group设置主组时,默认主组与用户名相同
创建yunwei组
[root@ansible ~]# ansible all -m shell -a "groupadd yunwei" [root@ansible ~]# ansible all -m user -a "name=brian group=yunwei"
192.168.192.129 | CHANGED => {
"changed": true,
"comment": "",
"create_home": true,
"group": 1000,
"home": "/home/brian",
"name": "brian",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1000
} 5)groups参数(为用户添加附加组)、append参数(设置yes可添加多个附加组)
指定brian用户的附加组为python,python组需要提前存在,当不使用groups设置附属组时,默认附加组与用户名相同。
注意,为了保险起见,在不知道用户原来的附加组设定的情况下,最好将append参数设置为yes我们也可以一次性设置多个附加组,附加组之间用逗号隔开
创建python组
[root@ansible ~]# ansible all -m shell -a "groupadd python" [root@ansible ~]# ansible all -m user -a "name=brian groups=python append=yes"
192.168.192.129 | CHANGED => {
"append": true,
"changed": true,
"comment": "",
"group": 1001,
"home": "/home/brian",
"move_home": false,
"name": "brian",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
} 6)expires参数(设置用户的过期时间)
指定brian用户的过期时间为2018年12月31日。使用"date -d 2018-12-31 +%s"命令可以获取到对应日期的unix时间戳
获取unix时间戳
[root@ansible ~]# date -d 2018-12-31 +%s
1546185600 [root@ansible ~]# ansible all -m user -a "name=brian expires=1546185600"
192.168.192.129 | CHANGED => {
"append": false,
"changed": true,
"comment": "",
"group": 1001,
"home": "/home/brian",
"move_home": false,
"name": "brian",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
} 7)comment参数(指定用户的注释信息)
指定brian用户的注释信息
[root@ansible ~]# ansible all -m user -a "name=brian comment='my name is zhujingzhi'"
192.168.192.129 | CHANGED => {
"append": false,
"changed": true,
"comment": "my name is zhujingzhi",
"group": 1001,
"home": "/home/brian",
"move_home": false,
"name": "brian",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
} 8)password参数(为用户设置密码)
将brian用户的密码设置为hahahaha
给hahahaha加密
[root@ansible ~]# python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt
>>> crypt.crypt('hahahaha')
'$6$Zfj8DrWsbhwHSpCq$vuWpw.5FX97egYaWEUTavkP3ahi294yO5brO9qm3XDdvjM0hJKwaoXt7ue/9ZRIm8sYzgxsGZdKi8Qxdk3xDD.' [root@ansible ~]# ansible all -m user -a 'name=brian password="$6$Zfj8DrWsbhwHSpCq$vuWpw.5FX97egYaWEUTavkP3ahi294yO5brO9qm3XDdvjM0hJKwaoXt7ue/9ZRIm8sYzgxsGZdKi8Qxdk3xDD."'
192.168.192.129 | CHANGED => {
"append": false,
"changed": true,
"comment": "my name is zhujingzhi",
"group": 1001,
"home": "/home/brian",
"move_home": false,
"name": "brian",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
} 9)generate_ssh_key参数(生成ssh密钥对)
为brian用户生成ssh密钥对。默认在用户家目录的./ssh 目录中生成名为 id_rsa 的私钥和名为 id_rsa.pub 的公钥,如果已经存在同名密钥,并不会覆盖原来的密钥,即不做任何操作
[root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes"
192.168.192.129 | CHANGED => {
"append": false,
"changed": true,
"comment": "my name is zhujingzhi",
"group": 1001,
"home": "/home/brian",
"move_home": false,
"name": "brian",
"shell": "/bin/bash",
"ssh_fingerprint": "2048 SHA256:67RLzlQYCjfOctm7K4cXrd+ctuTl6WEGW0oboP9/4Qc ansible-generated on ansible_node1 (RSA)",
"ssh_key_file": "/home/brian/.ssh/id_rsa",
"ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5OKH1DicFwXMVhJioQyYAt3I/C+axJ8qG4lynUMxXQNRa1NCGXPcnBXDUATAwfzG7O5itRrFOGZracMb63B9WrhkPzWPiJHjv9fRAibuydmro0al6GkUqU/Ma2UME1c+OWKR5HrhGHU/8KfD/EHcsaSmeI0G5qWsstNzzjsxpCTDL/cGWK841s1UE6n4dHs+fxp0r7NDqzB4HceTIKZKdB0ScetchMCHJzBpV+nu3uqacgZrTRp1T5EHIXjoS9D+NeH5/9YVevTrlMqBks8RdGjXeds8G3LyqQMdjR2X5WPW0+cS8oECtEPY1xERPdgbN7c643Xh2oXDoEBMZ/GfT ansible-generated on ansible_node1",
"state": "present",
"uid": 1000
} 10)ssh_key_file参数(指定密钥生成的路径)
为brian用户生成ssh密钥对,密钥对生成在/opt目录下,私钥名为 id_rsa_brian,公钥名为 id_rsa_brian.pub
[root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes ssh_key_file=/opt/id_rsa_brian"
192.168.192.129 | CHANGED => {
"append": false,
"changed": true,
"comment": "my name is zhujingzhi",
"group": 1001,
"home": "/home/brian",
"move_home": false,
"name": "brian",
"shell": "/bin/bash",
"ssh_fingerprint": "2048 SHA256:/A0hgTZ4GA7qMKhikPe+QMJiAlKHmzk560IaMC5uRHI ansible-generated on ansible_node1 (RSA)",
"ssh_key_file": "/opt/id_rsa_brian",
"ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCSlNUc0TCduB6CqHr65zyC4MN/UI36DsdQB9JgBNT2MymoV9oCgcrg6m5TcuOcyv57BqZg1/l78LMHg9bCL0cn+EC3Pv7lNVgTGIRlRLFsXCnvVIbQ7nwygH1mqRR2VxNY5RsrxLSnvCADdTuc+AQ7Y7/5CMI3BLHAUju8VbfVSUfluUoR4V+ifT0zHPPbN9GWSTVBWgwPqsB6huw5odFJoY20AxTKzT5TZDLSFk1SVWV/T3knndBReHwM+OSYu7UTCCf5cI+3OImDDBscEr4GLEGfxSOXepUqI0EoYZrqhWUeuFWvSzvcJwX3Z+rz9UA1kv68wWtw/mPtaszX94Pp ansible-generated on ansible_node1",
"state": "present",
"uid": 1000
} 11)ssh_key_comment参数(指定公钥中的注释信息)
为brian用户生成ssh密钥对,同时指定公钥中的注释信息为"www.brian.com",此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥
[root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes ssh_key_comment='brian ssh-rsa'"
192.168.192.129 | CHANGED => {
"append": false,
"changed": true,
"comment": "my name is zhujingzhi",
"group": 1001,
"home": "/home/brian",
"move_home": false,
"name": "brian",
"shell": "/bin/bash",
"ssh_fingerprint": "2048 SHA256:jDU5RLudX3WcDKDM6C/4yUO2K0sGgVI/g/EkIPcUfB4 brian ssh-rsa (RSA)",
"ssh_key_file": "/home/brian/.ssh/id_rsa",
"ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1/JVoM14IRpTWxAbiOrvnvgxfTQQyErC3w4lfbATdldeaz2cZt1Ancq5xycyFMf++1UFNevPAKmlfTH37aFclVR2cH3jL/LZZefpjDvIeXb3GPYW6lDautrB/AuMgYwkhgfT8fj6/Zx+/Uq/PWCSXmkGUqT8bkM3hjF1kKc0HtUMljK3dLgJgluSifFSHSl8NO7575HxzY+KVXTzGFJmXwwRssHkoJq38kRqua2DMzBWjBd9LcYRSa2wHwfXK12fJVEMx6xIUqPljLFslDfL++NiDeMtf9dP9Dp7+/3/o2XW3CWanjTcDLLT8cbzKC4j2MvmTTIXmXG6SiQ98deNp brian ssh-rsa",
"state": "present",
"uid": 1000
} 12)ssh_key_passphrase参数(指定私钥的密码)
为brian用户生成ssh密钥对,同时指定私钥的密码为123456,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥
[root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes ssh_key_passphrase='123456'"
192.168.192.129 | CHANGED => {
"append": false,
"changed": true,
"comment": "my name is zhujingzhi",
"group": 1001,
"home": "/home/brian",
"move_home": false,
"name": "brian",
"shell": "/bin/bash",
"ssh_fingerprint": "2048 SHA256:kv2+zW6bqC8YAPazS7YvVtK4gz5uFCglfqmm9AoAfi0 ansible-generated on ansible_node1 (RSA)",
"ssh_key_file": "/home/brian/.ssh/id_rsa",
"ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6RAfCIyGz9kLF2KGBSOk6cQZb7O+tkOxwqJmxGE7bqKwgAprX917C7mj6ugIADeFeRtnP3/0oU0TLl4m0mFepVDEzGfZTRIR7Op1M6QCvveOJM/eP92vUv9TIKPY83iAaog7+l6/ZItBVWqC3OKmKHpuiZeH06dayq805lrYA+3jUagCKZSmevejyFTuVMYQJEZ77afWnJqtnCgUE6Mc/H5eD8ffPZgey3FEs+OTPA96N85gfZ6j+wT5AqPNPhmE7+I/Z6tZUnnPMGbHUhp53/TSMcIV5MZIPEcCpJq0KIFYR6xp2uW6aFhkQ58DhDwkHvFE34IVpnJMCoA8fesvn ansible-generated on ansible_node1",
"state": "present",
"uid": 1000
} 13)ssh_key_type参数(指定加密类型)
为brian用户生成ssh密钥对,同时指定密钥对的类型为dsa,当不显式指定密钥类型时,默认类型为rsa,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥
[root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes ssh_key_type=dsa"
192.168.192.129 | CHANGED => {
"append": false,
"changed": true,
"comment": "my name is zhujingzhi",
"group": 1001,
"home": "/home/brian",
"move_home": false,
"name": "brian",
"shell": "/bin/bash",
"ssh_fingerprint": "1024 SHA256:R5H7/BUdOIku2uWdp6UVSmibTqbq3mXCQKkPWhHWsAQ ansible-generated on ansible_node1 (DSA)",
"ssh_key_file": "/home/brian/.ssh/id_dsa",
"ssh_public_key": "ssh-dss AAAAB3NzaC1kc3MAAACBAM9iCp0cVUWqutnrlLWgFMms4cGaxR8bPgCa/Sec+OPbA3LjO/UwoYhyxCDu7eCCjUNcNwhEzssl3jtQRaCEzGV4rjO4mJaPkfCLpnDnYbKuWd9zio6vz4TU/qGJoG6Z5gpRqyv0TPKRw+FB10eL283/9/RJ49ZGWnf/v+hnF/DJAAAAFQDhz74tTItuAowX8VtzLTFKJXjhjwAAAIA8X7MxjCBvK38qICDCvjfsSU+WA5uWP1doyf7CQ/PEF3j0aPXe+rd4u1WRpNqkYxTQiZVr+uVQ4NqPAdvszkWpQ86tIW36rTXecLX6dbr59Gd/0uEpvIFagbPK0RPB+F8Z/LudQvcz+qqwAO+JMUR3FGBOT7nL9ZlPeocXhetpkQAAAIBUbmWo/IDFp3mVx7cYkqJH94RG1YJ/HE77SUFF/doAZmpvRVK4IttBojGDeEnPNsN49cHXVY/pGKquGoLMMKI3qJBuYDsd2YUSxRGRIdbDyRWMAPQkC6W+/tSFFSrrHndpUtzPtI4rNZX5w/wbcxxEMsPDsxYcQB1VRhIf2+YiWQ== ansible-generated on ansible_node1",
"state": "present",
"uid": 1000
}

authorized_key 模块

用途:添加或删除SSH授权密钥
使用方法:

[root@ansible ~]# ansible-doc -s authorized_key
- name: Adds or removes an SSH authorized key
authorized_key:
comment: # 更改公钥上的注释。重写注释在从GitHub或GitLab中提取注释等情况下非常有用。如果没有指定注释,则保留现有注释
exclusive: # 是否移除authorized_keys文件中其它非指定key.
follow: # 是否遵循目的机器中的文件系统链接(可选值为:yes|on)
key: # (必选项)公钥路径,可以是本地⽂件,可以是url地址
key_options: # 附加到key中的字符串 不加参数会删除上次带参数时添加的字符串
manage_dir: # 是否创建或修改⽬标authorized_keys所在⽬录的所有者和权限。默认为yes 使用自定义的目标路径时,必选设置为no或者false.
path: # authorized_keys所在的⽬录,默认为家⽬录下的.ssh⽬录中
state: # present/absent,是否将密钥添加到⽬标authorized_keys⽂件中,state=present表示添加;state=absent表示删除
user: # (必选项)添加到远程哪个⽤户下的authorized_keys⽂件
validate_certs: # 这只适用于使用https url作为密钥源的情况。如果设置为“no”,则不会验证SSL证书.

示例:

正在更新中。。。。。请等待

debug 模块

用途:⽤于输出⾃定义的信息,类似于echo、print等输出命令。ansible中的debug主要⽤于输出变量值、表达式值,以及⽤于when条件判断时。使⽤⽅式⾮常简单
使用方法:

[root@ansible ~]# ansible-doc -s debug
- name: Print statements during execution
debug:
msg: # 输出⾃定义信息。如果省略,则输出普通字符.
var: # 指定待调试的变量。只能指定变量,不能指定⾃定义信息,且变量不能加{{}}包围,⽽是直接的变量名.
verbosity: # 控制debug运⾏的调试级别,有效值为⼀个数值N

示例:

1) msg参数(输出⾃定义信息)
[root@ansible ~]# ansible all -m debug -a "msg='i want to print this messages'"
192.168.192.129 | SUCCESS => {
"msg": "i want to print this messages"
} 2) var参数(指定待调试的变量)
[root@ansible ~]# ansible all -m debug -a "var=ansible_eth0.ipv4.address"
192.168.192.129 | SUCCESS => {
"ansible_eth0.ipv4.address": "VARIABLE IS NOT DEFINED!"
} 3) verbosity(控制debug运⾏的调试级别)
[root@ansible ~]# ansible all -m debug -a "verbosity=3"
192.168.192.129 | SKIPPED

archive 模块

用途:创建一个或多个文件或树的压缩存档
使用方法:

[root@ansible ~]# ansible-doc -s archive
- name: Creates a compressed archive of one or more files or trees
archive:
dest: # ⽬标归档⽂件名。除⾮path指定要压缩的是单⽂件,否则需要dest选项.
exclude_path: # 要从归档文件中排除的文件的远程绝对路径
format: # 指定压缩格式,默认为gz格式.
group: # ⽂件/⽬录的所属组.
mode: # 设置⽂件/⽬录的的权限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
owner: # ⽂件/⽬录的所属者
path: # (必选项) 要压缩的⽂件,可以是绝对路径,也可以是glob统配的路径,还可以是⽂件列表
remove: # 压缩后删除源⽂件
unsafe_writes: # 是否以不安全的方式进行,可能导致数据损坏(unsafe_writes=yes|on).

示例:

正在更新中。。。。。请等待

unarchive 模块

用途:复制归档压缩文件后解压
使用方法:

[root@ansible ~]# ansible-doc -s unarchive
- name: Unpacks an archive after (optionally) copying it from the local machine.
unarchive:
creates: # 如果指定的⽂件存在则不执⾏该任务。可⽤于实现幂等性
decrypt: # 此选项使用vault控制源文件的自动解密
dest: # (必选项) 远程机器上需要被解包的归档⽂件,要求是绝对路径
exclude: # 列出解包过程中想要忽略的⽬录和⽂件
extra_opts: # 通过传入数组指定其他选项
group: # ⽂件/⽬录的所属组.
keep_newer: # 在解包过程中,如果⽬标路径中和包中有同名⽂件,且⽐包中的⽂件更新,则保留新的⽂件
list_files: # 设置为true时,将返回归档⽂件中的⽂件列表
mode: # 设置⽂件/⽬录的的权限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
owner: # ⽂件/⽬录的所属者
remote_src: # 设置为yes表⽰远程主机上已有⽬标归档⽂件,即不再从本地复制归档⽂件到远端,直接在远端解包,默认no.
src: # (必选项)如果remote_src=no,将复制本地归档⽂件到远端,可相对路径也可绝对路径.如果remote_src=yes, 将解包远程已存在的归档⽂件,如果remote_src=yes且src中包含了"://",将指挥远程主机从url中下载⽂件并解包
unsafe_writes: # 是否以不安全的方式进行,可能导致数据损坏(unsafe_writes=yes|on)
validate_certs: # 这只适用于使用https url作为密钥源的情况。如果设置为“no”,则不会验证SSL证书

示例:

正在更新中。。。。。请等待

get_url 模块

用途:类似于wget和curl的功能,可以进行下载以及webapi交互等操作
使用方法:

[root@ansible ~]# ansible-doc -s get_url
- name: Downloads files from HTTP, HTTPS, or FTP to node
get_url:
backup: # 下载⽂件时同时创建⼀个名称中包含时间戳的备份⽂件
dest: # (必选项)⽂件保存路径,必须为绝对路径。
# 如果dest是⼀个⽬录,则使⽤url的base name作为⽂件名
# 如果dest是⼀个⽬录,则'force'选项不⽣效
# 如果dest是⼀个⽬录,则总是会下载⽬标⽂件,但只在已存在的⽂件变化了才会替换旧⽂件
force: # 如果设置为yes,且dest不是⼀个⽬录时,则总是会下载⽂件,但只在已存在的⽂件变化了才会替换旧⽂件,如果设置为no(默认),则只会在⽬录路径下不存在该⽂件时才会进⾏下载
force_basic_auth: # 此选项在初始请求时强制基本身份验证标头.
group: # ⽂件/⽬录的所属组.
headers: # 以字典格式向请求添加自定义HTTP头(key=value格式)
mode: # 设置⽂件/⽬录的的权限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式.
others: # 模块接受的所有参数
owner: # ⽂件/⽬录的所属者
sha256sum: # 如果将SHA-256校验和传递给该参数,则在下载后计算目标文件摘要,以确保其完整性并验证传输成功。这个选项不赞成使用。使用“校验和”代替.
timeout: # 请求url时的超时时间,默认10秒钟.
tmp_dest: # 下载时临时存放⽬录,在任务执⾏完成前会删除下载的临时⽂件
unsafe_writes: # 是否以不安全的方式进行,可能导致数据损坏(unsafe_writes=yes|on)
url: # (required) 要下载的url路径,(http|https|ftp)://[user[:pass]]@host.domain[:port]/path
# 还⽀持file格式的路径,实现复制功能。file:///path/to/file
url_password: # 用于HTTP基本身份验证的密码。如果没有指定“url_username”参数,则不会使用“url_password”参数
url_username: # 用于HTTP基本身份验证的用户名。对于允许空密码的站点,可以在不使用“url_password”的情况下使用此参数
use_proxy: # 如果no,它将不使用代理,即使在目标主机上的环境变量中定义了代理.
validate_certs: # 如果no,SSL证书将不被验证。这应该只在使用自签名证书的个人控制站点上使用

示例:

正在更新中。。。。。请等待

wait_for 模块

用途:⽤于判断任务在满⾜什么条件的情况下会继续。主要⽤来判断端⼝是否开启、⽂件是否存在、⽂件中是否存在某些字符串
使用方法:

[root@ansible ~]# ansible-doc -s wait_for
- name: Waits for a condition before continuing
wait_for:
active_connection_states: # 被算作活动连接的TCP连接状态列表.
connect_timeout: # 在关闭和重试之前等待连接发生的最大秒数.
delay: # 在检查操作进⾏之前等待的秒数
exclude_hosts: # 在寻找处于“耗尽”状态的活动TCP连接时要忽略的主机或ip的列表
host: # 等待这个主机处于启动状态,默认为127.0.0.1.
msg: # 这将覆盖来自无法满足所需条件的故障的正常错误消息.
path: # 这个⽂件是否已经存在
port: # 等待这个端⼝已经开放.
search_regex: # 在⽂件中进⾏正则匹配
sleep: # 两次检查之间sleep的秒数,默认1秒
state: # present/started/stopped/absent/drained.默认started
# 当检查的是⼀个端⼝时:
# started:保证端⼝是开放的
# stopped:保证端⼝是关闭的
# 当检查的是⼀个⽂件时:
# present/started:在检查到⽂件存在才会继续
# absent:检查到⽂件被移除后才会继续
timeout: # 检查的等待超时时间(秒数,默认300).

示例:

正在更新中。。。。。请等待

group 模块

用途:添加或删除组
使用方法:

[root@ansible ~]# ansible-doc -s group
- name: Add or remove groups
group:
gid: # 用于指定组的gid
name: # (必选项) 用于指定要操作的组名称
state: # 用于指定组的状态,两个值可选,present,absent,默认为 present,设置为absent 表示删除组。
system: # 如果是yes,表示指定的组是系统组

示例:

1) name参数(创建组)
创建kaifa组
[root@ansible ~]# ansible all -m group -a "name=kaifa"
192.168.192.129 | CHANGED => {
"changed": true,
"gid": 1002,
"name": "kaifa",
"state": "present",
"system": false
} 2) state=absent参数(删除组)
删除成功的前提是不能有用户把被删除的组当成主组
[root@ansible ~]# ansible all -m group -a "name=kaifa state=absent"
192.168.192.129 | CHANGED => {
"changed": true,
"name": "kaifa",
"state": "absent"
} 3) gid参数(指定组的gid)
[root@ansible ~]# ansible all -m group -a "name=kaifa gid=6666"
192.168.192.129 | CHANGED => {
"changed": true,
"gid": 6666,
"name": "kaifa",
"state": "present",
"system": false
} 4) system参数(将组设置成为系统组)
[root@ansible ~]# ansible all -m group -a "name=admin system=yes"
192.168.192.129 | CHANGED => {
"changed": true,
"gid": 992,
"name": "admin",
"state": "present",
"system": true
}