有没有办法在ansible的条件过滤器中使用if..else逻辑?

问题描述 投票:0回答:1

我想在单个play中基于变量stdout对2个不同的值进行硬编码。如果服务正在运行,那么我想将硬编码值视为其他好的。如何在ansible中使用这个逻辑?

我可以根据状态结果硬编码一个值。

---
- hosts: localhost
  connection: local
  gather_facts: false
  vars:

  tasks:
  - name: load var from file
    include_vars:
      file: /tmp/var.json
      name: imported_var

  - name: Checking mysqld status
    shell: service mysqld status
    register: mysqld_stat

  - name: Checking mysqld status
    shell: service httpd status
    register: httpd_stat

  - name: append more key/values
    set_fact:
      imported_var: "{{ imported_var| default([]) | combine({ 'mysqld_status': 'good' })}}"
    when: mysqld_stat.rc == 0

  - name: append more key/values
    set_fact:
      imported_var: "{{ imported_var| default([]) | combine({ 'httpd_status': 'good' })}}"
    when: httpd_stat.rc == 0

  - name: write var to file
    copy:
      content: "{{ imported_var | to_nice_json }}"
      dest: /tmp/final.json

我想硬编码mysqld_status:如果mysqld_stat.rc == 0或mysqld-status:如果mysqld_stat.rc!= 0,那就好了。这有可能在单一游戏中实现。(即)在单一命令中

linux ansible
1个回答
1
投票

有很多方法可以解决这个问题。你可以添加第二个在set_fact时运行的mysqld_stat.rc != 0。在以下示例中,只运行两个set_fact任务中的一个:

- name: append more key/values
  set_fact:
    imported_var: "{{ imported_var| default({}) | combine({ 'mysqld_status': 'good' })}}"
  when: mysqld_stat.rc == 0

- name: append more key/values
  set_fact:
    imported_var: "{{ imported_var| default({}) | combine({ 'mysqld_status': 'bad' })}}"
  when: mysqld_stat.rc != 0

您可以使用Ansible的三元过滤器:

- name: append more key/values
  set_fact:
    imported_var: "{{ imported_var| default({}) | combine({ 'mysqld_status': (mysqld_stat.rc == 0)|ternary('good', 'bad') })}}"
© www.soinside.com 2019 - 2024. All rights reserved.