DRY Ansible剧本?

时间:2018-04-27 00:44:54

标签: ansible yaml

我正在尝试使用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个参数是单调乏味且容易出错的。如何将这些变量分解为不需要为每个任务重复这些变量?

1 个答案:

答案 0 :(得分:3)

这对于几个变量和一个循环非常容易。这样的事情应该这样做:

---
- 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_1不同的数据库, user_2

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