Ansible-读取文件并注册变量

时间:2019-08-30 02:15:36

标签: ansible

我有一个包含以下内容的文件:

AWS_ACCESS_KEY_ID = xxxxxxx

AWS_SECRET_ACCESS_KEY = yyyyyy

AWS_SESSION_TOKEN = zzzzzzzz

如何读取此文件,基于“ =”分割行,并设置变量(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_SESSION_TOKEN)的值,以便可以在脚本中使用这些变量以备后用?

1 个答案:

答案 0 :(得分:1)

  

问:如何读取此文件,如何基于“ =”分割行并设置变量的值?

A:使用ini查找插件。例如下面的任务

- set_fact:
    AWS_ACCESS_KEY_ID: "{{ lookup('ini', 'AWS_ACCESS_KEY_ID type=properties file=conf.ini') }}"
- debug:
    var: AWS_ACCESS_KEY_ID

给予

"AWS_ACCESS_KEY_ID": "xxxxxxx"

可以使用变量列表。例如下面的播放

- hosts: localhost
  vars:
    my_vars_keys: [AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN]
  tasks:
    - set_fact:
        my_vars: "{{ my_vars|default({})|
                     combine({item:
                              lookup('ini',
                                      item ~ ' type=properties file=conf.ini')})
                                      }}"
      loop: "{{ my_vars_keys }}"
    - debug:
        msg: "{{ my_vars[item] }}"
      loop: "{{ my_vars_keys }}"

给予

ok: [localhost] => (item=AWS_ACCESS_KEY_ID) => {
    "msg": "xxxxxxx"
}
ok: [localhost] => (item=AWS_SECRET_ACCESS_KEY) => {
    "msg": "yyyyyy"
}
ok: [localhost] => (item=AWS_SESSION_TOKEN) => {
    "msg": "zzzzzzzz"
}

  

问:我如何确保以上set_fact在主机上而不在ansible塔上运行?

A:set_fact使用Lookup Plugins。报价

  

就像所有模板一样,这些插件是在Ansible控制机器上而不是在目标/远程上评估的。