Ansible入門筆記(2)之常用模塊


Ansible常用模塊

1.1、Ansible Ad-hoc

什么事ad-hoc???就是臨時的命令,不會保存,ansible的模式有兩種,分別是ad-hoc(命令行模式)和playbook模式。ad-hoc主要用於日常查詢和拷貝文件的常用操作。

ad-hoc命令行格式:

ansible  bgx      -m      command      -a      'df -h'
命令   主機名稱  指定模塊   模塊名稱   模塊動作   具體命令

ad-hoc執行的狀態返回信息:

  • 綠色:執行成功並且不需要做改變的動作
  • 黃色:執行成功並且對目標主機做變更
  • 紅色:執行失敗

ad-hoc的執行過程:

  1. 加載自己的配置文件,默認/etc/ansible/ansible.cfg
  2. 加載自己對應的模塊文件,如command ping
  3. 通過ansible將模塊或命令生成對應的臨時py文件,並將該文件傳輸至遠程服務器
  4. 給文件+x權限
  5. 執行並返回結果
  6. 刪除臨時py文件,sleep 10 退出

1.2、Ansible的基礎命令

ansible ansible-doc ansible-playbook ansible-vault ansible-console ansible-galaxy ansible-pull

Ansible-doc 顯示模塊幫助
ansible-doc [options] [module...]

-a 顯示所有模塊的文檔

-l --list 列出可用模塊

-s --snippet 顯示制定模塊的playbook片段

示例:

ansible-doc -l 列出所有模塊

ansible-doc ping 查看制定模塊幫助用法

ansible-doc -s ping 查看制定模塊幫助用法

Ansible命令用法
ansible <host-pattern> [-m module_name] [-a args]

--version 顯示版本

-m module 制定模塊默認為 command

-v 詳細過程 -vv -vvv更詳細

--list-hosts 顯示主機列表 可以簡寫為--list

-k --ask-pass 提示數據ssh連接密碼 默認key驗證

-K --ask-become-pass 提示輸入sodu的口令

-C check 檢查並不執行

-T --timeout=TIMEOUT 執行命令的超時時間 默認10s

-u --user=REMOTE_USER 執行遠程執行的用戶

-b --become 代替舊版的sudo切換

1.3、常用模塊

1.3.1、command模塊

# 默認模塊,執行命令
[root@ansible ~]# ansible web -m command -a "hostname"
192.168.0.135 | CHANGED | rc=0 >>
ansible

192.168.0.101 | CHANGED | rc=0 >>
localhost.localdomain

1.3.2、shell模塊

# 和command類似,但是在執行帶有管道命令執行時,則需要用shell模塊,如下
[root@ansible ~]# ansible web -m shell -a "ifconfig eth0 | awk 'NR==2 {print $2}'"
192.168.0.101 | CHANGED | rc=0 >>
        inet 192.168.0.101  netmask 255.255.255.0  broadcast 192.168.0.255

192.168.0.135 | CHANGED | rc=0 >>
        inet 192.168.0.135  netmask 255.255.255.0  broadcast 192.168.0.255

1.3.3、script模塊

[root@ansible ~]# mkdir ansible
[root@ansible ~]# cd ansible/
[root@ansible ansible]# ls
[root@ansible ansible]# vim 1.sh
#!/bin/bash
hostname
[root@ansible ansible]# chmod +x 1.sh

#在本地運行模塊,等同於在遠程執行,不需要將腳本文件進行推送目標主機執行
[root@ansible ansible]# ansible web -m script -a 1.sh 

1.3.4、copy模塊

#拷貝文件模塊
[root@ansible ~]# ansible web -m copy -a "src=/etc/hosts dest=/tmp/test.txt"
[root@ansible ~]# ansible web -a "ls /tmp/test.txt"
192.168.0.135 | CHANGED | rc=0 >>
/tmp/test.txt

192.168.0.116 | CHANGED | rc=0 >>
/tmp/test.txt

#除了基礎的拷貝,還可以在拷貝的時候對目標主機的文件進行備份,更改所屬和權限等等。
src             #推送數據的源文件信息
dest            #推送數據的目標路徑
backup          #對推送傳輸過去的文件,進行備份
content         #直接批量在被管理端文件中添加內容
group           #將本地文件推送到遠端,指定文件屬組信息
owner           #將本地文件推送到遠端,指定文件屬主信息
mode            #將本地文件推送到遠端,指定文件權限信息

[root@ansible ~]# ansible web -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes mode=755 owner=bin"
[root@ansible ~]# ansible web -a 'ls -l /tmp/test.txt'
192.168.0.135 | CHANGED | rc=0 >>
-rwxr-xr-x 1 bin root 158 Nov 15 13:56 /tmp/test.txt

192.168.0.116 | CHANGED | rc=0 >>
-rwxr-xr-x 1 bin root 158 Nov 15 13:56 /tmp/test.txt

1.3.5、fetch模塊

#從客戶端取文件到服務端,與copy相反
[root@ansible ~]# ansible web -m fetch -a 'src=/root/2.sh dest=/tmp/'
[root@ansible ~]# tree /tmp/192.168.0.1*
/tmp/192.168.0.116
└── root
    └── 2.sh
/tmp/192.168.0.135
└── root
    └── 2.sh
#默認只支持單個文件,不支持多個文件或目錄,做個文件建議放進目錄內tar打包后進行拉取

1.3.6、file模塊

# 更改文件屬性
[root@ansible ~]# ansible web -m file -a 'path=/root/2.sh mode=755'
# 創建文件
[root@ansible ~]# ansible web -m file -a "path=/tmp/22.txt state=touch"
# 創建目錄
[root@ansible ~]# ansible web -m file -a "path=/tmp/textdir state=directory"
# 創建軟鏈接
[root@ansible ~]# ansible web -m file -a "src=/tmp/textdir path=/tmp/textdir_link state=link"

#這里的path也可以使用dest或者是name關鍵字進行代替,都是一樣的效果,具體可以查看ansible-doc file的幫助文檔

path            #指定遠程主機目錄或文件信息
recurse         #遞歸授權
state 
    directory   #在遠端創建目錄
    touch       #在遠端創建文件
    link        #link或hard表示創建鏈接文件
    absent      #表示刪除文件或目錄
    mode        #設置文件或目錄權限
    owner       #設置文件或目錄屬主信息
    group       #設置文件或目錄屬組信息

1.3.7、hostname模塊

[root@ansible ~]# ansible 192.168.0.116 -m hostname -a "name=node01"
[root@ansible ~]# ansible 192.168.0.116 -a "hostname"
192.168.0.116 | CHANGED | rc=0 >>
node01

1.3.8、cron模塊

#  創建計划任務
[root@ansible ~]# ansible web -m cron -a 'minute=* weekday=1,3,5 job="ntpdate ntp1.aliyun.com" name=update_time'
[root@ansible ~]# ansible web -m shell -a "crontab -l"
192.168.0.135 | CHANGED | rc=0 >>
#Ansible: update_time
* * * * 1,3,5 ntpdate ntp1.aliyun.com

192.168.0.116 | CHANGED | rc=0 >>
#Ansible: update_time
* * * * 1,3,5 ntpdate ntp1.aliyun.com

# 取消計划任務,必須是在全部命令加上disabled,否則就是新建的另一個計划任務
[root@ansible ~]# ansible web -m cron -a 'disabled=true minute=* weekday=1,3,5 job="ntpdate ntp1.aliyun.com" name=update_time'

# 再次打開計划任務
[root@ansible ~]# ansible web -m cron -a 'disabled=false job="ntpdate ntp1.aliyun.com" name=update_time'

# 刪除計划任務
[root@ansible ~]# ansible web -m cron -a 'job="ntpdate ntp1.aliyun.com" name=update_time state=absent'

1.3.9、yum模塊

[root@ansible ~]# ansible web -m yum -a "name=vsftpd"
name        #指定要安裝的軟件包名稱
state       #指定使用yum的方法
    installed,present   #安裝軟件包
    removed,absent      #移除軟件包
    latest              #安裝最新軟件包 
[root@ansible ~]# ansible web -m shell -a "rpm -q vsftpd"

1.3.10、service模塊

# 設置服務的啟動、關閉、重啟以及開機自啟
[root@ansible ~]# ansible web -m service -a "name=vsftpd state=started enabled=yes"
[root@ansible ~]# ansible web -m shell -a "netstat -tulnp |grep 21"

name        # 定義要啟動服務的名稱
state       # 指定服務狀態
    started     #啟動服務
    stopped     #停止服務
    restarted   #重啟服務
    reloaded    #重載服務
enabled         #開機自啟

1.3.11、group模塊

[root@ansible ~]# ansible web -m group -a "name=testing gid=1010"
name            #指定創建的組名
gid             #指定組的gid
state
    absent      #移除遠端主機的組
    present     #創建遠端主機的組(默認)

1.3.12、user模塊

[root@ansible ~]# ansible web -m user -a "name=kobe uid=1012 group=1010 shell=/sbin/nologin create_home=no"

uid             #指定用戶的uid
group           #指定用戶組名稱
groups          #指定附加組名稱
password        #給用戶添加密碼
shell           #指定用戶登錄shell
create_home     #是否創建家目錄


免責聲明!

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



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