我有一个包含以下内容的文件:
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)的值,以便可以在脚本中使用这些变量以备后用?
答案 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控制机器上而不是在目标/远程上评估的。