Ansible Module
Ansible Ad-hoc模式常用模塊
ansible-doc 常用命令
# 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
模塊
# 查看模塊參數 [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
等參數
# 查看模塊參數 [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
腳本的模塊,腳本無需在被管理機器上面存在
# 查看模塊參數 [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
用於對文件的處理,創建,刪除,權限控制等
# 查看模塊參數 [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
用於管理端復制文件到遠程主機,並可以設置權限,屬組,屬主等
# 查看模塊參數 [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
用於從被管理機器上面拉取文件,拉取下來的內容會保留目錄結構,一般情況用在收集被管理機器的日志文件等
# 查看模塊參數 [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
用於對系統用戶的管理,用戶的創建、刪除、家目錄、屬組等設置
# 查看模塊參數 [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
先創建組
# 查看模塊參數 [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
用於對軟件包的管理,下載、安裝、卸載、升級等操作
# 查看模塊參數 [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的個數