一.ansible簡介
?ansible是自動化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具(puppet、cfengine、chef、func、fabric)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。
ansible是基于模塊工作的,本身沒有批量部署的能力。ansible只是提供一種框架,并且基于模塊化工作,本身沒有批量部署的能力。真正具有批量部署的是ansible所運(yùn)行的模塊.
二.ansible的特點(diǎn):
1.部署簡單,只需在主控端部署Ansible環(huán)境,被控端無需做任何操作,輕量級,沒有agent,更新時,只需在操作機(jī)上進(jìn)行一次更新即可;
2.默認(rèn)使用SSH協(xié)議對設(shè)備進(jìn)行管理
3.有大量常規(guī)運(yùn)維操作模塊,可實(shí)現(xiàn)日常絕大部分操作
4.配置簡單、功能強(qiáng)大、擴(kuò)展性強(qiáng)
5.支持API及自定義模塊,可通過Python輕松擴(kuò)展
6.通過Playbooks(劇本)來定制強(qiáng)大的配置、狀態(tài)管理
7.提供一個功能強(qiáng)大、操作性強(qiáng)的Web管理界面和REST API接口
三.ansible的架構(gòu):

五個組成部分:
1)ansible:核心
2)modules:包括 Ansible 自帶的核心模塊(core modules)及自定義模塊(custom modules)
3)Plugins :完成模塊功能的補(bǔ)充,包括連接插件、郵件插件等
4)Playbooks : 劇本;定義 Ansible 多任務(wù)配置文件,由Ansible 自動執(zhí)行
5)host Inventory : 定義 Ansible 管理主機(jī)的清單
四.ansible工作流程:

簡單流程:
1)加載默認(rèn)的配置文件,默認(rèn)/etc/ansible/ansible.cfg
2)查找對應(yīng)的主機(jī)配置文件,找到要執(zhí)行的主機(jī)或者組
3)加載自己對應(yīng)的模塊文件,如command
4)?通過ansible將模塊或命令生成對應(yīng)的臨時py文件,并將該文件傳輸至遠(yuǎn)程服務(wù)器端
5)對應(yīng)執(zhí)行用戶的家目錄的.ansible/tmp/XXX/XXX.PY文件
6)給文件+x執(zhí)行,執(zhí)行并返回結(jié)果
7)刪除臨時py文件,sleep 0退出
五.安裝ansible
1.需要下載epel源才能安裝ansible.
yum install epel-release -y
2.yum install ansible? -y

3.主要配置文件和命令:
/etc/ansible/ansible.cfg? ? ? #主配置文件,配置ansible工作特性
/etc/ansible/hosts? ? ? ? #主機(jī)清單
/etc/ansible/roles/? ? ? ?#存放角色的目錄
/usr/bin/ansible? ? ? ? ? #主程序,臨時命令執(zhí)行工具
/usr/bin/ansible-doc #查看配置文檔,模塊功能查看工具
/usr/bin/ansible-galaxy? ? #下載/上傳代碼或Roles模塊的官網(wǎng)平臺
/usr/bin/ansible-playbook? ?#定制自動化任務(wù),編排劇本工具
/usr/bin/ansible-pull? ? ? ? ? #遠(yuǎn)程執(zhí)行命令的工具
/usr/bin/ansible-vault? ? ? ?#文件加密工具
/usr/bin/ansible-console? ? ? #基于Console界面與用戶交互的執(zhí)行工具
3.1.ansible默認(rèn)配置文件:
[defaults] 默認(rèn)配置
#inventory = /etc/ansible/hosts #主機(jī)列表配置文件
#library = /usr/share/my_modules/ #庫文件存放目錄
#module_utils = /usr/share/my_module_utils/ #模塊存放目錄
#remote_tmp = ~/.ansible/tmp #臨時py命令文件存放在遠(yuǎn)程主機(jī)目錄
#local_tmp = ~/.ansible/tmp #本機(jī)的臨時命令執(zhí)行目錄
#forks = 5 #默認(rèn)并發(fā)數(shù)?
#poll_interval = 15 #時間間隔
#sudo_user = root #默認(rèn)sudo用戶
#ask_sudo_pass = True #每次執(zhí)行ansible命令是否詢問sudo用戶密碼
#ask_pass = True #每次執(zhí)行ansible命令是否詢問ssh密碼
#transport = smart #傳輸方式
#remote_port = 22 #遠(yuǎn)程端口號
#module_lang = C
#module_set_locale = False
host_key_checking = False? #檢查對應(yīng)服務(wù)器的host_key,建議取消注釋.
log_path=/var/log/ansible.log #記錄日志及位置,默認(rèn)不記錄 建議取消注釋
4.免秘鑰登錄被管理的服務(wù)器:
操作步驟:ssh免秘鑰登錄
如果出現(xiàn)ssh鏈接較慢的現(xiàn)象,這里則需要修改sshd服務(wù)的兩個參數(shù)來解決該問題:
UseDNS no
GSSAPIAuthentication no
5.ansible主要參數(shù)詳解
ansible?<host-pattern> [-f forks] [-m module_name] [-a args]
-v :打印詳細(xì)模式
-i PATH :指定host文件路徑
-f NUM:指定fork開啟同步進(jìn)程的個數(shù),默認(rèn)是5
-m NAME:指定module模塊,默認(rèn)為command模塊
-a MODULE_ARGS:module模塊的參數(shù)或者命令
-k:輸入遠(yuǎn)程被管理端root的密碼,
-sudo:基于sudo執(zhí)行
-K:提示輸入sudo密碼與sudo一起使用
-u USERNAME:執(zhí)行執(zhí)行用戶
-C:測試執(zhí)行過程,不改變真實(shí)內(nèi)容,相當(dāng)于預(yù)演
-T TIMEOUT:執(zhí)行命令超時事件,默認(rèn)為10s
--version:查看Ansible軟件的版本信息
ansible-doc?-l --------->查看模塊列表
ansible-doc??-s 模塊名稱 --------->查看相關(guān)模塊參數(shù)
6.測試連接被控制服務(wù)器:
ansible? -m ping? ip地址

7.主機(jī)清單中增加被控端主機(jī),需要注意的是,主機(jī)清單也支持分組模式,這里將三臺主機(jī)分為web_ceshi組

在/etc/ansible/host中存在三類主機(jī):未分組的主機(jī),有組的主機(jī)(一組屬于"webservers"組的主機(jī))和數(shù)據(jù)庫有關(guān)("dbservers"組中的數(shù)據(jù)庫服務(wù)器集合)
六.模塊的使用
1.ping模塊的使用:
測試分組服務(wù)器進(jìn)行存活性檢測:

2.command模塊:
選項(xiàng):
1)chdir? ? # 在執(zhí)行命令之前,先切換到該目錄

2)creates? # 一個文件名,當(dāng)這個文件存在,則該命令不執(zhí)行,可以用來做判斷

removes? ? ? # 一個文件名,這個文件不存在,則該命令不執(zhí)行,與creates相反的判斷

3.shell模塊: -a 的參數(shù)就是shell命令

4.copy模塊
報(bào)錯:Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!
解決方法(被控制端操作):
yum install libselinux-python -y??
關(guān)閉selinux
1)指定文件復(fù)制

2)指定內(nèi)容復(fù)制:

5.file模塊
1)創(chuàng)建目錄:?
-a 'path=目錄位置 state=directory group=屬組 ower=屬主? mode=權(quán)限'
2)創(chuàng)建鏈接:
-a 'path=鏈接文件位置? src=源文件位置 state=link '
-a ' src=源文件位置? dest=鏈接文件位置 state=hard '? ?------>硬鏈接
3)刪除文件:
-a 'path=文件位置? state=absent'
6.fetch
1)拉取遠(yuǎn)程主機(jī)文件到本地:

7.cron計(jì)劃任務(wù)模塊:
參數(shù):
1)action:
cron backup=? #如果設(shè)置,創(chuàng)建一個crontab備份 【yes|no】
cron_file=? ? #如果指定, 使用這個文件cron.d,而不是單個用戶
2)crontab
day=? ? #日應(yīng)該運(yùn)行的工作(1-31, *, */2, )
hour=? # 小時 (0-23, *, */2, )
minute=? ? #分鐘(0-59, *, */2, )
month=? ? #月(1-12, *, /2, )
weekday? # 周 ( 0-6forSunday-Saturday,, )
job=? ? ? #指明運(yùn)行的命令是什么
name=? #定時任務(wù)描述
reboot? ? # 任務(wù)在重啟時運(yùn)行,不建議使用,建議使用special_time
special_time? #特殊的時間范圍,參數(shù):reboot(重啟時),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小時)
state? #指定狀態(tài),present表示添加定時任務(wù),也是默認(rèn)設(shè)置,absent表示刪除定時任務(wù)
user? ? #以哪個用戶的身份執(zhí)行
實(shí)例:
ansible web-ceshi? -m cron -a "name='Clear the iptable' minute=*/5? job='/sbin/iptables? -F'?state=absent"
ansible web-ceshi? -m cron -a 'name="list df every hour" special_time=hourly job="/bin/df -lh >> /app/disk_total &> /dev/null"
ansible web-ceshi? -m cron -a "name='Clear the iptable'?minute=*/5?job='/sbin/iptables -F'? "
8.yum模塊:
實(shí)例1:ansible web-ceshi? -m yum -a "name=/app/zabbix-release-3.4-2.el7.noarch.rpm?state=present disable_gpg_check=yes"
參數(shù):
name:#所安裝的包的名稱
state= #present安裝, latest安裝最新的, absent 卸載軟件。
disable_gpg_check #是否禁止GPG checking,只用于`present‘ or `latest’。
9.user模塊,group模塊:
1)user模塊是請求的是useradd, userdel, usermod三個指令。
常用參數(shù)
參數(shù)名選項(xiàng)說明
home???指定用戶的家目錄,需要與create home配合使
groups???指定用戶的屬組
uid???指定用的uid
password???指定用戶的密碼
name???指定用戶名
createhome???是否創(chuàng)建家目錄 yes|no
system???是否為系統(tǒng)用戶
remove???當(dāng)state=absent時,remove=yes則表示連同家目錄一起刪除,等價(jià)于userdel -r
state???是創(chuàng)建還是刪除
shell???指定用戶的shell環(huán)境
指定password參數(shù)時,不能使用明文密碼,因?yàn)楹竺孢@一串密碼會被直接傳送到被管理主機(jī)的/etc/shadow文件中,所以需要先將密碼字符串進(jìn)行加密處理。然后將得到的字符串放到password中即可。不同的發(fā)行版默認(rèn)使用的加密方式可能會有區(qū)別,具體可以查看/etc/login.defs文件確認(rèn),centos 6.5版本使用的是SHA512加密算法
eg:創(chuàng)建用戶along01,uid=1111,組為along,家目錄在/app/along01 下
ansible web-ceshi? -m user?-a 'name=along01?comment="along01 is along" uid=1111 group=along shell=/bin/bash home=/app/along01'
ansible web-ceshi? -m?shell?-a "cat /etc/passwd |grep along01" 查看
ansible web-ceshi -m?user?-a "name=along01 state=absent" 刪除用戶
ansible web-ceshi? -m group? -a 'name=along state=present'
10.遠(yuǎn)端執(zhí)行腳本:
?ansible? -m script? web-ceshi? -a '腳本名稱'?
11.setup模塊

1)ansible all -m setup --tree /tmp/facts?
將所有主機(jī)的信息輸入到監(jiān)控端的/tmp/facts目錄下,每臺主機(jī)的信息輸入到主機(jī)名文件中
2)查看部分詳細(xì)信息:

13.?get_url模塊
目的:將http://192.168.1.115/favicon.ico文件下載到指定節(jié)點(diǎn)的/tmp目錄下
命令:ansible web-ceshi? -m get_url -a 'url=http://192.168.1.115/favicon.ico? dest=/tmp'
要想更好更簡便的使用,請多參考官網(wǎng)的幫助文檔http://docs.ansible.com/ansible/latest/intro_adhoc.html?或者使用ansible-hoc 模塊名查看!!!!!
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- (一)架構(gòu) Ansible CoreModulesCore Modules(核心模塊)Customed Modul...
- 什么是ansible ansible是目前最受運(yùn)維歡迎的自動化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具(...
- 目錄 十五、ansible介紹十六、ansible安裝十七、ansible遠(yuǎn)程執(zhí)行命令十八、ansible拷貝文件...