Ansible 干巴巴的剧本?

Ansible 干巴巴的剧本?,ansible,yaml,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 这是可

我正在尝试使用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个参数既单调又容易出错。我如何才能算出这些变量,使其不必在每个任务中重复它们?

这将非常容易地使用几个变量和一个循环。像这样的东西应该可以做到:

---
- 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\u users
var定义,并显示了改变某些属性的方法--
user\u 3
是通过访问不同于
user\u 1
user\u 2
的数据库创建的


现在只有一个任务,所以设置起来很容易,而且有点欺骗(虽然数据结构需要与我在这里展示的类似,以便使用基本的
和\u items
循环)。

这将非常容易地使用两个变量和一个循环。像这样的东西应该可以做到:

---
- 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\u users
var定义,并显示了改变某些属性的方法--
user\u 3
是通过访问不同于
user\u 1
user\u 2
的数据库创建的


现在只有一个任务,所以设置起来很容易,而且有点欺骗(尽管数据结构需要类似于我在这里展示的,以便使用基本的
和\u items
循环)。

我遇到了类似的问题,Ansible当时的回答是“Ansible不是设计用来做这个的”。不确定在过去的一年里情况是否发生了变化。你有没有费心去看Ansible文档?Google
ansible loops
@techraf我有,但没有想到专门搜索循环。虽然它们看起来很有前途,但也不是我想要的。(例如,他们仍然需要为不同的与postgres相关的结构重复连接信息。)我有一个类似的问题,Ansible当时的回答是“Ansible的设计目的不是这样的”。不确定在过去的一年里情况是否发生了变化。你有没有费心去看Ansible文档?Google
ansible loops
@techraf我有,但没有想到专门搜索循环。虽然它们看起来很有前途,但也不是我想要的。(他们仍然需要为不同的postgres相关结构重复连接信息,例如)。