TAG
作者主题
- 使用 Openpyxl 合并数据时出现 Excel 错误
- 如何根据 ansible 中的条件仅使用 3 个变量中的一个?
- 通过 Helm 使用自定义 Dockerfile 在本地部署 Airflow
- 如何构建 html
使用[仅] angular.js 模板来获得不连贯的 json?
作者最近主题:
我有三个变量需要根据条件进行注册,它将运行一个任务并注册一个变量,我怎样才能对相应的任务使用测试变量?----名称:Test1 命令:\'ech...
我有三个变量需要根据条件进行注册,它将运行一项任务并注册一个变量,我怎样才能对相应的任务使用测试变量?
---
- name: Test1
command: "echo HAHA"
register: testing
when: HAHA is defined
- name: Test2
command: "echo BLABLA"
register: testing
when: BLABLA is defined
- name: Test3
command: "echo DODO"
register: testing
when: DODO is defined
- name: Verify Tests
command: "execute {{ testing.stdout }}"
when: TEST is defined
我收到类似以下未定义变量的错误:
{"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'stdout'\n\nThe error appears to be in '/home/ubuntu/tests/': line 3, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Verify Tests \n ^ here\n"
您能提出建议吗?
使用 debug
任务来验证变量是否包含您认为的内容始终是一个好主意。
当您 register
在任务中使用时, 无论任务是否运行, 始终 DODO
未设置变量,则在您的最终任务中,变量 testing
将包含:
ok: [localhost] => {
"testing": {
"changed": false,
"false_condition": "DODO is defined",
"skip_reason": "Conditional result was False",
"skipped": true
}
}
如您所见,这里没有 stdout
属性。对于您想要的行为,您可以像这样重写剧本:
- hosts: localhost
gather_facts: false
tasks:
- name: Test1
command: "echo HAHA"
register: testing1
when: HAHA is defined
- name: Test2
command: "echo BLABLA"
register: testing2
when: BLABLA is defined
- name: Test3
command: "echo DODO"
register: testing3
when: DODO is defined
- set_fact:
testing: >-
{{
[testing1, testing2, testing3] | selectattr("stdout", "defined")
}}
- name: Verify Tests
when: testing
debug:
msg: "execute {{ testing[0].stdout }}"
在没有定义变量的情况下运行此命令会导致:
TASK [Verify Tests] *************************************************************************************************************************
skipping: [localhost]
但如果我们定义目标变量:
$ ansible-playbook playbook.yaml -e DODO=1
.
.
.
TASK [Verify Tests] *************************************************************************************************************************
ok: [localhost] => {
"msg": "execute DODO"
}
或者:
$ ansible-playbook playbook.yaml -e HAHA=1
.
.
.
TASK [Verify Tests] *************************************************************************************************************************
ok: [localhost] => {
"msg": "execute HAHA"
}
如果设置了多个变量,您将从第一个执行的任务中获取值:
$ ansible-playbook playbook.yaml -e HAHA=1 -e DODO=1
.
.
.
TASK [Verify Tests] *************************************************************************************************************************
ok: [localhost] => {
"msg": "execute HAHA"
}