03-常用模块(三)-系统模块

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之上。 namevalue参数是环境变量的名称和值。
hour * 哪小时执行计划任务
insertafter state=presentenv一起使用。如果指定,则在声明指定的环境变量之后插入环境变量。
insertbefore state=presentenv一起使用。如果指定,则在声明指定的环境变量之前插入环境变量。
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中的一个。注意即使服务没启动reloadedj也将会启动服务。甚至你选择的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开始,以下选项之一stateenabledmaskeddaemon_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

你可能感兴趣的:(03-常用模块(三)-系统模块)