使用shell脚本的可操作管道模式,需要tty



我使用ansible在Debian wheezy虚拟机上安装node.js和npm。

下面的playbook任务过去可以很好地使用传统的可见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执行时会失败。

我可以为这个任务禁用流水线吗?
还有别的选择吗?"

没有选项可以为单个任务禁用pipelining。请记住,Ansible 1.5仍处于开发阶段。

然而,作为一种解决方法,你可以在一个单独的剧本上运行你的任务,传递pipelining=False环境变量来覆盖你的ansible.cfg文件的值:

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

这是按照这里描述的(来自Ansible文档):

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

:

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

相关内容

  • 没有找到相关文章

最新更新