Hello World 系列 - Ansible (上)

Ansible 初次見面

什麼是Ansible, 如何入門, 厲害在哪 ?

相信各位運維兄弟對下面這句一定很熟了
for i in $(cat serverlist); do ssh [email protected]$i xxx; done

如果你曾經使用上面指令幫你解決一些問題, Ansible就是專門用來處理這樣指令;
把批次處理發揮的淋漓盡致的工具


前置作業:

用 fqdn/hostname 和 ssh-key來登入設備
這部份不是必須, 但是之後都會以這個套路來做演示, 所以...
不照做就是無法進行下一步 (╯-╰)/

  • 使用 fqdn/hostname 登入設備
    請編輯 ~/.ssh/config 把你要登入的設備像這樣填入
Host LAB_WEB1
    hostname 192.168.40.43
    user root
    port 22

  • 使用 ssh-key 登入設備
    首先要產生公鑰 ssh-keygen -P "" -C yunwei
    -P: 口令, 強制要的. 給個空白
    -C: 公鑰註解, 這個到時候會放到對面機器的. 不取的話就會用你的hostname, 還是取一下吧
    輸入後會看到一張滿漂亮的RSA 2048 ASCII圖就完成了

接下來就是把公鑰丟過去

ssh-copy-id LAB_WEB1

之後就可以使用 ssh LAB_WEB1 來登入設備了

這邊之所以可以下LAB_WEB1是因為我有做第一步哦(fqdn/hostname), 同學請依序執行.



Hello World

首先依照官方安裝指示 挑一個喜歡的裝上; 安裝好後, 你只要先關心兩個檔案
安裝版本選擇2.5以上, 示範中有些模塊比較新.

/etc/ansible/ansible.cfg => 這是他的全局配置文件, 在你有單獨配置文件之前, 用這個就好了
/etc/ansible/hosts => 默認的Inventory檔案


現在編輯上面提到的hosts, 加入你們前面增加的設備, 以我的來看就是這樣

screenshot-2018-05-16-00-46-27

清單裡面有設備, 就可以開始我們第一個指令了.
ansible LAB_WEB1 -m ping


現在應該可以看到成功響應了

screenshot-2018-05-16-00-50-33



批次進行

要增加更多的hosts, 請一樣先進行前置作業; 因為公鑰已經有了, 所以只要copy過去遠端就可以了.

ssh-copy-id LAB_WEB2
ssh-copy-id LAB_MASTER

現在, 在你的Inventory(/etc/ansible/hosts)裡面填上新加的設備

screenshot-2018-05-16-01-04-49

就可以用上述的方式來呼叫這些設備了
screenshot-2018-05-16-01-06-13



分組進行

當然也可以分組來管理任務, 一樣修改你的Inventory
screenshot-2018-05-16-01-09-20-1

這時候就可以用組別來呼叫了
screenshot-2018-05-16-01-10-04



換個動作執行

ansible 的指令分解釋這樣: ansible <host> -m <module>
所以上面的ping就是其中一個模塊; ansible中可用的模塊可多了
這邊示範 shell模塊

每個模塊的有個別的解釋文檔哦, 比如這個 shell - Execute commands in nodes

screenshot-2018-05-16-01-31-01



帶變量執行

強大的武器之一, 請在Inventory裡面這樣編輯
screenshot-2018-05-16-01-39-30

然後就可以執行
screenshot-2018-05-16-01-40-05

ansible還提供一個厲害的功能facts
可以自行蒐集主機資訊, 當成變數使用



Hello world 尾聲

到了尾聲, 加映如果有同學就是覺得阿我就是不想用ssh-key阿, 麻煩死了
也可以啦其實.. 首先編輯Inventory
screenshot-2018-05-16-01-56-26


然後下面兩個步驟要做

  • ansible要用密碼來登入的話, 請先安裝sshpass
  • 去設定檔把ssh key檢查改成False; 它原本是註解的, 把它拿掉
    screenshot-2018-05-16-01-55-11

這樣就可以啦~
screenshot-2018-05-16-01-58-17

好孩子還是不要用這種阿~


下一個章節會帶大家使用劇本(playbook)哦~ 再見!