ansible 命令列模

2023-10-29 15:00:22

ansible 命令列模

ansible命令格式

命令格式:ansible <組名> -m <模組> -a <參數列>

 

檢視已安裝的模組

ansible-doc -l              #列出所有已安裝的模組,按q退出

image-20231026185308141

1.command 模組

//在遠端主機執行命令,不支援管道,重定向等shell的特性。 ansible-doc -s command #-s 列出指定模組的描述資訊和操作動作

image-20231026185638414

ansible 192.168.1.101 -m command -a 'date'      #指定 ip 執行 date
ansible webservers -m command -a 'date'         #指定組執行 date
ansible dbservers -m command -a 'date'       
​

image-20231026190313870

ansible all -m command -a 'date'                #all 代表所有 hosts 主機
ansible all -a 'ls /'                           #如省略 -m 模組,則預設執行 command 模組

image-20231026190459139

//常用的引數:

chdir:在遠端主機上執行命令前提前進入目錄 creates:判斷指定檔案是否存在,如果存在,不執行後面的操作 removes:判斷指定檔案是否存在,如果存在,執行後面的操作

ansible all -m command -a "chdir=/home  ls ./"

image-20231026191131916

ansible all -m command -a 'creates=/opt ls ./'  //有不執行
ansible all -m command -a 'creates=/opt/password ls ./'

image-20231026191456454

ansible all -m command -a 'removes=/opt/password ls ./'  //有執行
ansible all -m command -a 'removes=/opt ls ./'

image-20231026191758165

2.shell 模組

//在遠端主機執行命令,相當於呼叫遠端主機的shell程序,然後在該shell下開啟一個子shell執行命令(支援管道符號等功能)

ansible-doc -s shell //-s 列出指定模組的描述資訊和操作動作
​
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin "test"'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")'

image-20231026193242998

image-20231026193422033

3.cron 模組

//在遠端主機定義任務計劃。其中有兩種狀態(state):present表示新增(可以省略),absent表示移除。

ansible-doc -s cron             #按 q 退出

image-20231027083606685

常用的引數:

minute/hour/day/month/weekday:分/時/日/月/周 job:任務計劃要執行的命令 name:任務計劃的名稱 user:指定計劃任務屬於哪個使用者,預設是root使用者

ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -a 'crontab -l'
ansible webservers -m cron -a 'name="test crontab" state=absent'

image-20231027084305440

4.user 模組

//使用者管理的模組 ansible-doc -s user

常用的引數:

name:使用者名稱,必選引數 state=present|absent:建立賬號或者刪除賬號,present表示建立,absent表示刪除 system=yes|no:是否為系統賬號 uid:使用者uid group:使用者基本組 groups: 使用者所屬附加組 shell:預設使用的shell create_home=yse|no: 是否建立家目錄 password:使用者的密碼,建議使用加密後的字串 remove=yes|no:當state=absent時,是否刪除使用者的家目錄

ansible dbservers -m user -a 'name="test01"'                #建立使用者test01
ansible dbservers -m command -a 'tail /etc/passwd'      
ansible dbservers -m user -a 'name="test01" state=absent'   #刪除使用者test01

image-20231027091145898

image-20231027091242194

image-20231027091422679

5.group 模組

//使用者組管理的模組

ansible-doc -s group
​
ansible dbservers -m group -a 'name=mysql gid=306 system=yes'   #建立mysql組
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql'   #將test01使用者新增到mysql組中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id test01'    

image-20231027173813179

image-20231027174058153

image-20231027174126723

6.copy 模組

//用於複製指定主機檔案到遠端主機的 ansible-doc -s copy

常用的引數:

dest:指出複製檔案的目標及位置,使用絕對路徑,如果源是目錄,指目標也要是目錄,如果目標檔案已經存在會覆蓋原有的內容 src:指出原始檔的路徑,可以使用相對路徑或絕對路徑,支援直接指定目錄,如果源是目錄則目標也要是目錄 mode:指出複製時,目標檔案的許可權 owner:指出複製時,目標檔案的屬主 group:指出複製時,目標檔案的屬組 content:指出複製到目標主機上的內容,不能與src一起使用

ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'

image-20231028180751857

image-20231028181102106

ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt'  #將helloworld寫入/opt/hello.txt檔案中
ansible dbservers -a 'cat /opt/hello.txt' 

image-20231028181647935

7.file 模組

設定檔案屬性

ansible-doc -s file

ansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'    #修改檔案的屬主屬組許可權等
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'    #設定/opt/fstab.link為/opt/fstab.bak的連結檔案
ansible dbservers -m file -a "path=/opt/abc.txt state=touch"            #建立一個檔案
ansible dbservers -m file -a "path=/opt/abc.txt state=absent"           #刪除一個檔案

image-20231028182935997

image-20231028183218126

image-20231028183328707

image-20231028183637290

image-20231028183702267

image-20231028183730587

8.hostname 模組

//用於管理遠端主機上的主機名

ansible dbservers -m hostname -a "name=mysql01"

image-20231028183952040

9.ping 模組

//檢測遠端主機的連通性

ansible all -m ping

image-20231028190012146

10.yum 模組

//在遠端主機上安裝與解除安裝軟體包 ansible-doc -s yum

ansible webservers -m yum -a 'name=httpd'                   #安裝服務
ansible webservers -m yum -a 'name=httpd state=absent'      #解除安裝服務

image-20231028190209327

image-20231028190317917

11.service/systemd 模組

//用於管理遠端主機上的管理服務的執行狀態 ansible-doc -s service

//常用的引數: name:被管理的服務名稱 state=started|stopped|restarted:動作包含啟動關閉或者重啟 enabled=yes|no:表示是否設定該服務開機自啟 runlevel:如果設定了enabled開機自啟,則要定義在哪些執行目標下自啟動

ansible webservers -a 'systemctl status httpd'          #檢視web伺服器httpd執行狀態
ansible webservers -m service -a 'enabled=true name=httpd state=started'            #啟動httpd服務

image-20231028191046065

12.script 模組

//實現遠端批次執行原生的 shell 指令碼 ansible-doc -s script

//編寫一個簡單指令碼
vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt

image-20231028191512327

//可以不用給執行許可權
chmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'

image-20231028191711588

vim test.sh
#!/bin/bash
echo $1 > /opt/test.txt
echo s2 >> /opt/test .txt
​
ansible dbservers -m script -a 'test.sh abc 123!'

image-20231028192713687

13.mount 模組

//掛載檔案系統 ansible-doc -s mount

常用的引數:

src:定義掛載裝置的路徑 path:定義掛載到哪個目錄,必須指定 fstype:指定掛載檔案的系統型別,必須指定,xfs、iso9660、nfs... opts:定義掛載的引數,defaults、rw、ro...,defaults_netdev state:定義掛載的狀態,mounted(進行掛載,修改/etc/fstab資訊)、absent(永久性解除安裝,並修改 /etc/fstab資訊)、unmounted(臨時解除安裝,不修改/etc/fstab資訊)

ansible dbservers -m mount -a 'src=/dev/sr0 path=/mnt state=mounted fstype=iso9660'

image-20231029124449602

14.archive 模組

//打包壓縮 ansible-doc -s archive

常用的引數:

path: 必須引數,遠端主機上需要被打包壓縮的原始檔/目錄 dest: 打包壓縮後的包檔案路徑(包檔案的父目錄必須存在);如果包檔案已存在,則會被覆蓋 format: 指定壓縮型別,包括: bz2、gz(預設)、tar、xz、zip remove=yes|no: 是否刪除原始檔

ansible dbservers -m archive -a "path=/etc/yum.repos.d/ dest=/opt/repo.zip format=zip"
ansible dbservers -m archive -a "path=/opt/abc.txt,/opt/123.txt dest=/opt/abc123.tar.gz format=gz remove=yes"

image-20231029125449545

image-20231029125751563

15.unarchive 模組

//解包解壓縮 ansible-doc -s unarchive

常用的引數:

copy:預設為 copy=yes ,拷貝的檔案從 ansible 主機複製到遠端主機,copy=no 表示在遠端主機上尋找原始檔解壓 src:tar包源路徑,可以是 ansible 主機上的路徑,也可以是遠端主機上的路徑,如果是遠端主機上的路徑,則需設定 copy=no dest:解壓後檔案的目標絕對路徑 remote_src: 和 copy 功能一樣且互斥,設定 remote_src=yes 表示檔案在遠端主機上,設定為 remote_src=no 表示檔案在 ansible 主機上

#將 ansible 主機的壓縮檔案拷貝到到遠端主機並解壓,修改檔案所屬組和使用者

ansible dbservers -m unarchive -a "src=/opt/abc.tar.gz dest=/root copy=yes"
或者
ansible dbservers -m unarchive -a "src=/opt/abc.tar.gz dest=/root remote_src=no"

image-20231029134633447

image-20231029134913767

#在遠端主機解包

ansible dbservers -m unarchive -a "src=/opt/123.tar.gz dest=/root copy=no"
或者
ansible dbservers -m unarchive -a "src=/opt/123.tar.gz dest=/root remote_src=yes"

image-20231029140308383

16.replace 模組

//類似於sed命令,主要也是基於正則進行匹配和替換 ansible-doc -s replace

常用的引數:

path:必須引數,指定要修改的檔案 regexp:必須引數,指定一個正規表示式 replace:替換regexp引數匹配到的字串 backup=yes|no: 修改原始檔前建立一個包含時間戳資訊的備份檔案 before:如果指定,則僅替換/刪除此匹配之前的內容,可以和after引數結合使用 after:如果指定,則僅替換/刪除此匹配之後的內容,可以和before引數結合使用 owner:修改檔案使用者名稱 group:修改檔案組名 mode:修改檔案許可權

vim /opt/test.txt
11 22 33 44 55 66
aa bb cc dd ee ff
1a 2b 3c 4d 5e 6f

image-20231029140612801

#匹配 33 並修改為 cc

ansible dbservers -m replace -a "path=/opt/test.txt regexp='33' replace='cc'"

image-20231029141035411

#匹配到任意一個或多個開頭的行增加註釋

ansible dbservers -m replace -a "path=/opt/test.txt regexp='^(.*)' replace='#\1'"

image-20231029141351283

#取消註釋

ansible dbservers -m replace -a "path=/opt/test.txt regexp='^#(.*)' replace='\1'"

image-20231029141528068

#匹配以 a 開頭的後面有一個或者多個字元的行,並在前面新增 # 註釋

ansible dbservers -m replace -a "path=/opt/test.txt regexp='^(a.*)' replace='#\1'"
​
ansible dbservers -m replace -a "path=/opt/test.txt regexp='3' replace='three' before=cc"

image-20231029142037271

17.setup 模組

//facts 元件是用來收集被管理節點資訊的,使用 setup 模組可以獲取這些資訊 ansible-doc -s setup

ansible webservers -m setup             #獲取192.168.1.101組主機的facts資訊
ansible dbservers -m setup -a 'filter=*ipv4'    #使用filter可以篩選指定的facts資訊

image-20231029143856349

image-20231029144011634