【问题标题】:Ansible task to generate and execute file using dict, template使用字典、模板生成和执行文件的 Ansible 任务
【发布时间】:2016-12-19 01:30:33
【问题描述】:

我无法完全理解如何告诉 Ansible 执行以下操作:

  1. 循环遍历 /vars/main.yml 中定义的字典“用户”
  2. 填写/templates/sql_template.j2中定义的模板
  3. 使用生成的文件作为参数执行命令

当我运行 playbook 时,我可以在输出中看到字典中的每个项目都在使用。完成后,文件包含最后一项。

此时我有两个选择:

  1. 使用为每次迭代生成的文件执行我的 sql 命令。
  2. 以某种方式使每次迭代都添加到文件中而不是覆盖它,然后在循环完成时使用已完成的文件执行 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。

这些是我目前拥有的将每次迭代写入目标服务器上的文件的文件。不是我需要的,但它很接近。

tasks/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: "test1@teset.com"
  test2:
    user_nbr: 501
    user_name: "test2"
    user_desc: "developer"
    password: "f0dd960681eca16f0f5c1cda8d83e72c"
    display_name: "Test2"
    email: "test2@test.com"

模板/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;

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案1】:

    解决方案是在模板内进行循环。文件 vars/main.yml 中定义的变量在模板中自动可用。这些文件现在看起来像这样,它会生成整个文件:

    tasks/main.yml

    ---
    - name: Insert web app users
      template:
        src: sql_template.j2
        dest: /tmp/sql_template
    

    模板/sql_template.j2

    {% for item in users %}
    INSERT INTO cbcommon:users (user_nbr, user_name, user_desc, password, user_timeout, suspended, change_password, no_password_expiry, display_name, email) VALUES ({{users[item].user_nbr}}, '{{users[item].user_name}}', '{{users[item].user_desc}}', '{{ users[item].password}}', 60, 0, 0, 1, '{{ users[item].display_name}}', '{{ users[item].email}}' );
    INSERT INTO cbcommon:users_orgs (user_nbr, org_nbr, class_nbr, primary_org) VALUES({{users[item].user_nbr}}, 1000, -1, 1);
    INSERT INTO cbcommon:users_orgs (user_nbr, org_nbr, class_nbr, primary_org) SELECT {{ users[item].user_nbr}}, org_nbr, -1, 0 FROM orgs WHERE org_nbr != 1000;
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 2016-10-11
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多