我有以下变量:
secureVar:
cosmosconstr: ""
postgresUrl: ""
它可以为空或包含数据库url,具体取决于我需要在kubernetes中有条件地创建外部服务:
- name: Get DB data
when: (secureVars | from_json)['cosmosconstr'] | length == 0 and (secureVars | from_json)['postgresUrl'] | length == 0
shell: ./python/db_credentials.py -dp {{ deploymentPrefix }}
register: dbData
- name: Generate external services templates
when: (secureVars | from_json)['cosmosconstr'] | length == 0 and (secureVars | from_json)['postgresUrl'] | length == 0
action: template src=k8s/common/external-services.j2 dest=/tmp/k8s-external-svc.yml
vars:
cosmosUrl: "{{ dbData.stdout_lines[0] | urlsplit('hostname') }}"
postgresUrl: "{{ dbData.stdout_lines[1] }}"
- name: Generate external services templates
when: (secureVars | from_json)['cosmosconstr'] | length > 0 and (secureVars | from_json)['postgresUrl'] | length > 0
action: template src=k8s/common/external-services.j2 dest=/tmp/k8s-external-svc.yml
vars:
cosmosUrl: "{{ ( secureVars | from_json )['cosmosconstr'] | urlsplit('hostname') }}"
postgresUrl: "{{ ( secureVars | from_json )['postgresUrl'] }}"
这就是我现在正在做的事情,我想设置一个条件,以便如果跳过dbData,我将使用secureVars
,如果不跳过,则我将使用dbData,问题是,我无法检查dbData.skipped
是否等于true,因为如果不跳过,它就不包含skipped
属性
答案 0 :(得分:0)
您可能要使用默认的False值。
何时:dbData.skipped | default('False')
在OP中进行编辑:
我最终这样做:
"{% if dbData.skipped is defined %}{{ ( secureVars.stdout | from_json )['postgresUrl'] }}{% else %}{{ dbData.stdout_lines[1] }}{% endif %}"