【Absible学习】Ansible常用模块---系统类模块

栏目: 服务器 · 发布时间: 6年前

内容简介:cron模块可以管理远程主机中的计划任务,功能相当于crontab命令。时间单位设定参数都未指定时,计划任务的时间设定默认会被设定为"ywbz用户下,每2月个的每3天的1点3分执行重启snmp服务,任务名称是ansible cron test,创建计划任务前先备份现有计划任务。
  • cron模块

cron模块可以管理远程主机中的计划任务,功能相当于crontab命令。

模块参数

参数 说明
minute 设置计划任务中的分钟,比如,minute=5,当不使用此参数时,分钟的值默认为"*",表示所有的分钟
hour 设置计划任务中的小时,比如,hour=1,当不使用此参数时,小时的值默认为"*",表示所有小时
day 设置计划任务中一个月的第几天,当不使用此参数时,日的值默认为"*",表示一个月中的每天
month 设置计划任务中一年的几月,当不使用此参数时,月的值默认为"*" ,表示每个月
weekday 设置计划任务的周几,当不使用此参数时,设定位的值默认为"*",表示一周的每天
special_time 计划任务的时间设定格式为@reboot或者@hourly,@reboot表示重启时执行,@hourly表示每小时执行一次,这种@开头的时间设定格式则需要使用special_time参数进行设置,special_time参数的可用值有reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时)。
user 设置当前计划任务属于哪个用户,当不使用此参数时,默认操作root用户的计划任务
job 指定计划的任务中需要实际执行的命令或者脚本,比如上例中的"echo test"命令。
name 设置计划任务的名称,计划任务的名称会在注释中显示,当不指定计划任务的名称时,ansible会默认为计划任务加入注释,注释的内容为#Ansible: None,假设指定计划任务的名称为test,那么注释的内容为#Ansible: test,在一台机器中,计划任务的名称应该具有唯一性,方便以后根据名称修改或删除计划任务。
state 当计划任务有名称时,我们可以根据名称修改或删除对应的任务,当删除计划任务时,需要将state的值设置为absent
disabled 当计划任务有名称时,我们可以根据名称使对应的任务"失效"(注释掉对应的任务),使用此参数时,除了需要指定任务的名称,还需要同时指定任务的job以及任务的时间设定,而且任务的时间设定必须和对应任务完全相同,否则在注释任务的同时,任务的时间设定会被修改。
backup 设置为yes,当修改或者删除对应的计划任务时,会先对计划任务进行备份,然后再对计划任务进行修改或者删除,cron模块会在远程主机的/tmp目录下创建备份文件,以crontab开头并且随机加入一些字符,具体的备份文件名称会在返回信息的backup_file字段中看到,推荐将此此参数设置为yes。

时间单位设定参数都未指定时,计划任务的时间设定默认会被设定为" *",这样表示每秒都会执行一次计划任务。

[root@Super ~]# ansible 10.15.43.15 -S -R root -m cron -a 'name="ansible cron test" minute=3 hour=1 day=*/3 month=*/2 weekday=6  user=ywbz job="systemctl restart snmpd" backup=yes'
10.15.43.15 | SUCCESS => {
    "backup_file": "/tmp/crontabPPsVEF", 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "ansible cron test"
    ]
}
[root@Super ~]#
[root@localhost ~]# crontab -u ywbz -l
#Ansible: ansible cron test
3 1 */3 */2 6 systemctl restart snmpd
[root@localhost ~]#

ywbz用户下,每2月个的每3天的1点3分执行重启snmp服务,任务名称是ansible cron test,创建计划任务前先备份现有计划任务。

[root@Super ~]# ansible 10.15.43.15 -S -R root -m cron -a 'name="ansible cron test" special_time=reboot job="systemctl restart snmpd" backup=yes'
10.15.43.15 | SUCCESS => {
    "backup_file": "/tmp/crontabLYGkRi", 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "ansible cron test"
    ]
}
[root@Super ~]#
[root@localhost ~]# crontab -l
30 6 * * * /usr/bin/systemctl restart snmpd||/sbin/service snmpd restart
*/3 * * * * /usr/sbin/ntpdate ntp1.nl.net||/usr/sbin/ntpdate cn.pool.ntp.org && /sbin/clock -w
#Ansible: ansible cron test
@reboot systemctl restart snmpd
[root@localhost ~]#

在root下创建计划任务,在重启后执行重启snmpd服务

[root@Super ~]# ansible 10.15.43.15 -S -R root -m cron -a 'name="ansible cron test" special_time=hourly job="systemctl restart snmpd" backup=yes'
10.15.43.15 | SUCCESS => {
    "backup_file": "/tmp/crontabqnFcjg", 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "ansible cron test"
    ]
}
[root@Super ~]#
[root@localhost ~]# crontab -l
30 6 * * * /usr/bin/systemctl restart snmpd||/sbin/service snmpd restart
*/3 * * * * /usr/sbin/ntpdate ntp1.nl.net||/usr/sbin/ntpdate cn.pool.ntp.org && /sbin/clock -w
#Ansible: ansible cron test
@hourly systemctl restart snmpd
[root@localhost ~]#

由于"ansible cron test"已经存在,所以,当再次操作同名的任务时,ansible将会认为是修改原来的任务

[root@Super ~]# ansible 10.15.43.15 -S -R root -m cron -a 'name="ansible cron test" state=absent backup=yes'
10.15.43.15 | SUCCESS => {
    "backup_file": "/tmp/crontabxJz7ec", 
    "changed": true, 
    "envs": [], 
    "jobs": []
}
[root@Super ~]#
[root@localhost ~]# crontab -l
30 6 * * * /usr/bin/systemctl restart snmpd||/sbin/service snmpd restart
*/3 * * * * /usr/sbin/ntpdate ntp1.nl.net||/usr/sbin/ntpdate cn.pool.ntp.org && /sbin/clock -w
[root@localhost ~]#

通过state参数删除计划任务名为ansible cron test的计划任务。

[root@Super ~]# ansible 10.15.43.15 -S -R root -m cron -a 'name="ansible cron test" special_time=hourly job="systemctl restart snmpd" backup=yes'
10.15.43.15 | SUCCESS => {
    "backup_file": "/tmp/crontabOnMjnB", 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "ansible cron test"
    ]
}
[root@Super ~]# ansible 10.15.43.15 -S -R root -m cron -a 'name="ansible cron test" special_time=hourly job="systemctl restart snmpd" disabled=yes backup=yes'
10.15.43.15 | SUCCESS => {
    "backup_file": "/tmp/crontabuRQ7Hi", 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "ansible cron test"
    ]
}
[root@Super ~]#
[root@localhost ~]# crontab -l
30 6 * * * /usr/bin/systemctl restart snmpd||/sbin/service snmpd restart
*/3 * * * * /usr/sbin/ntpdate ntp1.nl.net||/usr/sbin/ntpdate cn.pool.ntp.org && /sbin/clock -w
#Ansible: ansible cron test
#@hourly systemctl restart snmpd
[root@localhost ~]#

使用disabled参数可以注释掉某个计划任务,此时,所有设定需要跟原设定保持一致,否则计划任务的设置将会发生改变,如果设置了错误的时间,那么对应任务被注释的同时,时间设定也会发生改变,如果忘记了任何时间设定,那么在任务被注释时,还会被设置为默认的时间设定,也就是 " *"

  • service模块

service模块可以管理远程主机上的服务,比如,启动或停止远程主机中的snmp服务。这个服务必须能被 BSD init, OpenRC, SysV, Solaris SMF, systemd, upstart 中的任意一种所管理,否则service模块也无法管理远程主机的对应服务,centos6中默认通过sysv管理服务,centos7中默认通过systemd管理服务。

模块参数

参数 说明
name 指定需要操作的服务名称,比如nginx
state 指定服务的状态,可用值有started、stopped、restarted、reloaded。
enabled 是否将服务设置为开机启动项,设置为yes表示将对应服务设置为开机启动,设置为no表示不会开机启动。
[root@Super ~]# ansible 10.15.43.15 -S -R root -m service -a 'name=snmpd state=stopped enabled=yes'

停止snmp服务,并设置开机启动。

  • user模块

user模块可以管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。

模块参数

参数 说明
name 必须参数,指定要操作的用户名称,可以使用别名user。
group 指定用户所在的基本组
gourps 指定用户所在的附加组,注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合append参数使用,否则在默认情况下,当再次使用groups参数设置附加组时,用户原来的附加组会被覆盖。
append 如果用户原本就存在多个附加组,那么当使用groups参数设置附加组时,当前设置会覆盖原来的附加组设置,如果不想覆盖原来的附加组设置,需要结合append参数,将append设置为yes,表示追加附加组到现有的附加组设置,append默认值为no。
shell 指定用户的默认shell
uid 指定用户的uid号
expires 指定用户的过期时间,如设置用户的过期日期为2018年12月31日,那么你首先要获取到2018年12月31日的unix时间戳,使用命令"date -d 2018-12-31 +%s"获取到的时间戳为1546185600,当设置expires=1546185600时,表示用户的过期时间为2018年12月31日0点0分,设置成功后,查看远程主机的/etc/shadow文件,对应用户的第八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix时间戳的值会自动转换为天数,不用手动的进行换算),目前此参数只支持在 Linux 和FreeBSD系统中使用。
comment 指定用户的注释信息
state 指定用户是否存在于远程主机中,可选值有present、absent,默认值为present,表示用户需要存在,当设置为absent时表示删除用户。
remove 当state的值设置为absent时,表示要删除远程主机中的用户,但是在删除用户时,不会删除用户的家目录等信息,这是因为remoove参数的默认值为no,如果设置为yes,在删除用户的同时,会删除用户的家目录,当state=absent并且remove=yes时,相当于执行"userdel --remove"命令
password 指定用户的密码,但是这个密码不能是明文的密码,而是一个对明文密码"加密后"的字符串,相当于/etc/shadow文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在 python 的命令提示符下输入如下命令,生成明文密码对应的加密字符串。import crypt; crypt.crypt('666666'),输入上述命令后,即可得到明文密码666666对应的加密字符串。
update_password 当此参数的值设置为always时表示,如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always,但是当此参数设置为on_create时,如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定,如果是新创建的用户,即使此参数设置为on_create,也会将用户的密码设置为password参数对应的值。
generate_ssh_key 默认值为no,如果设置为yes,表示为对应的用户生成ssh密钥对,默认在用户家目录的./ssh目录中生成名为id_rsa的私钥和名为id_rsa.pub的公钥,如果同名的密钥已经存在与对应的目录中,原同名密钥并不会被覆盖(不做任何操作)
ssh_key_file 当generate_ssh_key参数的值为yes时,使用此参数自定义生成ssh私钥的路径和名称,对应公钥会在同路径下生成,公钥名以私钥名开头,以".pub"结尾。
ssh_key_comment 当generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置公钥中的注释信息,但是如果同名的密钥对已经存在,则并不会修改原来的注释信息,即不做任何操作,当不指定此参数时,默认的注释信息为"ansible-generated on 远程主机的主机名"
ssh_key_passphrase 当generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置私钥的密码,但是如果同名的密钥对已经存在,则并不会修改原来的密码,即不做任何操作
ssh_key_type 当generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置密钥对的类型,默认密钥类型为rsa,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作
[root@localhost soft]# date -d 2019-12-31 +%s
1577721600
[root@localhost soft]# python;
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt;crypt.crypt('51cto')
'$6$PIOLAFycrigJwqXu$guRC.awwzv8OwDL1awiPyTyjaQgQMzTN2wfJJpR/edwvrwHij4nmnzR23urxoOLLD6cTt8RvE7mnZtNDeojNv.'
>>> quit()
[root@localhost soft]#
[root@Super ~]# ansible 10.15.43.15 -S -R root -m user -a 'name=justin groups=ywbz append=yes shell=/bin/csh uid=509 password="$6$PIOLAFycrigJwqXu$guRC.awwzv8OwDL1awiPyTyjaQgQMzTN2wfJJpR/edwvrwHij4nmnzR23urxoOLLD6cTt8RvE7mnZtNDeojNv." expires=1577721600 comment="ansible useradd test"'
10.15.43.15 | SUCCESS => {

使用"date -d 2018-12-31 +%s"命令可以获取到对应日期的unix时间戳,如果用户已经存在,当前密码的加密字符串与命令中设置的加密字符串不一致,则不进行密码更新的操作。

  • group模块

    group模块可以管理远程主机上的组。

参数 说明
name 必须参数,用于指定要操作的组名称。
state 用于指定组的状态,两个值可选,present,absent,默认为present,设置为absent表示删除组。
gid 用于指定组的gid
[root@Super ~]# ansible 10.15.43.15 -S -R root -m group -a 'name=justin state=absent'
10.15.43.15 | FAILED! => {
    "changed": false, 
    "msg": "groupdel: cannot remove the primary group of user 'justin'\n", 
    "name": "justin"
}
[root@Super ~]#

删除主机中存在的组,删除成功的前提是不能有用户把被删除的组当成主组。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Graph Theory

Introduction to Graph Theory

Douglas B. West / Prentice Hall / 2000-9-1 / USD 140.00

For undergraduate or graduate courses in Graph Theory in departments of mathematics or computer science. This text offers a comprehensive and coherent introduction to the fundamental topics of graph ......一起来看看 《Introduction to Graph Theory》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具