首页 > 解决方案 > 解包 ansible 结果变量

问题描述

这是我经常做的事情

- name: check whether ready
  shell: do_something_complex
  changed_when: false
  ignore_errors: true
  register: result

- name: make it ready
  when: result.rc != 0

之后有许多任务执行相同的检查时会很混乱。

我想以某种方式包装结果,并像这样使用它:

- name: do this if ready
  when: isReady

- name: do that if not ready
  when: not isReady

我怎样才能做到这一点?(最好不存在仅为设置变量而存在的中间虚拟任务。)

标签: ansible

解决方案


这就是import_tasks:,甚至自定义模块,旨在解决的问题:

# tasks/make_ready.yml
- name: check whether ready
  shell: '{{ check_ready_shell }}'
  changed_when: false
  # you'll want to be **very careful** using this
  ignore_errors: true
  register: isReady

- name: make it ready
  shell: '{{ make_ready_shell }}'
  when: isReady.rc != 0

然后,在你的主要剧本中:

- import_tasks: make_ready.yml
  vars:
    check_ready_shell: echo 'hello from checking'
    make_ready_shell: systemctl start-the-thing-or-whatever

- import_tasks: make_ready.yml
  vars:
    check_ready_shell: echo 'hello from other checking'
    make_ready_shell: systemctl start-the-other-thing

推荐阅读