文档作者:MINE_菜鸟
写作时间:2023/6/10
操作环境:Centos yml 食用方法看最后文章
1.因为剧本写的可能会受到系统环境影响,可能会出现问题,具体问题再看看吧,目前只遇到1个问题,文章最后写的处理办法。其他的还没发现。
2.写剧本首先要将你要执行的任务列出来,然后根据python模块一点一点去垒代码,最后测试达到效果,yml格式就不用说了,写多了,就会格式了。
3.只在server执行该剧本,别整错了 ,主机清单添加server机器
本来zabbix-server端就单台的,用不到Ansible,但是练习yml语法,所以写了部署zabbix-server端的yml剧本
**_只在server执行该剧本,别整错了_**
- zabbix-server剧本
---
- hosts: all
remote_user: root
gather_facts: yes
tasks:
- name: wget zabbix_repo
get_url:
url: "https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm"
dest: "/tmp/zabbix-release-5.0-1.el7.noarch.rpm"
validate_certs: no
- name: yum install zabbix-release-5.0
yum:
name: "/tmp/zabbix-release-5.0-1.el7.noarch.rpm"
state: present
- name: clean
shell: yum clean all;yum makecache fast
- name: install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql epel-release
yum:
name: "{{ item }}"
state: present
with_items:
#- epel-release
- zabbix-agent
- zabbix-get
- zabbix-sender
- zabbix-server-mysql
- bind-utils
- name: touch mariadb.repo
file:
path: "/etc/yum.repos.d/mariadb.repo"
state: touch
mode: 0644
- name: insert mariadbrepo
lineinfile:
path: "/etc/yum.repos.d/mariadb.repo"
insertafter: EOF
line: "[mariadb]"
- name: insert baseurl gpgkey gpgcheck
lineinfile:
path: "/etc/yum.repos.d/mariadb.repo"
insertafter: '[mariadb]'
line: |
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=0
- name: install mariadb
yum:
name: "MariaDB-server,MariaDB-client,MySQL-python"
state: present
- name: touch /etc/my.cnf.d/server.cnf
file:
path: "/etc/my.cnf.d/server.cnf"
state: "touch"
- name: "insert mariadbdata"
lineinfile:
path: "/etc/my.cnf.d/server.cnf"
insertafter: EOF
line: "[mysqld]"
- name: "mariadbdata"
lineinfile:
path: "/etc/my.cnf.d/server.cnf"
insertafter: '[mysqld]'
line: |
skip_name_resolve = ON
innodb_file_per_table = ON
innodb_buffer_pool_size = 256M
max_connections = 2000
log-bin = master-log
- name: "service start mariadb"
service:
name: mariadb
state: started
- name: "Login to MySQL and create a database"
mysql_db:
name: zabbix
encoding: utf8
collation: utf8_bin
login_user: root
login_host: localhost
state: present
- name: "grant all zabbix and set password keer"
mysql_user:
name: zabbix
password: "keer"
priv: "zabbix.*:ALL"
host: "%"
login_host: localhost
state: present
- name: "exec flush privileges"
community.mysql.mysql_query:
query: "flush privileges;"
- name: "zcat data"
vars:
sqldata: "/usr/share/doc/zabbix-server-mysql-*/create.sql.gz"
shell:
zcat {{ sqldata }} | mysql -uzabbix -pkeer -h 127.0.0.1 zabbix
- name: "backup /etc/zabbix/zabbix_server.conf"
vars:
zabbix_server: "/etc/zabbix/zabbix_server.conf"
zabbix_server_bak: "/etc/zabbix/zabbix_server.conf_bak"
copy:
src: "{{ zabbix_server }}"
dest: "{{ zabbix_server_bak }}"
backup: "yes"
- name: "change ListenPort"
vars:
file: /etc/zabbix/zabbix_server.conf
db_passwd: keer
db_port: 3306
shell: |
sed -ri 's/# ListenPort=10051/ListenPort=10051/' {{ file }};
#sed -ri 's/# SourceIP=/SourceIP="{{ ansible_default_ipv4 }}"/' {{ file }};
#sed -ri 's/# DBHost=/DBHost="{{ ansible_default_ipv4 }}"/' {{ file }};
sed -i "s/# SourceIP=/SourceIP=$(dig +short myip.opendns.com @resolver1.opendns.com)/" {{ file }};
sed -i "s/# DBHost=/DBHost=$(dig +short myip.opendns.com @resolver1.opendns.com)/" {{ file }};
sed -ri 's/# DBPassword=/DBPassword={{ db_passwd }}/' {{ file }};
sed -ri 's/# DBPort=/DBPort={{ db_port }}/' {{ file }}
- name: systemctl start zabbix-server
systemd:
name: zabbix-server
state: started
#- name: replace enabled=1
# lineinfile:
# path: /etc/yum.repos.d/zabbix.repo
# regexp: '^enabled='
# line: 'enabled=1'
# section: '[zabbix-frontend]'
- name: change zabbix.repo
shell:
sed -ri '11s/enabled=0/enabled=1/' /etc/yum.repos.d/zabbix.repo
- name: install centos-release-scl-rh centos-release-scl zabbix-web-mysql-scl zabbix-nginx-conf-scl
package:
name: "{{ item }}"
state: present
with_items:
- centos-release-scl
- zabbix-web-mysql-scl
- zabbix-nginx-conf-scl
- name: detele nginx model
vars:
zabbix: /etc/opt/rh/rh-nginx116/nginx/nginx.conf
shell:
sed -i '38,80d' {{ zabbix }}
- name: change date and set
vars:
datetime: "/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf"
shell: |
sed -ri 's/listen.acl_users = apache/listen.acl_users = apache,nginx/' {{ datetime }}
sed -ri 's/; php_value\[date.timezone\] = Europe\/Riga/php_value[date.timezone] = Asia\/Shanghai/' {{ datetime }}
- name: systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
systemd:
name: zabbix-server
state: restarted
enabled: yes
- name: restart zabbix-agent
systemd:
name: zabbix-agent
state: restarted
enabled: yes
- name: restart rh-nginx116-nginx
systemd:
name: rh-nginx116-nginx
state: restarted
enabled: yes
- name: restart rh-php72-php-fpm
systemd:
name: rh-php72-php-fpm
state: restarted
enabled: yes
- 最后试了一下mariadb启动了,但是接下来要进mariadb数据库操作,但是我不知道Ansible有没有关于python模块进入数据库,创建数据库,增加字段等操作,所以还没研究,等有时间在看,yml代码没问题,可以直接部署:(已经解决)
-
- yml代码,等有时间在添加注释(估计没时间了)
- ansible-galaxy collection install community.mysql 这个用到python的第三方模块community.mysql
- #这个用到python的第三方模块community.mysql 才能执行授权sql语句(见代码区)
用法:
1.首先先安装mysql第三方模块
ansible-galaxy collection install community.mysql
2.关闭主机密钥检测 (将注释打开)
vim /etc/ansible/ansible.cfg
host_key_checking = False
3.主机清单里面的要执行主机用户加上sudo权限。(vim /etc/sudoer) 例如被执行的用户为tom用户
tom ALL=(ALL) NOPASSWD: ALL
加上就行
4.执行剧本
ansible-playbook -i 指定主机清单 -b 剧本文件
-b 提权 或者--become
问题合集:目前就发现一个
"changed": true, "cmd": "zcat /usr/share/doc/zabbix-server-mysql-*/create.sql.gz |
mysql -uzabbix -pkeer -h 127.0.0.1 zabbix", "delta": "0:00:00.021476", "end":
"2023-06-12 23:39:54.322874", "msg": "non-zero return code",
"rc": 1, "start": "2023-06-12 23:39:54.301398", "stderr":
"ERROR 1050 (42S01) at line 1: Table 'users' already exists",
"stderr_lines": ["ERROR 1050 (42S01) at line 1: Table 'users' already exists"],
"stdout": "", "stdout_lines": []}
报错一: 只要执行过这个剧本就会导致包这个错误,就是剧本已经导入zabbix数据库
需要进数据库删除,然后在执行剧本
mysql -h localhost
drop database zabbix;