是否有 LAMP-MySQL(或同等产品)不可知论者创建数据库堆栈的方法包括:
- DB 用户和相对密码
- 与用户同名的数据库
- 为数据库设置主机(例如,
localhost
) - 授予用户所有权限
我需要这种方式或方法的原因是,当使用不同的 LAMP-MySQL(或等效)数据库程序作为 LAMP 的一部分时,生活会更轻松。
例如,并非所有 LAMP 堆栈都特别具有 MySQL 或 MariaDB,并且每个 DB SQL 变体的 SQL 语法或 DB-CLUI (Bash) 扩展语法可能略有不同,因此我以与 LAMP-RDBMS 无关的方式寻求标准化。
答案1
我不确定是否已经存在任何东西(即在 Galaxy 中),但 Ansible 确实提供了执行此操作的所有构建块。这很可能没有被完成,或者至少没有公开发布,一个原因是没有一配置数据库的方法,更不用说约定的方法了任何DB技术应该是一般配置的。所以我猜你需要自己动手。
至于如何做到这一点,我可能会研究一种方法:
- 编写一个通用数据库角色,期望将一系列通用参数传递给它(即数据库技术、默认用户、默认数据库)
- 为每种数据库技术类型编写一个角色,只能传递公共参数。然后,该角色将运行数据库技术特定任务来配置您的实例
- 根据数据库技术类型,将角色依赖项添加到常规数据库角色
一个伪例子:
剧本.yml
---
# Apply the 'db' role to DB hosts
- hosts: db_hosts
roles:
- db
角色/db/defaults/main.yml
---
# Provide a default tech so one does not have to be passed at run time
db_technology: postgresql
角色/db/meta/main.yml
---
# Include the specific DB tech role, based on the value of 'db_technology'
dependencies:
- { role: postgresql, db_params: "{{ db_params }}", when: db_technology == 'postgresql' }
- { role: mysql, db_params: "{{ db_params }}", when: db_technology == 'mysql' }
角色/db/tasks/main.yml
---
# Do tasks that are common to all DB types here
角色/postgresql/tasks/main.yml
---
# Do postgresql specific tasks here
角色/mysql/tasks/main.yml
---
# Do mysql specific tasks here
最后,可以使用以下命令运行:
ansible-playbook -e "db_technology=mysql, db_params={'users': {'someuser': 'somepassword'}, 'dbs': ['some_db_name', 'another_db_name']" playbook.yml
请注意,这是一个非常笼统且不完整的示例,旨在让您了解可用于解决此问题的结构。