1. 程式人生 > >【Absible學習】Ansible常用模塊---系統類模塊

【Absible學習】Ansible常用模塊---系統類模塊

提示符 由於 fail rsa 用戶創建 可選 inf 每天 5.4

  • 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 ~]#

    刪除主機中存在的組,刪除成功的前提是不能有用戶把被刪除的組當成主組。

    【Absible學習】Ansible常用模塊---系統類模塊