ansible是新出現的運維工具是基於Python研發的糅合了衆多老牌運維工具的優勢實現了批量操做系統配置、批量程序的部署、批量運行命令等功能。python
主要模塊以及功能:nginx
1 commandweb
2 usershell
3 groupapache
4 croncentos
5 copyless
6 file運維
7 pingssh
8 yumide
12 setup
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..... 查看文檔說明
模塊說明:
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='
4 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' 複製文件,設置文件權限
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' 建立一個連接文件
ansible all -m ping
ansible all -m yum -a 'name=nginx state=latest' 安裝包 ansible all -m yum -a 'name=nginx state=absent' 卸載
9 service模塊:設置和服務相關的配置 -a 'name= state={started|stopped|restarted} enabled='
ansible wesrvs -m service -a 'name=nginx state=started enabled=yes' 設置nginx啓動,並開機自啓動
ansible all -m shell -a 'echo 123456 | passwd --stdin limi' 給用戶建立密碼,此用戶必須先存在 使用 command模塊會報錯,須要放入一個子shell中因此使用shell模塊
[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
核心元素有:
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
方法一 /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