ansible使用,常用模塊


使用ansible管理其他主機有兩種方式:

1.命令行執行ansible ad-hoc命令

2.把要做的動作行為寫入一個文件【playbook腳本】,ansible讀取腳本自動完成相應的任務。

 

Ansible ad-hoc是一種通過命令行批量管理的方式

格式:ansible 主機集合,組名 -m 模塊名 -a "參數" -k

其他參數: -k使用密碼遠程、-i指定主機列表文件

注意事項:

執行ansible命令一定要先cd到ansible目錄

1.查看主機列表

#cd ~/ansible

#ansible all --list-hosts       #查看所有主機  all是ansible自帶的已經定義好的特殊組

2.測試遠程主機是否能ping通。當需要遠程多個主機或者多個組時,中間使用逗號分隔

#ansible node1 -m ping

#ansible node1,webserver -m ping

3.模塊就是腳本(多數為Python腳本),多數腳本都支持參數,默認模塊為command

#ansible node1 -m command -a "uptime"          #查看CPU負載

#ansible node1 -m command -a "uname -r"      #查看內核版本

#ansible node1 -a "ip a s"                                 #查看網卡信息
#ansible all -a "date"                                         #查看時間

#####################################################

失敗檢查:

檢查/etc/hosts

檢查~/ansible/ansible.cfg

檢查~/ansible/hosts

####################################################

command和shell模塊的區別,command模塊的命令不啟動shell,直接通過ssh執行命令,command不支持bash特性,如管道和重定向等功能,所有需要調用shell的功能都無法使用。

不可以使用shell模塊執行交互命令,如vim、top等

4.Shell模塊

# ansible test -m shell -a "ps aux | wc -l"                   #進程數量

# ansible test -m shell -a "who"                                 #登陸信息

#ansible test -m shell -a "touch /tmp/a.txt"   #使用shell模塊創建文件會有Warning警告提示,正常

#####################################################################

注意:ansible使用ssh遠程連接被管理主機,退出ssh后所有狀態失效。

#ansible test -m shell -a "cd /tmp"                   #切換目錄

#ansible test -m shell -a "touch b.txt"              #創建文件(沒有指定路徑,在家目錄創建的文件)

#ansible test -m shell -a "ls /tmp/b.txt"            #查看,沒有文件和目錄

#ansible test -m shell -a “chdir=/tmp touch b.txt”   #使用chdir參數切換共作目錄

#####################################################################

shell模塊支持判斷(creates、removes)

creates文件名:文件存在,不執行shell命令。

removes文件名:文件不存在,不執行shell命令。

#ansible test -m shell -a "touch /tmp/b.txt creates=/tmp/b.txt"     

# ansible會遠程test目標主機,判斷目標主機有沒有/tmp/b.txt文件,如果有該文件則ansible對應的shell命令不執行,沒有則執行shell命令。

假設我有一個xxx.zip壓縮包

#ansible test -m shell -a “unzip /root/xxx.zip” 

遠程test主機,執行unzip命令解壓一個壓縮包文件

#ansible test -m shell -a “unzip /root/xxx.zip  removes=/bin/unzip”

ansible會遠程test主機,判斷目標主機有沒有/bin/unzip程序,如果沒有不執行shell命令,有則執行

############################################################################

5.script模塊。script模塊會把-a后面的腳本拷貝到被管理端主機,在目標主機執行這個腳本。

# vim ~/ansible/test.sh

#!/bin/bash

yum -y install httpd

systemctl start httpd

#ansible test -m script -a ‘./test.sh’       #test主機組  

在node1電腦檢測,是否安裝了httpd軟件

#rpm -q httpd

#systemctl status httpd

###############

6.file模塊

###############

file模塊可以創建文件、目錄、鏈接;修改權限與屬性等。

很多ansible模塊具有【冪等性】的特征。

冪等性:任意次執行所產生的影響均與一次執行的影響相同。

#state=touch是創建文件,state=directory是創建目錄,state=absent代表刪除,state=link是創建快捷方式

#ansible test  -m file -a “path=/tmp/file.txt state=touch”

# ansible test -m file -a "path=/tmp/mydir state=directory"

#遠程test組中所有主機,創建目錄,path后面指定要創建的文件或目錄的名稱

## 驗證:到node1主機,使用ls /tmp/看看tmp目錄下是否有mydir子目錄

# ansible test -m file -a "path=/tmp/file.txt owner=sshd group=adm mode=0777"

#修改文件或目錄權限,path后面指定要修改的文件名或目錄名稱,owner后面指定用戶,group后面指定組,mode后面指定要修改的權限(0777中第一個0代表的是無特殊權限,如SUID、SGID等)

## 驗證:到node1主機,使用ls -l /tmp/file.txt查看文件的詳細信息是否正確

# ansible test -m file -a "path=/tmp/mydir state=absent"

#state=absent代表刪除(刪除目錄)

# ansible test -m file -a "path=/tmp/file.txt state=absent"

# state=absent代表刪除(刪除文件)

# ansible test -m file -a "src=/etc/hosts path=/tmp/host.txt state=link"

#給/etc/hosts文件創建一個鏈接文件/tmp/host.txt(src指定源文件,path是軟鏈接文件名)

#相當於執行命令 ln -s /etc/hosts /tmp/host.txt

## 驗證:到node1主機使用ls -l /tmp/hosts查看文件是否為軟鏈接

#############

7.copy模塊,可以將文件拷貝到遠程主機,如果目標主機有同名文件時,通過定義backup=yes則先備份在拷貝。

#############

copy模塊可以將文件拷貝到遠程主機 (ansible-doc copy)。

# echo AAA > ~/a3.txt

 

#ansible test -m copy -a "src=~/a3.txt dest=/root/"

#把管理端本機的a3.txt文件,拷貝到test組中所有主機的/root/目錄

#src代表源文件,dest代表目標文件

## 驗證:到node1主機使用ls /root/a3.txt查看是否有該文件

#echo CCC > ~/a3.txt

#ansible test -m copy -a "src=~/a3.txt dest=/root/ backup=yes"

查看node1#ls 

a.txt

a.txt.3600.2020-09-06@17:50:08~

############################

8.fetch模塊,fetch模塊與copy類似,作用相反,可以將其他主機的文件拷貝到本地。flat=yes拷貝目錄

############################

# ansible all -m fetch -a "src=/etc/hostname dest=~/"

#將all所有主機的hostname文件下載到本地家目錄

#ls

########################

9.lineinfile|replace模塊,在修改單個文件的單行內容時可以使用lineinfile模塊,lineinfile會替換一整行,replace可以替換關鍵詞

########################

#ansible test -m lineinfile -a "path=/etc/issue line='hello world'"

#在/etc/issue文件中添加一行內容hello world,默認添加到最后,line后面跟的是需要添加的文件內容

# ansible test -m lineinfile -a "path=/etc/issue line='insert' insertafter='Kernel'"

#將line后面的內容插入到/etc/issue文件中Kernel行的后面

#######################################################

replace可以替換關鍵字

#######################################################

#ansible test -m replace -a “path=/etc/issue regexp=‘hello’ replace=ni hao”

將node1主機中/etc/issue文件全文所有的hello替換為ni hao

#regexp后面是需要替換的舊內容;replace后面是需要替換的新內容

########

10.user模塊,可以實現linux系統賬戶管理

########

#ansible test -m user -a "name=tuser1"

#ansible test -m user -a "name=tuser2 uid=1010 group=adm groups=daemon,root home=/home/tuser2"

#name是用戶名,uid指定用戶ID號,group指定用戶屬於哪個基本組

#groups指定用戶屬於哪些附加組,home指定用戶的家目錄

#ansible test -m user -a "name=tuser1 password={{'abc'| password_hash('sha512')}}"

#修改賬戶密碼,用戶名是tuser1,密碼是abc,密碼經過sha512加密

# ansible test -m user -a "name=tuser1 state=absent"

#刪除賬戶tuser1,state=absent代表刪除賬戶的意思,name指定要刪除的用戶名是什么

#賬戶的家目錄不會被刪除,相當於執行userdel tuser1

# ansible test -m user -a "name=tuser2 state=absent remove=true"

#刪除tuser2賬戶同時刪除家目錄、郵箱,相當於執行userdel -r tuser2

################################

11.yum_repository模塊,使用yum_repository可以創建或修改yum源配置文件(/etc/yum.repo.d/文件)

################################

#ansible test -m yum_repository -a "name=myyum description=hello baseurl=ftp://192.168.4.254/centos gpgcheck=no"

#新建一個yum源配置文件/etc/yum.repos.d/myyum.repo

yum源文件名為myyum,該文件的內容如下:

[myyum]

name= hello

baseurl= ftp://192.168.4.254/centos

gpgcheck= 0

#ansible test -m yum_repository -a "name=myyum description=test baseurl=ftp://192.168.4.254/centos gpgcheck=yes gpgkey=…"

#修改yum源文件內容

# ansible test -m yum_repository -a "name=myyum state=absent"

#刪除yum源文件myyum

################################

12.yum模塊,使用yum模塊可以安裝、卸載、升級軟件包,state: present(安裝)|absent(卸載)|latest(升級)。

################################

#ansible test -m yum -a "name=unzip state=present"

#安裝unzip軟件包,state默認為present,也可以不寫

# ansible test -m yum -a "name=unzip state=latest"

#升級unzip軟件包,軟件名稱可以是*,代表升級所有軟件包

# ansible test -m yum -a "name=unzip state=absent"

#調用yum模塊,卸載unzip軟件包,state=absent代表卸載軟件

############################

13.service模塊,(ansible-doc service)。service為服務管理模塊(啟動、關閉、重啟服務等)state:started|stopped|restarted,enabled:yes設置開機啟動。

############################

# ansible test -m yum -a "name=httpd"

#調用yum模塊,安裝httpd軟件包

# ansible test -m service -a "name=httpd state=started"

#調用service模塊,啟動httpd服務

# ansible test -m service -a "name=httpd state=stopped"

#調用service模塊,關閉httpd服務

# ansible test -m service -a "name=httpd state=restarted"

#調用service模塊,重啟httpd服務

# ansible test -m service -a "name=httpd enabled=yes"

#調用service模塊,設置httpd服務開機自啟

############################

14.邏輯卷相關模塊(ansible-doc lvg、ansible-doc lvol)

############################

做實驗之前需要給對應的虛擬機添加額外磁盤,並創建磁盤2個分區

可以使用parted或fdisk命令給磁盤創建分區

這里的磁盤名稱僅供參考,不要照抄!

lvg模塊:創建、刪除卷組(VG),修改卷組大小,state:present(創建)|absent(刪除)。

# ansible test -m yum -a "name=lvm2"

#安裝lvm2軟件包,安裝了lvm2軟件后,才有pvcreate、vgcreate、lvcreate等命令

# ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1"

#創建名稱為myvg的卷組,該卷組由/dev/sdb1組成

#注意:這里的磁盤名稱要根據實際情況填寫

# ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1,/dev/sdb2"

#修改卷組大小,往卷組中添加一個設備/dev/sdb2

lvol模塊:創建、刪除邏輯卷(LV),修改邏輯卷大小,state:present(創建)|absent(刪除)。

# ansible test -m lvol -a "lv=mylv vg=myvg size=2G"

#使用myvg這個卷組創建一個名稱為mylv的邏輯卷,大小為2G

# ansible test -m lvol -a "lv=mylv vg=myvg size=4G"

#修改LV邏輯卷大小

# ansible test -m lvol -a "lv=mylv vg=myvg state=absent force=yes"

#刪除邏輯卷,force=yes是強制刪除

# ansible test -m lvg -a "vg=myvg state=absent"

#刪除卷組myvg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM