【问题标题】:Ansible: ansible-playbook delegate_to errorAnsible:ansible-playbook delegate_to 错误
【发布时间】:2017-03-09 21:45:59
【问题描述】:
我有一本剧本,这是其中的一部分。
...
- name: Wait for SSH to start
wait_for:
host: "{{ newmachines.instances[0].public_ip }}"
port: 22
timeout: 300
delegate_to: localhost
...
ansible-playbook --check create_instance.yml.old
错误:delegate_to 不是 Ansible Play 的合法参数
ansible-playbook --version
ansible-playbook 1.9.4
配置的模块搜索路径 = 无
我该如何解决?
【问题讨论】:
标签:
ansible
ansible-playbook
【解决方案1】:
也许您应该检查缩进(制表符/空格)? Ansible 似乎认为 delegate_to 处于播放级别,而从您发布的代码的外观来看,它处于任务级别。
这不起作用:
---
- hosts: myhost
gather_facts: false
tasks:
- name: Wait for SSH to start
wait_for:
host: myhost
port: 22
timeout: 300
delegate_to: localhost
它因您提到的错误而失败:
$ ansible-playbook -i hosts pb.yaml
ERROR! 'delegate_to' is not a valid attribute for a Play
虽然这样做(注意缩进差异):
---
- hosts: myhost
gather_facts: false
tasks:
- name: Wait for SSH to start
wait_for:
host: myhost
port: 22
timeout: 300
delegate_to: localhost
输出:
$ ansible-playbook -i hosts pb.yaml
PLAY [myhost] ****************************************************************
TASK [Wait for SSH to start] ***************************************************
ok: [myhost-> localhost]
PLAY RECAP *********************************************************************
myhost: ok=1 changed=0 unreachable=0 failed=0
【解决方案2】:
@serko 使用 ansible-playbook 1.9.4 的剧本对我有用
---
# main.yml
- hosts: all
gather_facts: false
tasks:
- name: Wait for SSH to start
wait_for:
host: "localhost"
port: 22
timeout: 300
delegate_to: localhost
.
$ ansible-playbook --check main.yml
PLAY [all] ********************************************************************
TASK: [Wait for SSH to start] *************************************************
skipping: [127.0.0.1 -> localhost]
ok: [127.0.0.1 -> localhost]
PLAY RECAP ********************************************************************
127.0.0.1 : ok=0 changed=0 unreachable=0 failed=0
【解决方案3】:
任务的参数格式应该是key=value,而不是key:value。这让 Ansible 感到困惑。你想要的是这样的:
- name: Wait for SSH to start
wait_for:
host="{{ newmachines.instances[0].public_ip }}"
port=22
timeout=300
delegate_to: localhost
任务的修饰符,如delegate_to、with_items等,应使用:。