当多个连接共存时,node-ansible无法连接到主机

时间:2017-09-12 11:14:28

标签: node.js ansible

我有一个API服务器,可以同时触发多个node-ansible连接到远程计算机来执行某些操作。

这里是node.js代码:

// app.js
const Ansible = require('node-ansible')

let ansibleNum = 10

for (let i = 0; i < ansibleNum; i += 1) {
let command = new Ansible.Playbook().playbook('test')
command.inventory('hosts')
command.exec()
    .then(successResult => {
    console.log(successResult)
    })
    .catch(err => {
    console.log(err)
    })
}

and ansible playbook:

# test.yml
---
- hosts: all
  remote_user: ubuntu
  become: true
  tasks:
    - name: Test Ansible
      shell: echo hello
      register: result  # store the result into a variable called "result"
    - debug: var=result.stdout_lines

随着ansibleNum的增加,安莎剧本失败的可能性也会增加。

失败消息是:

fatal: [10.50.123.123]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Shared connection to 10.50.123.123 closed.\r\n", "unreachable": true}

我已经阅读了另一个类似的问题here,但它提供的解决方案在我的案例中并不起作用。

触发问题的另一种方法是执行

ansible-playbook -i hosts test.yml & ansible-playbook -i hosts test.yml

此命令在没有node.js的情况下运行ansible。

我已将代码推送到github。您可以直接下载。

任何人都知道为什么共享连接已关闭?

我已按照文档hereControlMaster参数设置为auto

1 个答案:

答案 0 :(得分:0)

将连接类型设置为paramiko可以解决我的问题。

这是位于~/.ansible.cfg的配置文件:

[defaults]
transport = paramiko

基于此document,似乎paramiko不支持持久连接。

我仍然对此设置解决我的问题的原因感到困惑。