我有一个角色可以引导用户的OSX工作站。在其中,我需要使用以下优先级确保正确设置xdg变量:
我尝试了几种不同的方法,但我遇到的基本问题是我无法嵌套变量插值,所以接近一个(以及我能想到的所有其他方法) )在defaults / main.yml中失败:
# if the env var doesn't exist, it'll set it to an empty string, doesn't look
# like there is a way to specify the 'default' string that should be used
# xdg_cache_home: "{{ lookup('env','XDG_CACHE_HOME') }}"
# this is just bad syntax, can't have nested '{{ }}'
# xdg_config_home: "{{ lookup('env','XDG_CACHE_HOME') | default("{{ home }}/.cache", true) }}"
# this simply fails to define the variable, i'm not sure why
# xdg_cache_home: "{{ default( lookup('env','XDG_CACHE_HOME'), join(lookup('env', 'HOME', '.cache'))) }}"
我尝试的下一个方法是使用第一个方法设置默认值(空字符串,如果为空),然后在roles / myrole / tasks / main.yml中检查并设置默认值:
- name: set default xdg_cache_home
set_fact: xdg_cache_home="{{ join(lookup('env', 'HOME', '/.cache')) }}"
when: "{{ xdg_cache_home }}" == ""
但我也无法做到这一点。有什么建议或意见吗?
答案 0 :(得分:1)
在jinja文档中找到答案 - 使用jinja字符串连接运算符(〜):
xdg_cache_home: "{{ lookup('env', 'XDG_CACHE_HOME') | default(ansible_user_dir ~ '/.cache', true) }}"
xdg_config_home: "{{ lookup('env', 'XDG_CONFIG_HOME') | default(ansible_user_dir ~ '/.config', true) }}"
xdg_data_home: "{{ lookup('env', 'XDG_DATA_HOME') | default(ansible_user_dir ~ '/.local/share', true) }}"