天天看點

大話Ansible Ad-Hoc指令

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日 于内蒙古呼和浩特。