Ansible 干巴巴的剧本?
我正在尝试使用ansible管理远程postgres实例的角色,其剧本如下所示: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 这是可
---
- 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文档?Googleansible loops
@techraf我有,但没有想到专门搜索循环。虽然它们看起来很有前途,但也不是我想要的。(例如,他们仍然需要为不同的与postgres相关的结构重复连接信息。)我有一个类似的问题,Ansible当时的回答是“Ansible的设计目的不是这样的”。不确定在过去的一年里情况是否发生了变化。你有没有费心去看Ansible文档?Googleansible loops
@techraf我有,但没有想到专门搜索循环。虽然它们看起来很有前途,但也不是我想要的。(他们仍然需要为不同的postgres相关结构重复连接信息,例如)。