Ansible剧本-包括角色和授权,以便共同工作
在Ansible 2.9中是否包含角色和委托,以便在我试图通过运行角色并将其委托给host 2来执行以下剧本时一起工作(代码如下) Ansible剧本Ansible剧本-包括角色和授权,以便共同工作,ansible,Ansible,在Ansible 2.9中是否包含角色和委托,以便在我试图通过运行角色并将其委托给host 2来执行以下剧本时一起工作(代码如下) Ansible剧本 - name: top level playbook hosts: ["host1", "host2"] connection: local gather_facts: true ignore_errors: no tasks: - set_fact: playb
- name: top level playbook
hosts: ["host1", "host2"]
connection: local
gather_facts: true
ignore_errors: no
tasks:
- set_fact:
playbook_dir: /Users/OneDrive
validation_overall: 'pass'
result: {}
all_hosts: "{{ ansible_play_hosts }}"
- name: import hostvars
include_vars:
dir: '{{ playbook_dir }}/test_env_vars/hostvars'
files_matching: '{{ inventory_hostname }}.*'
- name: initialise required input variables
set_fact:
input_interfaces: "{{ e_input_interfaces }}"
# delegate role to host2
- name: "call validate_rtr_state role with host '{{ansible_hostname}}' for hosts in '{{ansible_play_hosts}}'"
include_role:
name: validate_rtr_state
tasks_from: cisco-ios-xr_ping.yml
apply:
delegate_to: "{{all_hosts[1]}}"
loop: "{{ansible_play_hosts}}"
loop_control:
loop_var: all_hosts[1]
我收到的错误消息如下:
ERROR! conflicting action statements: apply, include_role
The error appears to be in '/home/bbann/Ansible-Networking/ha_failover_top_level_reload.yml': line 46, column 7, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
# delegate role to tusredrweca908
- name: "call validate_rtr_state role with host '{{ansible_hostname}}' for hosts in '{{ansible_play_hosts}}'"
^ here
我们可能错了,但这一个看起来可能是一个问题
缺少引号。当模板表达式使用括号时,请始终引用括号
开始一个值。例如:
with_items:
- {{ foo }}
应写为:
with_items:
- "{{ foo }}"
你知道为什么会失败吗
错误!冲突的操作语句:应用,包含角色
apply
的缩进错误。它是任务的一个参数include\u角色
#将角色委派给主机2
-名称:“{ansible\u play\u hosts}”中的主机用主机“{{ansible\u hostname}”调用validate\u rtr\u state角色”
包括以下角色:
名称:验证\u rtr\u状态
任务来自:cisco-ios-xr_ping.yml
适用于:
委托给:“{{all_hosts[1]}”
循环:{{ansible\u play\u hosts}}”
回路控制:
循环\u变量:所有\u主机[1]
未经测试
还有其他怪人:
loop\u var
是第二台主机的名称吗?i、 e.角色是否真的将第二个主机的名称作为变量实现
连接:local
将委托应用于:xy
而不是将委托应用于:xy
任务
感谢Vladimir,我试图实现的是在剧中重新启动主机1,然后包括角色验证状态和委托给主机2,但即使我使用委托给:主机2而不是应用委托给,也会失败。这太复杂了。将每个问题分成一个问题,然后完成!请尽量简化,抽象问题,尽可能简单!(例如,设置
输入接口的事实与问题无关。)帮助我们帮助您!谢谢Vladimir,我已经尽可能简单地将剧本剥离并粘贴在下面。基本上,我正在尝试运行一个任务来包含一个名为validate\u rtr\u state的角色,并从该角色运行ping任务,并将该任务委托给只在host2上运行的角色。下面是简化的重头戏--名称:顶级playbook主机:[“主机1”,“主机2”]连接:本地聚集\u事实:错误忽略\u错误:无任务:-设置\u事实:所有\u主机:“{{ansible\u play\u hosts}”-name:call validate_rtr_state role并委托给主机2 include_role:name:validate_rtr_state tasks_from:cisco-ios-xr_ping.yml delegate_to:“{{all_hosts[1]}”