ERROR! conflicting action statements (expect, command) in Ansible

吃可爱长大的小学妹 提交于 2019-12-12 13:33:39

问题


I'm trying to install java on several hosts with Ansible. I looked for some examples of expect module to provide answers to the prompts. I think this syntax is quite fine:

- hosts: datanode
  sudo: yes
  sudo_user: root
  tasks:
  - expect:
    name: install java jdk 7
    command: apt-get install openjdk-7-jdk
    responses:
    Question:
      'Do you want to continue? [Y/n]': 'Y'

But when I try to execute ansible-playbook file.yml I receive the error:

ERROR! conflicting action statements (expect, command)

The error appears to have been in '/root/scp.yml': line 5, column 5, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  tasks:
  - expect:
    ^ here

Where is the problem? (I have installed ansible 2.0.1.0, pexpect, python)

Thanks!


回答1:


NOTE that Ansible works with yaml files, and this kind of files are indented. This means that the spaces you put before each statement are important to let Ansible to understand how are they nested. More info about yaml.

Corrected task:

- hosts: datanode
  sudo: yes
  sudo_user: root
  tasks:
  - name: install java jdk 7
    expect:
      command: apt-get install openjdk-7-jdk
      responses:
        Question:
          - 'Y'
          - 'n'

This will avoid your syntax error.

Source: http://docs.ansible.com/ansible/expect_module.html

Alternatively, if you always want to say "yes" to your apt-get install commands, you can add the -y argument:

apt-get install -y openjdk-7-jdk

Or even better, use the apt Ansible module.



来源:https://stackoverflow.com/questions/36712453/error-conflicting-action-statements-expect-command-in-ansible

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!