繁体   English   中英

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应用环境,例如角色

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM