我有一个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。您可以直接下载。
任何人都知道为什么共享连接已关闭?
我已按照文档here将ControlMaster
参数设置为auto
。
答案 0 :(得分:0)
将连接类型设置为paramiko
可以解决我的问题。
这是位于~/.ansible.cfg
的配置文件:
[defaults]
transport = paramiko
基于此document,似乎paramiko不支持持久连接。
我仍然对此设置解决我的问题的原因感到困惑。