Ansible 是一個(gè)自動(dòng)化運(yùn)維工具
1. 安裝
安裝很簡(jiǎn)單介返,且安裝方式多樣
yum -y install python python-devel gcc wget gmp-devel openssl openssl-devel openssh openssh-clients sshpass
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install ansible
2. 第一條命令
vim /etc/ansible/hosts
[local]
localhost ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=pass
ansible all -m ping
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
3. 配置讀取順序
ANSIBLE_CONFIG (一個(gè)環(huán)境變量)
ansible.cfg (位于當(dāng)前目錄中)
.ansible.cfg (位于家目錄中)
/etc/ansible/ansible.cfg
4. Playbooks
Playbooks 是 Ansible的配置,部署,編排語(yǔ)言.他們可以被描述為一個(gè)需要希望遠(yuǎn)程主機(jī)執(zhí)行命令的方案,或者一組IT程序運(yùn)行的命令集合。
還記得第一次看到dockerfile編寫語(yǔ)法,特別的蒙圣蝎,完全不懂刃宵,于是退而求其次,現(xiàn)在容器中完成了操作徘公。
可花了些時(shí)間精心去看語(yǔ)法后牲证,頓時(shí)覺得編寫dockerfile很簡(jiǎn)單。
我想playbooks也是如此的关面,不要害怕它坦袍,用心去做就可以啦。
- 執(zhí)行
學(xué)習(xí)新東西時(shí)缭裆,我通常最先學(xué)會(huì)的怎么運(yùn)行和調(diào)試键闺。
而語(yǔ)法是學(xué)習(xí)最基礎(chǔ)的,其他則是在調(diào)試過程中慢慢積累的澈驼。
ansible-playbook playbook.yml
ansible-playbook -i hosts playbook.yml
#-i INVENTORY, --inventory-file=INVENTORY
ansible-playbook playbook.yml -f 10
#FORKS 并行的意義
```
* YAML 語(yǔ)法
對(duì)于 Ansible, 每一個(gè) YAML 文件都是從一個(gè)列表開始.
> 開始 “---”
列表 ```- ``` (一個(gè)橫杠和一個(gè)空格) 再跟列表中成員
鍵: 值 冒號(hào)后面必須是一個(gè)空格
布爾值 鍵: yes,鍵: no,鍵: True,鍵: TRUE,鍵: false
雙引號(hào) foo: "somebody said I should put a colon here: so I did"
變量 foo: "{{ variable }}"
* 主機(jī)和用戶
可為 playbook 中的每一個(gè) play,選擇操作的目標(biāo)機(jī)器辛燥,以及用什么用戶去執(zhí)行task。
- hosts: webservers
remote_user: root
tasks:- name: test connection
ping:
remote_user: yourname
- name: test connection
* Tasks 列表
tasks在play中缝其,
前一個(gè)task執(zhí)行完畢挎塌,才會(huì)執(zhí)行下一個(gè)task
一個(gè)play中 所有hosts獲取相同的任務(wù)指令
當(dāng)一個(gè)host的task失敗后,該host將會(huì)從整個(gè)playbook的rotation中移除
task--modules 具有”冪等”性
task 必須有name
tasks:
- name: make sure apache is running
service: name=httpd state=running - name: disable selinux
command: /sbin/setenforce 0
比較特別的 modudle 是 command 和 shell
* 模塊
>模塊(也被稱為 “task plugins” 或 “l(fā)ibrary plugins”)是在 Ansible 中實(shí)際在執(zhí)行的.它們就 是在每個(gè) playbook 任務(wù)中被執(zhí)行的.你也可以僅僅通過 ‘a(chǎn)nsible’ 命令來(lái)運(yùn)行它們内边。
-m MODULE_NAME, --module-name=MODULE_NAME
ansible webservers -m service -a "name=httpd state=started"
ansible webservers -m ping
ansible webservers -m command -a "/sbin/reboot -t now"