如何在ansible中迭代环境变量?
How to iterate environment variables in ansible?
在这本剧本中
# db.yml
- hosts: deploy-server
become: True
roles:
- db
environment:
PGHOST: "{{ db_host }}"
PGPASSWORD: "{{ db_pass }}"
在数据库角色中
# roles/db/tasks/main.yml
- name: Run sql
shell: "psql -U postgres -f /sql"
我想将同一个 sql 脚本部署到多个数据库服务器。
例如,使用这些变量:
- db_host1
- db_host2
- ...
不是通过 ssh,而是使用 psql。那么是否可以循环PGHOST
变量来设置要使用的动态列表?
问:"是否可以循环PGHOST变量?"
答:是的。有可能的。在循环中设置环境变量,例如
- hosts: localhost
tasks:
- command: "echo $PGHOST"
register: result
loop: [db_host1, db_host2]
environment:
PGHOST: "{{ item }}"
- debug:
msg: "{{ result.results|json_query('[].stdout') }}"
给予
msg:
- db_host1
- db_host2
如果要将各种环境应用于角色,请迭代 include_role and apply 环境,例如角色
shell> cat roles/db/tasks/main.yml
- command: "echo $PGHOST"
register: result
- debug:
var: result.stdout
和剧本
shell> cat pb.yml
- hosts: localhost
tasks:
- include_role:
name: db
apply:
environment:
PGHOST: "{{ item }}"
loop: [db_host1, db_host2]
给予
...
TASK [include_role : db] ***********************************************
TASK [db : command] ****************************************************
changed: [localhost]
TASK [db : debug] ******************************************************
ok: [localhost] =>
result.stdout: db_host1
TASK [db : command] ****************************************************
changed: [localhost]
TASK [db : debug] ******************************************************
ok: [localhost] =>
result.stdout: db_host2
...
在这本剧本中
# db.yml
- hosts: deploy-server
become: True
roles:
- db
environment:
PGHOST: "{{ db_host }}"
PGPASSWORD: "{{ db_pass }}"
在数据库角色中
# roles/db/tasks/main.yml
- name: Run sql
shell: "psql -U postgres -f /sql"
我想将同一个 sql 脚本部署到多个数据库服务器。
例如,使用这些变量:
- db_host1
- db_host2
- ...
不是通过 ssh,而是使用 psql。那么是否可以循环PGHOST
变量来设置要使用的动态列表?
问:"是否可以循环PGHOST变量?"
答:是的。有可能的。在循环中设置环境变量,例如
- hosts: localhost
tasks:
- command: "echo $PGHOST"
register: result
loop: [db_host1, db_host2]
environment:
PGHOST: "{{ item }}"
- debug:
msg: "{{ result.results|json_query('[].stdout') }}"
给予
msg:
- db_host1
- db_host2
如果要将各种环境应用于角色,请迭代 include_role and apply 环境,例如角色
shell> cat roles/db/tasks/main.yml
- command: "echo $PGHOST"
register: result
- debug:
var: result.stdout
和剧本
shell> cat pb.yml
- hosts: localhost
tasks:
- include_role:
name: db
apply:
environment:
PGHOST: "{{ item }}"
loop: [db_host1, db_host2]
给予
...
TASK [include_role : db] ***********************************************
TASK [db : command] ****************************************************
changed: [localhost]
TASK [db : debug] ******************************************************
ok: [localhost] =>
result.stdout: db_host1
TASK [db : command] ****************************************************
changed: [localhost]
TASK [db : debug] ******************************************************
ok: [localhost] =>
result.stdout: db_host2
...