【问题标题】: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_towith_items等,应使用:

        【讨论】:

          猜你喜欢
          • 2016-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-07
          • 1970-01-01
          • 2020-03-29
          相关资源
          最近更新 更多