我想在一次播放中根据变量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则不好。是否可以在单个命令中实现。 >
答案 0 :(得分: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') })}}"