Ansible
Ansible version : 2.6.2
常用模块(三)
系统模块
系统模块详细地址:https://docs.ansible.com/ansible/latest/modules/list_of_system_modules.html
- cron
- hostname
- ping
- user
- service
- systemd
模块:cron
概述
- 【cron】模块管理crontab和环境变量条目。允许创建环境变量和命名的crontab条目,更新或删除它们。
- 管理环境变量时:不添加注释行,但当模块需要查找/检查状态时,使用
name
参数来查找环境变量定义行。 - 管理crontab作业时,该模块包含一行,其中包含crontab条目的描述为
"#Ansible:
或者对应于传递给模块的" name
将来Ansible /模块调用都使用这个条目来查找/检查状态。name
参数应该是唯一的,更改name
值将导致创建一个新的cron任务(或删除另一个任务)。 - 使用%等符号时,必须正确转义它们。
参数
参数(*必选) | 默认 | 注释 |
---|---|---|
backup | no | 如果设置,则在修改之前备份crontab,备份位置则由返回值里面的backup_file 输出 |
cron_file | 如果指定,使用这个文件来替代一个单独用户的crontab。如果这是一个相对路径,他将通过/etc/cron.d 解释(如果绝对路径,一般是/etc/crontab)。许多发型版本期望名字部分仅由大写和小写字母,数字,下划线和连字符组成。如果使用该参数,则必须指定用户 |
|
day | * | 哪天执行计划任务 |
disabled | no | 在crontab里面禁用(注释)作业 |
env | no | 如果设置,则管理crontab的环境变量。新变量添加在crontab之上。 name 和value 参数是环境变量的名称和值。 |
hour | * | 哪小时执行计划任务 |
insertafter | 与state=present 和env 一起使用。如果指定,则在声明指定的环境变量之后插入环境变量。 |
|
insertbefore | 与state=present 和env 一起使用。如果指定,则在声明指定的环境变量之前插入环境变量。 |
|
job | 要执行的命令或者如果设置了env,则为环境变量的值。该命令不应包含空格。就像state=present 一样。 |
|
minute | * | 哪分钟计划任务 |
month | * | 哪月执行计划任务 |
name | crontab条目的描述,如果设置了env,则为环境变量的名称。需要state=absent 。注意name没有设置env并且state=present ,一个新的条目始终创建,而不管已经存在的。 |
|
reboot | no | 如果任务必须在重启之后执行。该选项已弃用。用户应该使用special_time |
special_time | 特殊的时间规范的昵称。选项: reboot yearly annually monthly weekly daily hourly | |
state | present | 确保作业或环境变量存在或不存在。 |
user | root | 修改crontab的特定用户 |
weekday | * | 哪周执行计划任务 |
例子
playbook
指定时间执行
- name: Ensure a job that runs at 2 and 5 exists. Creates an entry like "0 5,2 * * ls -alh > /dev/null"
cron:
name: "check dirs"
minute: "0"
hour: "5,2"
job: "ls -alh > /dev/null"
删除一个旧条目
- name: 'Ensure an old job is no longer present. Removes any job that is prefixed by "#Ansible: an old job" from the crontab'
cron:
name: "an old job"
state: absent
重启之后,执行
- name: Creates an entry like "@reboot /some/job.sh"
cron:
name: "a job for reboot"
special_time: reboot
job: "/some/job.sh"
创建环境变量
- name: Creates an entry like "PATH=/opt/bin" on top of crontab
cron:
name: PATH
env: yes
value: /opt/bin
在声明的指定变量之后
- name: Creates an entry like "APP_HOME=/srv/app" and insert it after PATH declaration
cron:
name: APP_HOME
env: yes
value: /srv/app
insertafter: PATH
环境变量变量
- name: Removes "APP_HOME" environment variable from crontab
cron:
name: APP_HOME
env: yes
state: absent
模块:hostname
概要
- 设置系统的主机名,支持大多数操作系统/分发,包括使用systemd的操作系统。
- 这个模块不会修改
/etc/hosts
,可以使用【template】或者【replace】模块修改。 - Windows, HP-UX ,AIX不支持。
参数
参数(*必选) | 默认 | 注释 |
---|---|---|
* name | 主机名 |
例子
playbook
- hostname:
name: web01
模块:ping
概要
- 这个模块总是在成功之后返回
pong
。在playbook中毫无意义。但是在使用/usr/bin/ansible
来确认登录可用和配置了可用的python - 这个不是IMCP的ping,只是远端的python简单的测试模块
- 对于windows目标,使用
win_ping
- 对于网络目标,使用
net_ping
参数
参数(*必选) | 默认 | 注释 |
---|---|---|
data | pong | 要返回ping 返回值的数据。如果此参数设置为crash ,则模块将导致异常。 |
例子
playbook
设置data值为crash
# Induce an exception to see what happens
- ping:
data: crash
返回值
关键字 | 返回/类型 | 描述 |
---|---|---|
ping | success/字符串 | data参数提供的值 |
模块:user
概述
- 管理用户账户和用户属性
- 对于windows主机,使用
win_user
模块
参数
参数(*必选) | 默认 | 注释 |
---|---|---|
append | no | 如果为yes ,添加用户到指定组,如果为no ,则仅将用户添加到组中指定的组,并将其从所有其他组中删除。 |
comment | (可选)设置用户帐户的描述(也称为GECOS)。 | |
create_home | yes | 除非设置为no,否则将在创建帐户或主目录不存在时为用户创建主目录。从ansible 2.5版本开始,从createhome 变为create_home |
expires | 设置用户过期时间。它将在不支持此功能的平台上被忽略。当前支持GNU/Linux, FreeBSD, and DragonFlyBSD。从版本2.6开始,您可以删除指定负值的到期时间。当前支持 GNU/Linux and FreeBSD | |
force | no | 当state=absent 的时候会受到影响,它强制删除支持平台上的用户和关联目录。与userdel --force 行为一样。 |
generate_ssh_key | no | 是否为相关用户生成SSH密钥。不会覆盖已存在的SSH key。 |
group | (可选)设置用户的主要组(取一个组名) | |
groups | 将添加用户组列表。当设置为空字符串'' 、null 或者~ ,用户将从除主要组之外的所有组中删除。在yaml中~ 意思是 null |
|
hidden | yes | 仅限Darwin/OS X,可选地将用户隐藏在登录窗口和系统首选项中。 如果使用系统选项,则默认值为“True”。 |
home | 可选设置用户的家目录 | |
local | no | 强制在实现它的平台上使用“本地”命令备选方案。当您想要操作本地用户时,这在使用集中身份验证的环境中很有用。 它使用luseradd 而不是useradd 。 |
login_class | (可选)设置用户的登录类,这是大多数BSD操作系统的一项功能。 | |
move_home | no | 当使用home= 则设置为yes ,尝试移动用户的旧目录到指定目录,新目录必须不存在并且旧目录必须存在。 |
* name | 要创建,删除或修改的用户的名称。 | |
non_unique | no | (可选)与-u 选项一起使用时,此选项允许将用户ID更改为非唯一值。 |
password | (可选)将用户密码设置为此加密值。在Darwin / OS X系统上,此值必须是明文。 | |
password_lock | 锁定密码(usermod -L,pw lock,usermod -C)。但是实现在不同平台上有所不同.此选项并不总是意味着用户无法通过其他方法登录。此选项不会禁用用户,只会锁定密码。请勿在同一任务中更改密码。目前支持Linux,FreeBSD,DragonFlyBSD,NetBSD。 | |
remove | no | 当state=absent 时生效,它试图删除与用户关联的目录。与userdel --remove 行为相似。 |
seuser | (可选)在启用selinux的系统上设置seuser类型(user_u) | |
shell | (可选)设置用户shell。在Mac OS X上,在2.5版之前,非系统用户的默认shell是/usr/bin/false 。从2.5开始,Mac OS X上非系统用户的默认shell是/ bin / bash 。 |
|
skeleton | (可选)设置主目录。需要create_home 选项 |
|
ssh_key_bits | ssh-keygen | (可选)指定要创建的SSH密钥的位数。 |
ssh_key_comment | ansible-generated on $HOSTNAME | (可选)定义SSH密钥的注释。 |
ssh_key_file | .ssh/id_rsa | (可选)指定SSH密钥文件名。如果这是一个相对文件名,那么它将相对于用户的主目录。 |
ssh_key_passphrase | 设置SSH密钥的密码。如果未提供密码,则SSH密钥将默认为没有密码。 | |
state | absent | 帐户是否应该存在,如果状态与陈述的不同则采取行动。 |
system | no | 当创建账户state=present ,将此设置为yes会使用户成为系统帐户。无法在现有用户上更改此设置。 |
uid | (可选)设置用户的UID。 | |
update_password | always | always :如果密码不同,总会更新密码。on_create 只会为新创建的用户设置密码。 |
例子
创建指定uid以及主要的admin组的用户
- name: Add the user 'johnd' with a specific uid and a primary group of 'admin'
user:
name: johnd
comment: John Doe
uid: 1040
group: admin
追加组
- name: Add the user 'james' with a bash shell, appending the group 'admins' and 'developers' to the user's groups
user:
name: james
shell: /bin/bash
groups: admins,developers
append: yes
删除用户
- name: Remove the user 'johnd'
user:
name: johnd
state: absent
remove: yes
创建2048位的ssh key
- name: Create a 2048-bit SSH key for user jsmith in ~jsmith/.ssh/id_rsa
user:
name: jsmith
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: .ssh/id_rsa
设置过期时间
- name: Added a consultant whose account you want to expire
user:
name: james18
shell: /bin/zsh
groups: developers
expires: 1422403387
删除过期时间
- name: starting at version 2.6, modify user, remove expiry time
user:
name: james18
expires: -1
模块:service
概述
- 控制远程主机上的服务。支持的init系统包括BSD init,OpenRC,SysV,Solaris SMF,systemd,upstart。
- 对于Windows目标,请改用【win_service】模块。
参数
参数(*必选) | 默认 | 注释 |
---|---|---|
arguments | 在命令行上提供了其他参数 | |
enabled | 服务是否应该在启动时启动。至少需要state和enabled中的一个。可选值yes/no | |
* name | service名称 | |
pattern | 如果服务没有响应status命令,将要查找的子字符串命名为ps命令的输出中的子字符串作为状态结果的替代。如果找到该字符串,则假定该服务正在运行。 | |
runlevel | default | 仅适用于OpenRC init脚本(例如:Gentoo)。此服务所属的运行级别。 |
sleep | 如果正在重新启动服务,则在停止和启动之间休眠多少秒,这有助于解决在发出停止进程信号后立即退出的错误行为的init脚本。 | |
state | started /stopped 是幂等操作,除非必要,否则不会执行。restarted 总会执行。reloaded 总会执行。至少需要state和enabled中的一个。注意即使服务没启动reloaded j也将会启动服务。甚至你选择的init系统不正常。 |
|
use | auto | 【service】模块实际上使用系统特定的模块,通常通过自动检测,此设置可以强制特定模块。通常它使用'ansible_service_mgr'事实的值,并在找不到匹配时回退到旧的'service'模块。 |
例子
如果没启动,则启动服务
- name: Start service httpd, if not running
service:
name: httpd
state: started
重启服务
- name: Restart service httpd, in all cases
service:
name: httpd
state: restarted
启用服务
- name: Enable service httpd, and not touch the running state
service:
name: httpd
enabled: yes
基于进程启动
- name: Start service foo, based on running process /usr/bin/foo
service:
name: foo
pattern: /usr/bin/foo
state: started
带参数重启
- name: Restart network service for interface eth0
service:
name: network
state: restarted
args: eth0
模块:systemd
概述
- 控制远程主机上的systemd服务。
参数
参数(*必选) | 默认 | 注释 |
---|---|---|
daemon_reload | no | 在执行任何其他操作之前运行daemon-reload,以确保systemd已读取任何更改。 |
enabled | 服务是否应该在启动时启动。至少需要state和enabled中的一个。可选值:yes/no | |
force | 是否覆盖现有符号链接。可选值:yes/no | |
masked | 无论是否应该屏蔽unit,屏蔽uit是不可能启动的。可选值:yes/no | |
name | 服务名称。在chroot环境中使用时,您总是需要指定全名,即(crond.service)。 | |
no_block | no | 不要同步等待请求的操作完成。排队的工作将在没有Ansible阻止的情况下继续完成。 |
state | started /stopped 是幂等操作,除非必要,否则不会运行命令。restarted 启动将始终弹出服务。reloaded 将始终重新加载。 |
|
user | no | 运行systemctl,与调用用户的服务管理器对话,而不是与系统的服务管理器对话。 |
注意
- 自从2.4开始,以下选项之一
state
,enabled
,masked
,daemon_reload
,除daemon_reloa
'之外的所有内容都需要name
。 - 在2.4之前,你总是需要
name
。
例子
起服务
- name: Make sure a service is running
systemd:
state: started
name: httpd
重启服务前先reload
- name: restart service cron on centos, in all cases, also issue daemon-reload to pick up config changes
systemd:
state: restarted
daemon_reload: yes
name: crond
强制重载配置
- name: just force systemd to reread configs (2.4 and above)
systemd:
daemon_reload: yes