天天看點

Ansible ad-hoc 臨時指令

ad-hoc是什麼

ad-hoc 簡而言之就是"臨時指令",執行完即結束,并不會儲存,也就是執行完一個子產品就結束了,如果想讓她反複運作,就不行了。不像将多個指令寫到檔案,可以反複運作。

  • 應用場景1∶檢視多台節點的程序是否存在
  • 應用場景2∶拷貝指定的檔案至本地
[root@master ~]# ansible webservers -m shell -a "ps -aux | grep nginx" -i /etc/ansible/hosts      
[root@master ~]# ansible webservers -m shell -a "touch /root/ansible.txt" -i /etc/ansible/hosts      

ad-hoc指令使用

指令示例∶ansible  'groups'  -m  command  -a  'df -h',含義如下圖所示;

Ansible ad-hoc 臨時指令

shell子產品其實可以解決很多問題,但是隻用這個子產品肯定是不行的,而且shell子產品無法保證幂等性,同時其他子產品還包含其他的功能。

ad-hoc執行過程

  1. 加載自己的配置檔案,預設 /etc/ans1b1e/ansible.cfg
  2. 查找對應的主機配置檔案,找到要執行的主機或者組
  3. 加載自己對應的子產品檔案,如 command
  4. 通過 ansible 将子產品或指令生成對應的臨時 py 檔案,并将該檔案傳輸至遠端伺服器對應執行使用者 $HOME/.ansible/tmp/ansible-tmp-nurber/XX.PY(這個檔案是看不到的,執行完了就删除了)(被控端是調用Python去解析這個臨時py檔案,然後調用shell去運作,運作完結束之後就删除了)
  5. 執行使用者家目錄的`檔案
  6. 給檔案+x執行
  7. 執行并傳回結果
  8. 删除臨時 py 檔案,sleep 0退出
[root@master ~]# ansible webservers -m shell -a "sleep 10" -i /etc/ansible/hosts 

[root@node1 tmp]# ls ansible-tmp-1656102874.99-71725-64844177037053/
AnsiballZ_command.py
[root@node1 tmp]# pwd
/root/.ansible/tmp      

ad-hoc執行狀态

使用 ad-hoc 執行一次遠端指令,注意觀察傳回結果的顔色;

  • 綠色∶代表被管理端主機沒有被修改
  • 黃色∶代表被管理端主機發現變更
  • 紅色:代表出現了故障,注意檢視提示

示範建立一個項目并且使用ad-hoc

[root@master ~]# mkdir -p project
[root@master ~]# cd project/
[root@master project]# cp /etc/ansible/ansible.cfg .
[root@master project]# cp /etc/ansible/hosts .
[root@master project]# ls
ansible.cfg  hosts      

 現在項目讀取的配置為 /root/project/ansible.cfg

[root@master project]# ansible --version
ansible 2.9.27
  config file = /root/project/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]      
[root@master project]# vim ansible.cfg 
inventory      = /root/project/hosts  #這裡可以寫絕對路徑,也可以寫相對路徑/hosts      

 這裡還可以調整forks,1代表一台一台的執行,5代表并發執行5台

forks          = 5   #調整并行主機的數量      
[root@master project]# ansible webservers -m shell -a "sleep 3" -f 1
192.168.111.6 | CHANGED | rc=0 >>

192.168.111.7 | CHANGED | rc=0 >>

192.168.111.8 | CHANGED | rc=0 >>


[root@master project]# ansible webservers -m shell -a "sleep 3" -f 5
192.168.111.8 | CHANGED | rc=0 >>

192.168.111.7 | CHANGED | rc=0 >>

192.168.111.6 | CHANGED | rc=0 >>      

Ansible常用子產品