ansible-playbook使用詳解


一、YAML簡介
二、Ansible組件
三、主機清單Invetory
四、PlayBook介紹
    
一、YAML簡介
http://www.yaml.org
YAML:可以使用簡單清單,散列表,標題等數據結構。
YAML的語法和其他高階語言類似,並且可以簡單表達清單、散列表、標量等數據結構。其結構(Structure)通過空格來展示,序列(Sequence)里的項用"-"來代表,Map里的鍵值對用":"分隔。下面是一個示例。
    yet another markup language //仍是一種標記語言
name: John kona //key為name,value為John,kona
age: 41
gender: Male
spouse: //kv可以嵌套,kev:value(key:value)
    name: Jane Smith  
    age: 37
    gender: Female //k/v可以嵌套
children:
    -   name: Jimmy Smith //-:列表,后面的都是列表元素    
        age: 17        //name和age,gender都是children的鍵key
        gender: Male
    -   name: Jenny Smith
        age 13
        gender: Female
    
YAML文件擴展名通常為.yaml,如example.yaml。

1)list
列表的所有元素均使用“-”打頭,例如:
# A list of tasty fruits
- Apple
- Orange
- Strawberry
- Mango

2)dictionary
字典通過key與value進行標識 //多個key-value聯合起來就叫做字典
例如:
---
# An employee record
name: Example Developer
job: Developer
skill: Elite

也可以將key:value放置於{}中進行表示,例如:
---
# An employee record
{name: Example Developer, job: Developer, skill: Elite}

二、Ansible組件
Inventory
Modules
Ad Hoc Commands
Playbooks組件:
    Tasks任務
    Variables變量,ansible有自帶的變量,也可以自定義
    Templates模板,包含了模板語法的文本文件;
    Handlers處理器,特定條件下才會被觸發的任務    
    Roles角色

三、主機清單Invetory
1.主機與組:/etc/ansible/hosts
Inventory
ansible的默認的inventory file為/etc/ansible/hosts。
inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成。

inventory文件格式
inventory文件遵循INI文件風格,中括號中的字符為組名。可以將同一個主機同時歸並到多個不同的組中;此外,當如若目標主機使用了非默認的SSH端口,還可以在主機名稱之后使用冒號加端口號來標明。
ntp.wolf.com

[webservers]
www1.wolf.com:2222
www2.wolf.com

[dbservers]
db1.wolf.com
db2.wolf.com
db3.wolf.com

如果主機名稱遵循相似的命名模式,還可以使用列表的方式標識各主機,例如:

[webservers]
www[01:50].example.com

[databases]
db-[a:f].example.com

2.主機變量
可以在inventory中定義主機時為其添加主機變量以便於在playbook中使用。例如:
[webservers]
www1.wolf.com http_port=80 maxRequestsPerChild=808
www2.wolf.com http_port=8080 maxRequestsPerChild=909

3.組變量
組變量是指賦予給指定組內所有主機上的在playbook中可用的變量。例如:
[webservers]
www1.wolf.com
www2.wolf.com

[webservers:vars]
ntp_server=ntp.wolf.com
nfs_server=nfs.wolf.com

4.組嵌套
inventory中,組還可以包含其它的組,並且也可以向組中的主機指定變量。不過,這些變量只能在ansible-playbook中使用,而ansible不支持。例如:

[apache]
httpd1.test.com
httpd2.test.com

[nginx]
ngx1.test.com
ngx2.test.com

[webservers]
apache
nginx

四、PlayBook介紹

核心元素:

Tasks:任務,由模塊定義的操作的列表;
Variables:變量
Templates:模板,即使用了模板語法的文本文件;
Handlers:由特定條件觸發的Tasks;
Roles:角色;
playbook的基礎組件:

Hosts:運行指定任務的目標主機;
remote_user:在遠程主機以哪個用戶身份執行;
sudo_user:非管理員需要擁有sudo權限;
tasks:任務列表

模塊,模塊參數:

格式:

(1) action: module arguments
(2) module: arguments
核心元素:

Tasks:任務,由模塊定義的操作的列表;
Variables:變量
Templates:模板,即使用了模板語法的文本文件;
Handlers:由特定條件觸發的Tasks;
Roles:角色;

playbook的基礎組件:

Hosts:運行指定任務的目標主機;
remote_user:在遠程主機以哪個用戶身份執行;
sudo_user:非管理員需要擁有sudo權限;
tasks:任務列表

模塊,模塊參數:
格式:

(1) action: module arguments
(2) module: arguments
示例:

運行playbook,使用ansible-playbook命令
(1) 檢測語法
ansible-playbook –syntax-check a.yaml
(2) 測試運行
ansible-playbook -C a.yaml
–list-hosts
–list-tasks
–list-tags
(3) 運行
ansible-playbook a.yaml
-t TAGS, –tags=TAGS
–skip-tags=SKIP_TAGS
–start-at-task=START_AT

到這里第一個playbook已經運行完畢!!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM