day36-20180705筆記

筆記:Python3 Ansiblepython

 

1、Ansible
linux

Ansible特色:
不須要安裝客戶端,經過sshd去通訊
基於模塊工做,模塊能夠任何語言開發
不只支持命令行使用模塊,也支持編寫yaml格式的playbook
支持sudo
有提供UI(瀏覽器圖形化)www.ansible.com/tower 10臺主機之內免費
開源UI https://github.com/alaxli/ansible_ni
文檔 http://download.csdn.net/detail/liyang23456/7741185


Ansible安裝:
兩臺機器 172.7.15.106 172.7.15.111
只須要在106機器上安裝ansible便可
yum install –y epel-release
yum install –y ansible


Ansible配置密鑰
106上操做,生成密鑰
ssh-keygen –t rsa 直接回車便可,不用設置密鑰密碼
把公鑰(id_rsa.pub)內容放到對方機器(111)的/root/.ssh/authorized_keys裏面
scp .ssh/id_rsa.pub 172.7.15.111:/root/.ssh/authorized_keys
本機也要操做
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
106和111上操做
chmod 600 /root/.ssh/authorized_keys
關閉selinux和iptables,並保存
setenforce 0
iptables –F; /etc/init.d/iptables save



Ansible 更改配置文件
vim /etc/ansible/hosts //增長
[testhost]
127.0.0.1
172.7.15.111

說明: testhost爲主機組名字,自定義的。下面兩個IP爲組內的機器IP



Ansible 遠程執行命令
ansible testhost –m command –a ‘w’
這樣就能夠批量執行命令了。這裏的testhost爲主機組名,-m後邊是模塊名字,-a後面是命令。固然咱們也能夠直接寫一個ip,針對某一臺機器來執行命令。
ansible 127.0.0.1 –m command –a ‘hostname’
錯誤:」msg」: Aborting, target uses selinux but python bindings (libselinux-python) aren’t installed!」
解決: yum install –y libselinux-python
還有一個模塊就是shell一樣也能夠實現
ansible testhost –m shell –a ‘w

command模塊不支持管道過濾,而shell模塊支持管道過濾
command模塊能實現的功能,shell模塊也能實現,而shell模塊能實現的功能,command模塊不必定能實現


Ansible 拷貝文件或目錄
ansible slave.localdomain -m copy -a "src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mode=0755"

 

注意: 源目錄會放到目標目錄下面去,若是目標指定的目錄不存在,它會自動建立。若是拷貝的是文件,dest指定的名字和源若是不一樣,而且它不是已經存在的目錄,至關於拷貝過去後又重命名。但相反,若是dest是目標機器上已經存在的目錄,則會直接把文件拷貝到該目錄下面。
ansible slave.localdomain -m copy -a "src=/etc/passwd dest=/tmp/123"

這裏的/tmp/123和源機器上的/etc/passwd是一致的,但若是目標機器上已經有/tmp/123目錄,則會再/tmp/123目錄下創建passwd文件
 
Ansible 遠程執行腳本
首先建立一個shell腳本
vim /tmp/test.sh //加入如下內容
#!/bin/bash
echo `date` > /tmp/ansible_test.txt
而後把該腳本分發到各個機器上
ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
最後是批量執行該shell腳本
ansible testhost -m shell -a "/bin/sh /tmp/test.sh"

遠程執行命令,查看shell腳本執行後輸出的結果

shell模塊,還支持遠程執行命令而且帶管道
ansible testhost -m shell -a "cat /etc/passwd |wc -l"

 

Ansible 實現任務計劃
ansible testhost -m cron -a "name='test cron' job='/bin/touch /tmp/1212.txt' weekday=0"

若要刪除該cron只須要加一個字段state=absent
ansible testhost -m cron -a "name='test cron' state=absent"

其餘的時間表示:分鐘minute 小時hour 日期day 月份month
 
 
Ansible 安裝rpm包/管理服務
ansible server2.localdomain -m yum -a "name=httpd"
在name後面還能夠加上state=installed
ansible server2.localdomain -m service -a "name=httpd state=started enabled=yes"

這裏的name是centos系統裏的服務名,能夠經過chkconfig –list查看到。
Ansible文件的使用
ansible-doc –l 列出全部的模塊
ansible-doc cron 查看指定的模塊的文檔


Ansible playbook的使用
至關於把模塊寫入到配置文件裏面,例:
vim /etc/ansible/test.yml
---
- hosts: slave.localdomain //能夠指定主機組testhost
remote_user: root
tasks:
- name: test_playbook
shell: touch /tmp/lishiming.txt
說明: hosts參數指定了對哪些主機進行操做;
user參數指定了使用什麼用戶登陸遠程主機操做;
tasks指定了一個任務,其下面的name參數一樣是對任務的描述,在執行過程當中會打印出來。
執行: ansible-playbook test.yml

 

 
再來一個建立用戶的例子:
vim /etc/ansible/create_user.yml
---
- name: create_user
hosts: slave.localdomain
user: root
gather_facts: false
vars:
- user: "test"
tasks:
- name: create user
user: name="{{user}}"
說明: name參數對該playbook實現的功能作一個概述,後面執行過程當中,會打印name變量的值,能夠省略;gather_facts參數指定了在如下任務部分執行前,是否先執行setup模塊獲取主機相關信息,這在後面的tasks會使用到setup獲取的信息時用到;vars參數,指定了變量,這裏指定一個user變量,其值爲test,須要注意的是,變量值必定要用引號引住;user提定了調用user模塊,name是user模塊裏的一個參數,而增長的用戶名字調用了上面user變量的值。


ansible-playbook create_user.yml

 

Ansible playbook 中的循環
vim /etc/ansible/loop.yml
---
- hosts: testhost
user: root
tasks:
- name: change mode for files
file: path=/tmp/{{item}} mode=600 owner=root group=root
with_items:
- 1.txt
- 2.txt
- 3.txt

批量遠程執行更改權限,注意:客戶機要保證有1.txt,2.txt,3.txt文件存在

 

 

 

Ansible playbook條件判斷
vim /etc/ansible/when.yml
---
- hosts: testhost
remote_user: root
gather_facts: True
tasks:
- name: use when
shell: touch /tmp/when.txt
when: facter_ipaddress == "10.211.55.15"

 

 
Ansible playbook 中的handlers
執行task以後,服務器發生變化以後要執行一些操做,好比咱們修改了配置文件後,須要重啓一下服務
vim /etc/ansible/handlers.yml
---
- hosts: testhost
name: handlers test
user: root
tasks:
- name: copy file
copy: src=/etc/passwd dest=/tmp/aaa.txt
notify: test handlers

handlers:
- name: test handlers
shell: echo "11111" >> /tmp/aaa.txt

說明: 只有copy模塊真正執行後,纔會去調用下面的handlers相關的操做。也就是說若是1.txt和2.txt內容是同樣的,並不會去執行handlers裏面的shell相關命令。這種比較適合配置文件發生更改後,重啓服務的操做。

 

 

經過rsync將服務端上的passwd文件同步到客戶端aaa.txt文件,目標文件aaa.txt與服務端的passwd文件內容是一致的

 

服務端執行ansible-playbook命令同步,客戶端文件aaa.txt文件內容不會更改,由於task執行不成功,因此不會執行handlers下面的操做

相關文章
相關標籤/搜索