2016-07-27 23 views
1

我在我的操作手册中使用了易于使用的模块apt。它要求用户提示,我想提供“Y”。有人可以告诉我们如何做到这一点。我用“期望”但它不起作用。Ansible用户在apt模块中提示 - 无法传递值“是”

- name: Install latest apparmor packages - xxx-policy 
    expect: 
    apt: pkg={{ item.name }}={{ item.deb_version }} update_cache=yes state=present force=yes 
    with_items: { name: 'xaz-policy', deb_version: '{{ apparmor.xxx_policy.deb_version }}'} 
    when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu' 
    responses: 
     Question: 
     - 'Y' 

而且我得到以下错误

TASK [Install latest apparmor packages - xxx-policy] ************************ task path: /home/jenkins/workspace/OSInnovationB/docker_upgradation_job/playbooks/tasks/test.yml:47 fatal: [xxx-xxx-host-01]: FAILED! => {"failed": true, "msg": "'item' is undefined"} 

回答

1

您不能使用expect模块各地的其他模块的包装(我以为是你正在尝试做的)。 expect module

执行命令并响应提示给定的命令将在所有选定的节点上执行。

您收到'item' is undefined错误消息,因为when子句有错误的缩进。但是这不会起作用。往上看。

您可以在您的剧本中使用playbooks prompts,这是Ansible将提示用户输入我知道的唯一方式。

如果你只是想确保包的最新版本安装使用apt包管理器使用的系统上:

- name: Install latest apparmor packages - xxx-policy 
    apt: 
    name: "xaz-policy" 
    state: latest 
    update_cache: true 
+0

我正想通过这个http://stackoverflow.com/questions/36712453/error-conflicting-action-statements-expect-command-in-ansible并看到了一条评论“或者甚至更好,使用apt Ansible模块。”想知道如何通过apt模块本身来实现这一点。 – ambikanair

+0

坚持Ansible的文档。这真的很好......问题的答案使用'命令:apt-get install openjdk-7-jdk',如果你这么做的话。但现在我明白了。你可能正在寻找'state = latest'。看看[模块文档](http://docs.ansible.com/ansible/apt_module.html)。没有必要做黑客事情来安装最新版本的软件包。 –

+0

包裹分销商已经发布了更新版本。 您想对此做些什么?你的选择是: Y或I:安装包维护者的版本 N或O:保留你当前安装的版本 D:显示版本之间的差异 Z:启动一个shell来检查情况 默认的动作是保持你的当前版本。 *** usr.bin.docker(Y/I/N/O/D/Z)[默认= N]? – ambikanair