我想在单个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,那就好了。这有可能在单一游戏中实现。(即)在单一命令中
有很多方法可以解决这个问题。你可以添加第二个在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') })}}"