zauberpony.mysql-query
Ansible 角色:mysql_query
Ansible 模块用于在 MySQL 表中设置值或插入记录。对于将配置存储在数据库中的 web 应用程序非常有用。例如,icingaweb2 需要将初始用户插入到数据库中。安装向导可以完成此任务,但使用 Ansible 您想要自动化安装 ;)
在 Ansible Galaxy 页面列出为 zauberpony.mysql-query.
安装
通过 ansible-galaxy 安装,使用命令 ansible-galaxy install zauberpony.mysql-query
,或者手动将文件 mysql_query 放入您的 roles_path 中。
要求:
MySQL 的 Python 绑定(就像核心的 mysql_* 模块):
- MySQLdb(仅适用于 Python 2.x)
- PyMySQL(适用于 Python 2.7 和 Python 3.x)
示例剧本
一个完整的示例,确保在给定表中存在一条记录。
---
- hosts: all
roles:
- zauberpony.mysql-query
tasks:
- name: 插入一行
mysql_query:
name: ansible-playbook-example
table: simple_table
login_host: ::1
login_user: root
login_password: password
identifiers:
id: 14
email: '[email protected]'
values:
role: "admin"
department: 'IT'
defaults:
password: "secret"
last_login: 1469264933
给定表 simple_table
具有列 (id, email, role, department, password, last_login),这个例子将:
- 查找 where id = 14 and email = 'john@example.com' 的行
- 如果行不存在:插入一行,id=14,email='john@example.com',role="admin",department="IT",password="secret",last_login=1469264933
- 如果行存在:检查 values(role, department)是否与给定值匹配,如果不匹配:更新
因此:
- identifiers 用于检查行的存在性并找到行
- defaults 用作行不在时的默认值(即:仅用于插入)
- values 是 Ansible 确保的行状态
一个完整的示例,确保在给定表中不存在一条记录。
---
- hosts: all
roles:
- zauberpony.mysql-query
tasks:
- name: 插入一行
mysql_query:
state: absent
name: ansible-playbook-example
table: simple_table
login_host: ::1
login_user: root
login_password: password
identifiers:
id: 14
email: '[email protected]'
从源代码运行示例
确保您有一个正在运行的 MySQL 服务器(例如:使用 docker-compose.yml 文件),并根据需要更新连接参数。
通过 ansible-playbook -i demo.yml
运行(或更简单的 ./demo.yml
),并通过 ansible-playbook -i reset.yml
进行撤销(重新开始)。
在运行 ./demo.yml
后,可以运行 ./checkmode-demo.yml -C
来测试 Ansible 的 检查模式。只需多次运行 ./demo.yml
和 ./checkmode-demo.yml
,带 -C
运行和不带 -C
运行,以感受它。