天天看點

Ansible 詳細用法說明(二)

setup:擷取指定主機的facts。

===================================

facts就是變量,内建變量 。每個主機的各種資訊,cpu顆數、記憶體大小等。會存在facts中的某個變量中。調用後傳回很多對應主機的資訊,在後面的操作中可以根據不同的資訊來做不同的操作。如redhat系列用yum安裝,而debian系列用apt來安裝軟體。

例:擷取某台主機的變量

=====================================

script:發送腳本到各被管理節點,并執行。不需要參數

直接在-a 後面指定腳本即可。

===============================

selinux: 管理selinux。

關閉selinux:

template:使用了Jinjia2格式作為檔案模版,進行文檔内變量的替換的子產品。

playbook就是一個用<code>yaml文法</code>把多個子產品堆起來的一個檔案而已。

YAML是一個可讀性高的用來表達資料序列的格式。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822等。Clark Evans在2001年在首次發表了這種語言,另外Ingy dt Net與Oren Ben-Kiki也是這語言的共同設計者。

YAML的可讀性好 YAML和腳本語言的互動性好 YAML使用實作語言的資料類型 YAML有一個一緻的資訊模型 YAML易于實作 YAML可以基于流來處理 YAML表達能力強,擴充性好

YAML的文法和其他高階語言類似,并且可以簡單表達清單、散清單、标量等資料結構。其結構(Structure)通過空格來展示,序列(Sequence)裡的項用"-"來代表,Map裡的鍵值對用":"分隔。下面是一個示例。

YAML檔案擴充名通常為.yaml,如example.yaml

Ansible 詳細用法說明(二)

Tasks:任務,由子產品定義的操作的清單;

Variables:變量

Templates:模闆,即使用了模闆文法的文本檔案;

Handlers:由特定條件觸發的Tasks;

Roles:角色;

vim test.yaml 也可以是 .yml

Ansible 詳細用法說明(二)

(1) 檢測文法

ansible-playbook –syntax-check /path/to/playbook.yaml

(2) 測試運作

ansible-playbook -C /path/to/playbook.yaml
ansible-playbook –check /path/to/playbook.yaml

(3) 運作

ansible-playbook /path/to/playbook.yaml

tags:給指定的任務定義一個調用辨別;

可以一次調用多個名稱相同的标簽。也可以調用不同的标簽用 “,” 分割。

改變監聽端口
Ansible 詳細用法說明(二)
寫劇本把此檔案傳過去
Ansible 詳細用法說明(二)
指明标簽的檢查
Ansible 詳細用法說明(二)
檢視标簽 playbook執行過程 跳過标簽的事件

handlers:由特定條件觸發的Tasks;

第一次的話都會運作,後邊如果檔案内容發生改變就會觸發<code>notify</code>,然後會直接執行<code>handlers</code>的内容(這裡notify後邊的事件就都不會執行了)。估計是md5那種的校驗。删了個#号竟然也會通知。

内建:

自定義:

(1) 指令行傳遞;這個優先級最高

(2) 在hosts Inventory(/etc/ansible/hosts)中為每個主機定義專用變量值;

(3) 在playbook中定義,建議使用這個!

(4) Inventory還可以使用參數:

(5) 在角色調用時傳遞

變量調用:有空格

` var_name `

文本檔案,内部嵌套有模闆語言腳本(使用模闆語言編寫)

Jinja2 是由python編寫的。 在我們打算使用基于文本的模闆語言時,jinja2是很好的解決方案。<code>yeml</code>是寫<code>playbook</code>,<code>jinja2</code>是寫<code>配置檔案模闆</code>的

将模闆的檔案的變量值轉換成對應的本地主機的确定值。例如:ansible端寫一個内建變量<code>` ansible_processor_vcpus `</code>,當這個檔案被複制到對應主機時會自動生成對應主機 cpu的顆數的結果替換之。

執行模闆檔案中的腳本,并生成結果資料流,需要使用<code>template子產品</code>;

template:使用了Jinjia2格式作為檔案模版,進行文檔内變量的替換的子產品。相當于copy

将jinja2的檔案模闆了解并執行,轉化為各個主機間的對應值

注意:此模闆不能在指令行使用,而隻能用于playbook;用法同copy

這裡/root/nginx.conf内容發生了改變。

when語句:在tasks中使用,Jinja2的文法格式;

對疊代項的引用,固定變量名為"item”,使用with_item屬性給定要疊代的元素; 這個是以任務為中心,圍繞每個任務來跑主機,如果中間某個任務中斷,那麼所有主機以後的任務就無法安裝。

元素:

清單 字元串 字典

基于字元串清單給出元素示例:

基于字典清單給元素示例:item.name <code>.</code>後邊的表示鍵

以特定的層級目錄結構進行組織的tasks、variables、handlers、templates、files等;相當于函數的調用把各個事件切割成片段來執行。

role_name/

在playbook中調用角色的方法:

事例: 基于角色的方式安裝 nginx

1、建立需要的檔案

3、寫tasks/下的主main.yml

2.複制相應的安裝包和模闆到對應目錄下

3、根據需要修改nginx的配置檔案模闆。(這裡改的是work程序生成數和監聽的端口)

4、寫handlers目錄和vars/下的main.yml 檔案

5、寫需要運作的主yml檔案

Ansible 詳細用法說明(二)

7、測試

Ansible 詳細用法說明(二)

8、運作

Ansible 詳細用法說明(二)

成功

9、該端口測試、傳遞參數方式

Ansible 詳細用法說明(二)
Ansible 詳細用法說明(二)

      本文轉自027ryan  51CTO部落格,原文連結:http://blog.51cto.com/ucode/1874544,如需轉載請自行聯系原作者