[英]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 脚本部署到多个数据库服务器。
例如,使用这些变量:
不是通过 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并应用环境,例如角色
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
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.