Ansible初探

導讀:
本博文主要總結Ansible一些基本概念以及簡單操作,後續會更新使用Ansible部署項目時操作細節。

  1. Ansible安裝及配置
  2. Ansible目錄結構
  3. Ansible Task
  4. Ansible Handlers
  5. Ansible Templates
  6. Ansible Vars
  7. Ansible Meta

Ansible安裝及配置:
安裝ansible方法多如星辰,這裏不具體介紹了,如有疑問google之。
ansible不存在客戶端與服務器的概念,在配置上來說非常便捷。ansible基於ssh工作,在這裏簡單介紹一下如何配置兩臺機器,使其相互之間可以連通。
10.166.224.32 爲安裝ansible機器,美其名曰控制節點
10.166.224.22 屈尊於客戶機,用於測試
ansible我的理解是控制節點ssh到其他客戶機上輸入我們輸給它的命令。
因此,我們需要將控制節點的 /root/.ssh/id_rsa.pub 加入到客戶機的 /root/.ssh/authorized_keys中。

做完上一步,我們來測試一下。
首先,我們在/etc/ansible/ 目錄下創建一個hosts文件,用於管理客戶節點網絡信息,英文名叫inventory。
這裏寫圖片描述
【localhost】 可以叫做一個section,用於定義一個主機列表的名字。
接下來,我們ping一下 myclient
敲入:ansible myclient -m ping 得到如下結果
這裏寫圖片描述


Ansible 目錄結構:
Ansible目錄結構比較自由隨意,在這裏給出一個推薦的目錄結構。
這裏寫圖片描述
* - inventory爲了存放hosts,hosts就是主機列表,支持通配*
* - roles的概念比較關鍵,就是爲了解耦,重複利用我們定義的yml*
* - hello 目錄是一個role,代表一類主機對象*
* - hello.yml 可以理解爲hello role的入口*
* - handlers 觸發器,用於保證在任務中最多隻執行一次*
* - meta 用於定義依賴關係*
* - tasks 用於定義任務*
* - templates 用於定義Jinja2模板文件*
* - vars 用於定義變量,可以在其他文件中include 使用*


Ansible Task:

task即任務,是一個一個指令序列。我們通過定義一個task流,稱爲playbook。然後丟給hosts中某個主機列表去執行。
task書寫遵從yaml規範。
這裏寫圖片描述
圖中功能是:
使用shell模塊,發送一個echo到遠程主機。ansible提供很多模塊供我們使用。
每一個tasks必須有一個名字,我們可以在這裏定義一個task流,即一串 task,然後遠程主機會按照順序去執行。下面貼出一個安裝nova的task作爲示例:

每一個task都有很多項如register,until等等。關於這一點,我在寫本文時,還不能全部搞清楚。但是想到自動化部署,我們應該能猜測到一些字段的意思,以及ansible應該有一些什麼字段方便我們使用。本文最後會附一個官方手冊,再使用過程中,我們可以隨時查閱滿足我們的使用。


Ansible Handlers:

我們在配置一些服務時,往往需要重啓服務。我們可以把配置項拆成很多個task,比如配置數據庫,配置rabbitMQ等等。這樣做的好處是,可能我們配置其他服務時也可以調用rabbitMQ這個配置yml文件。但是我們又不願意,寫一個配置,就重啓一次服務,最理想的情況就是,所有配置寫完之後,重啓一次。
Handlers就是爲了滿足這種需求而存在,其本身和task沒有任何區別。它的特性是,無論你調用多少次,它最多隻執行一次,而且是在最後。

這裏寫圖片描述


Ansible Templates:

Templates用來存放Jinja2 文件。模板是用來設計一個框架式的配置文件,然後把Anisble需要的值插入到合適的位置。

Jinja2可以作爲filter:
例如:
shell: cat /test.txt
register: result
1.我們可以根據result的值執行相應的步驟,這裏用到when

-debug: msg=”successful”
when: result | successful

-debug: msg=”failed”
when: result | failed

2.我們可以強制賦予未定義變量值
{{undefined_var | default(1)}} #初始值爲1

3.數組操作
{{list | min}} 取數組中最小值

還有很多操作,不意義列舉了,在項目實際過程中,根據需要google是很方便的。在這裏我們只要知道Jinja2可以做很多事情就好。


Ansible Vars:
關於變量,首先我們想到的是,我們可以定義變量,然後在多個文檔中使用,這是基本需求。
其次,我們希望,我們可以調用遠程主機上的變量。
最好,我們還可以定義一個變量,讓它能記錄遠程主機執行playbook後返回的信息,方便作爲後續playbook的執行路徑選擇。

變量命名規則:常規命名方式,a_b,ab都行
register : 用來保存執行task返回值
例如:
我們執行一個
shell: cat /test.txt
register: test_result
遠程目錄下的test.txt文件內容就被讀取到本地test_result變量裏面


Ansible Meta:

發佈了22 篇原創文章 · 獲贊 16 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章