Я не могу понять, как сказать Ansible сделать следующее:
- Перебрать словарь 'users', определенный в /vars/main.yml
- Заполните шаблон, определенный в /templates/sql_template.j2
- Выполнить команду с сгенерированным файлом в качестве аргумента
Когда я запускаю playbook, я вижу в выводе, что каждый элемент в словаре используется. Когда это будет сделано, файл будет содержать последний элемент.
На данный момент у меня есть два варианта:
- выполнить мою команду sql, используя сгенерированный файл для каждой итерации.
- как-то заставить каждую итерацию добавлять в файл вместо его перезаписи, а затем выполнять команду sql, используя завершенный файл, когда цикл завершен
Вариант 1 выглядел бы примерно так, но он не работает из-за дополнительной команды в задаче
---
- name: Insert web app users
template:
src: sql_template.j2
dest: /tmp/sql_template
with_dict: users
command: cat /tmp/sql_template
Я понятия не имею, как решить вариант 2.
Это файлы, которые у меня есть в настоящее время, которые записывают каждую итерацию в файл на целевом сервере. Не совсем то, что мне нужно, но близко.
задачи / main.yml
---
- name: Insert web app users
template:
src: sql_template.j2
dest: /tmp/sql_template
with_dict: users
vars / main.yml
users:
test1:
user_nbr: 500
user_name: "test1"
user_desc: "developer"
password: "f0dd960681eca16f0f5c1cda8d83e72c"
display_name: "Test1"
email: "[email protected]"
test2:
user_nbr: 501
user_name: "test2"
user_desc: "developer"
password: "f0dd960681eca16f0f5c1cda8d83e72c"
display_name: "Test2"
email: "[email protected]"
шаблоны / sql_template.j2
INSERT INTO cbcommon:users (user_nbr, user_name, user_desc, password, user_timeout, suspended, change_password, no_password_expiry, display_name, email) VALUES ({{item.value.user_nbr}}, '{{item.value.user_name}}', '{{item.value.user_desc}}', '{{ item.value.password}}', 60, 0, 0, 1, '{{ item.value.display_name}}', '{{ item.value.email}}' );
INSERT INTO cbcommon:users_orgs (user_nbr, org_nbr, class_nbr, primary_org) VALUES({{item.value.user_nbr}}, 1000, -1, 1);
INSERT INTO cbcommon:users_orgs (user_nbr, org_nbr, class_nbr, primary_org) SELECT {{ item.value.user_nbr}}, org_nbr, -1, 0 FROM orgs WHERE org_nbr != 1000;