1、ansible簡介nginx
ansible是一種自動化運維工具。實現批量操做系統配置、批量程序部署、批量命令運行等功能。web
ansible工做在agentless模式下,而且具備冪等性(冪等性不會重複執行相同指令,例如不會重複安裝軟件,當你但願一個文件中存在一行內容爲 "aaaaaa", 若是不存在就會插入,若是存在就會跳過)。apache
ansible架構大體以下:數據結構
2、基本使用架構
一、定義Host Inventory /etc/ansible/hostsless
[webhosts]運維
172.16.10.22 ansible_ssh_user=root ansible_ssh_pass=passwdssh
172.16.10.33 ansible_ssh_user=root ansible_ssh_pass=passwd工具
## ansible_ssh_user=root 是登錄用戶操作系統
## ansible_ssh_pass=passwd 是ssh登錄密碼
## 使用 ansible-doc MOD 查看模塊的用法,例如 ansible-doc copy
2.示例使用
查看時間信息
添加用戶,user模塊
安裝軟件和啓動服務
支持管道服務
3、YAML語言介紹
YAML是一種可讀性高的用來表達資料序列的格式。
YAML Ain't Markup Language即YAML不是XML。
YAML的可讀性好
YAML和腳本語言的交互性好
YAML使用實現語言的數據類型
YAML有個一致的信息模型
YAML表達能力強擴展性好
1. YAML 簡介
*********************************************YAML語法
YAML語法能夠簡單表達清單、散列表、標量等數據結構。其結構Structure經過空格展現,序列Sequence的項用「-」來表明
Map裏的鍵值對用「:」分割。下面是一個示例:
name: Jonh Smith
age: 41
gender: Male
YAML 2個重要的結構組成部分list和directory
********************************************list
列表的全部元素均使用「-」開始,例如:
- Apple
- Orange
- Strawberry
- Mango
********************************************dictionary
字典經過key與value標識,例如:
---
name: Example Developer
job: Developer
skill: Elite
也能夠將key:value放置於{ }進行表示,例如:
---
{name: Example Developer, job: Developer, skill: Elite}
2.YAML的變量
########################### 變量命名
變量名僅支持字母、數字和下劃線而且只能以字母開頭
facts 是由正在通訊的遠程目標主機發回的信息,這些信息保存在ansible變量中。獲取facts可以使用以下命令:
# ansible webservers -m setup
########################### 自定義變量
使用關鍵字vars來定義變量
vars:
var_name: value
########################### 變量引用
{{ var_name }}
######################### 變量迭代
當須要重複執行任務時使用迭代機制,使用格式爲:將須要迭代的內容定義爲item變量引用,並經過with_items語句指明迭代的元素列表。
例如:
- name: add several users
vars:
user1: testuser1
user2: testuser2
user: name={{ user1 }} state=present group=wheel
user: name={{ user2 }} state=present group=wheel
使用迭代方式:
- name: add several users
user: name={{item.name}} state=present groups={{item.groups}}
with_items:
- { name: 'testuser1', groups: 'wheel' }
- { name: 'testuser2', groups: 'root' }
3. Invetory格式
inventory文件遵循INI文件風格(括號中的字符串爲組名)。能夠將同一個主機同時歸併到不一樣的組中,當目標主機使用非默認的SSH端口,還能夠在主機名稱以後使用冒號加端口來代表。
[webservers]
www1.webserver.com:2222
www2.webserver.com
############################主機變量
能夠在inventory中定義主機時,添加主機變量以便於在playbook中使用,例如
www1.webserver.com http_port=80 maxRequestPerChild=808
############################ 組變量
組變量是賦予制定組內全部主機的playbook可用的變量。例如:
[webservers]
www1.webserver.com
www2.webserver.com
[webservers:vars]
ntp_server=ntp.webserver.com
nfs_server=nfs.webserver.com
############################ 組嵌套
inventory中組能夠包含其餘的組,而且也能夠向組中的主機指定變量。
[apache]
httpd1.magedu.com
httpd2.magedu.com
[nginx]
ngx1.magedu.com
ngx2.magedu.com
[webservers:children]
apache
nginx
############################ inventory參數
ansible_ssh_host # 主機名
ansible_ssh_port # 端口號,默認22
ansible_ssh_user # ssh鏈接時默認用的用戶名
ansible_ssh_pass # ssh鏈接時的密碼
4. playbooks
############################ Hosts和Users