一、目录结构
[root@jumpserver roles]# tree install_zabbix_agent/
install_zabbix_agent/
├── files
│ └── discovery_tcp_port.sh
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ └── zabbix_agentd.conf.j2
└── vars
└── main.yml5 directories, 5 files
二、yml文件内容
[root@jumpserver roles]# cat install_zabbix_agent/handlers/main.yml
- name: restart zabbix-agent
service: name=zabbix-agent state=restarted
[root@jumpserver roles]# cat install_zabbix_agent/handlers/main.yml
- name: restart zabbix-agent
service: name=zabbix-agent state=restarted
[root@jumpserver roles]# cat install_zabbix_agent/tasks/main.yml
- name: centos7 download zabbix-agent
#get_url:
# url: https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm
yum:
name: https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm
state: present
when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "7"
register: install_status- name: centos6 download zabbix-agent
yum:
name: https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm
state: present
when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "6"
register: install_status
- name: get install_status
debug: msg={{install_status}}- name: config zabbix-agent
template: src=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf mode=755
- name: start zabbix-agent
service: name=zabbix-agent.service state=restarted enabled=yes- name: inspect firewalld
shell: systemctl status firewalld
register: returnmsg
ignore_errors: true- name: config firewalld
firewalld: port=10050/tcp permanent=yes state=enabled
when: returnmsg.rc == 0- name: create DIR
file: path={{ file_dir }} state=directory mode=755 owner=jumpserver group=root- name: copy file
copy: src=discovery_tcp_port.sh dest=/etc/zabbix/zabbix_agentd.d/script/ mode=755- name: add zabbix-agent config
lineinfile: dest=/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf line='UserParameter=discovery.tcpport[*],/etc/zabbix/zabbix_agentd.d/script/discovery_tcp_port.sh $1 $2'
notify: restart zabbix-agent
文字讲解一下上面的内容哈:
1、使用rpm安装zabbix,先判断,如果是centos系统并且是centos7的,就执行cnetos7安装命令。
2、安装的结果以register定义到install_status变量中,然后使用debug模块进行输出。
3、推送配置文件,使用template推,因为配置文件里面有很多变量。
4、重启下zabix-agent,并加入开机自动起。
5、检查firewalld是否启动,如果没有启动就跳过firewalld开放端口。(使用的shell模块进行查看firewalld是否开启,将执行的结果写入到returnmsg这个变量中,并设置忽略错误)
6、判断firewalld设置的returnmsg变量,如果变量中rc数值==0就执行firewalld开通端口。(rc值等于0说明是正常的,如果rc等于3或者其他数值就是不正常的。)
7、创建目录。
8、推送脚本。
9、使用lineinfile模块对配置文件追加内容。
[root@jumpserver roles]# cat install_zabbix_agent/vars/main.yml
zabbix_server_ip: 192.168.31.7
file_name: discovery_tcp_port.sh
file_dir: /etc/zabbix/zabbix_agentd.d/script/
[root@jumpserver roles]# cat install_zabbix_agent/templates/zabbix_agentd.conf.j2
{% if ansible_all_ipv4_addresses == ansible_all_ipv4_addresses %}
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ ansible_default_ipv4.address }}
HostMetadata=linux
Include=/etc/zabbix/zabbix_agentd.d/*.conf
{% elif ansible_hostname == zabbix_server_ip %}
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/logs/zabbix/zabbix_agentd.log
LogFileSize=0
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ ansible_default_ipv4_address }}
HostMetadata=linux
Include=/etc/zabbix/zabbix_agentd.d/*.conf
{% endif %}
这个文件中可以看到,很乱,其实判断没用的哈,就是想测试一下这个判断好使不。结果还行,没报错。
[root@jumpserver roles]# cat zabbix.yml
- hosts: test
remote_user: jumpserver
roles:
- install_zabbix_agent
tags: test
三、执行
[root@jumpserver roles]# ansible-playbook -i /etc/ansible/hosts -t test zabbix.yml --ask-vault-pass
完成。
四、小结
查看yum模块实例,进入之后按斜杠查询。
[root@jumpserver roles]# ansible-doc yum
查看系统变量
[root@jumpserver roles]# ansible -i /etc/ansible/hosts -m setup --ask-vault-pass|less
指定值
[root@jumpserver roles]# ansible -i /etc/ansible/hosts test -m setup -a "filter=ansible_distribution_major_version" --ask-vault-pass
Vault password:
192.168.30.136 | SUCCESS => {
"ansible_facts": {
"ansible_distribution_major_version": "7",
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
输出的内容是json格式的,如果想取里面的就在后面加个. 然后接名称
有的时候一个列表中有多个值,想取里面某一个值的话。可以用python切片,【0】表示第一个值 【1】是第二个值
##有时候取主机信息取不出来,需要在yml文件中打开开关
gather_facts: true ##和hosts对齐
变量名称:
过滤出指定的信息:例->ansible all -m setup -a "filter=ansible_os_family"
ansible_all_ipv4_addresses:仅显示ipv4的信息
ansible_devices:仅显示磁盘设备信息
ansible_distribution:显示是什么系统,例:centos,suse等
ansible_distribution_major_version:显示是系统主版本
ansible_distribution_version:仅显示系统版本
ansible_machine:显示系统类型,例:32位,还是64位
ansible_eth0:仅显示eth0的信息
ansible_hostname:仅显示主机名
ansible_kernel:仅显示内核版本
ansible_lvm:显示lvm相关信息
ansible_memtotal_mb:显示系统总内存
ansible_memfree_mb:显示可用系统内存
ansible_memory_mb:详细显示内存情况
ansible_swaptotal_mb:显示总的swap内存
ansible_swapfree_mb:显示swap内存的可用内存
ansible_mounts:显示系统磁盘挂载情况
ansible_processor:显示cpu个数(具体显示每个cpu的型号)
ansible_processor_vcpus:显示cpu个数(只显示总的个数)
ansible_python_version:显示python版本
https://www.ipcpu.com/2016/01/ansible-setup-when/ setup
https://blog.csdn.net/weixin_39726347/article/details/87558200 setup
https://blog.csdn.net/weixin_43384009/article/details/105212722 判断
有问题请加博主微信进行沟通!
全部评论