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

Ansible #9 - Ad-Hoc 指令[2]

shutterstock_198004562
  • 前一篇我們架起了本地的環境,而最重要的 3 個因素是:
    • Vagrant,負責設定所有 VM 相關的參數
    • VirtualBox,負責依 Vagrant 的設定建立 VM
    • Ansible,透過 ssh 連線並操作這些 VM
  • 事不宜遲,我們快點進入 Ad-hoc 指令的世界吧!
    • 首先,先輸入以下的指令,確認 VM 的 hostname 有如我們在 Vagrantfile 裡定義的:
        ansible multi -a "hostname" -i hosts -u vagrant
      • 為了說明某件事,我下了很多次
      • 有沒有發現,hostname 正確之外,Ansible 處理的順序每次都不太一樣,這代表著 Ansible 是平行處理所有的機器的
        • 再講深一點,其實是透過 Process Fork 的方式
        • 預設這種平行處理的方式是被啟用的
        • 如果真的要讓它依序,那就把 fork 的值設成 1 就好了
          ansible multi -a "hostname" -i hosts -f 1 -u vagrant     
        • 決定要多少 Fork 就要看你的機器的運算能力跟網路的速度了,不然就是依它預設的數值去處理
    • 在確認了 hostname 都正確之後,是不是該看一下每台機器目前空間的使用狀況呢?
      • 指令如下:
          ansible multi -a "df -h" -i hosts -u vagrant
    • 空間看似都足夠,來看一下記憶體的使用狀況吧!
      • 指令如下:
          ansible multi -a "free -m" -i hosts -u vagrant
        • 看起來記憶體挺吃緊的,不過因為我們是在本機開了 3 台 VM,所以目前就先這樣吧!
    • 再來可以看一下三台 VM 的時間
      • 指令如下:
          ansible multi -a "date" -i hosts -u vagrant
        • 目前看來時間是一制的
        • 如果往後時間不同時,可以透過 ntp 處理這件事
    • 這個階段差不多要告一個段落了,不過再讓大家看一下最後一個東西,在 Ansible 裡這叫 facts,是主機相關的一些資訊
      • 要如何看到這個資訊呢?一樣也是透過指令:
          ansible db -m setup -i hosts -u vagrant
        • 嗯是的,你會得到一個非常長的清單,這些清單的內容是有用的,日後再說明
        • 看到這不知道各位有沒有注意到,有的時候是 -m 有的時時候是 -a,這兩者到底是代表什麼意義?
      • 聰明的人應該已經看出來了
        • -m 代表的是 module
        • -a 代表的是 arguments
      • 所以只有 -a 的情到底是用了什麼 module 呢? 我猜是 command 或是 shell,raw 看起來結果不太相似
    • 呃,所以上面提到的 module 是什麼?
      • Module 其實就是可重覆使用的 scripts,透過 ansible 或是 ansible-playbook 這兩個關鍵字可以搭配執行
      • 換句話說,官方提供了不少 module 之外,你也可以撰寫自己的 module
    • 好,那 module 要怎麼用呢?
      • 如果單純執行 ansible 要進行校時的話,指令如下:
          ansible multi -b -m yum -a "name=ntp state=present" -i hosts -u vagrant
          ansible multi -b -m service -a "name=ntpd state=started" -i hosts -u vagrant
        • -b 代表的是 sudo 的意思,前面似乎提過,不過如果你的 user 是需要密碼才能 elevate 到 sudo 權限的話,記得加上 -K(--ask-sudo-pass)
        • -m 後面接的都是 module name,所以這邊我們用到的 yum 模組與 service 模組
      • 再來我們還要跟官方同步
          ansible multi -b -a "service ntpd stop" -i hosts -u vagrant
          ansible multi -b -a "ntpdate -q 0.rhel.pool.ntp.org" -i hosts -u vagrant
          ansible multi -b -a "service ntpd start" -i hosts -u vagrant
        • 大家可以看到會有訊息提示我們用 service module,不要用 command
        • 另外就是校視後三台機器的時間誤差值都在百分之一毫秒內
  • 今天差不多就先到這告一段落了
    • 下一起期即將透過 ansible module 的功能針對不同 group 的 host 安裝不同軟體
      • 應該還記得 hosts 裡定義了兩種不同的 group,分別是 web/db
      • web 要安裝的東西與 db 很顯然不同,那我們要怎麼針對不同的 group 操作呢?敬請期待 ...
Ansible #10 - Ad-Hoc 指令[3]
TortoiseGit 操作

相關文章

 

評論 1

David Chou (周彥江) 於 2021/05/27, 週四 16:34

default module 是 command,出處在此 https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#rebooting-servers,裡面有一句話:So far all our examples have used the default ‘command’ module.

default module 是 command,出處在此 https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#rebooting-servers,裡面有一句話:So far all our examples have used the default ‘command’ module.
已經注冊了? 這裡登入
Guest
2024/05/20, 週一

Captcha 圖像