ansible是基於python語言所開發出的一款輕量級的自動化運維軟件。python
ansible的優勢:基於ssh通訊,不須要在客戶端安裝任何插件,因此易於部署。 注:搞個密鑰對,而後將公鑰傳到各個奴隸節點上就OK了。docker
具備豐富的操做模塊,也能夠本身用python編寫第三方模塊,因此他的擴展性高。shell
可編寫playbook來定製強大的需求,其實就是將多個命令寫到一個腳本內。運維
ansbile執行命令流程:1.加載本身的配置文件 2.查找主機清單中的主機或組 3. 加載使用的模塊文件 ssh
4.生成python臨時腳本並傳送到各個奴隸節點上 5.文件加執行權限 6.執行腳本返回結果並刪除臨時腳本。 異步
ansible配置文件介紹:工具
inventory = /etc/ansible/hosts 指定清單文件目錄fetch
library = /usr/share/my_modules/ 指定模塊的自定義目錄ui
module_utils = /usr/share/my_module_utils/ 模塊的公用目錄spa
remote_tmp = ~./ansible/tmp 指定目標主機存放臨時腳本的地方
local_tmp = ~./ansible/tmp 指定本主機存放臨時腳本的地方
plugin_filters_cfg = /etc/ansible/plugin_filters.yml 過濾沒有的插件的配置文件
forks = 5 指定ansible執行時啓動多少個進程並行執行
poll_interval = 15 指定ansible異步執行的輪訓時間
sudo_user = root 指定sudo的用戶
remote_port = 22 默認的鏈接端口
ansible命令選項:
ansible-config dump 查看配置文件加載的環境變量。
ansible-doc -l:查看全部的模塊
ansible-doc -s 模塊名:獲取指定模塊的使用信息。
-m 模塊名:指定使用模塊。
-a:模塊的參數
-B:異步的超時時間
-e:添加變量
-k:輸入ssh密碼
-K:輸入sudo的用戶
-u:指定遠程的用戶
-i:指定清單文件路徑
-l:只運行那些主機
-C:檢測命令運行結果。
-f:指定並行執行任務的數量 注:默認爲5。
-T:指定ssh鏈接超時時間 注:默認爲10s
-o:將執行結果以一行來顯示。
-v -vv -vvv -vvvv:查看命令執行的詳細信息,v越多越詳細。
--list-hosts:查看主機組下的內容。
--version:顯示版本信息
--syntax-check:檢測playbook運行是否正常
ansible 清單變量搞一搞:
[test]
localhost ansible_connection=local 指定鏈接主機類型 local爲本主機 也能夠指定docker等等。
[play]
192.168.100.202 ansible_ssh_pass=123123 zcl=zcl 此變量權限最大。
[test2:children]
test
play
[test2:vars]
zcl=nb 此變量權限第二大。
[all:vars]
zcl=hehe 此變量權限最小。
ansible經常使用模塊:
1.command模塊
ansible play -m command -a 'chdir /etc/ ls':切換到/etc/下執行命令。
ansible play -m command -a 'creates=/root/zcl.text ls':判斷文件若是存在則不執行命令。
ansible play -m command -a 'removet=/root/zcl.text ls':判斷文件若是不存在則不執行命令。
2.ping模塊
ansible play -m ping:檢測通訊
3.shell模塊
ansible play -m shell -a 'cat /etc/passwd |grep zcl':支持"|","<",">","&"
4.copy模塊
ansible play -m copy -a 'src=/root/zcl date=/data/': src指定本地文件 date指定copy到的路徑
ansible play -m copy -a 'content="zcl wudi1234\n" dest=/data/name mode=666':content指定文件內容 mode指定文件權限。
ansible play -m copy -a 'content="zcl 呵呵" backup=yes mode=666':backup修改文件並備份原有文件。
5.file模塊
ansible play -m file -a 'gruop=zcl mode=655 owne=zcl path=/data/ycq state=directory':group指定屬組 mode指定權限後能夠跟mode owner指定屬主後必須跟path
注:state=directory:建立目錄 touch:建立文件 link:建立軟鏈接 hard:建立硬連接 absent:刪除目錄,文件,取消連接。
ansible play -m file -a 'path=/data/lfy state=directory':state狀態=directory:若是目錄不存在則建立目錄
ansible play -m file -a 'path=/data/aaa.text src=/data/xzj.text state=link':path指定建立的鏈接文件 src指定源文件 state=link:軟鏈接。
ansible play -m file -a 'path=/data/zcl state=absent':刪除zcl文件。absent:刪除
6.fetch模塊
ansible play -m fetch -a 'dest=/root/ src=/root/wudi.text':dest:指定文件拉取到的目錄 src:指定被拉取的文件。 fetch只能夠拉取文件不能夠拉取目錄。
7.cron模塊
(minute:分鐘)(hour:小時)(day:日)(month:月)(weekday:周)
name:計劃任務的描述 job:指定運行的命令 user:以哪一個用戶運行 state:指定狀態默認present添加計劃任務 absent刪除計劃任務
ansible play -m cron -a 'name="查看負載狀況" minute=*/5 job="uptime"' ####添加計劃任務
ansible play -m cron -a 'name="查看負載狀況" minute=*/5 job="uptime" state=absent' ####刪除計劃任務
ansible play -m shell -a 'crontab -l' ####查看計劃任務
8.yum模塊
(name:安裝包的名字)(state:present安裝 latest安裝最新 absent卸載)
ansible play -m yum -a 'name=elinks state=present':安裝elinks工具
9.service模塊
ansible play -m service -a 'name=httpd state=started enabled=true' (state:started啓動 restarted重啓 stopped 關閉 reloaded重載) enabled=true:開機自啓動
10.user模塊
comment:指定用戶描述信息 uid:指定用戶uid號 password:指定用戶密碼 name:指定建立用戶 state=absent 刪除用戶 home:指定用戶家目錄
ansible play -m user -a 'comment="ansible用戶" name=ansible uid=666 password=123123'
11.group模塊
gid:指定組gid號 name:指定組的名字 system=yes:表示建立爲系統組
ansible play -m group -a 'name=zcl gid=111 system=yes'
12.script模塊
ansible play -m script -a '/jiaobeng/a.sh' 將本地腳本推送到被管理主機執行腳本。
13.setup模塊
facts組件是Ansible用於採集被管機器設備信息的一個功能
facts就是變量,內建變量 。每一個主機的各類信息,cpu顆數、內存大小等。會存在facts中的某個變量中
ansible play -m setup -a 'filter="*mem*"' :查看內存
ansible play -m setup -a 'filter="*mem*"' --tree /root/facts
14.debug模塊
ansible play -m debug -a 'msg={{test}}' 輸出play內test變量的值。
ansible清單文件中直接指定IP和密碼進行鏈接。無需建立祕鑰對
應爲第一次鏈接要輸入yes因此在ansible.cfg文件將
#host_key_checking = False 將#號去掉便可
[play]
play1 ansible_ssh_host=192.168.100.203 ansible_ssh_pass=123123
play2 ansible_ssh_host=192.168.100.204 ansible_ssh_pass=123123