1. 程式人生 > >Ansible指令和常用模塊使用

Ansible指令和常用模塊使用

記錄 打印 roo PE opp man usr 使用 描述

這裏文章記錄一下ansible的指令選項和常用的模塊使用

ansible指令選項

  • -m:要執行的模塊,默認為command
  • -a:模塊的參數
  • -u:ssh連接的用戶名,默認用root,ansible.cfg中可以配置
  • -k:提示輸入ssh登錄密碼,當使用密碼驗證的時候用
  • -s:sudo運行
  • -U:sudo到哪個用戶,默認為root
  • -K:提示輸入sudo密碼,當不是NOPASSWD模式時使用
  • -C:只是測試一下會改變什麽內容,不會真正去執行
  • -c:連接類型(default=smart)
  • -f:fork多少進程並發處理,默認為5個
  • -i:指定hosts文件路徑,默認default=/etc/ansible/hosts
  • -I:指定pattern,對已匹配的主機中再過濾一次
  • --list-host:只打印有哪些主機會執行這個命令,不會實際執行
  • -M:要執行的模塊路徑,默認為/usr/share/ansible
  • -o:壓縮輸出,摘要輸出
  • --private-key:私鑰路徑
  • -T:ssh連接超時時間,默認是10秒
  • -t:日誌輸出到該目錄,日誌文件名以主機命名
  • -v:顯示詳細日誌

ansible指令使用方法:

ansible可以直接在命令中指定主機組或者主機來著執行命令:例如

[root@Ansible ~]# ansible nginx -m ping
192.168.214.129 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
...省略...
[root@Ansible ~]# ansible 192.168.214.131 -m ping
192.168.214.131 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

同時更ansible更靈活的是可以使用通配符來匹配符合規則的主機或主機組來執行命令

通配符匹配

匹配所有主機:all 或者 *

[root@Ansible ~]# ansible all  -m ping
192.168.214.132 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
...省略...
或
[root@Ansible ~]# ansible 192.168.214.*  -m ping
192.168.214.131 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
...省略...

匹配主機組中部分主機: 用 :隔開主機名

[root@Ansible ~]# ansible 192.168.214.128:192.168.214.132  -m shell -a "hostname"
192.168.214.132 | SUCCESS | rc=0 >>
nginx-2

192.168.214.128 | SUCCESS | rc=0 >>
localhost.localdomain

選擇主機組中的部分主機執行:比如第1臺到第3臺 [0:2]按段執行

[root@Ansible ~]# ansible nginx[0:2] -m shell -a "hostname"
192.168.214.131 | SUCCESS | rc=0 >>
nginx-1

192.168.214.128 | SUCCESS | rc=0 >>
localhost.localdomain

192.168.214.129 | SUCCESS | rc=0 >>
file-server

執行多個主機組

[root@Ansible ~]# ansible nginx:centos7 -m shell -a "hostname"
192.168.214.132 | SUCCESS | rc=0 >>
nginx-2

192.168.214.129 | SUCCESS | rc=0 >>
file-server

192.168.214.128 | SUCCESS | rc=0 >>
localhost.localdomain

192.168.214.131 | SUCCESS | rc=0 >>
nginx-1

ansible常用模塊

ansible模塊分核心模塊和額外模塊,其中核心模塊按照模塊功能來劃分,分別為:雲模塊、命令模塊、數據庫模塊、文件模塊、資產模塊、消息模塊、監控模塊、網絡模塊、通知模塊、包管理模塊、源碼控制模塊、系統模塊、單元模塊、web設施模塊、windows模塊等。
下面記錄一些常用的模塊:
使用指令查看ansible支持哪些模塊:ansible-doc -l
查看某個模塊有哪些參數: ansible-doc [模塊名]

shell模塊

默認ansible使用的module 是 command,這個模塊並不支持 shell 變量和管道等,若想使用shell 來執行模塊,請使用-m 參數指定 shell 模塊
使用指令的模塊後面要加‘-a’參數指定模塊參數

[root@Ansible ~]# ansible centos7 -m shell -a "cat /etc/passwd | grep ^root.*"
192.168.214.128 | SUCCESS | rc=0 >>
root:x:0:0:root:/root:/bin/bash
file模塊

file模塊主要用於遠程主機上的文件操作
模塊參數

force        #需要在兩種情況下強制創建軟鏈接,一種是源文件不存在但之後會建立的情況下;另一種是目標軟鏈接已存在,需要先取消之前的軟鏈,然後創建新的軟鏈,有兩個選項:yes|no;
group        #定義文件/目錄的屬組;
mode         #定義文件/目錄的權限;
owner        #定義文件/目錄的屬主;
path         #必選項,定義文件/目錄的路徑, required;
recurse      #遞歸的設置文件的屬性,只對目錄有效;
src          #要被鏈接的源文件的路徑,只應用於state=link的情況;
dest         #被鏈接到的路徑,只應用於state=link的情況;
state:
directory  #如果目錄不存在,創建目錄;
file       #即使文件不存在,也不會被創建;
link       #創建軟鏈接;
hard       #創建硬鏈接;
touch      #如果文件不存在,則會創建一個新的文件,如果文件或目錄已存在,則更新其最後修改時間;
absent     #刪除目錄、文件或者取消鏈接文件;

用法示例
在遠程主機/tmp/下創建一個a.txt

[root@Ansible ~]# ansible centos7 -m file -a "dest=/tmp/a.txt state=touch"

將文件刪除

[root@Ansible ~]# ansible centos7 -m file -a "dest=/tmp/a.txt state=absent"

將/tmp/b.txt屬組屬主該成yufu

[root@Ansible ~]# ansible centos7 -m file -a ‘dest=/tmp/b.txt owner=yufu group=yufu‘
copy模塊

copy模塊是復制文件到遠程主機

模塊參數

src #原文件路徑
dest #目標路徑
force #是否強制覆蓋,yes或no

將本機的c.txt 復制到遠程主機

[root@Ansible ~]# ansible centos7 -m copy -a ‘src=/tmp/c.txt dest=/tmp/‘
192.168.214.128 | SUCCESS => {
service模塊

service模塊用來管理遠程主機的服務,這裏不分centos6和7的管理方式,都用參數指定

模塊參數

name     # 指定服務名稱
enabled     #是否要加入開機啟動
state      #運行狀態,狀態名稱要用英文過去式

用法示例
將遠程httpd服務啟動

[root@Ansible ~]# ansible centos7 -m service -a "name=httpd state=started"
192.168.214.128 | SUCCESS => {

關閉httpd

[root@Ansible ~]# ansible centos7 -m service -a "name=httpd state=stopped"
192.168.214.128 | SUCCESS => {
cron模塊

cron模塊用於管理任務計劃

模塊參數

name #對執行任務的描述
backup “Ture | Flase” #執行前備份
cron_file  #使用本地的cron文件覆蓋遠程主機的cron 文件
day  # 每天 (1-31, * ,*/2,)
hour  #小時 ( 0-23, * ,*/2,)
minute  #分鐘 (0-59, * , */2,)
month   #月  ( 0-12, * ,*/2,)
weekday   #周 (0-6, * ,)
user  #以哪個用戶執行
state=absent|present #確認任務計劃執行還是刪除
job  #要執行的任務

用法示例

[root@Ansible ~]# ansible centos7 -m cron -a "name=‘test‘ minute=‘*/1‘ user=‘root‘ job=‘date‘"
查看
[root@localhost ~]# crontab -l
#Ansible: test
*/1 * * * * date
yum模塊

yum模塊用來管理安裝軟件包

模塊部分參數

list  #列出軟件包
naem   #包名稱
state   #確定對包的操作:present or installed,or remove absent or removed

應用示例

[root@Ansible ~]# ansible centos7 -m yum -a "name=http state=removed"
192.168.214.128 | SUCCESS => {
user模塊

user模塊用來管理用戶和組

模塊參數

home        #指定用戶的家目錄,需要與createhome配合使用;
groups      #指定用戶的屬組;
uid         #指定用的uid;
password    #指定用戶的密碼;
name        #指定用戶名;
createhome  #是否創建家目錄yes|no;
system      #是否為系統用戶;
remove      #當state=absent時,remove=yes則表示連同家目錄一起刪除,等價於userdel -r;
state       #是創建還是刪除;
shell       #指定用戶的shell環境;

用法示例

不刪家目錄
[root@Ansible ~]# ansible centos7 -m user -a "name=yufu state=absent"
192.168.214.128 | SUCCESS => {

刪除家目錄

[root@Ansible ~]# ansible centos7 -m user -a "name=feng state=absent remove=yes" 
192.168.214.128 | SUCCESS => {
mount模塊

mount模塊用來掛載

模塊參數

fstype    #必選項,掛載文件的類型;
name      #必選項,掛載點;
opts      #傳遞給mount命令的參數;
src       #必選項,要掛載的文件;
state     #必選項;
present   #只處理fstab中的配置;
absent    #刪除掛載點;
mounted   #自動創建掛載點並掛載之;
umounted  #卸載;

應用示例

[root@Ansible ~]# ansible centos7 -m mount -a"src=/dev/sda4 name=/mnt fstype=ext4 opts=rw state=mounted"
192.168.214.128 | SUCCESS => {
    "changed": true, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "ext4", 
    "name": "/mnt", 
    "opts": "rw", 
    "passno": "0", 
    "src": "/dev/sda4"
}

有關模塊內容暫時就寫這麽多吧,如果以後有用其他模塊再來補充。

Ansible指令和常用模塊使用