带有shell脚本的ansible流水线模式,需要tty

时间:2014-03-16 20:48:05

标签: debian ansible pipelining ansible-playbook

我正在使用ansible按照this的Backports部分中的步骤在Debian wheezy VM上安装node.js和npm。

以下的playbook任务曾经与传统的ansible ssh模式很好地配合使用。

- name: install npm
shell: curl https://www.npmjs.org/install.sh | sh creates=/usr/bin/npm

直到我尝试启用ansible 1.5的流水线操作。现在它失败了:

npm-install-18570.sh: 246: npm-install-18570.sh: cannot open /dev/tty: No such device or address

下载的shellscript install.sh在第246行引用了/ dev / tty,因此在使用流水线模式的ansible执行时失败。

我可以为这一项任务禁用流水线操作吗? 还有其他选择吗?“

1 个答案:

答案 0 :(得分:4)

对于单个任务AFAIK,无法禁用pipelining。请记住,Ansible 1.5仍处于开发阶段。

但是,作为一种变通方法,您可以在单独的Playbook上运行任务,传递pipelining=False环境变量以覆盖ansible.cfg文件的值:

ansible-playbook -i ./your-inventory-file -e "pipelining=False" your-no-pipeline-playbook.yml

根据此处的描述(来自Ansible docs):

  

Ansible还允许通过环境配置设置   变量。如果设置了这些环境变量,它们将覆盖   从配置文件加载的任何设置。这些变量是   为简洁起见,此处未定义,但请查看源代码中的“constants.py”   如果你想使用这些树。他们大多被认为是一个   遗留系统与配置文件相比,但同样有效。

在这里:

https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py