ansible - 解包 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
我怎样才能做到这一点?(最好不存在仅为设置变量而存在的中间虚拟任务。)
解决方案
这就是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
推荐阅读
- android - 无法从 onCreate 外部将数据设置为 MPAndroidChart
- javascript - 使用react js的渲染功能时出错
- laravel - 在 Laravel 5.8 中对多个字段进行唯一验证
- spring - 从同一浏览器访问 API 时获取多个会话对象
- php - 如何使用复选框在 laravel 中存储 foreach 值
- php - Laravel API 测试 - 浏览器和 PHPUnit 之间的 http 请求不同的 baseUrl 和 pathInfo
- angular - 怎么做
点击输入时显示 - javascript - Sync-gateway 返回此错误 401 Login required 是什么意思?
- android - org.json.JSONException:java.lang.String 类型的值成功无法转换为 JSONObject
- c++ - 如何构建查找表?