Ansible安裝配置及使用


一、Ansible特點

1、不需要安裝客戶端,通過sshd通信

2、基於模塊工作,模塊可以由任何序言開發

3、不僅支持命令行使用模塊,也支持編寫yaml格式的playbook

4、支持sudo

5、有提供UI(瀏覽器圖形化)www.ansible.com/tower10台主機以內免費

6、開源UI https://github.com/alaxli/ansible_ui文檔

http://download.csdn.net/detail/liyang23456/7741185

二、Ansible安裝

兩台機器10.10.10.201和10.10.10.156

只需要在10.10.10.201上安裝ansible即可

# yum -y install epel-release

# yum -y install ansible

三、Ansible配置秘鑰

在10.10.10.201生成秘鑰對

# ssh-keygen -t rsa直接回車即可,不用設置秘鑰密碼

把公鑰(id_rsa.pub)內容放到10.10.10.156的/root/.ssh/authorized_keys里面

# scp id_rsa.pub slave.fanisk.com:/root/.ssh/authorized_keys

本機也要操作

# chmod 600 /root/.ssh/authorized_keys

關閉selinux

三、Ansible遠程執行命令

# ansible fansik -m command -a 'hostname'

fansik為主機組的名字,-m后邊是模塊的名字,-a后面是命令,也可以寫一個ip,針對一台機器來執行命令

還有一個模塊shell也同樣可以實現(可以執行腳本,支持管道符):

# ansible fansik -m shell -a 'hostname'

如果出現錯誤(copy文件的時候就會出現了):

slave.fansik.com | FAILED! => {

    "changed": false,

    "checksum": "7267a346473f1d39c1e8c2c0b43d40a42c37eb28",

    "failed": true,

    "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"

需要安裝libselinux-python包:

# yum -y install libselinux-python

編輯ansible的配置文件,添加主機組

# vim /etc/ansible/hosts

[fansik]

127.0.0.1

slave.fansik.com

fansik為主機組名字,自定義,下面為組內的機器可以是ip也可以是主機名

四、Ansible拷貝文件或目錄

# ansible slave.fansik.com -m copy -a "src=/tmp/wohenhao dest=/tmp/wobuhao owner=root group=root mode=0644"

注意:源目錄會放到目標目錄下面去,如果目標制定的目錄不存在,它會自動創建,如果copy的是文件,dest指定得名字和源如果不同,並且它不是已經存在的目錄,相當於copy過去后有重命名,但相反,若果dest是目標機器上已經存在的目錄,則會直接把文件copy到該目錄下面

# ansible fansik -m copy -a "src=/etc/passwd dest=/tmp/wobuhao"

這里的/tmp/wobuhao和源機器上的/etc/passwd是一直的,如果目標機器上已經存在/tmp/wobuhao目錄,則會在/tmp/wobuhao目錄下面建立passwd文件

五、Ansible遠程執行腳本

遠程執行腳本需要將腳本分發到各個機器上去

# ansible fansik -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"

然后在批量執行腳本

# ansible fansik -m shell -a "/tmp/test.sh"

五、Ansible實現任務計划

創建任務計划

# ansible fansik -m cron -a "name='fanjinbao' job='/bin/touch /tmp/shishi.txt' minute=5 weekday=6"

刪除任務計划            

# ansible fansik -m cron -a "name='fanjinbao' state=absent"

其他的時間表示:分鍾:minute,小時:hour,日期:day,月:month

五、Ansible實現任務計划

# ansible fansik -m yum -a "name=httpd"

在name后面還可以加上state=installed

# ansible fansik -m service -a "name=httpd state=started enabled=yes"

這里的name是centos系統里面的服務名,可以通過chkconfig --list查到

Ansible文檔的使用

# ansible-doc -l 列出所有的模塊

# ansible-doc service 查看指定模塊的文檔

六、Ansible playbook的使用

1、在/tmp/目錄下創建playbook.txt文件

# vim /etc/ansible/test.yml

---

- hosts: fansik

  remote_user: root

  tasks:

    - name: test_playbook

      shell: touch /tmp/playbook.txt

說明:host參數指定了對哪些主機進行操作;

user參數指定了使用什么用戶登錄遠程主機操作;

tasks指定了一個任務,其下面的name參數同樣是任務的描述,在執行過程中會打印出來

執行:# ansible-playbook test.yml

2、創建test用戶

---

- name: create_user

  hosts: slave.fansik.com

  user: root

  gather_facts: false

  vars:

  - user: "test"

  tasks:

  - name: create user

    user: name="{{ user }}"

說明:name參數對該playbook實現的功能做一個概述,后面執行過程中,會打印name變量的值,可以省略,gather facts參數指定了在以下任務部分執行前,是否先執行setup模塊獲取主機相關信息,這在后面的task會使用到setup獲取的信息時用到;vars參數,指定了變量,這里指定一個user變量,其值為test,需要注意的是,變量值一定要用引號引住;user指定了調用user模塊,name是user模塊里的一個參數,而增加的用戶名字調用了上面user變量的值。

七、Ansible playbook中的循環

改變slave.fansik.com的/tmp/目錄下的1.txt、2.txt、3.txt的權限為600

# vim loop.yml

---

- hosts: slave.fansik.com

  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

八、Ansible playbook條件判斷

如果fansik主機組中有10.10.10.201這個機器就在該機器的/tmp/下面創建when.txt

---

- hosts: fansik

  user: root

  gather_facts: True

  tasks:

    - name: use when

      shell: touch /tmp/when.txt

      when: facter_ipaddress == "10.10.10.201"

九、Ansible playbook中的handers

執行tasks之后,服務器發生變化之后執行的一些操作,比如我們修改了配置文件后,需要重啟一下服務

---

- hosts: fansik

  remote_user: root

  tasks:

    - name: test copy

      copy: src=/etc/passwd dest=/tmp/2.txt

      notify: test handlers

  handlers:

    - name: test handlers

      shell: echo "121212" >> /tmp/2.txt

說明:只有copy模塊真正執行后,才會去調用下面的handlers相關的操作。也就是說passwd和2.txt內容是一樣,並不會去執行handlers里面的shell相關命令命令,這種比較適合配置文件發生改變后,重啟服務等操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM