以与 LAMP DB 无关的方式创建数据库堆栈

以与 LAMP DB 无关的方式创建数据库堆栈

是否有 LAMP-MySQL(或同等产品)不可知论者创建数据库堆栈的方法包括:

  1. DB 用户和相对密码
  2. 与用户同名的数据库
  3. 为数据库设置主机(例如,localhost
  4. 授予用户所有权限

我需要这种方式或方法的原因是,当使用不同的 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

请注意,这是一个非常笼统且不完整的示例,旨在让您了解可用于解决此问题的结构。

相关内容