Ansible 自動化運維工具python
Ansible是什麼?web
Ansible是一個「配置管理工具」也是一個「自動化運維工具」shell
Ansible 做用: vim
Ansible是新出現的自動化運維工具,基於Python開發,實現批量系統配置,批量程序部署,批量運行命令服務器
Ansible 是一個能實現批量部署的自動化運維工具,基於python開發,能實現批量系統配置,批量部署程序,批量運行命令。Ansible是基於模塊來運行,它自己沒有任何批量部署的能力,ansible主要是提供一種批量部署的框架。架構
Ansible的框架:框架
1) 輕量級易操做運維
2) 分佈式,無agent客戶端ssh
3) 配置語法是YAML語言分佈式
4) 輕量級,無需在客戶端安裝agent,更新時在操做機更新一次便可
5) 批量任務執行能夠寫成腳本,不用發送給客戶機就可執行
6) 使用python編寫,維護簡單
7) 支持sudo
鏈接其餘主機默認使用的ssh協議,也支持local、zeromq的方式鏈接
核心:ansible
核心模塊(core modules):ansible自帶的模塊
擴展模塊(custom modules):核心模塊不能知足需求,添加擴展模塊。
插件(plugins):完成模塊的補充
劇本(playbook):在ansible配置文件中,能夠將多個任務定義在一個劇本中,在ansibel執行劇本。
鏈接插件(connectior plugins):ansible默認使用ssh鏈接的,可是ansible也支持其餘的鏈接方式,其餘的鏈接方式是須要插件的支持,才能夠實現通訊。
主機羣(host inventory): 定義ansible管理的主機的
1 |
/etc/ansible |
Ansible、Ansible-doc、Ansible-galaxy、Ansible-lint、Ansible-playbook、Ansible-pull、Ansible-vault:
Ansible是核心的指令,主要用於執行單條命令,默認跟的是主機和選項部分,默認不指定模塊時,使用的是command模塊(默認使用的模塊能夠在ansible.cfg修改):
Eg:[root@44 ~]# ansible all -a "pwd"
192.168.20.70 | SUCCESS | rc=0 >>
/root
Ansible-doc -h 用於查看模塊的信息常見的參數-l -s
Ansible-doc -l 列出已安裝的模塊
Ansible-doc -s 模塊 : 查查看具體模塊的使用方法
Ansible-galaxy 從站點下載第三方的擴展模塊
[root@44 ~]# ansible-galaxy -h
Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...
Ansible-lint對playbook的語法進行檢查的工具
Ansible-lint 劇本名
注:本人安裝的ansible 沒有此命令選項因此用ansible-playbook --syntax-check 對劇本進行語法的檢查
[root@44 ~]# ansible-playbook --syntax-check + 劇本名
對劇本語法進行檢查但不執行
Ansible-playbook 讀取playbook文件執行相應的動做。
執行ansible-playbook的劇本
eg:執行a.yml劇本
[root@44 ~]# ansible-playbook a.yml
Ansible-pull 適用於數量多的機器配置,遠程執行命令的工具。對運維架構能力比較強
Ansible-vault 配置文件有敏感信息,設置加密/解密這個配置文件
Ansible語法:ansible 機組名 -m 模塊 -a 執行的內容
用來查看遠程主機的一些基本信息
Ansible 用戶 -m setup
## 用來測試遠程主機的運行狀態
Ansible 用戶 -m ping
複製文件到遠程主機
示例:將本地文件「/etc/ansible/ansible.cfg」複製到遠程服務器
Ansibles -m copy -a "src=/etc/ansible/ansible.cfgdest=/tmp/ansible.cfg owner=root group=root mode=0644"
## 在遠程主機上執行命令
相關選項以下:
ansible storm_cluster-m command -a "uptime"
## 切換到某個shell執行指定的指令,參數與command相同。
這個模塊與script不一樣的是,首先要將寫好的sh腳本分發到機組,再執行
與command不一樣的是,此模塊能夠支持命令管道,同時還有另外一個模塊也具有此功能:raw。
示例:
先在本地建立一個SHELL腳本
vim/tmp/rocketzhang_test.sh
將建立的腳本文件分發到遠程
ansiblestorm_cluster -m copy -a "src=/tmp/rocketzhang_test.shdest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755"
遠程執行
# ansiblestorm_cluster -m shell -a "/tmp/rocketzhang_test.sh"
用script:模塊能夠實現到對象節點上執行本機腳本。有點相似copy+shell+刪除copy的腳本的這樣一個綜合的功能。
ansible host32-m script -a /tmp/hello.sh
其餘經常使用模塊,好比:service、cron、yum、synchronize就不一一例舉,能夠結合自身的系統環境進行測試。
service:系統服務管理
cron:計劃任務管理
yum:yum軟件包安裝管理
synchronize:使用rsync同步文件
user:系統用戶管理
group:系統用戶組管理
File : 對文件目錄的建立、刪除
Path 參數:用來指定要操做的文件或目錄
State 參數: 設定操做的需求
State=directory 建立目錄
State=touch 建立文件
State=link 建立硬鏈接
State=absent 缺席、刪除
爲何使用ansible-playbook哪?當批量部署的過程當中有些監控器須要作出改動的時候,咱們不須要經過ansible命令去手動去改動,那樣太過於消耗時間,咱們能夠把它寫成腳本,有改動的時候,只須要修改定義下的變量就好。Ansible中的腳本功能就是ansible-playbook劇本。
Ansible-playbook的組織格式:YAML語言格式
YAML的簡介:
相似於半結構化數據,聲明式配置,可讀性較高用來表達資料序列的格式,容易與腳本語言交互
YAML的語法格式:
① 任何書記結構用縮進來標識,能夠嵌套
② 每一行的一個鍵值key:value ,冒號隔開。若想在一行標識用{}和,分隔
③ 列表用-標識
Playbook 組成的結構:
Host: 被監控的主機
Tasks :任務,調用的模塊執行操做
Variables: 變量
Templates: 模板
Handlers :處理器
Roles :角色
基本結構:
– host:webservices
remote_user:
– tasks:
– task1
module_name
YAML文件擴展名一般爲.yml,如test.yml。
Eg:
[root@44 ~]# cat a.yml
- hosts: 192.16.20.70
remote_user: root
tasks:
- name: add group
group: name=new state=present
- name: add user
user: name=yxyfyy group=new
- hosts: 192.168.20.70
remote_user: root
tasks:
- name: copy
copy: src=/etc/services dest=/tmp/ owner=nobody group=new
[root@44 ~]# ansible-playbook --syntax-check a.yml
[WARNING]: Could not match supplied host pattern, ignoring: 192.16.20.70
playbook: a.yml
編寫playbook 劇本(執行拷貝的模板,把主機上的1111.txt文件拷貝到被監控的主機上。)
[root@44 ~]# cat a.yml
- hosts: 192.168.20.70
remote_user: root
tasks:
- name: copy
copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root
對playbook劇本進行檢測有沒有錯誤
[root@44 ~]# ansible-playbook --syntax-check a.yml
playbook: a.yml
執行playbook劇本
[root@44 ~]# ansible-playbook a.yml
PLAY [192.168.20.70] ******************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [192.168.20.70]
TASK [copy] ***************************************************************************
changed: [192.168.20.70]
PLAY RECAP ****************************************************************************
192.168.20.70 : ok=2 changed=1 unreachable=0 failed=0
檢查結果
[root@44 ~]# cat 1111.txt
ansible
[root@yk3 ~]# cat /tmp/1111.txt
ansible
Ansible-playbook的組成:
Ansible-playbook能夠理解爲把ansible的使用的模塊方法寫入ansible-playbook劇本中。
Ansible-playbook文件是以「.yaml」或「.yml」結尾的文件
EG:
[root@44 ~]# cat a.yml
- hosts: 192.168.20.70 (指定被操做主機)
(yaml語法中使用冒號映射鍵值對,「冒號」後必須加空格)
remote_user: root (指定遠程操做時使用那個用戶)
(注意格式:yaml語法用層級關係,同一層級的是對齊的。(開頭對齊))
tasks: (操做的任務列表,能夠有多個任務)
- name: copy (自定義任務名稱)
copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root
(任務的操做,copy:copy模塊,src:源地址,(copy的內置條件) dest:目的地址, owner:所屬人 group:所屬組)
Hosts:定義要操做的主機,能夠是IP地址、主機名(提早域名解析)、定義的分組。 定義多個主機要用,分隔開
爲何使用ansible-playbook哪?當批量部署的過程當中有些監控器須要作出改動的時候,咱們不須要經過ansible命令去手動去改動,那樣太過於消耗時間,咱們能夠把它寫成腳本,有改動的時候,只須要修改定義下的變量就好。Ansible中的腳本功能就是ansible-playbook劇本。
Ansible-playbook的組織格式:YAML語言格式
YAML的簡介:
相似於半結構化數據,聲明式配置,可讀性較高用來表達資料序列的格式,容易與腳本語言交互
YAML的語法格式:
① 任何書記結構用縮進來標識,能夠嵌套
② 每一行的一個鍵值key:value ,冒號隔開。若想在一行標識用{}和,分隔
③ 列表用-標識
Playbook 組成的結構:
Host: 被監控的主機
Tasks :任務,調用的模塊執行操做
Variables: 變量
Templates: 模板
Handlers :處理器
Roles :角色
基本結構:
– host:webservices
remote_user:
– tasks:
– task1
module_name
YAML文件擴展名一般爲.yml,如test.yml。
Eg:
[root@44 ~]# cat a.yml
- hosts: 192.16.20.70
remote_user: root
tasks:
- name: add group
group: name=new state=present
- name: add user
user: name=yxyfyy group=new
- hosts: 192.168.20.70
remote_user: root
tasks:
- name: copy
copy: src=/etc/services dest=/tmp/ owner=nobody group=new
[root@44 ~]# ansible-playbook --syntax-check a.yml
[WARNING]: Could not match supplied host pattern, ignoring: 192.16.20.70
playbook: a.yml
編寫playbook 劇本(執行拷貝的模板,把主機上的1111.txt文件拷貝到被監控的主機上。)
[root@44 ~]# cat a.yml
- hosts: 192.168.20.70
remote_user: root
tasks:
- name: copy
copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root
對playbook劇本進行檢測有沒有錯誤
[root@44 ~]# ansible-playbook --syntax-check a.yml
playbook: a.yml
執行playbook劇本
[root@44 ~]# ansible-playbook a.yml
PLAY [192.168.20.70] ******************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [192.168.20.70]
TASK [copy] ***************************************************************************
changed: [192.168.20.70]
PLAY RECAP ****************************************************************************
192.168.20.70 : ok=2 changed=1 unreachable=0 failed=0
檢查結果
[root@44 ~]# cat 1111.txt
ansible
[root@yk3 ~]# cat /tmp/1111.txt
ansible
Ansible-playbook的組成:
Ansible-playbook能夠理解爲把ansible的使用的模塊方法寫入ansible-playbook劇本中。
Ansible-playbook文件是以「.yaml」或「.yml」結尾的文件
EG:
[root@44 ~]# cat a.yml
- hosts: 192.168.20.70 (指定被操做主機)
(yaml語法中使用冒號映射鍵值對,「冒號」後必須加空格)
remote_user: root (指定遠程操做時使用那個用戶)
(注意格式:yaml語法用層級關係,同一層級的是對齊的。(開頭對齊))
tasks: (操做的任務列表,能夠有多個任務)
- name: copy (自定義任務名稱)
copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root
(任務的操做,copy:copy模塊,src:源地址,(copy的內置條件) dest:目的地址, owner:所屬人 group:所屬組)
Hosts:定義要操做的主機,能夠是IP地址、主機名(提早域名解析)、定義的分組。 定義多個主機要用,分隔開