#ansible #devops
Вопрос:
roles/mysql ├── handlers │ └── main.yml ├── tasks │ └── main.yml ├── templates └── vars └── main ├── mysql_user_privileges.yml └── mysql_users.yml
var/main/mysql_user_privileges.yml
--- # MySQL Admin privileges mysql_admin_user_host: "%" mysql_admin_user_privileges: '*.*:ALL' mysql_admin_user_pwd: secret # MySQL Read-only Privileges mysql_ro_user_host: "%" mysql_ro_user_privileges: '*.*:SELECT' mysql_ro_user_pwd: secret
mysql/задачи/main.yml
--- - name: Creating MySQL READ-ONLY Users ... community.mysql.mysql_user: # login_host: "{{ mysql_login_host }}" login_port: "{{ mysql_login_port }}" login_user: "{{ mysql_login_user }}" login_password: "{{ mysql_login_pwd }}" host: "{{ mysql_ro_user_host }}" name: "{{ item }}" password: "{{ mysql_ro_user_pwd }}" priv: "{{ mysql_ro_user_privileges }}" state: present loop: "{{ mysql_ro_users }}" - name: Creating MySQL ADMIN Users ... community.mysql.mysql_user: login_port: "{{ mysql_login_port }}" login_user: "{{ mysql_login_user }}" login_password: "{{ mysql_login_pwd }}" host: "{{ mysql_admin_user_host }}" name: "{{ item }}" password: "{{ mysql_admin_user_pwd }}" priv: "{{ mysql_admin_user_privileges }}" state: present loop: "{{ mysql_admin_users }}"
var/main/mysql_users.yml
--- # MySQL READ ONLY Users mysql_ro_users: - user1 # MySQL ADMIN Users mysql_admin_users: - user2
Я впервые пробую Ansible. Это мой код для создания пользователей на сервере mysql с all
правами только для чтения ( select
). На самом деле я повторяю свой код в mysql_user_privileges.yml
и tasks/main.yml
. У меня есть небольшой опыт работы с Puppet, где мы можем использовать параметризованные классы и определять функции, чтобы минимизировать строку кода и повторение, но я не могу найти аналогичную вещь в Ansible. Может ли кто-нибудь переработать это в Ansible или направить меня в правильном направлении, пожалуйста?
Заранее спасибо!
Комментарии:
1. вы хотите написать только одну задачу для создания всех типов пользователей?
2. @Frenchy — Да, точно, со всеми необходимыми параметрами в задаче, передавая требуемые значения параметров, если не со значениями по умолчанию.
Ответ №1:
вы создаете параметр, который связан с типом пользователя:
- name: Creating All type of Users ... community.mysql.mysql_user: login_port: "{{ mysql_login_port }}" login_user: "{{ mysql_login_user }}" login_password: "{{ mysql_login_pwd }}" host: "{{ vars[item[0] '_host'] }}" name: "{{ item[1] }}" password: "{{ vars[item[0] '_pwd'] }}" priv: "{{ vars[item[0] '_privileges'] }}" state: present loop: "{{ users | flatten(levels=1) }}" vars: users: - "{{ ['mysql_ro_user'] | product(mysql_ro_users) }}" - "{{ ['mysql_admin_user'] | product(mysql_admin_users) }}"
еще один способ написания задач:
- name: Creating All type of Users ... community.mysql.mysql_user: # login_host: "{{ mysql_login_host }}" login_port: "{{ mysql_login_port }}" login_user: "{{ mysql_login_user }}" login_password: "{{ mysql_login_pwd }}" host: "{{ _host }}" name: "{{ _name }}" password: "{{ _pass }}" priv: "{{ _priv }}" state: present loop: "{{ users | flatten(levels=1) }}" vars: users: - "{{ ['mysql_ro_user'] | product(mysql_ro_users) }}" - "{{ ['mysql_admin_user'] | product(mysql_admin_users) }}" _host: "{{ vars[item[0] '_host'] }}" _pass: "{{ vars[item[0] '_pwd'] }}" _priv: "{{ vars[item[0] '_privileges'] }}" _name: "{{ item[1] }}"
_host: "{{ vars[item[0] '_host'] }}"
можно было бы написать
_host: "{{ lookup('vars', item[0] '_host') }}"
и так далее….
Комментарии:
1. Сэр, понял. Большое вам спасибо!. Пожалуйста, отредактируйте другой способ задания,
_pass
заменив_pwd
и удалив лишние[
элементы рядом в последней строке.2. рад помочь..да, я исправил некоторые ошибки вставки, которые вы заметили