選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
4 分鐘閱讀時間 (797 個字)

Ansible #7 - 第一次與 playbook 的邂逅

shutterstock_198004562
  • 不知道各位是否還記得上一篇跟 Ansible provision Vagrant 時,有用到一個 YAML,當時稱作 playbook
    • 如果忘了的人,就再來回憶一一次囉
        ---
        - hosts: all
          become: yes
          tasks:
            - name: Ensure NTP (for time synchronization) is installed.
              yum: name=ntp state=present
            - name: Ensure NTP is running.
              service: name=ntpd state=started enabled=yes
      • 首先,第1列的三條橫槓,是在說明從這邊開始,這個 YAML 檔案檔要開始寫真正的內容了
      • 緊跟在後的 hosts,是要被操控的 group 名稱
        • 還記得我們在安裝 ansible 的時候有設定過 /etc/ansible/hosts 嗎?
        • 在這邊用 all 代表所有在 inventory 內的機器,但這裡不需要 inventory 的原因是因為現在 Ansible 是作為 Vagrant 的 provision
        • 白話文就是 Vagrant 產了什麼 VM,Ansible 全都控
      • 接著在第三列的 become,其實它的作用跟 sudo 是一樣的
        • yes 代表 ansible 要代表 sudoer 執行以下的腳本
        • 其他的像是 become_user, become_flags ..等可以先參考官方文件
      • 重頭戲來了,也就是 tasks,這也是 playbook 裡面最重要的元素,否則…你到底想做什麼呢 ._.?
        • 每一個 Task 都至少會有 module name
        • 以第一個 yum 來說,它就是用 yum 的 module,第二個就是 service module(不熟的翻一下鳥哥的 blog 啊)
        • name 本身是可以不用填的,它主要是作為文件記錄用,同時它也會在執行腳本時顯示出來
  • 看到這各位可能會說,之前只看過針對 Vagrant Provision,是不是對其他已經建立好的 VM 也能如此呢?
    • 這當然是無庸置疑的
      • 首先我們先建一個目錄,比方說叫 ... remoteLinux 好了,這次沒有要搭配 Vagrant了,所以就直接建立 playbook.yml
      • 接著我們再定義一個 hosts 檔,內容如下:
          [isvd]
          172.16.7.111
          172.16.7.141
          172.16.7.142
        • 其實這是筆者所在公司的內部 IP,大家可以自己找幾台可以連的 Linux試試看
        • 別忘了前幾篇說的,要先建立 ssh key 的登入機制
        • 目前的目錄結構應該是會如下圖的:
      • 再來就要對這 3 台機器作校時囉,指令如下:
          ansible-playbook playbook.yml -i hosts 
        • 欸?!發生什麼事,怎麼都連不上?
        • 別緊張,這是因為我在我的 mac 上,我登入的 user 是 gc,在要連的機器上沒有這個 user,sudo 也沒用啊,所以…!
        • 這時候只要補上一個 -u root 就會通了
      • 之前不是說 Ansible 的指令絕大多數都是等冪(Idempotent)的嗎?那再執行一次看看?
        • 指令一樣,就不重打了
      • 有發現了嗎? changed 原本都是有值的,現在都變成 0
        • 因為 Ansible 發現不久前才校時過現在的狀態不需要再作任何更動
        • 所以 playbook 的確還是正確執行,但沒有任何異動發生,也就是 Idempotent
  • 有沒有覺得,其實不會太困難?
    • 雖然這麼說,我第一次也是卡了許久
      • 如果有興趣的人,趕快去安裝 Ansible 來玩玩
      • 什麼?你說校時已經被我玩過了,那你可以自己 Vagrant 開一組來玩 R
      • 這次只是大概說明 playbook 的用法,以及它 idempotent 特性,之後會再更詳細說明,畢竟,這可是一套非常強大的工具,不會就這樣結束的
  • 下一篇我們會稍微往回走一下,開始介紹所謂的 Ad-Hoc Command,敬請期待
Ansible #8 - Ad-Hoc 指令[1]
Ansible #6 - 工具篇

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2025/05/01, 週四

Captcha 圖像