自動化運維工具----ansible

ansible是新出現的運維工具是基於Python研發的糅合了衆多老牌運維工具的優勢實現了批量操做系統配置、批量程序的部署、批量運行命令等功能。python

主要模塊以及功能:nginx

1 commandweb

2 usershell

3 groupapache

4 croncentos

5 copyless

6 file運維

7 pingssh

8 yumide

9 service

10 shell

11 script

12 setup

13 playbooks

14 忽略錯誤

15 handler

ansible通常使用普通用戶操做,如需使用root權限,能夠設置sudo

主要有如下特色

ansible:   yum -y install ansible 
    模塊化:調用特定的模塊,完成特定的任務
    基於python語言實現,由paramiko,PyYAMAL和Jinja2三個關鍵模塊:
    部署簡單,agentless
    支持主從模式
    支持自定義模塊
    支持Playbook
冪等性:  同一個配置文件中執行的操做容許多少次結果都是同樣

配置文件有

    配置文件:
        /etc/ansible/ansible.cfg
        /etc/ansible/hosts  主機清單

在使用前須要發佈ssh密鑰來實現自動部署

ssh-keygen -t rsa -P ''   -P密碼爲空
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.31.5
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.31.17
執行命令測試:
 ssh 192.168.31.5 'ifconfig'
問題:
ansible 192.168.31.5 -m command -a 'ifconfig'
 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit
localhost does not match 'all'

 [WARNING]: Could not match supplied host pattern, ignoring: 192.168.31.5
解決:須要將主機寫入/etc/ansible/hosts文件裏面

查看文檔說明

ansible-doc -s  command|user..... 查看文檔說明

模塊說明:

1 command模塊

ansible all -m command -a 'ifconfig'

ansible websrvs  -m command -a 'wget -O /tm/文件名 http://路徑/文件'  給websrvs組內的主機下載文件

2 user模塊   -a 'name=  state={present|absent}  system=.....'

ansible wesrvs -m user -a "name=hacluster state=present" 建立一個非系統用戶
ansible wesrvs -m user -a "name=hacluster state=absent"   刪除這個用戶

3 group模塊 -a 'name= gid= state=  system='

cron模塊,用來生成計劃任務 -a  'name= minute= hour= day= month= weekday= job= user=  state='

[root@centos7 ansible]# ansible all -m cron -a 'name="sync time form ntpserver" minute="*/10" job="/sbin/ntpdate us.pool.ntp.org &> /dev/null"'
192.168.31.5 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "sync time form ntpserver"
    ]
}
192.168.31.17 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "sync time form ntpserver"
    ]
}
[root@centos7 ansible]# crontab -l
#Ansible: sync time form ntpserver
*/10 * * * * /sbin/ntpdate us.pool.ntp.org &> /dev/null

刪除計劃任務:
 ansible all -m cron -a 'name="sync time form ntpserver" state=absent' 指明name加上absent

 5  copy模塊; 文件複製  -a 'dest= src= mode=  owner= group='

ansible wesrvs -m copy -a 'src=/etc/fstab dest=/tmp/fstab.tmp mode=600' 複製文件,設置文件權限

6 file模塊 :設置文件的屬性

ansible all -m file -a 'path=/tmp/testdir state=directory'   建立一個目錄
ansible all -m file -a 'path=/tmp/fstab.symlink state=link src=/tmp/fstab.tmp' 建立一個連接文件

7 ping模塊 就時單獨的ping,沒有參數

ansible all -m ping

yum:執行yum的安裝命令

ansible all  -m yum -a 'name=nginx state=latest' 安裝包
ansible all  -m yum -a 'name=nginx state=absent' 卸載

service模塊:設置和服務相關的配置 -a  'name= state={started|stopped|restarted} enabled='

ansible wesrvs -m service -a 'name=nginx state=started enabled=yes' 設置nginx啓動,並開機自啓動

10 shell  :執行命令

ansible all -m shell -a 'echo 123456 | passwd --stdin limi' 給用戶建立密碼,此用戶必須先存在
使用 command模塊會報錯,須要放入一個子shell中因此使用shell模塊

 11 script模塊:執行腳本

[root@centos7 ansible]# cat /tmp/test.sh 
#!/bin/sh
#

echo "$(hostname) ansible is good." >/tmp/ansible.txt

[root@centos7 ansible]# ll /tmp/test.sh   不給執行權限,遠程主機執行 了
-rw-r--r-- 1 root root 67 Sep 18 12:22 /tmp/test.sh
[root@centos7 ansible]# ansible all -m script -a '/tmp/test.sh'

12  setup 獲取遠程主機的facts,變量,屬於查看類別

ansible all -m setup

13 playbooks,綜合以上全部的模塊

核心元素有:
tasks:任務 variables:變量 templates:模板 handlers:處理器 roles:角色
其中一個特色:中途發送錯誤,全部已經執行的任務都將回滾,須要更正以後從新執行一次

下面是一個文件例子:hosts,tasks這些冒號以前的文字變成藍色的就是寫正確了,不然就要檢查

- hosts: all
  remote_user: root
  tasks:
   - name: add a group    // 加上 - 就是一個單獨的模塊以及處理命令:
     group: gid=1008 name=testgroup system=no
   - name: excute a command
     command: /bin/date

運行結果
[root@centos7 ~]# ansible-playbook test.yaml

PLAY [all] ***********************************************************************************

TASK [Gathering Facts] ***********************************************************************
ok: [192.168.31.17]
ok: [192.168.31.5]

TASK [add a group] ***************************************************************************
changed: [192.168.31.5]
changed: [192.168.31.17]

TASK [excute a command] **********************************************************************
changed: [192.168.31.17]
changed: [192.168.31.5]

PLAY RECAP ***********************************************************************************
192.168.31.17              : ok=3    changed=2    unreachable=0    failed=0   
192.168.31.5               : ok=3    changed=2    unreachable=0    failed=0   

 

忽略錯誤的狀況
好比執行mkdir 命令,再建用戶的話將報錯

方法一 /bin/true 

tasks:
 - name:  run this command and ignore the result
    command:  /usr/bin/somecommand || /bin/true

方法二: ignore_errors

tasks:
 - name:  run this command and ignore the result
    command:  /usr/bin/somecommand 
    ignore_errors: True

handler: 用於當關注的資源發生變化時採起必定的操做

   - hosts: all
     remote_user: root
     tasks:
         - name:  ensuse apache laster version
           yum:  state=latest name=httpd
         - name:  apache configure file
           copy: src=/root/httpd.conf  dest=/etc/httpd/conf/httpd.conf  force=yes
           notify:  #激活handlers中的name相同名稱的服務
           - restart apache
     handlers:
        - name:  restart apache
          service: name=apache state=restarted
相關文章
相關標籤/搜索