3

我正在尝试使用 Ansible 在多台主机上安装 java。我寻找了一些expect模块示例来为提示提供答案。我认为这种语法很好:

- 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'

但是当我尝试执行时,ansible-playbook file.yml我收到错误:

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

问题出在哪里?(我已经安装了ansible 2.0.1.0、pexpect、python)

谢谢!

4

1 回答 1

3

注意Ansible 使用 yaml 文件,这种文件是缩进的。这意味着您在每个语句之前放置的空格对于让 Ansible 了解它们是如何嵌套的很重要。有关 yaml 的更多信息

更正的任务:

- 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'

这将避免您的语法错误。

来源:http ://docs.ansible.com/ansible/expect_module.html

或者,如果您总是想对您的apt-get install命令说“是”,您可以添加-y参数:

apt-get install -y openjdk-7-jdk

或者更好的是,使用aptAnsible 模块

于 2016-04-19T10:51:57.233 回答