Ansible---常用模塊:Python自動化運維

一、ansible 介紹

1. Ansible自動化運維工具,基於Python開發,集合了衆多運維工具的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。

2.特點

(1)  no agents:不需要在被管控主機上安裝任何客戶端;

(2)  no server:無服務器端,使用時直接運行命令即可;

(3)  modules in any languages:基於模塊工作,可使用任意語言開發模塊;

(4)  yaml,not code:使用yaml語言定製劇本playbook;

(5)  ssh by default:基於SSH工作;

(6)  strong multi-tier solution:可實現多級管理。

3.優勢

(1)  輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可;

(2)  批量任務執行可以寫成腳本,而且不用分發到遠程就可以執行;

(3)  使用python編寫,維護更簡單;

(4)  支持sudo。

4.工作機制

  • Ansible :     核心

  • Modules :    包括 Ansible 自帶的核心模塊及自定義模塊

  • Plugins :      完成模塊功能的補充,包括連接插件、郵件插件等

  • Inventory :    定義 Ansible 管理主機的清單

  • Playbooks :   劇本;定義 Ansible 多任務配置文件,由Ansible 自動執行

5.工作流程

二、Ansible安裝

先安裝EPEL源後再安裝Ansible

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm 
yum -y install epel-release-latest-6.noarch.rpm
yum  -y install ansible 
測試 ansible --version
ansible 2.6.4
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.6.6 (r266:84292, Jul 23 2015, 15:22:56) [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)]

Ansible配置文件

/etc/ansible/ansible.cfg    主配置文件
/etc/ansible/hosts          Inventory
/usr/bin/ansible-doc        幫助文件
/usr/bin/ansible-playbook   指定運行任務文件

三、實驗:環境準備

1)準備工作
一臺主控主機:172.16.253.253 (centos6.8)
一臺被控主機:172.16.253.219 (centos6.8)   172.16.253.57(centos 7.2)   10.68.71.54(centos7.2)

主控與被控可以相互通信!!

安裝要求:
控制主機:需要安裝 Python2.6/2.7 安裝方法見上
管理主機:需要安裝 Python2.4 以上版本,關閉selinux              

centos6.8默認python版本爲2.6.6

centos7.2默認python版本爲2.7.5

2)配置主機清單
vim /etc/ansible/hosts
172.16.253.219
172.16.253.57
10.68.71.54

3)配置控制主機SSH密鑰
在控制主機中生成ssh密鑰對
ssh-keygen -t rsa   #一路回車默認

4)將公鑰拷貝到管理主機中.ssh/authorized_keys文件中,實現免密碼登錄遠程管理主機

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

(ssh-copy-id命令會自動將id_rsa.pub文件的內容追加到遠程主機root用戶下.ssh/authorized_keys文件中)

5)ansible配置

vi /etc/ansible/   # +61 +102取消註釋

host_key_checking = False   # 禁用每次執行ansbile命令檢查ssh key host
log_path = /var/log/ansible.log   #開啓日誌記錄

測試:主控機

四、常用模塊使用
1)setup
查看遠程主機基本信息
ansible all -m setup

2)ping
測試遠程主機運行狀態
ansible all  -m ping

3)file

設置文件屬性
相關選項:
group:定義文件/目錄的屬組
mode:定義文件/目錄的權限
owner:定義文件/目錄的屬主
path:必選項,定義文件/目錄的路徑
recurse:遞歸設置文件的屬性,只對目錄有效
src:被鏈接的源文件路徑,只應用於state=link的情況
dest:被鏈接到的路徑,只應用於state=link的情況
force:需要在兩種情況下強制創建軟鏈接,一種是源文件不存在,但之後會建立的情況下;另一種是目標軟鏈接已存在,需要先取消之前的軟鏈,然後創建新的軟鏈,有兩個選項:yes|no
state:
       directory:如果目錄不存在,就創建目錄
       file:即使文件不存在,也不會被創建
       link:創建軟鏈接
       hard:創建硬鏈接
       touch:如果文件不存在,則會創建一個新文件,如果文件或目錄已存在,則更新其最後修改時間
       absent:刪除目錄、文件或者取消鏈接文件

實例:
遠程文件鏈接創建
ansible  [HostGroup or IP]  -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

被控機上查看:

遠程文件鏈接刪除

ansible all  -m file -a "path=/tmp/resolv.conf state=absent"


4)copy

複製文件到遠程主機
相關選項:
backup:在覆蓋之前,將源文件備份,備份文件包含時間信息。有兩個選項:yes|no
content:用於替代“src”,可以直接設定指定文件的值
dest:必選項。要將源文件複製到的遠程主機的絕對路徑,如果源文件是一個目錄,那麼該路徑也必須是個目錄
directory_mode:遞歸設定目錄的權限,默認爲系統默認權限
force:如果目標主機包含該文件,但內容不同,如果設置爲yes,則強制覆蓋,如果爲no,則只有當目標主機的目標位置不存在該文件時,才複製。默認爲yes
others:所有的file模塊裏的選項都可以在這裏使用
src:被複制到遠程主機的本地文件,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它將遞歸複製。在這種情況下,如果路徑使用“/”來結尾,則只複製目錄裏的內容,如果沒有使用“/”來結尾,則包含目錄在內的整個內容全部複製,類似於rsync。

實例:
將本地文件“/root/1.txt ”複製到遠程服務器

ansible all -m copy -a "src=/root/1.txt dest=/tmp/1.txt owner=root group=root mode=0644"

5)command

在遠程主機上執行命令
相關選項如下:
creates:一個文件名,當該文件存在,則該命令不執行
free_form:要執行的linux指令
chdir:在執行指令之前,先切換到該目錄
removes:一個文件名,當該文件不存在,則該選項不執行
executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑

實例:
ansible all -m command -a "uptime"
#執行命令不寫入history

遠程文件信息查看
ansible  all  -m command -a "ls –l /tmp/1.txt"

6)shell
切換到shell執行指定的指令,參數與command相同。
與command不同的是,此模塊可以支持命令管道,同時還有另一個模塊也具備此功能:raw

實例:
先在本地創建一個SHELL腳本
vim /tmp/test.sh

#!/bin/sh
date +%F_%H:%M:%S

chmod +x /tmp/test.sh
將創建的腳本文件分發到遠程
ansible all  -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh owner=root group=root mode=0755"

遠程執行
ansible all  -m shell -a "/tmp/test.sh"

7)cron

創建和刪除計劃任務
ansible [HostGroup or IP] -m cron -a "name='....' job='.....' $time"
-m 跟模塊,使用的是 cron 模塊
name= 指定計劃任務的名字,方便日後管理
job= 指定具體的任務
$time 指定具體的執行時間,minute分鐘,hour小時,day 天,month 月份。weekday 0 或者 7 代表週末。
state= 選項用來指定 name 並刪除

增加計劃任務
ansible all -m cron -a "name='test cron' job='/bin/bash /tmp/test.sh' weekday=6"

# 被控機查看

刪除計劃任務
ansible all   -m cron -a "name='test cron' state=absent"

8)安裝 rpm 包
-m 使用 yum 模塊
state= installed  removed ,不加state選項默認是 installed
 ansible all -m yum -a "name=tree"

ansible all  -m yum -a "name=wget state=removed"

9)管理服務
-m service 模塊
name= 系統服務,可以用 chkconfig --list 查看
enabled= 是否開機啓動,yes| no。
ansible all  -m service -a "name=httpd state=started enabled=no"
ansible all  -m service -a "name=httpd state=stopped enabled=yes"

10)其他模塊使用幫助

# ansible-doc -l                列出ansible所有的模塊
# ansible-doc -s MODULE_NAME    查看指定模塊具體適用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章