Ansible是否有其他条件

时间:2019-09-13 14:32:13

标签: ansible yaml

到目前为止,我可以看到使用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 }}"

2 个答案:

答案 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 %}"