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