首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可变环境变量或默认环境变量

可变环境变量或默认环境变量
EN

Stack Overflow用户
提问于 2018-06-13 14:49:34
回答 3查看 8.9K关注 0票数 5

如何从环境变量中获取值,但如果环境变量未设置,则使用默认值?

这是一个不起作用的例子

代码语言:javascript
复制
---
- name: a playbook
  hosts: all
  vars:
    build_dir: "{{ lookup('env','BUILD_DIR') | default('builds/1.0.0/LATEST') }}"
  tasks:
    - debug: msg="{{ build_dir }}"

运行此剧本将返回一个空字符串,而不是默认的字符串。

代码语言:javascript
复制
$ ansible-playbook build.yml

TASK [debug] ********************
ok: [amber] => {
    "msg": ""
}

但是,它的工作原理是获得环境变量。

代码语言:javascript
复制
$ BUILD_DIR=LOL ansible-playbook build.yml

TASK [debug] ****************
ok: [amber] => {
    "msg": "LOL"
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-13 17:57:45

最好不要有太多的真实来源,但我总是尝试在defaults/main.yml中设置智能默认值。我还经常使用default()过滤器,如下所示:

代码语言:javascript
复制
db_url          : "{{ DB_HOST }}:{{ db_port | default(1521) }}:{{ DB_SVC | default(SID|default('')) }}"

然后,一个剧本总是可以用默认为文字的查找来覆盖角色的变量-

代码语言:javascript
复制
vars:
  db_port: "{{ lookup('env','db_port')|default('9999') }}"

或者在播放开始前动态地将一个值写入vars_file,或者在主机文件或组文件中,或者在带有--extra-vars的ansible命令行上,等等。

看看可变优先规则,但是如果可以避免的话,请小心不要变得太复杂。灵活是好的,但是亲吻,否则“这种方式是疯狂的.”

票数 5
EN

Stack Overflow用户

发布于 2020-02-19 19:08:39

发现这比我见过的其他选项更简洁、更容易阅读。

代码语言:javascript
复制
"{{ lookup('env','BUILD_DIR') or 'builds/1.0.0/LATEST' }}"
票数 10
EN

Stack Overflow用户

发布于 2018-06-13 15:06:05

Jinja的default模板内置函数的最后一个参数应该是true,如下所示:

代码语言:javascript
复制
  vars:
    build_dir: "{{ lookup('env','BUILD_DIR')|d('builds/1.0.0/LATEST', true) }}"
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50840206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档