ansible - 无法根据条件运行任务文件以避免ansible中的块循环
问题描述
任何提示为什么我不能绕过循环运行任务文件?扩展错误输出前后消息。希望能帮助到你
任务
---
- name: Check device existence on node
shell: "lsblk -p -l | grep {{ item.0.device }}"
loop: "{{ local_volume_mount_disks|subelements('partitions') }}"
register: device_exists
tags: debug
- name: "Run Tasks from file on condition work around to BLOCKS"
include_tasks: device_condition_satisfied.yml
with_items: "{{ device_exists.results }}"
when: "item.rc == 0"
tags: debug
我的 include_tasks 文件
device_condition_satisfied.yml
有以下代码任务
- name: apt-install parted
apt:
name: parted=3.2*
update_cache: yes
with_items: "{{device_exists.results}}"
when: "{{ item.rc }} == 1"
tags: debug
输出
ansible-playbook /ansible-managed/jenkins-slave/slave0/workspace/run_ansible_playbook@2/external_inventory-3854/playbooks/local-volume-mount.yml -i /ansible-managed/jenkins-slave/slave0/workspace/run_ansible_playbook@2/external_inventory-3854/inventory/cluster.com/hosts.ini -l node -t debug -b --become-user root --vault-password-file /ansible-managed/jenkins-slave/slave0/workspace/nvdc/run_ansible_playbook@2/-e DOCKERIO_T=****
ERROR! Syntax Error while loading YAML.
expected <block end>, but found '?'
The error appears to be in '/ansible-managed/jenkins-slave/slave0/workspace/nvdc/run_ansible_playbook@2/k8s/baremetal/roles/local_volume_mount/tasks/main.yml': line 9, column 1, but may, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: "Run Tasks from file on condition work around to BLOCKS"
include_tasks: device_condition_satisfied.yml
^ here
FATAL: command execution failed
hudson.AbortException: Ansible playbook execution failed
at org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform(AnsiblePlaybookBuilder.java:262)
at org.jenkinsci.plugins.ansible.workflow.AnsiblePlaybookStep$AnsiblePlaybookExecution.run(AnsiblePlaybookStep.java:400)
at org.jenkinsci.plugins.ansible.workflow.AnsiblePlaybookStep$AnsiblePlaybookExecution.run(AnsiblePlaybookStep.java:321)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
at hudson.security.ACL.impersonate(ACL.java:290)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
ls任务/
device_condition_satisfied.yml main.yml
我试过按照这个链接如何在块上循环
解决方案
我在这里看到两个问题:
你有一个报价问题。如果您在 YAML 值中使用任何引号,则需要引用整个字符串。由于您的 中有 a
'
,因此name:
您需要编写:- name: "Run Tasks from file on condition work around to BLOCKS as we can't loop on them"
您永远不会嵌套 Jinja 模板标记 (
{{...}}
),并且 的值when:
已经在隐式 Jinja 上下文中,因此您可以编写:when: "item.rc == 0"
这可能不是全部问题,但请尝试修复这两个问题,如果您仍然看到失败,请更新您的问题以包含更多详细信息。
推荐阅读
- google-api - redirect_uri_mismatch 请求中的重定向 URI 与 OAuth 客户端授权的重定向 URI 不匹配
- php - 分配变量时,编码失败
- c - 将段错误与 malloc 和 fscanf 随机混淆
- javascript - 为什么我的 addEventListner 不能作为 onclick 事件工作
- html - 媒体文件位置
- android - 如何更改 DatePickerDialog 的开始日期?
- sql-server - 在 SQL Server 中使用触发器在具有复杂条件的表上创建唯一筛选索引
- java - Java(SE8)中不允许的通用类型数组如何工作?
- python - TypeError:无法解压不可迭代的 NoneType 对象
- java - SCP内存位置中的对象