天天看點

ansible自動化運維工具

簡介

ansible是新出現的運維工具是基于Python研發的糅合了衆多老牌運維工具的優點實作了批量作業系統配置、批量程式的部署、批量運作指令等功能。

1.ansible的安裝直接用yum安裝,配置好epel源即可。

2.ansible安裝目錄在/etc/ansible下。

伺服器環境

192.168.32.200:作為ansible管理節點

192.168.32.202:被管理節點

ansible.cfg配置檔案

hostfile=/etc/ansible/hosts #指定預設hosts配置的位置

host_key_checking = False   #不進行host_key檢查,省去目标key發生變化時輸入(yes/no)的步驟

ask_pass=True               # 每次執行ansible指令是否詢問ssh密碼

ask_sudo_pass=True          # 每次執行ansible指令時是否詢問sudo密碼

3.首先在ansible管理節點上修改hosts檔案

 cd /etc/ansible/

 vim hosts // 在最後一行加入以下内容

[test]

192.168.32.202

4.ssh-keygen -P '' 生成公鑰

 ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] //将公鑰檔案傳輸到各節點上

5.示例 Ansible有一個非常有用的子產品是 command,相信很多人都需要它!Command子產品就是“遠端執行指令”

 相比Ansible的内置子產品而言,Command子產品無法通過傳回值來判斷指令是否執行成功。

 但Ansible添加了creates 和 removes 的屬性,以此檢查指令是否成功執行或者是否應該被執行。

 如果你定義了 creates 屬性,當檔案已存在時,它不會再執行。相反如果定義了 removes 屬性,

 則隻有檔案存在的情況下指令才會被執行

ansible webhosts -m command -a 'rm -rf /tmp/test removes=/tmp/test'

192.168.32.202 | success | rc=0 >>

如果“受控節點”上 /tmp/testfile 并不存在,Ansible則提示跳過,輸出如下: MachineName | skipped

否則,如果檔案存在,則傳回成功:

ansible test -m command -a 'date' //command和shell子產品可以在被控端執行指令

Sat Jan 10 16:13:44 EST 2015

ansible webhosts -m shell -a 'date'       

Enter passphrase for key '/root/.ssh/id_rsa': 輸入公鑰密碼

Sat Jan 10 16:17:40 EST 2015

安裝軟體和啟動服務。yum,service子產品

ansible test -m yum -a 'name=vsftpd state=present' // yum子產品遠端安裝軟體

ansible test -m service -a ‘name=vsftpd state=started enabled=yes’

支援管道的指令:raw子產品,類似于shell子產品

ansible test -m raw -a 'ifconfig | grep eth0'

檢視系統資訊

ansible test -u root -m setup

字段名 參考值 含義

ansible_architecture    x86_64  受控節點系統架構

ansible_distribution    CentOS  受控節點的作業系統發行版

ansible_distribution_version    6.3 受控節點發行版本的版本号

ansible_domain  kisops.org  受控節點的主域名

ansible_fqdn    site01.kisops.org   受控節點的完整機器名

ansible_interfaces  [“lo”,”eth0”]   列出受控節點所有的網卡

ansible_kernel  2.6.32-431.5.1.el6.x86_64   受控節點的核心版本号

ansible_memtotal_mb 30099   受控節點總記憶體大小(兆)

ansible_processor_count 24  受控節點的CPU核心

ansible_virualization_role  guest   受控節點的身份:host為主控端,guest為虛拟機

ansible_virtualization_type kvm 受控節點的虛拟化類型

Ansible還有一個基礎子產品叫file,顧名思義是與檔案相關的。

它可以用于檢視檔案的屬性、修改檔案屬性、查詢檔案是否被修改等等

 ansible test -u root -m file -a 'path=/etc/fstab'

 192.168.32.202 | success >> {

    "changed": false, 

    "gid": 0, 

    "group": "root", 

    "mode": "0644", 

    "owner": "root", 

    "path": "/etc/fstab", 

    "size": 779, 

    "state": "file", 

    "uid": 0

}

在/tmp目錄以nobody使用者的身份建立一個test的檔案夾

ansible test -u root -m file -a 'path=/tmp/test state=directory mode=755 owner=nobody'

192.168.32.202 | success >> {

    "changed": true, 

    "mode": "0755", 

    "owner": "nobody", 

    "path": "/tmp/test", 

    "size": 4096, 

    "state": "directory", 

    "uid": 99

如果目錄不存在或屬性和預設的不一緻,Changed的值就為True。

如果相同(比如重複執行指令),Changed的值将變為False。

copy子產品。Copy子產品的作用就是從“控制節點”上拷貝檔案到“受控節點”上。

ansible test -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=644 owner=root'

    "checksum": "0eafb3ce197c848fca254e3a1356934a96f310bf", 

    "dest": "/tmp/fstab", 

    "md5sum": "99f84827ef399f896305ca09ce1c668a", 

    "size": 805, 

    "src": "/root/.ansible/tmp/ansible-tmp-1420871736.8-93337290722652/source", 

檢視目前登入的使用者

ansible -i hosts all -a 'whoami'

Enter passphrase for key '/root/.ssh/id_rsa': 

root

這是一條ad-hoc指令——臨時執行指令,ad-hoc是ansible裡的一個概念, 在上面指令中就是 -a ,

預設ansible執行時會從該配置中加載hosts配置,是以可以通過修改.ansible.cfg來指定預設的hosts檔案位址:

# .ansible.cfg

[defaults]

hostfile=/etc/ansible/hosts

檢視ansible的子產品

ansible-doc -l

ansible-doc file檢視制定子產品的幫忙資訊,以file子產品為例

ansible指令參數介紹

-m:要執行的子產品,預設為command

-a:子產品的參數

-u:ssh連接配接的使用者名,預設用root,ansible.cfg中可以配置

-k:提示輸入ssh登入密碼。當使用密碼驗證的時候用

-s:sudo運作

-U:sudo到那個使用者,預設為root

-K:提示輸入sudo密碼,當不是NOPASSWD模式時使用

-C:隻是測試一下會改變什麼内容,不會真正去執行

-c:連接配接類型(default=smart)

-f:fork多少個程序并發處理,預設為5個

-i:指定hosts檔案路徑,預設default=/etc/ansible/hosts

-I 指定pattern,對<host_pattern>已比對的主機中再過濾一次

--list-hosts:隻列印有哪些主機會執行這個playbook檔案,不是實際執行

-M:要執行的子產品路徑,預設為/usr/share/ansible

-o:壓縮輸出,摘要輸出

--private-key 私鑰路徑

-T: ssh連接配接逾時時間,預設10秒

-t:日志輸出到該目錄,日志檔案名以主機名命名

-v:verbost

playbook(劇本),顧名思義,就是需要定義一個腳本或者說配置檔案,然後定義好做什麼。

一個簡單的playbook是這樣的,把目前使用者名輸出到whoami.rst檔案中:

# playbook.yml

---

- hosts: webhosts  # hosts中指定

  remote_user: root  # 如果和目前使用者一樣,則無需指定

  tasks:

    - name: whoami

      shell: 'whoami > whoami.rst'

hosts後面根據webhosts是從hosts中讀取的,tasks是是關鍵詞,指明了要執行哪些任務;

下面的name是任務的名稱,shell是前面提到的module(子產品),單引号中是指令。

使用playbook批量安裝軟體

vim ftp.yml

    - name: yum -y install ftp

      shell: yum -y install ftp

ansible-playbook ftp.yml

PLAY [webhosts] *************************************************************** 

GATHERING FACTS *************************************************************** 

ok: [192.168.32.202]

TASK: [yum -y install ftp] **************************************************** 

changed: [192.168.32.202]

PLAY RECAP ******************************************************************** 

192.168.32.202             : ok=2    changed=1    unreachable=0    failed=0   

ansible實時批量執行腳本

ansible all -m script -a “/root/123.sh”

解決在運作ansible的時候會挑出一些warnning

vim /etc/ansible/ansible.cfg

system_warnings = False

如果用戶端的ssh端口不是22的話,需要修改hosts

[server]

172.16.21.102:16861

172.16.21.103:16861

ansible_ssh_port=16861

ansible 使用yml檔案時如何取消回執資訊:

在yml檔案裡添加gather_facts: no

本文轉自 shouhou2581314 51CTO部落格,原文連結:http://blog.51cto.com/thedream/1655570,如需轉載請自行聯系原作者