# script finished while get share connection close error

**URL:** <https://forum.ansible.com/t/script-finished-while-get-share-connection-close-error/30456>\
**Category:** Ansible Developer\
**Created:** [May 31, 2019, 2:13am UTC](https://forum.ansible.com/t/script-finished-while-get-share-connection-close-error/30456 "2019-05-31T02:13:03Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![denny\_X](https://avatars.discourse-cdn.com/v4/letter/d/bcef8e/32.png) [@denny\_X](https://forum.ansible.com/u/denny_X)\
**Post date:** [May 31, 2019, 2:13am UTC](https://forum.ansible.com/t/script-finished-while-get-share-connection-close-error/30456/1 "2019-05-31T02:13:03Z")

</div>

Dears,  
I customized a python module to help on dcos package installation, the package installed successfully(per checking in dcos), while ansible fails with share connection close error, may u kindly help on this, thanks~  
**ansible version**

`

```auto
ansible 2.7.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/admin/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.15rc1 (default, Nov 12 2018, 14:31:15) [GCC 7.3.0]

```

`

**Customized python module**

`

| 

#!/usr/bin/python

 |
| | |
| | 

“”"

 |
| | 

Aimed to install dcos packages

 |
| | 

ref

 |
| | 
1. [GitHub - dcos-labs/ansible-dcos-module: Manage DC/OS Packages, IAM Users/Groups/Permissions and Secrets via Ansible.](https://github.com/dcos-labs/ansible-dcos-module.git)

 |
| | 

“”"

 |
| | |
| | 

import os

 |
| | 

import sys

 |
| | 

import time

 |
| | 

import json

 |
| | 

import tempfile

 |
| | 

import subprocess

 |
| | 

from ansible.module\_utils.basic import AnsibleModule

 |
| | |
| | 

def run\_command(cmd, description=‘run command’, stop\_on\_error=False, input=None):

 |
| | 

“”“Run a command and catch exceptions for Ansible.”“”

 |
| | 

print("command: " + ’ '.join(cmd))

 |
| | |
| | 

from subprocess import CalledProcessError, check\_output

 |
| | |
| | 

try:

 |
| | 

output = check\_output(cmd, stderr=subprocess.STDOUT)

 |
| | 

returncode = 0

 |
| | 

except CalledProcessError as e:

 |
| | 

print(“Failed to run command, exception as {}”.format(e))

 |
| | 

output = e.output

 |
| | 

returncode = e.returncode

 |
| | 

if stop\_on\_error and returncode != 0:

 |
| | 

raise Exception(‘Failed to {}: {}’.format(description, e))

 |
| | 

return output

 |
| | |
| | 

def get\_current\_version(package, app\_id):

 |
| | 

“”“Get the current version of an installed package.”“”

 |
| | 

r = subprocess.check\_output(

 |
| | 

[‘dcos’, ‘package’, ‘list’, ‘–json’, ‘–app-id=’+app\_id])

 |
| | 

packages = json.loads(r)

 |
| | |
| | 

print(‘looking for package {} app\_id {}’.format(package, app\_id))

 |
| | |
| | 

v = None

 |
| | 

for p in packages:

 |
| | 

try:

 |
| | 

if p[‘name’] == package and ‘/’ + app\_id in p[‘apps’]:

 |
| | 

v = p[‘version’]

 |
| | 

except KeyError:

 |
| | 

continue

 |
| | 

print(‘{} current version: {}’.format(package, v))

 |
| | 

return v

 |
| | |
| | 

def install\_package(package, version, options):

 |
| | 

“”“Install a Universe package on DC/OS.”“”

 |
| | 

print(“DC/OS: installing package {} version {}”.format(package, version))

 |
| | |
| | 
# create a temporary file for the options json file
 |
| | 

with tempfile.NamedTemporaryFile(‘w+’) as f:

 |
| | 
# json.dump(options, f)
 |
| | 

f.write(options)

 |
| | |
| | 
# force write the file to disk to make sure subcommand can read it
 |
| | 

f.flush()

 |
| | 

os.fsync(f)

 |
| | |
| | 

print(“options as \n” + subprocess.check\_output([‘cat’, f.name]).decode())

 |
| | |
| | 

cmd = [

 |
| | 

‘dcos’,

 |
| | 

‘package’,

 |
| | 

‘install’,

 |
| | 

package,

 |
| | 

‘–yes’,

 |
| | 

‘–package-version=%s’ % version,

 |
| | 

‘–options=%s’ % f.name,

 |
| | 

]

 |
| | 

run\_command(cmd, ‘install package’, stop\_on\_error=True)

 |
| | 

time.sleep(20)

 |
| | |
| | 

def update\_package(package, app\_id, version, options):

 |
| | 

“”“Update a Universe package on DC/OS.”“”

 |
| | 

print(“DC/OS: updating package {} version {}”.format(package, version))

 |
| | |
| | 

app\_remove(app\_id)

 |
| | 

time.sleep(20)

 |
| | 

while get\_current\_version(package, app\_id) is not None:

 |
| | 

time.sleep(1)

 |
| | |
| | 

install\_package(package, version, options)

 |
| | |
| | |
| | 

def uninstall\_package(package, app\_id):

 |
| | 

print(“DC/OS: uninstalling package {}”.format(package))

 |
| | |
| | 

cmd = [

 |
| | 

‘dcos’,

 |
| | 

‘package’,

 |
| | 

‘uninstall’,

 |
| | 

package,

 |
| | 

‘–yes’,

 |
| | 

‘–app’,

 |
| | 

‘–app-id’,

 |
| | 

‘/’ + app\_id,

 |
| | 

]

 |
| | 

run\_command(cmd, ‘uninstall package’, stop\_on\_error=True)

 |
| | |
| | |
| | 

def app\_remove(app\_id):

 |
| | 

print(“DC/OS: remove app {}”.format(app\_id))

 |
| | |
| | 

cmd = [

 |
| | 

‘dcos’,

 |
| | 

‘marathon’,

 |
| | 

‘app’,

 |
| | 

‘remove’,

 |
| | 

‘/’ + app\_id,

 |
| | 

]

 |
| | 

run\_command(cmd, ‘remove app’, stop\_on\_error=True)

 |
| | |
| | |
| | 

def main():

 |
| | 

result = {}

 |
| | 

changed = True

 |
| | 

fields = {

 |
| | 

“name”: {“default”: True, “type”: “str”},

 |
| | 

“app\_id”: {“default”: True, “type”: “str”},

 |
| | 

“version”: {“default”: True, “type”: “str”},

 |
| | 

“options”: {“default”: True, “type”: “str”},

 |
| | 

}

 |
| | |
| | 

module = AnsibleModule(argument\_spec=fields)

 |
| | |
| | 

package\_name = module.params.get(‘name’, None)

 |
| | 

wanted\_version = module.params.get(‘version’, None)

 |
| | |
| | 
# ensure app\_id has no leading or trailing /
 |
| | 

app\_id = module.params.get(‘app\_id’, package\_name).strip(‘/’)

 |
| | |
| | 

options = module.params.get(‘options’)

 |
| | |
| | 

current\_version = get\_current\_version(package\_name, app\_id)

 |
| | |
| | 

if current\_version == wanted\_version:

 |
| | 

print(“Package {} already in desired state”.format(package\_name))

 |
| | 

result[‘action’] = “[No Action]already get target version”

 |
| | 

changed = False

 |
| | 

else:

 |
| | 

print(“Package {} not in desired state”.format(package\_name))

 |
| | 

if wanted\_version is not None:

 |
| | 

if current\_version is not None:

 |
| | 

update\_package(package\_name, app\_id,

 |
| | 

wanted\_version, options)

 |
| | 

result[‘action’] = “[Upgrade] already installed cassandra while not target version, do remove and install”

 |
| | 

else:

 |
| | 

install\_package(package\_name, wanted\_version, options)

 |
| | 

result[‘action’] = “[Install] no cassandra found, do install target version”

 |
| | 

else:

 |
| | 

uninstall\_package(package\_name, app\_id)

 |
| | 

result[‘action’] = “[Uninstall] cassandra found while no version specified, do uninstall”

 |
| | 

result[‘current\_version’] = current\_version

 |
| | 

result[‘param’] = module.params

 |
| | 

module.exit\_json(changed=changed, meta=result)

 |
| | |
| | 

if **name** == ‘ **main** ’:

 |
| | 

main()

 |

` \*\*Playbook\*\*

`

```auto
- name: Ensure cassandra is installed
  dcos_package:
    name: cassandra
    app_id: cassandra
    version: "{{cassandra_version}}"
    options: >
      {
          "nodes": {
              "count": 3,
              "cpus": 0.3,
              "mem": 3072,
              "disk": 3584,
              "heap": {
                  "size": 1536
              },
              "placement_constraint": "[[\"hostname\", \"MAX_PER\", \"1\"],[\"role\", \"LIKE\", \"cassandra\"]]"
          }
      }
  register: install_cassandra

- debug: var=install_cassandra

```

`

**log output with -vvv**

`

TASK [dcos\_packages : Ensure cassandra is installed] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
task path: /terraform-ansible/roles/dcos\_packages/tasks/main.yml:2  
\<XXX.XXX.XXX.XXX\> ESTABLISH SSH CONNECTION FOR USER: admin  
\<XXX.XXX.XXX.XXX\> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=120s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=admin -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ‘ProxyCommand=ssh -W %h:22 -q -p 22 admin@bastion\_host’ -o ControlPath=/home/admin/.ansible/cp/1e34139989 XXX.XXX.XXX.XXX ‘/bin/sh -c ‘"’“‘echo ~admin && sleep 0’”’“‘’  
\<XXX.XXX.XXX.XXX\> (0, ‘/home/admin\n’, ‘’)  
\<XXX.XXX.XXX.XXX\> ESTABLISH SSH CONNECTION FOR USER: admin  
\<XXX.XXX.XXX.XXX\> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=120s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=admin -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ‘ProxyCommand=ssh -W %h:22 -q -p 22 admin@bastion\_host’ -o ControlPath=/home/admin/.ansible/cp/1e34139989 XXX.XXX.XXX.XXX '/bin/sh -c '”‘"’( umask 77 && mkdir -p “`echo /home/admin/.ansible/tmp/ansible-tmp-1559208567.96-144121008933299`” && echo ansible-tmp-1559208567.96-144121008933299=“`echo /home/admin/.ansible/tmp/ansible-tmp-1559208567.96-144121008933299`” ) && sleep 0’“'”‘’  
\<XXX.XXX.XXX.XXX\> (0, ‘ansible-tmp-1559208567.96-144121008933299=/home/admin/.ansible/tmp/ansible-tmp-1559208567.96-144121008933299\n’, ‘’)  
Using module file /terraform-ansible/library/dcos\_package.py  
\<XXX.XXX.XXX.XXX\> PUT /home/admin/.ansible/tmp/ansible-local-28131ZNQ5K/tmpszdroA TO /home/admin/.ansible/tmp/ansible-tmp-1559208567.96-144121008933299/AnsiballZ\_dcos\_package.py  
\<XXX.XXX.XXX.XXX\> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=120s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=admin -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ‘ProxyCommand=ssh -W %h:22 -q -p 22 admin@bastion\_host’ -o ControlPath=/home/admin/.ansible/cp/1e34139989 /home/admin/.ansible/tmp/ansible-local-28131ZNQ5K/tmpszdroA ‘[XXX.XXX.XXX.XXX]:/home/admin/.ansible/tmp/ansible-tmp-1559208567.96-144121008933299/AnsiballZ\_dcos\_package.py’  
\<XXX.XXX.XXX.XXX\> (0, ‘’, ‘’)  
\<XXX.XXX.XXX.XXX\> ESTABLISH SSH CONNECTION FOR USER: admin  
\<XXX.XXX.XXX.XXX\> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=120s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=admin -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ‘ProxyCommand=ssh -W %h:22 -q -p 22 admin@bastion\_host’ -o ControlPath=/home/admin/.ansible/cp/1e34139989 XXX.XXX.XXX.XXX ‘/bin/sh -c ‘"’“‘chmod u+x /home/admin/.ansible/tmp/ansible-tmp-1559208567.96-144121008933299/ /home/admin/.ansible/tmp/ansible-tmp-1559208567.96-144121008933299/AnsiballZ\_dcos\_package.py && sleep 0’”’“‘’  
\<XXX.XXX.XXX.XXX\> (0, ‘’, ‘’)  
\<XXX.XXX.XXX.XXX\> ESTABLISH SSH CONNECTION FOR USER: admin  
\<XXX.XXX.XXX.XXX\> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=120s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=admin -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ‘ProxyCommand=ssh -W %h:22 -q -p 22 admin@bastion\_host’ -o ControlPath=/home/admin/.ansible/cp/1e34139989 -tt XXX.XXX.XXX.XXX '/bin/sh -c '”‘“'sudo -H -S -n -u root /bin/sh -c '”’“'”‘"’“'”‘"’“‘echo BECOME-SUCCESS-imgjrgyfedfryywgodhpumidkfxbyzyh; /usr/bin/python /home/admin/.ansible/tmp/ansible-tmp-1559208567.96-144121008933299/AnsiballZ\_dcos\_package.py’”‘"’“'”‘"’“'”‘"’ && sleep 0’“'”‘’  
Escalation succeeded  
\<XXX.XXX.XXX.XXX\> (0, ‘looking for package cassandra app\_id cassandra\r\ncassandra current version: None\r\nPackage cassandra not in desired state\r\nDC/OS: installing package cassandra version 2.5.0-3.11.3\r\noptions as \r\n{\r\n “nodes”: {\r\n “count”: 3,\r\n “cpus”: 0.3,\r\n “mem”: 3072,\r\n “disk”: 3584,\r\n “heap”: {\r\n “size”: 1536\r\n },\r\n “placement\_constraint”: “[[\“hostname\”, \“MAX\_PER\”, \“1\”],[\“role\”, \“LIKE\”, \“cassandra\”]]”\r\n }\r\n}\r\n\r\ncommand: dcos package install cassandra --yes --package-version=2.5.0-3.11.3 --options=/tmp/tmpZ225kn\r\n\r\n{“invocation”: {“module\_args”: {“version”: “2.5.0-3.11.3”, “app\_id”: “cassandra”, “name”: “cassandra”, “options”: “{\n \“nodes\”: {\n \“count\”: 3,\n \“cpus\”: 0.3,\n \“mem\”: 3072,\n \“disk\”: 3584,\n \“heap\”: {\n \“size\”: 1536\n },\n \“placement\_constraint\”: \”[[\\\“hostname\\\”, \\\“MAX\_PER\\\”, \\\“1\\\”],[\\\“role\\\”, \\\“LIKE\\\”, \\\“cassandra\\\”]]\“\n }\n}\n”}}, “changed”: true, “meta”: {“action”: “[Install] no cassandra found, do install target version”, “current\_version”: null, “param”: {“version”: “2.5.0-3.11.3”, “app\_id”: “cassandra”, “name”: “cassandra”, “options”: “{\n \“nodes\”: {\n \“count\”: 3,\n \“cpus\”: 0.3,\n \“mem\”: 3072,\n \“disk\”: 3584,\n \“heap\”: {\n \“size\”: 1536\n },\n \“placement\_constraint\”: \”[[\\\“hostname\\\”, \\\“MAX\_PER\\\”, \\\“1\\\”],[\\\“role\\\”, \\\“LIKE\\\”, \\\“cassandra\\\”]]\“\n }\n}\n”}}}\r\n’, ‘Shared connection to XXX.XXX.XXX.XXX closed.\r\n’)  
\<XXX.XXX.XXX.XXX\> ESTABLISH SSH CONNECTION FOR USER: admin  
\<XXX.XXX.XXX.XXX\> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=120s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=admin -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ‘ProxyCommand=ssh -W %h:22 -q -p 22 admin@bastion\_host’ -o ControlPath=/home/admin/.ansible/cp/1e34139989 XXX.XXX.XXX.XXX ‘/bin/sh -c ‘"’“‘rm -f -r /home/admin/.ansible/tmp/ansible-tmp-1559208567.96-144121008933299/ \> /dev/null 2\>&1 && sleep 0’”’"‘’  
\<XXX.XXX.XXX.XXX\> (0, ‘’, ‘’)  
fatal: [XXX.XXX.XXX.XXX]: FAILED! =\> changed=false  
module\_stderr: |-  
Shared connection to XXX.XXX.XXX.XXX closed.  
module\_stdout: |-  
looking for package cassandra app\_id cassandra  
cassandra current version: None  
Package cassandra not in desired state  
DC/OS: installing package cassandra version 2.5.0-3.11.3  
options as  
{  
“nodes”: {  
“count”: 3,  
“cpus”: 0.3,  
“mem”: 3072,  
“disk”: 3584,  
“heap”: {  
“size”: 1536  
},  
“placement\_constraint”: “[["hostname", "MAX\_PER", "1"],["role", "LIKE", "cassandra"]]”  
}  
}

command: dcos package install cassandra --yes --package-version=2.5.0-3.11.3 --options=/tmp/tmpZ225kn

{“invocation”: {“module\_args”: {“version”: “2.5.0-3.11.3”, “app\_id”: “cassandra”, “name”: “cassandra”, “options”: “{\n "nodes": {\n "count": 3,\n "cpus": 0.3,\n "mem": 3072,\n "disk": 3584,\n "heap": {\n "size": 1536\n },\n "placement\_constraint": "[[\"hostname\", \"MAX\_PER\", \"1\"],[\"role\", \"LIKE\", \"cassandra\"]]"\n }\n}\n”}}, “changed”: true, “meta”: {“action”: “[Install] no cassandra found, do install target version”, “current\_version”: null, “param”: {“version”: “2.5.0-3.11.3”, “app\_id”: “cassandra”, “name”: “cassandra”, “options”: “{\n "nodes": {\n "count": 3,\n "cpus": 0.3,\n "mem": 3072,\n "disk": 3584,\n "heap": {\n "size": 1536\n },\n "placement\_constraint": "[[\"hostname\", \"MAX\_PER\", \"1\"],[\"role\", \"LIKE\", \"cassandra\"]]"\n }\n}\n”}}}  
msg: |-  
MODULE FAILURE  
See stdout/stderr for the exact error  
rc: 0  
to retry, use: --limit @/terraform-ansible/deploy-services.retry

PLAY RECAP \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
XXX.XXX.XXX.XXX : ok=1 changed=0 unreachable=0 failed=1

`

Appreciate if any kindly help, thanks~

---

<div class="post-metadata">

**Author:** ![denny\_X](https://avatars.discourse-cdn.com/v4/letter/d/bcef8e/32.png) [@denny\_X](https://forum.ansible.com/u/denny_X)\
**Post date:** [May 31, 2019, 7:25am UTC](https://forum.ansible.com/t/script-finished-while-get-share-connection-close-error/30456/2 "2019-05-31T07:25:30Z")

</div>

When disabled all print actions in the python module, everything worked.  
Have no idea about the reason.  
Appreciate if any kindly help, thanks~
