Ansible--Module

Ansible Module

Ansible Ad-hoc模式經常使用模塊

ansible-doc 經常使用命令node

# ansible-doc -h
Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-j  以json格式顯示全部模塊信息
-l  列出全部的模塊
-s  查看模塊經常使用參數
# 直接跟模塊名,顯示模塊全部信息

[root@ansible ~]# ansible-doc -j
[root@ansible ~]# ansible-doc -l
[root@ansible ~]# ansible-doc -l |wc -l   #統計全部模塊個數,ansible2.8共計2834個模塊
2834

命令相關的模塊

command

ansible默認的模塊,執行命令,注意:shell中的"<"">", "|"";""&","$"等特殊字符不能在command模塊中使用,若是須要使用,則用shell模塊python

# 查看模塊參數
[root@ansible ~]# ansible-doc -s command

# 在192.168.1.31服務器上面執行ls命令,默認是在當前用戶的家目錄/root
[root@ansible ~]# ansible 192.168.1.31 -a 'ls'

# chdir  先切換工做目錄,再執行後面的命令,通常狀況下在編譯時候使用
[root@ansible ~]# ansible 192.168.1.31 -a 'chdir=/tmp pwd'
192.168.1.31 | CHANGED | rc=0 >>
/tmp

# creates  若是creates的文件存在,則執行後面的操做
[root@ansible ~]# ansible 192.168.1.31 -a 'creates=/tmp ls /etc/passwd'    #tmp目錄存在,則不執行後面的ls命令
192.168.1.31 | SUCCESS | rc=0 >>
skipped, since /tmp exists
[root@ansible ~]# ansible 192.168.1.31 -a 'creates=/tmp11 ls /etc/passwd'    # tmp11文件不存在,則執行後面的ls命令
192.168.1.31 | CHANGED | rc=0 >>
/etc/passwd

# removes  和creates相反,若是removes的文件存在,才執行後面的操做
[root@ansible ~]# ansible 192.168.1.31 -a 'removes=/tmp ls /etc/passwd'    #tmp文件存在,則執行了後面的ls命令
192.168.1.31 | CHANGED | rc=0 >>
/etc/passwd
[root@ansible ~]# ansible 192.168.1.31 -a 'removes=/tmp11 ls /etc/passwd'  #tmp11文件不存在,則沒有執行後面的ls命令
192.168.1.31 | SUCCESS | rc=0 >>
skipped, since /tmp11 does not exist

shell

專門用來執行shell命令的模塊,和command模塊同樣,參數基本同樣,都有chdir,creates,removes等參數mysql

# 查看模塊參數
[root@ansible ~]# ansible-doc -s shell

[root@ansible ~]# ansible 192.168.1.31 -m shell -a 'mkdir /tmp/test'
[root@ansible ~]# ansible 192.168.1.31 -m shell -a 'ls /tmp' 

#執行下面這條命令,每次執行都會更新文件的時間戳
[root@ansible ~]# ansible 192.168.1.31 -m shell -a 'cd /tmp/test && touch 1.txt && ls' 
192.168.1.31 | CHANGED | rc=0 >>
1.txt

# 因爲有時候不想更新文件的建立時間戳,則若是存在就不執行creates
[root@ansible ~]# ansible 192.168.1.31 -m shell -a 'creates=/tmp/test/1.txt cd /tmp/test && touch 1.txt && ls'
192.168.1.31 | SUCCESS | rc=0 >>
skipped, since /tmp/test/1.txt exists

script

用於在被管理機器上面執行shell腳本的模塊,腳本無需在被管理機器上面存在linux

# 查看模塊參數
[root@ansible ~]# ansible-doc -s script

# 編寫shell腳本
[root@ansible ~]# vim ansible_test.sh 
#!/bin/bash
echo `hostname`

# 在全部被管理機器上執行該腳本
[root@ansible ~]# ansible all -m script -a '/root/ansible_test.sh'
192.168.1.32 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.1.32 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.1.32 closed."
    ], 
    "stdout": "linux.node02.com\r\n", 
    "stdout_lines": [
        "linux.node02.com"
    ]
}
......

文件相關的模塊

file

用於對文件的處理,建立,刪除,權限控制等sql

# 查看模塊參數
[root@ansible ~]# ansible-doc -s file
path     #要管理的文件路徑
recurse  #遞歸
state:
     directory  #建立目錄,若是目標不存在則建立目錄及其子目錄
     touch      #建立文件,若是文件存在,則修改文件 屬性
     
     absent     #刪除文件或目錄
     mode       #設置文件或目錄權限
     owner      #設置文件或目錄屬主信息
     group      #設置文件或目錄屬組信息
     link       #建立軟鏈接,須要和src配合使用
     hard       #建立硬鏈接,須要和src配合使用

# 建立目錄
[root@ansible ~]# ansible 192.168.1.31 -m file -a 'path=/tmp/test1 state=directory'

# 建立文件
[root@ansible ~]# ansible 192.168.1.31 -m file -a 'path=/tmp/test2 state=touch'

# 創建軟連接(src表示源文件,path表示目標文件)
[root@ansible ~]# ansible 192.168.1.31 -m file -a 'src=/tmp/test1 path=/tmp/test3 state=link'

# 刪除文件
[root@ansible ~]# ansible 192.168.1.31 -m file -a 'path=/tmp/test2 state=absent'

# 建立文件時同時設置權限等信息
[root@ansible ~]# ansible 192.168.1.31 -m file -a 'path=/tmp/test4 state=directory mode=775 owner=root group=root'

copy

用於管理端複製文件到遠程主機,並能夠設置權限,屬組,屬主等shell

# 查看模塊參數
[root@ansible ~]# ansible-doc -s copy
src      #須要copy的文件的源路徑
dest     #須要copy的文件的目標路徑
backup   #對copy的文件進行備份
content  #直接在遠程主機被管理文件中添加內容,會覆蓋原文件內容
mode     #對copy到遠端的文件設置權限
owner    #對copy到遠端的文件設置屬主
group    #對copy到遠端文件設置屬組


# 複製文件到遠程主機並更名
[root@ansible ~]# ansible 192.168.1.31 -m copy -a 'dest=/tmp/a.sh src=/root/ansible_test.sh'

# 複製文件到遠程主機,並備份遠程文件,安裝時間信息備份文件(當更新文件內容後,從新copy時用到)
[root@ansible ~]# ansible 192.168.1.31 -m copy -a 'dest=/tmp/a.sh src=/root/ansible_test.sh backup=yes'

# 直接在遠程主機a.sh中添加內容
[root@ansible ~]# ansible 192.168.1.31 -m copy -a 'dest=/tmp/a.sh content="#!/bin/bash\n echo `uptime`"'

# 複製文件到遠程主機,並設置權限及屬主與屬組
[root@ansible ~]# ansible 192.168.1.31 -m copy -a 'dest=/tmp/passwd src=/etc/passwd mode=700 owner=root group=root'

fetch

用於從被管理機器上面拉取文件,拉取下來的內容會保留目錄結構,通常狀況用在收集被管理機器的日誌文件等apache

# 查看模塊參數
[root@ansible ~]# ansible-doc -s fetch
src      #指定須要從遠端機器拉取的文件路徑
dest     #指定從遠端機器拉取下來的文件存放路徑

# 從被管理機器上拉取cron日誌文件,默認會已管理節點地址建立一個目錄,並存放在內
[root@ansible ~]# ansible 192.168.1.31 -m fetch -a 'dest=/tmp src=/var/log/cron'

[root@ansible ~]# tree /tmp/192.168.1.31/
/tmp/192.168.1.31/
└── var
    └── log
        └── cron

2 directories, 1 file

用戶相關的模塊

user

用於對系統用戶的管理,用戶的建立、刪除、家目錄、屬組等設置json

# 查看模塊參數
[root@ansible ~]# ansible-doc -s user
name        #指定用戶的名字
home        #指定用戶的家目錄
uid         #指定用戶的uid
group       #指定用戶的用戶組
groups      #指定用戶的附加組
password    #指定用戶的密碼
shell       #指定用戶的登陸shell
create_home #是否建立用戶家目錄,默認是yes
remove      #刪除用戶時,指定是否刪除家目錄
state:
      absent    #刪除用戶
      

# 建立用戶名指定家目錄,指定uid及組
[root@ansible ~]# ansible 192.168.1.31 -m user -a 'name=mysql home=/opt/mysql uid=1002 group=root'
[root@ansible ~]# ansible 192.168.1.31 -m shell  -a 'id mysql && ls -l /opt'
192.168.1.31 | CHANGED | rc=0 >>
uid=1002(mysql) gid=0(root) 組=0(root)
總用量 0
drwx------  3 mysql root 78 5月  27 18:13 mysql

# 建立用戶,不建立家目錄,而且不能登陸
[root@ansible ~]# ansible 192.168.1.31 -m user -a 'name=apache shell=/bin/nologin uid=1003 create_home=no'
[root@ansible ~]# ansible 192.168.1.31 -m shell  -a 'id apache && tail -1 /etc/passwd'
192.168.1.31 | CHANGED | rc=0 >>
uid=1003(apache) gid=1003(apache) 組=1003(apache)
apache:x:1003:1003::/home/apache:/bin/nologin

# 刪除用戶
[root@ansible ~]# ansible 192.168.1.31 -m user -a 'name=apache state=absent'

# 刪除用戶並刪除家目錄
[root@ansible ~]# ansible 192.168.1.31 -m user -a 'name=mysql state=absent remove=yes'

group

用於建立組,當建立用戶時若是須要指定組,組不存在的話就能夠經過group先建立組flask

# 查看模塊參數
[root@ansible ~]# ansible-doc -s group
name     #指定組的名字
gid      #指定組的gid
state:
     absent   #刪除組
     present  #建立組(默認的狀態)

# 建立組
[root@ansible ~]# ansible 192.168.1.31 -m group -a 'name=www'

# 建立組並指定gid
[root@ansible ~]# ansible 192.168.1.31 -m group -a 'name=www1 gid=1005'

# 刪除組
[root@ansible ~]# ansible 192.168.1.31 -m group -a 'name=www1 state=absent'

軟件包相關的模塊

yum

用於對軟件包的管理,下載、安裝、卸載、升級等操做vim

# 查看模塊參數
[root@ansible ~]# ansible-doc -s yum
name            #指定要操做的軟件包名字
download_dir    #指定下載軟件包的存放路徑,須要配合download_only一塊兒使用
download_only   #只下載軟件包,而不進行安裝,和yum --downloadonly同樣
list:
    installed   #列出全部已安裝的軟件包
    updates     #列出全部能夠更新的軟件包
    repos       #列出全部的yum倉庫
state:   
    installed, present   #安裝軟件包(二者任選其一均可以)
    removed, absent      #卸載軟件包
    latest      #安裝最新軟件包
    
# 列出全部已安裝的軟件包
[root@ansible ~]# ansible 192.168.1.31 -m yum -a 'list=installed'

# 列出全部可更新的軟件包
[root@ansible ~]# ansible 192.168.1.31 -m yum -a 'list=updates'

#列出全部的yum倉庫
[root@ansible ~]# ansible 192.168.1.31 -m yum -a 'list=repos'

#只下載軟件包併到指定目錄下
[root@ansible ~]# ansible 192.168.1.31 -m yum -a 'name=httpd download_only=yes download_dir=/tmp'

#安裝軟件包
[root@ansible ~]# ansible 192.168.1.31 -m yum -a 'name=httpd state=installed'

#卸載軟件包
[root@ansible ~]# ansible 192.168.1.31 -m yum -a 'name=httpd state=removed'

#安裝包組,相似yum groupinstall 'Development Tools'
[root@ansible ~]# ansible 192.168.1.31 -m yum -a 'name="@Development Tools" state=installed'

pip

用於安裝python中的包

# 查看模塊參數
[root@ansible ~]# ansible-doc -s pip

# 使用pip時,須要保證被管理機器上有python-pip軟件包
[root@ansible ~]# ansible 192.168.1.31 -m yum -a 'name=python-pip'

# 安裝pip包
[root@ansible ~]# ansible 192.168.1.31 -m pip -a 'name=flask'

service

服務模塊,用於對服務進行管理,服務的啓動、關閉、開機自啓等

# 查看模塊參數
[root@ansible ~]# ansible-doc -s service
name       #指定須要管理的服務名
enabled    #指定是否開機自啓動
state:     #指定服務狀態
    started    #啓動服務
    stopped    #中止服務
    restarted  #重啓服務
    reloaded   #重載服務

# 啓動服務,並設置開機自啓動 
[root@ansible ~]# ansible 192.168.1.31 -m service -a 'name=crond state=started enabled=yes'

計劃任務相關的模塊

cron

用於指定計劃任務,和crontab -e同樣

# 查看模塊參數
[root@ansible ~]# ansible-doc -s cron
job     #指定須要執行的任務
minute   #分鐘
hour     #小時
day      #天
month    #月
weekday  #周
name     #對計劃任務進行描述
state:
    absetn   #刪除計劃任務


# 建立一個計劃任務,並描述是幹嗎用的
[root@ansible ~]# ansible 192.168.1.31 -m cron -a "name='這是一個測試的計劃任務' minute=* hour=* day=* month=* weekday=* job='/bin/bash /root/test.sh'"
[root@ansible ~]# ansible 192.168.1.31 -m shell -a 'crontab -l'
192.168.1.31 | CHANGED | rc=0 >>
#Ansible: 這是一個測試的計劃任務
* * * * * /bin/bash /root/test.sh

# 建立一個沒有帶描述的計劃任務
[root@ansible ~]# ansible 192.168.1.31 -m cron -a "job='/bin/sh /root/test.sh'"

# 刪除計劃任務
[root@ansible ~]# ansible 192.168.1.31 -m cron -a "name='None' job='/bin/sh /root/test.sh' state=absent"

系統信息相關的模塊

setup

用於獲取系統信息的一個模塊

# 查看模塊參數
[root@ansible ~]# ansible-doc -s setup

# 查看系統全部信息
[root@ansible ~]# ansible 192.168.1.31 -m setup

# filter 對系統信息進行過濾
[root@ansible ~]# ansible 192.168.1.31 -m setup -a 'filter=ansible_all_ipv4_addresses'

# 經常使用的過濾選項
ansible_all_ipv4_addresses         全部的ipv4地址
ansible_all_ipv6_addresses         全部的ipv6地址
ansible_architecture               系統的架構
ansible_date_time                  系統時間
ansible_default_ipv4               系統的默認ipv4地址
ansible_distribution               系統名稱
ansible_distribution_file_variety  系統的家族
ansible_distribution_major_version 系統的版本
ansible_domain                     系統所在的域
ansible_fqdn                       系統的主機名
ansible_hostname                   系統的主機名,簡寫
ansible_os_family                  系統的家族
ansible_processor_cores            cpu的核數
ansible_processor_count            cpu的顆數
ansible_processor_vcpus            cpu的個數
本站公眾號
   歡迎關注本站公眾號,獲取更多信息