Py3 vargrant inv (#37803)

* Fix dynamic inventory for vagrant does not work on python3 (#37631)

* Fix dynamic inventory for vagrant does not work on python3 #35129

(cherry picked from commit 1b121fc9e4)

* Add vagrant python3 fix to the changelog
This commit is contained in:
Toshio Kuratomi 2018-03-29 14:58:19 -07:00 committed by Matt Davis
parent f23c100419
commit 8d008d00ed
2 changed files with 11 additions and 4 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- Fix bytes/text handling in vagrant dynamic inventory https://github.com/ansible/ansible/pull/37631

View file

@ -38,14 +38,17 @@ import os.path
import subprocess import subprocess
import re import re
from paramiko import SSHConfig from paramiko import SSHConfig
from cStringIO import StringIO
from optparse import OptionParser from optparse import OptionParser
from collections import defaultdict from collections import defaultdict
try: try:
import json import json
except: except Exception:
import simplejson as json import simplejson as json
from ansible.module_utils._text import to_text
from ansible.module_utils.six.moves import StringIO
_group = 'vagrant' # a default group _group = 'vagrant' # a default group
_ssh_to_ansible = [('user', 'ansible_ssh_user'), _ssh_to_ansible = [('user', 'ansible_ssh_user'),
('hostname', 'ansible_ssh_host'), ('hostname', 'ansible_ssh_host'),
@ -74,7 +77,8 @@ def get_ssh_config():
# list all the running boxes # list all the running boxes
def list_running_boxes(): def list_running_boxes():
output = subprocess.check_output(["vagrant", "status"]).split('\n')
output = to_text(subprocess.check_output(["vagrant", "status"]), errors='surrogate_or_strict').split('\n')
boxes = [] boxes = []
@ -90,7 +94,7 @@ def list_running_boxes():
def get_a_ssh_config(box_name): def get_a_ssh_config(box_name):
"""Gives back a map of all the machine's ssh configurations""" """Gives back a map of all the machine's ssh configurations"""
output = subprocess.check_output(["vagrant", "ssh-config", box_name]) output = to_text(subprocess.check_output(["vagrant", "ssh-config", box_name]), errors='surrogate_or_strict')
config = SSHConfig() config = SSHConfig()
config.parse(StringIO(output)) config.parse(StringIO(output))
host_config = config.lookup(box_name) host_config = config.lookup(box_name)
@ -104,6 +108,7 @@ def get_a_ssh_config(box_name):
return dict((v, host_config[k]) for k, v in _ssh_to_ansible) return dict((v, host_config[k]) for k, v in _ssh_to_ansible)
# List out servers that vagrant has running # List out servers that vagrant has running
# ------------------------------ # ------------------------------
if options.list: if options.list: