如何从环境变量中获取值,但如果环境变量未设置,则使用默认值?
这是一个不起作用的例子
---
- name: a playbook
hosts: all
vars:
build_dir: "{{ lookup('env','BUILD_DIR') | default('builds/1.0.0/LATEST') }}"
tasks:
- debug: msg="{{ build_dir }}"运行此剧本将返回一个空字符串,而不是默认的字符串。
$ ansible-playbook build.yml
TASK [debug] ********************
ok: [amber] => {
"msg": ""
}但是,它的工作原理是获得环境变量。
$ BUILD_DIR=LOL ansible-playbook build.yml
TASK [debug] ****************
ok: [amber] => {
"msg": "LOL"
}发布于 2018-06-13 17:57:45
最好不要有太多的真实来源,但我总是尝试在defaults/main.yml中设置智能默认值。我还经常使用default()过滤器,如下所示:
db_url : "{{ DB_HOST }}:{{ db_port | default(1521) }}:{{ DB_SVC | default(SID|default('')) }}"然后,一个剧本总是可以用默认为文字的查找来覆盖角色的变量-
vars:
db_port: "{{ lookup('env','db_port')|default('9999') }}"或者在播放开始前动态地将一个值写入vars_file,或者在主机文件或组文件中,或者在带有--extra-vars的ansible命令行上,等等。
看看可变优先规则,但是如果可以避免的话,请小心不要变得太复杂。灵活是好的,但是亲吻,否则“这种方式是疯狂的.”
发布于 2020-02-19 19:08:39
发现这比我见过的其他选项更简洁、更容易阅读。
"{{ lookup('env','BUILD_DIR') or 'builds/1.0.0/LATEST' }}"发布于 2018-06-13 15:06:05
Jinja的default模板内置函数的最后一个参数应该是true,如下所示:
vars:
build_dir: "{{ lookup('env','BUILD_DIR')|d('builds/1.0.0/LATEST', true) }}"https://stackoverflow.com/questions/50840206
复制相似问题