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

Ansible #11 - Ad-Hoc 指令[4]

shutterstock_198004562
  • 前一篇我們提到了一些 Ad-Hoc 指令,而今天的重點會如下:

    • 使用者/使用者群組的管理
    • 檔案/目錄的操作
  • 首先是使用者/使用者群組的管理

    • 這個東西在 Linux 遇到總是特別的苦惱
      • 反正如果是用 bash/shell 就是要看 manual 或上鳥哥的網站取經,否則就是這邊少一個什麼那邊少一個什麼
      • 好的,那透過 Ansible 的 Ad-Hoc 指令要怎麼做呢?
      • 相當之簡單,簡單到我再也不想背指令了(X)
    • 要針對群組作管理就要用到 group module
      • 假設我要新增一個 admin 的群組,指令如下:
          ansible app -b -m group -a "name=admin state=present"
      • 如果要移除,state 改成 absent 就可以了
      • 如果要指定 gid,直接補上 gid=[gid] 就可以了
      • 如果是要設定成 system group,補上 system=yes 就可以了,是不是很方便!
    • 那我們就來實際操作看看,指令:
       ansible app -b -m group -a "name=admin state=present" -i hosts -u vagrant
      • 別忘了要設定 inventory 跟操作的 user
      • 實際用 vagrant ssh 進去看看是不是真的有這個 group 存在:
          vagrant ssh app1
          cat /etc/group
      • 嗯,還真的有呢!
    • 再來試試是不是設定 absent 就能移除了!指令:
        ansible app -b -m group -a "name=admin state=absent" -i hosts -u vagrant
      • 一樣,我們 ssh 進去看看
      • 太酷啦,一個 module 搭配各種 state 就讓我們省去了打一堆指令的時間跟血汗(X)
    • 如果要針對使用者,該不會也這麼單純吧?!
      • 沒錯,就是這麼簡單,用 user module 就好,指令如下:
          ansible app -b -m user -a "name=johndoe group=admin createhome=yes" -i hosts -u vagrant
      • 啊,admin group 被我砍了,再建一次 XD
        • 這次成了,我們一樣 ssh 進去看看
        • 嗯,有喔,而且我用 vagrant 權限還不能看它的資料夾內容
        • User 就這樣結束了,但如果你要建立 User的同時也順便產一組 ssh key,可以補上 generate-ssh-key=true
  • 再來是檔案/目錄的操作

    • 檔案目錄有什麼好講的,不就是複製、搬移而已嗎?

      • 哼哼,你是不是忘了比較複雜的像是 rysnc 或是 recursively copy …等,這些透過 Ansible 一樣會變得很輕鬆喔
    • 我們將針對檔案目錄說明以下的幾個功能:

      • 取得檔案相關的資訊

        • 檔案有很多資訊,像是權限、檢查它的 MD5、知道擁有者…之類的,可以透過 stats 模組,指令如下:
          ansible multi -m stat -a "path=/etc/environment" -i hosts -u vagrant
        • 你們看,可以看到這~麼多資訊呢,有的我連它是幹嘛的都不知道呢!XD
      • 複製檔案到 Server 上

        • 這個情境在我們部署某類型的 Applications 時,或是要上傳某些檔案到 Server 會用到
        • 原本的話可以透過 scp/rsync/... 等等方法,但在 Ansible 只要 copy 模組就行了,指令:
            ansible multi -m copy -a "src=/etc/hosts dest=/tmp/hosts" -i hosts -u vagrant
          • 實際看看是不是 /tmp 底下真的有這檔案了:
          • 如上圖,檔案真的過去了呢!
      • 從 Server 上取得檔案

        • 從 Server 上取得檔案也是一樣,不過是透過 fetch module,指令如下:
            ansible app -m fetch -a "src=/tmp/hosts dest=/tmp" -i hosts -u vagrant
          • 看一下有沒有抓來:
          • 有是有,不過為什麼這麼多層?原來是因為預設值會在 dest 後方插入一個目錄階層機器所在的 domain/IP
          • 所以上圖中看到的現象是對的,如果你不想這樣,就再加上 flat=yes,不過這種情況適用在你只從一台主機拉檔案的時候
          • 如果有多台電腦的時候,在指令的最後面加上 --limit "192.168.60.4" 之類的(limit 前 是兩個 hyphen)
      • 建立檔案與目錄

        • 主要是會透過 file 這個 module,比方說建立目錄的指令就會如下:

            ansible multi -m file -a "dest=/tmp/test mode=644 state=directory" -i hosts -u vagrant

        • 如上圖,其實就是在建立 /tmp/test 這個目錄,而且設定只有自己可以讀寫,其他人只能讀

        • 這部份的觀念如果不熟悉的,可以再翻翻鳥哥的網站或書

      • 刪除檔案與目錄

        • 其實刪除跟建立都是用到 file module,所以這就不多著墨了,指令如下:
            ansible multi -m file -a "dest=/tmp/test state=absent" -i hosts -u vagrant
  • 也許你會想說為什麼這些東西看起來內容不是很多

    • 沒錯,我只有舉一些簡單的使用範例
    • 更多的資訊可以去官方的 module 文件看更詳細的用法,尤其是 2.8 版前後支援度有差
    • 以上提供的都是官方的文件,從我的角度看來是十分詳細的:
      • 都有提供所有可調用的參數可使用的值
      • 如果只看定義看不懂,下面還有 demo 的 playbook 使用方式,可以說是很佛心
  • 以上就是今天小知識的部份,下次將繼續介紹

    • 背景程式的建立與監控
    • Fire and forget 的任務
    • 檢查日誌
    • 管理排程
Pivot/FOR XML PATH 應用
Ansible #10 - Ad-Hoc 指令[3]

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2025/06/10, 週二

Captcha 圖像