【发布时间】:2019-04-15 20:37:15
【问题描述】:
在 Red Hat 的剧本中使用 if/else 条件设置变量时出错。
我尝试了几种不同的引号、括号等排列方式。
执行为“ansible-playbook -e env=dev playbook.yaml”
设置变量:
vars:
certenv: "{{ '-eng.dev.' if {{env}} == 'eng' else '.dev.' if {{env}} == 'dev' else '.uat.' if {{env}} == 'stg' else '.prd.' if {{env}} == 'prd' }}"
任务
- name: Update server.xml Cert
lineinfile:
dest: "{{tomcat}}/conf/server.xml"
regexp: '^(.*)certificateFile(.*)$'
line: 'certificateFile="{{tomcat}}/webapps/{{appwar}}/certificates/app{{certenv}}domain.cer"'
错误
fatal: [localhost]: FAILED! => {"msg": "An unhandled exception occurred while templating '{{ '-eng.dev.' if {{env}} == 'eng' else '.dev.' if {{env}} == 'dev' else '.uat.' if {{env}} == 'stg' else '.prd.' if {{env}} == 'prd' }}'.
Error was a <class 'ansible.errors.AnsibleError'>, original message: template error while templating string: expected token ':', got '}'. String: {{ '-eng.dev.' if {{env}} == 'eng' else '.dev.' if {{env}} == 'dev' else '.uat.' if {{env}} == 'stg' else '.prd.' if {{env}} == 'prd' }}"}
期望将 certenv 变量设置为“.dev”。例如。
【问题讨论】:
-
你为什么不尝试使用
when?来自ansible conditionals。 -
你试过了吗:certenv: "{{ '-eng.dev.'如果 env == 'eng' 否则 '.dev.'如果 env == 'dev' 否则 '.uat.'如果 env == 'stg' 否则 '.prd.'如果 env == 'prd' }}"
-
@HermanTheGermanHesse - 将调查“何时”谢谢。
-
@cpt_guy - 我得到“'env' is undefined” - 感谢您的回复
-
你有一个叫 env 的变量吗?我认为我们在正确的轨道上。
标签: ansible