自动化运维工具 Ansible
學習Ansible的系列文章
- Ansible 介紹
- Ansible 架構
- Ansible 安裝
- Ansible 配置文件及參數(shù)
- Ansible 常用模塊
- Ansible playbook
1. Ansible 介紹
Ansible 是一個配置管理和應用部署工具,只需要通過 ssh 訪問服務器或設備即可實現(xiàn)批量系統(tǒng)配置、程序部署、運行命令等功能。
Ansible 是基于模塊工作的,本身沒有批量部署的能力,真正具有部署能力的是 Ansible 所運行的模塊。
Ansible 的優(yōu)點:
- 模塊化: 調(diào)用特定的模塊完成特定的功能;
- 輕量級: 無需在客戶端安裝 agent,更新時,只需在操作機上進行一次更新即可;
- 分布式:?ansible 不需要啟動服務,作為一個工具可以輕松的實現(xiàn)分布式擴展;
- 支持編排: 批量任務可以寫成劇本進行編排,不用分發(fā)到遠程即可執(zhí)行;
2. Ansible 架構
?
?Ansible 的基本架構:
3. Ansible 安裝
Ansible 有三種安裝方式:
1. yum 安裝:?
?yum -y install ansible wget -O /etc/yum.repos.d/epel.repo?
?
2. pip 安裝:
?pip install ansible?
?
3. github 安裝:
git clone git://github.com/ansible/ansible.git --recursive cd ./ansible make rpm sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm?
4. Ansible 配置文件及參數(shù)
| 常用配置文件或命令? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? | ? ? ? ? ? ? ? ? ? ? ? ? ? ?描述? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? | 
| ? ? ? ? ? ? ? ? ? ? ? ? /etc/ansible/ansible.cfg | ? ? ? ? ? ? 主配置文件,配置ansible工作特性 | 
| ? ? ? ? ? ? ? ? ? ? ? ? ? ?/etc/ansible/hosts | ? ? ? ? ? ? 主機清單 | 
| ? ? ? ? ? ? ? ? ? ? ? ? ? /etc/ansible/roles/ | ? ? ? ? ? ? 存放角色的目錄 | 
| ? ? ? ? ? ? ? ? ? ? ? ? ?/usr/bin/ansible | ? ? ? ? ? ? 主程序,臨時命令執(zhí)行工具 | 
| ? ? ? ? ? ? ? ? ? ? ? ? /usr/bin/ansible-doc | ? ? ? ? ? ? 查看配置文檔,模塊功能查看工具 | 
| ? ? ? ? ? ? ? ? ? ? ? ?/usr/bin/ansible-playbook | ? ? ? ? ? ? 定制自動化任務,編排劇本工具 | 
| ? ? ? ? ? ? ? ? ? ? ? /usr/bin/ansible-pull | ? ? ? ? ? ? 遠程執(zhí)行命令的工具 | 
ansible 常用參數(shù)說明
- ansible_ssh_host: 連接的遠程主機名;
- ansible_ssh_port: ssh 端口號,如果不是默認的端口號,則通過此變量設置;
- ansible_ssh_user: 默認的 ssh 用戶名;
- ansible_ssh_private_key_file: ssh 使用的密鑰文件,適用于通過密鑰登陸,而不通過 ssh 代理登陸的情況;
- inventory_dir: 存放 Ansible inventory host 文件的目錄路徑名;
- playbook_dir : 含有 playbook 基礎目錄的路徑名;
?
5. Ansible 常用模塊
ping
功能: 嘗試連接到主機,ping 通則返回 pong 。
command
功能: 遠程執(zhí)行命令,如果 ansible 不指定模塊時,默認使用 command 模塊。
shell
功能: 遠程執(zhí)行命令,類似于 command 。
copy
功能: 復制文件或目錄到遠程節(jié)點,默認覆蓋目標文件,源地址為 src , 目的地址為 dest 。
file
功能: 設置遠程節(jié)點文件的文件屬性。其中, mode 參數(shù)定義文件或目錄的權限。 path 定義文件或目錄的路徑,為必選項。
setup
功能: 收集遠程主機的信息,playbook 中的參數(shù) gather_facts 就與該模塊有關,后續(xù) playbook 做介紹。
fail
功能: 自定義消息失敗,在 playbook 中一般與 參數(shù) when 結(jié)合使用。
script
功能:?script 模塊使得我們可以在遠程主機上執(zhí)行 ansible 管理主機的腳本,而腳本一直存在于 ansible 管理主機本地,不需要手動拷貝到遠程主機后再執(zhí)行。?
6. Ansible playbook
Ansible playbook 采用 yaml 語言編寫, playbook 的第一行 “---” 符號表示這是一個 yaml 文件。
playbook 的工作流程如下圖所示:
playbook 參數(shù)
hosts: hosts 行的內(nèi)容是一個或多個組主機的 patterns ;
remote_user: 遠程執(zhí)行任務的賬戶名;
tasks: 任務集,由多個 task 組成;
until: until 是一個條件表達式,如果滿足條件循環(huán)結(jié)束;
retry:retry 是重試的次數(shù);
delay:延遲時間;
local_action: Ansible 默認只會對控制機器執(zhí)行操作,local_action 參數(shù)使得 ansible 對本機執(zhí)行操作;
ansible playbook 變量
2.? ansible hosts 中定義的變量,分為普通變量和公共變量,普通變量在主機組中主機單獨定義,優(yōu)先級高于公共變量。
3. 通過命令行指定變量,優(yōu)先級最高。
4. 在 playbook 中定義變量:
5. vars_file 指定變量文件。
6. 在 role 中定義。
7. 通過 {{ variable_name }} 調(diào)用變量,且變量名前后必須有空格。例如,??file_contents: "{{ lookup('file', 'configuration.json') }}"? 將 configuration.json 文件的內(nèi)容讀入到變量file_contents中。?node_type_prefix: "{{ vnf_name|lower }}?將變量 vnf_name 通過過濾器 lower 裝換為小寫存入變量 node_type_prefix 中。
8. register 注冊變量,把某一條任務執(zhí)行的結(jié)果保存下來,在接下來的任務中調(diào)用該變量或者用該變量做判斷:
? 將 task execute script at local host 的執(zhí)行結(jié)果存入變量 host_data_json 中,在任務 fail ansible 中使用該變量中的 stderr 進行判斷該任務會不會出錯。
? host_data_json 變量如下圖 localhost => 右邊的結(jié)構體所示,注意使用該結(jié)構體的 rc 參數(shù)進行判斷也是可以的,即 host_data_json.rc == 0:
?
簡單的 playbook 例子:
--- - hosts: [any]remote_user: "root"gather_facts: yesvars:number: "1"tasks:- name: ping the OAMping:- name: ping the local hostlocal_action: ping- name: change the mode of filelocal_action: file path=/tmp/test_mode.sh mode=0777- name: execute script at local hostlocal_action: command /bin/bash /tmp/test_mode.sh 1 2register: host_data_json- name: fail ansiblelocal_action: fail msg="can't run ansible playbook"when: host_data_json.stderr != ""?
? ? ? ?
參考文章:
https://www.jianshu.com/p/575ced3a08fa
http://blog.51cto.com/191226139/2066936
http://blog.51cto.com/amyhehe/1718050
http://blog.51cto.com/faded/1762688
http://www.zsythink.net/archives/2862
http://www.ansible.com.cn/
?
轉(zhuǎn)載于:https://www.cnblogs.com/xingzheanan/p/9751787.html
總結(jié)
以上是生活随笔為你收集整理的自动化运维工具 Ansible的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 201771010125王瑜《面向对象程
- 下一篇: PHP重写
