到目前为止,我可以看到使用when
来确定是否运行任务,但是我是否必须定义2个任务才能运行替代选项。
示例-如果我想运行以下任务然后运行调试任务,则需要运行两个任务,否则将没有为调试语句定义existStatus。我不能使用某种if else语句,而不要包括2个单独的任务吗?
- name: Print user does not exist status
shell: echo 'user does not exist'
when: kafka_configs_result.stdout_lines[1] == '1'
register: existStatus
- name: Print user does not exist status
shell: echo 'user already exists so could not be created'
when: kafka_configs_result.stdout_lines[1] == '0'
register: existStatus
- debug: msg="{{ existStatus.stdout_lines }}"
答案 0 :(得分:2)
您可以在单个任务中执行此操作,而无需执行不需要的Shell执行。一种简单的方法是使用测试和ternary
filter
我添加var部分只是为了提高可读性。您可以根据需要制作一个长衬纸。
- debug:
vars:
exists_test: "{{ kafka_configs_result.stdout_lines[1] == '1' }}"
msg_exists: "user already exists so could not be created"
msg_notexists: "user does not exist"
msg: "{{ exists_test | ternary(msg_notexists, msg_exists) }}"
答案 1 :(得分:2)
您可以编写类似的内容来利用if-loop
- set_fact: build="{% if '<something>' in <something> %}<VALUE>{% else %}<VALUE>{% endif %}"