大話Ansible Ad-Hoc命令

^_^果凍^_^發表於2020-05-19

Ansible是一個系列文章,我會盡量以通俗易懂、詼諧幽默的總結方式給大家呈現這些枯燥的知識點,讓學習變的有趣一些。
Ansible系列博文直達連結:Ansible入門系列

前言

通過前面的文章,大家基本上也都知道了Ansible的基本使用了,但是閱讀的過程中,大家會發現我有使用以下兩種方式來玩這個Ansible。

  • 通過ansible server1 -m ping這樣的方式來使用;
  • 通過ansible-playbook shellDemo.yaml這樣的方式來使用。

這兩種方式有什麼區別的呢?第一種方式是直接在命令列輸入整個命令,簡單明瞭;而第二種方式則需要按照yaml語法來編寫playbook劇本,這樣的功能就更強大了;就好比我們可以在Linux系統中直接執行Shell命令,也可以編寫Shell指令碼一樣,Shell指令碼的功能則更強大。

對於第一種方式,我們也稱之為Ad-Hoc命令,這篇文章我就重點講講如何使用Ad-Hoc命令;而第二種方式則稱為劇本模式,將在下一篇文章中重點總結!

執行命令

雖然Ad-Hoc命令的功能沒有playbook劇本那樣強大,但是也足以滿足我們工作中的很多場景。在Ansible中命令都是併發執行的,我們可以針對目標主機執行任何命令。預設的併發數目由ansible.cfg中的forks值來控制。當然了,我們也可以在執行Ansible命令的時候通過-f指定併發數。通過ansible -h命令就可以列出所有的命令引數,下面列舉了常用的一些引數。

  • -v--verbose:輸出詳細執行資訊,-vvv可以得到執行過程中的所有資訊;
  • -i INVENTORY--inventory=INVENTORY--inventory-file=INVENTORY:指定inventory檔案,預設使用/etc/ansible/hosts
  • -f FORKS--forks=FORKS:執行時併發的執行緒個數,預設為5;
  • -m MODULE_NAME:指定module,預設為command模組;
  • -a MODULE_ARGS:指定module的引數;
  • -o:精簡輸出內容;
  • --list-hosts:列出主機列表,並不會執行其他操作。

知道了這些選項,接下來我們就通過一些實際的命令操作來熟悉和理解Ansible Ad-Hoc。

ping模組

ping模組是我們經常使用的一個模組,我們經常會這樣使用:

ansible server1 -m ping -o

輸出內容如下:

192.168.1.3 | SUCCESS => {"changed": false,"ping": "pong"}

copy模組

上一篇文章中是通過playbook的方式來學習copy模組的,這裡通過Ansible Ad-Hoc再來熟悉一下。

ansible server1 -m copy -a 'src=/home/jelly/nameList.txt dest=/home/test1/nameList.txt backup=yes' -o

輸出如下:

192.168.1.3 | CHANGED => {"changed": true,"checksum": "2cb17bce3b65b4168ec1472690e6c49028b5b73b","dest": "/home/test1/nameList.txt","gid": 1001,"group": "test1","md5sum": "39e0c6634669ec88003d6d92f50e879e","mode": "0664","owner": "test1","size": 7,"src": "/home/test1/.ansible/tmp/ansible-tmp-1569858467.3466117-143590544702277/source","state": "file","uid": 1001}

shell模組

shell模組是我們使用的最多的模組了。如果學會了Ansible,我想這個命令可能是你今後運維中會經常使用的命令了。為什麼這麼說呢?就是因為好用!!!

比如:

ansible server1 -m shell -a 'uname -ra' -o

輸出如下:

192.168.1.3 | CHANGED | rc=0 | (stdout) Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

總而言之,言而總之,當你想在多臺機器上執行某個命令時,不妨試一試這裡說的這個方法哦!

總結

好用的工具,就需要和大家分享。Ansible Ad-Hoc就是這麼樣的一個工具,當然了,Ansible整個都是一個好用的工具,用心學一下,你會發現收益很多。學會了Ansible以後,我看到那些運維人員,還在一臺一臺主機的登陸,執行同樣的命令的時候,我總是會心一笑。Too young, Too simple!哦,那些年,我也是這麼走過來的。

果凍想,認真玩技術的地方。

2019年9月30日 於內蒙古呼和浩特。