ansible自動化部署zabbix客戶端


本文主要介紹使用ansible playbook中roles,在不一樣os版本下批量部署zabbix客戶端。web

1、facts介紹shell

playbook的部分fetch信息centos

ansible版本2.2.1.0
bash

使用setup模塊獲取ssh

# ansible 192.168.1.12 -m setup
"ansible_distribution": "CentOS", 
"ansible_distribution_major_version": "6", 
"ansible_distribution_release": "Final", 
"ansible_distribution_version": "6.6", 

"ansible_processor_cores": 2, 
"ansible_processor_count": 1, 
"ansible_processor_threads_per_core": 2, 
"ansible_processor_vcpus": 4, 

"ansible_default_ipv4": {
    "address": "192.168.1.12", 
    "alias": "eth0", 
    "broadcast": "192.168.1.255", 
    "gateway": "192.168.1.1", 
    "interface": "eth0", 
    "macaddress": "10:bf:48:b7:98:96", 
    "mtu": 1500, 
    "netmask": "255.255.255.0", 
    "network": "192.168.1.0", 
    "type": "ether"
}

"ansible_all_ipv4_addresses": [
            "192.168.1.12"
        ], 

# ansible 192.168.1.17 -m setup
"ansible_distribution": "CentOS", 
"ansible_distribution_major_version": "7", 
"ansible_distribution_release": "Core", 
"ansible_distribution_version": "7.0.1406", 

"ansible_processor_cores": 2, 
"ansible_processor_count": 1, 
"ansible_processor_threads_per_core": 2, 
"ansible_processor_vcpus": 4, 

"ansible_default_ipv4": {
    "address": "192.168.1.17", 
    "alias": "enp3s0", 
    "broadcast": "192.168.1.255", 
    "gateway": "192.168.1.1", 
    "interface": "enp3s0", 
    "macaddress": "74:d0:2b:31:c6:a1", 
    "mtu": 1500, 
    "netmask": "255.255.255.0", 
    "network": "192.168.1.0", 
    "type": "ether"
},

"ansible_all_ipv4_addresses": [
    "172.17.0.1", 
    "192.168.1.17", 
    "192.168.2.116", 
    "192.168.1.116"
],

當須要用到主機ip地址時,使用"ansible_default_ipv4.address"變量獲取主機ip地址,而使用ansible_all_ipv4_addresses[x]獲取時,主機有多個ip地址時,很差判讀使用哪一個。ide


2、roles介紹測試

roles用於層次性、結構化地組織playbook。roles可以根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只須要在playbook中使用include指令便可。簡單來說,roles就是經過分別將變量(vars)、文件(file)、任務(tasks)、模塊(modules)及處理器(handlers)放置於單獨的目錄中,並能夠便捷地include它們的一種機制。fetch

3、建立roles的步驟centos7

1.建立以roles命名的目錄;spa

2.在roles目錄中分別建立以各角色名稱命名的目錄,如webservers等;

3.在每一個角色命名的目錄中分別建立files、handlers、meta、tasks、templates和vars目錄;用不到的目錄能夠建立爲空目錄,也能夠不建立;

4.在playbook文件中,調用各角色;

4、roles內各目錄中可用的文件

tasks目錄:至少應該包含一個名爲main.yml的文件,其定義了此角色的任務列表;此文件可使用include包含其它的位於此目錄中的task文件;

files目錄:存放由copy或script等模塊調用的文件;

templates目錄:template模塊會自動在此目錄中尋找Jinja2模板文件;

handlers目錄:此目錄中應當包含一個main.yml文件,用於定義此角色用到的各handler;在handler中使用include包含的其它的handler文件也應該位於此目錄中;

vars目錄:應當包含一個main.yml文件,用於定義此角色用到的變量;

meta目錄:應當包含一個main.yml文件,用於定義此角色的特殊設定及其依賴關係;ansible1.3及其之後的版本才支持;

default目錄:爲當前角色設定默認變量時使用此目錄;應當包含一個main.yml文件。

5、自動安裝zabbix客戶端

1.環境介紹

zabbix server:192.168.1.49

zabbix agent1:192.168.1.12 centos6.6

zabbix agent2:192.168.1.17 centos7.0

zabbix版本3.0.4

2.定義hosts

# cat /etc/ansible/hosts
[pltest]
192.168.1.17 ansible_ssh_user=root ansible_ssh_pass=12345678
192.168.1.12 ansible_ssh_user=root ansible_ssh_pass=l0jzt7yhudai12

3.目錄結構

# cd /etc/ansible/
# mkdir zabbix_client_install
# mkdir zabbix_client_install/{files,handlers,meta,tasks,templates,vars}
# tree roles
roles
|-- zabbix_client_install
|   |-- files
|   |   |-- zabbix_agent_centos6.tgz
|   |   `-- zabbix_agent_centos7.tgz
|   |-- handlers
|   |   `-- main.yml
|   |-- meta
|   |-- tasks
|   |   |-- copy.yml
|   |   |-- delete.yml
|   |   |-- install.yml
|   |   `-- main.yml
|   |-- templates
|   |   |-- zabbix_agentd_centos6
|   |   |-- zabbix_agentd_centos6.conf
|   |   |-- zabbix_agentd_centos7
|   |   `-- zabbix_agentd_centos7.conf
|   `-- vars
|       `-- main.yml
`-- zabbix_client_install.yml

7 directories, 13 files

4.文件內容

zabbix_client_install.yml內容
# cat /etc/ansible/roles/zabbix_client_install.yml
---
- hosts: pltest
  remote_user: root
  gather_facts: True
  roles:
    - zabbix_client_install

files包含在不一樣平臺上已經編譯好的zabbix客戶端程序
handlers目錄下定義了配置文件發生變化後觸發重啓進程(notify)
# cat /etc/ansible/roles/zabbix_client_install/handlers/main.yml
- name: restart zabbix_agentd
  service: name=zabbix_agentd state=restarted

tasks下角色的任務列表
# cat /etc/ansible/roles/zabbix_client_install/tasks/main.yml
- include: copy.yml
- include: install.yml
- include: delete.yml

copy.yml文件中使用tags定義標籤,when語句判斷os版本,複製對應版本的客戶端程序。
tags用於讓用戶選擇運行或路過playbook中的部分代碼。ansible具備冪等性,所以會自動跳過沒有變化的部分,即使如此,有些代碼爲測試其確實沒有發生變化的時間依然會很是地長。此時,若是確信其沒有變化,就能夠經過tags跳過此些代碼片段。
在task後添加when子句便可使用條件測試;when語句支持Jinja2表達式語法。
when語句中還可使用facts或playbook中定義的變量。
# cat /etc/ansible/roles/zabbix_client_install/tasks/copy.yml
- name: Create zabbix user in centos client
  tags:
    - create_user
  user: name={{ zabbix_user }} state=present createhome=no shell=/sbin/nologin
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 7 or ansible_distribution_major_version|int == 6
- name: Copy zabbix client software to centos client
  tags:
    - copy_files
  copy: src=files/zabbix_agent_centos7.tgz dest=/tmp/zabbix_agent_centos7.tgz owner=root group=root
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 7
- name: Copy zabbix client software to centos client
  tags:
    - copy_files
  copy: src=files/zabbix_agent_centos6.tgz dest=/tmp/zabbix_agent_centos6.tgz owner=root group=root
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 6
- name: Uncompression zabbix client software to centos client
  tags:
    - un_files
  shell: tar xf /tmp/zabbix_agent_centos7.tgz -C {{ zabbix_dir }}/
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 7
- name: Uncompression zabbix client software to centos client
  tags:
    - un_files
  shell: tar xf /tmp/zabbix_agent_centos6.tgz -C {{ zabbix_dir }}/
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 6
- name: Copy zabbix start script to centos client
  tags:
    - copy_script
  template: src=zabbix_agentd_centos7 dest=/etc/init.d/zabbix_agentd owner=root group=root mode=0755
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 7
- name: Copy zabbix start script to centos client
  tags:
    - copy_script
  template: src=zabbix_agentd_centos6 dest=/etc/init.d/zabbix_agentd owner=root group=root mode=0755
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 6
- name: Copy zabbix config to centos client
  tags:
    - copy_config
  template: src=zabbix_agentd_centos7.conf dest={{ zabbix_dir }}/zabbix/etc/zabbix_agentd.conf owner={{ zabbix_user }} group={{ zabbix_user }} mode=0644
  notify:
    - restart zabbix_agentd
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 7
- name: Copy zabbix config to centos client
  tags:
    - copy_config
  template: src=zabbix_agentd_centos6.conf dest={{ zabbix_dir }}/zabbix/etc/zabbix_agentd.conf owner={{ zabbix_user }} group={{ zabbix_user }} mode=0644
  notify:
    - restart zabbix_agentd
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 6

install.yml修改目錄權限,啓動服務
# cat /etc/ansible/roles/zabbix_client_install/tasks/install.yml
- name: Modify Zabbix Dir Permission In Centos Client
  tags:
    - change_perm
  file: path={{ zabbix_dir }}/zabbix owner={{ zabbix_user }} group={{ zabbix_user }} mode=0755
- name: Add Start Zabbix Service In Centos Client
  tags:
    - add_start_script
  shell: chkconfig --add zabbix_agentd
- name: Start Zabbix Service In Centos Client
  tags:
    - start_server
  service: name=zabbix_agentd state=started

delete.yml安裝完刪除軟件包
# cat /etc/ansible/roles/zabbix_client_install/tasks/delete.yml
- name: Delete zabbix compression software in centos client
  tags:
    - delete_files
  file: path=/tmp/zabbix_agent_centos7.tgz state=absent
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 7
- name: Delete zabbix compression software in centos client
  tags:
    - delete_files
  file: path=/tmp/zabbix_agent_centos6.tgz state=absent
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version|int == 6

templates目錄下的模板文件
zabbix_agentd_centos{6|7}服務啓動腳本
# cat /etc/ansible/roles/zabbix_client_install/templates/zabbix_agentd_centos6
BASEDIR={{ zabbix_dir }}/zabbix
zabbix_agentd_centos{6|7}.conf配置文件
# cat /etc/ansible/roles/zabbix_client_install/templates/zabbix_agentd_centos6.conf
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ ansible_default_ipv4.address }}

vars目錄下定義變量文件
# cat /etc/ansible/roles/zabbix_client_install/vars/main.yml
zabbix_dir: /usr/local
zabbix_user: zabbix
zabbix_server_ip: 192.168.1.49

6、執行任務

1.語法檢查
ansible-playbook zabbix_client_install.yml --syntax-check
2.執行命令
ansible-playbook zabbix_client_install.yml
3.查看任務數
ansible-playbook zabbix_client_install.yml --list-tasks
4.查看標籤
ansible-playbook zabbix_client_install.yml --list-tags
5.執行某個tag
ansible-playbook zabbix_client_install.yml -t create_user
6.執行多個tags
ansible-playbook zabbix_client_install.yml -t create_user,copy_files,delete_files
相關文章
相關標籤/搜索