news 2026/8/24 13:48:16

Ansible playbook管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ansible playbook管理

loop循环

创建用户并设置密码,密码以变量的方式

[devops@server1 ansible]$ vim user.yml
--- - hosts: db vars_files: - userlist.yml tasks: - name: Add the users ansible.builtin.user: name: "{{ item.user }}" password: "{{ item.pass | password_hash('sha512') }}" state: present loop: "{{ userlist }}"
[devops@server1 ansible]$ vim userlist.yml
--- userlist: - {user: user1,pass: pass1} - {user: user2,pass: pass2} - {user: user3,pass: pass3}

密码改为加密的方式

[devops@server1 ansible]$ ansible-vault encrypt userlist.yml

再次查看userlist.yml,并没有展示明文

执行剧本之前要输入密码

[devops@server1 ansible]$ ansible-playbook user.yml --ask-vault-pass Vault password:

解除加密

[devops@server1 ansible]$ ansible-vault decrypt userlist.yml
create创建并加密一个新文件(会打开编辑器编辑内容,保存后自动加密)
decrypt解密一个已加密的文件,输出明文内容或保存为明文文件
edit编辑已加密的文件(解密后打开编辑器,保存时自动重新加密)
view查看加密文件的内容(解密后只读显示,不修改)
encrypt加密一个已有的明文 YAML 文件(原地加密)
encrypt_string加密一个字符串(常用于命令行传递密码、token 等)
rekey更改加密文件的密码(重新生成密钥)

更推荐的管理方式

[devops@server1 ansible]$ mkdir host_vars [devops@server1 ansible]$ cd host_vars/ [devops@server1 host_vars]$ mkdir server3 [devops@server1 host_vars]$ cd server3/ [devops@server1 server3]$ vim vault --- userlist: - {user: user1,pass: pass1} - {user: user2,pass: pass2} - {user: user3,pass: pass3} [devops@server1 server3]$ ansible-vault encrypt vault

然后就不需要在playbook里面加入变量目录的文件,会自动扫描你的目录

--- - hosts: db #vars_files: #- userlist.yml tasks: - name: Add the users ansible.builtin.user: name: "{{ item.user }}" password: "{{ item.pass | password_hash('sha512') }}" state: present loop: "{{ userlist }}"

同理,在apache文件也不需要

[webservers] server2 server3 #[webservers:vars] #http_port=80
[devops@server1 ansible]$ mkdir groups_vars [devops@server1 ansible]$ cd groups_vars/ [devops@server1 groups_vars]$ mkdir webservers [devops@server1 groups_vars]$ cd webservers/ [devops@server1 webservers]$ vim vars
--- http_port: 80
[devops@server1 ansible]$ ansible-playbook apache.yml --ask-vault-pass

配置并行

  • 先分成每批 2 台主机。

  • 在该批次内,最多 10 台主机并行(但批次内只有 2 台,故实际并行数为 2)。

- hosts: webservers serial: 2 forks: 10
[zabbix-server] server2

安装ansible-mysql

[devops@server1 ansible]$ ansible-galaxy collection install git+https://github.com/ansible-collections/community.mysql.git
vim zabbix.yml
--- # 目标主机组:zabbix-server # 用途:在指定主机上完整部署 Zabbix Server 6.0(MySQL 后端) - hosts: zabbix-server tasks: # ==================================================================== # 阶段一:添加软件源 # ==================================================================== - name: add zabbix repo ansible.builtin.yum: # 直接从官方 URL 安装 Zabbix 仓库 RPM 包 name: https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-latest-6.0.el9.noarch.rpm state: present # 跳过 GPG 签名验证(测试环境使用,生产环境建议配置 GPG key) disable_gpg_check: yes # ==================================================================== # 阶段二:安装核心组件 # ==================================================================== - name: install zabbix-server ansible.builtin.yum: name: - zabbix-server-mysql # Server 主程序(MySQL 后端) - zabbix-web-mysql # Web 前端(PHP + MySQL) - zabbix-apache-conf # Apache 配置文件 - zabbix-sql-scripts # 数据库初始化 SQL 脚本 - zabbix-selinux-policy # SELinux 策略包(可选,但建议安装) - zabbix-agent # 本机 Agent(用于自我监控) state: present - name: install mysql-server ansible.builtin.yum: name: - mysql-server # MySQL/MariaDB 服务端 - python3-PyMySQL # Ansible MySQL 模块依赖的 Python 驱动 state: present # ==================================================================== # 阶段三:启动 MySQL 服务 # ==================================================================== - name: enable service mysql ansible.builtin.service: name: mysqld # Rocky Linux 9 中 MySQL 服务名 state: started # 立即启动 enabled: yes # 设置开机自启 # ==================================================================== # 阶段四:创建数据库 # ==================================================================== - name: init zabbix database ansible.mysql.mysql_db: name: zabbix state: present # 如果不存在则创建 encoding: utf8mb4 # 支持完整 Unicode(表情等) collation: utf8mb4_bin # 区分大小写,Zabbix 官方推荐 # ==================================================================== # 阶段五:创建数据库用户并授权 # ==================================================================== - name: create zabbix database user ansible.mysql.mysql_user: name: zabbix host: localhost # 只允许本地连接(Server 在本机) password: "zabbix_password" # 明文密码,生产环境建议使用 vault 加密 priv: "zabbix.*:ALL" # 授予对 zabbix 库的所有权限 state: present # ==================================================================== # 阶段六:导入表结构前的准备 # ==================================================================== - name: set log_bin_trust_function_creators ansible.mysql.mysql_variables: variable: log_bin_trust_function_creators value: 1 # 临时允许创建存储过程/函数(Zabbix 导入需要) # 注意:此变量在 MySQL 重启后恢复默认值,导入后需手动关闭 # ==================================================================== # 阶段七:确保数据库为空(解决重复导入报错) # ==================================================================== - name: drop and recreate zabbix database ansible.builtin.shell: cmd: | mysql -e "DROP DATABASE IF EXISTS zabbix;" mysql -e "CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;" register: drop_result changed_when: "'Database created' in drop_result.stdout" # 当输出包含 "Database created" 时标记为 changed # 注意:MySQL 命令默认不输出此信息,该条件可能不生效,建议使用 mysql_db 模块 # ==================================================================== # 阶段八:导入初始表结构和数据(核心步骤,耗时较长) # ==================================================================== - name: import zabbix initial schema and data (this may take a while) ansible.builtin.shell: # 解压 SQL 文件并通过 mysql 客户端导入 # -uzabbix -pzabbix_password 使用 Zabbix 用户认证 # 导入成功后创建锁文件,防止重复执行 cmd: > zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -pzabbix_password zabbix && touch /etc/zabbix/.init_db_sql.lock args: creates: /etc/zabbix/.init_db_sql.lock # 如果锁文件已存在,则跳过此任务(幂等性保证) # ==================================================================== # 阶段九:导入完成后恢复安全设置 # ==================================================================== - name: disable log_bin_trust_function_creators ansible.mysql.mysql_variables: variable: log_bin_trust_function_creators value: 0 # 关闭创建函数的权限,恢复安全状态 # ==================================================================== # 阶段十:配置 Zabbix Server 数据库连接 # ==================================================================== - name: configure zabbix server database password ansible.builtin.lineinfile: path: /etc/zabbix/zabbix_server.conf regexp: '^DBPassword=' # 匹配已存在的 DBPassword 行 insertafter: '^# DBPassword=' # 如果不存在则插入到注释行之后 line: DBPassword=zabbix_password # 使 Server 能使用我们创建的用户密码连接数据库 # ==================================================================== # 阶段十一:启动所有服务并设置开机自启 # ==================================================================== - name: restart and enable all services ansible.builtin.service: name: "{{ item }}" state: restarted # 重启加载新配置 enabled: yes # 开机自启 loop: - zabbix-server # Zabbix Server 核心服务 - zabbix-agent # 本机 Agent - httpd # Apache Web 服务器 - php-fpm # PHP FastCGI 进程管理器
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 13:47:02

【单片机毕设案例分享】基于 STM32 的便携式老人安全监测预警终端开发 基于 STM32 的多传感器信息采集应急求救系统设计(018004)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于单片机,STM32单片机,51单片机,J…

作者头像 李华
网站建设 2026/8/24 13:46:45

2026 Agent应用开发实战:从大模型集成到企业级项目落地

这次我们来看一个面向2026年的Agent应用开发实战教程。这套资源的核心不是空谈概念,而是提供从基础原理到企业级项目实战的完整路径,并配套了可直接落地的大模型学习资源。对于想从零开始掌握智能体开发,并希望将大模型能力集成到实际业务中的…

作者头像 李华
网站建设 2026/8/24 13:46:39

学 C 语言数组别再混淆:下标、初始化、二维行优先存储详解

数组概述为什么需要数组?用一块连续的内存空间,一次性管理多个相同类型的数据。什么是数组定义:数组是相同类型,有序数据的集合。数组的特征数组中的每个数据称为 元素(也就是匿名的变量空间),所…

作者头像 李华
网站建设 2026/8/24 13:46:34

2026/08/16 AI学习笔记

一 . Ollama学习笔记1. ollama概述Ollama 可以理解成“本地版的 OpenAI API”,可以直接调用,不需要通过互联网。没有部署的:你的电脑│▼ Spring AI│▼ 互联网│▼ DeepSeek / OpenAI / 豆包│▼ 返回结果部署ollama的:你的电脑│▼ Spring AI│▼ Olla…

作者头像 李华
网站建设 2026/8/24 13:45:40

双脉冲开关测试中考虑电路寄生影响的波形分析

参考文献:Performance Comparison of Standalone 4H-SiC JFETs and Cascode Devices at Cryogenic Temperature 在双脉冲测试中,器件开关波形受到功率回路寄生电感、续流二极管结电容、器件非线性结电容、封装键合线和内部栅极网络的共同影响。开通过程中…

作者头像 李华
网站建设 2026/8/24 13:45:38

鱼眼相机标定核心参数解析,可定制开发各种视觉测量算法

鱼眼相机标定旨在确定其独特的内部参数和畸变模型,以校正图像并实现精确的几何测量。其核心在于使用更复杂的模型来描述大视场角镜头引入的严重径向畸变。 一、鱼眼相机模型与标定参数 鱼眼相机模型通常使用等距投影模型,其标定参数与普通透视相机有显…

作者头像 李华