【问题标题】:DRY Ansible playbook?干燥的 Ansible 剧本?
【发布时间】:2018-04-27 16:04:30
【问题描述】:

我正在尝试使用 ansible 来管理远程 postgres 实例的角色,其剧本如下所示:

---
- hosts: localhost
  tasks:
  - postgresql_user:
      login_host: the.db.com
      login_password: password
      port: 5432
      login_user: admin
      db: the-db
      name: user-i-want-to-create

这可行,但我想创建很多这样的用户,并且为每个用户一遍又一遍地重复 5 个参数是乏味且容易出错的。我怎样才能将这些变量分解为不需要为每个任务重复它们?

【问题讨论】:

  • 我遇到了类似的问题,当时 Ansible 的回答是“这不是 Ansible 的设计初衷”。不确定过去一年情况是否发生了变化。
  • 您有没有费心查看 Ansible 文档?谷歌ansible loops.
  • @techraf 我有,但没想到专门搜索循环。不过,它们似乎很有希望,如果不是我想要的。 (他们仍然需要为不同的 postgres 相关结构重复连接信息,例如)。

标签: ansible yaml


【解决方案1】:

这将很容易与几个变量和一个循环一起工作。应该这样做:

---
- hosts: localhost
  vars:
    pgsql_default_db: "the-db"
    pgsql_root_user: "admin"
    pgsql_root_pass: "password"
    pgsql_users:
      - name: "user_1"
        password: "user_1_password"
      - name: "user_2"
        password: "user_2_password"
      - name: "user_3"
        password: "user_3_password"
        db: "the-alternate-db"
  tasks:
    - name: Create database users.
      postgresql_user:
        login_host: the.db.com
        login_password: "{{ pgsql_root_pass }}"
        login_user: "{{ pgsql_root_user }}"
        port: 5432
        db: "{{ item.db | default(pgsql_default_db) }}"
        name: "{{ item.name }}"
        password: "{{ item.password }}"
      with_items: "{{ pgsql_users }}"

这将创建三个用户,由 pgsql_users var 定义,并展示了一种改变某些属性的方法——user_3 的创建可以访问与 user_1user_2 不同的数据库。

现在只有 一个 任务,因此设置起来很容易,而且有点麻烦,the user data could even come from a different source(尽管数据结构需要与我在此处显示的类似为了使用基本的with_items 循环)。

【讨论】:

    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多