diff --git a/CHANGELOG.md b/CHANGELOG.md
index e8eaceba7b..e71d78c4b3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@ Ansible Changes By Release
### Minor Changes
* removed previously deprecated config option 'hostfile' and env var 'ANSIBLE_HOSTS'
* removed unused and deprecated config option 'pattern'
+* Updated the copy of six bundled for modules to use from 1.4.1 to 1.10.0
#### New: Tests
diff --git a/contrib/inventory/apstra_aos.py b/contrib/inventory/apstra_aos.py
index 65838c0814..f0efdc2555 100755
--- a/contrib/inventory/apstra_aos.py
+++ b/contrib/inventory/apstra_aos.py
@@ -53,20 +53,20 @@ import os
import argparse
import re
-from ansible.compat.six.moves import configparser
-
-try:
- from apstra.aosom.session import Session
-
- HAS_AOS_PYEZ = True
-except ImportError:
- HAS_AOS_PYEZ = False
-
try:
import json
except ImportError:
import simplejson as json
+try:
+ from apstra.aosom.session import Session
+ HAS_AOS_PYEZ = True
+except ImportError:
+ HAS_AOS_PYEZ = False
+
+from ansible.module_utils.six.moves import configparser
+
+
"""
##
Expected output format in Device mode
diff --git a/docs/docsite/rst/dev_guide/developing_module_utilities.rst b/docs/docsite/rst/dev_guide/developing_module_utilities.rst
index 71fccb53be..3ecaa56dda 100644
--- a/docs/docsite/rst/dev_guide/developing_module_utilities.rst
+++ b/docs/docsite/rst/dev_guide/developing_module_utilities.rst
@@ -41,7 +41,7 @@ The following is a list of module_utils files and a general description. The mod
- redhat.py - Functions for modules that manage Red Hat Network registration and subscriptions
- service.py - Contains utilities to enable modules to work with Linux services (placeholder, not in use).
- shell.py - Functions to allow modules to create shells and work with shell commands
-- six.py - Module utils for working with the Six python 2 and 3 compatibility library
+- six/__init__.py - Bundled copy of the `Six Python library `_ to aid in writing code compatible with both Python 2 and Python 3.
- splitter.py - String splitting and manipulation utilities for working with Jinja2 templates
- urls.py - Utilities for working with http and https requests
- vca.py - Contains utilities for modules that work with VMware vCloud Air
diff --git a/docs/docsite/rst/dev_guide/developing_modules_python3.rst b/docs/docsite/rst/dev_guide/developing_modules_python3.rst
index cf93c2c360..fe3cf5066a 100644
--- a/docs/docsite/rst/dev_guide/developing_modules_python3.rst
+++ b/docs/docsite/rst/dev_guide/developing_modules_python3.rst
@@ -325,20 +325,16 @@ Bundled six
The third-party `python-six `_ library exists
to help projects create code that runs on both Python-2 and Python-3. Ansible
-includes version 1.4.1 in module_utils so that other modules can use it
+includes a version of the library in module_utils so that other modules can use it
without requiring that it is installed on the remote system. To make use of
it, import it like this::
from ansible.module_utils import six
-.. note:: Why version 1.4.1?
+.. note:: Ansible can also use a system copy of six
- six-1.4.1 is the last version of python-six to support Python-2.4. Until
- Ansible-2.4, most Ansible modules were required to run on Python-2.4. So
- the bundled version of six could not be newer than 1.4.1.
-
- Ansible-2.4 now targets Python-2.6 or greater for modules. We'll be
- updating the bundled six soon.
+ Ansible will use a system copy of six if the system copy is a later
+ version than the one Ansible bundles.
-------------------------------------
Porting module_utils code to Python 3
diff --git a/lib/ansible/cli/__init__.py b/lib/ansible/cli/__init__.py
index 23c0fb95b9..cdfd4a2b89 100644
--- a/lib/ansible/cli/__init__.py
+++ b/lib/ansible/cli/__init__.py
@@ -33,8 +33,8 @@ from abc import ABCMeta, abstractmethod
from ansible.release import __version__
from ansible import constants as C
-from ansible.compat.six import with_metaclass
from ansible.errors import AnsibleError, AnsibleOptionsError
+from ansible.module_utils.six import with_metaclass
from ansible.module_utils._text import to_bytes, to_text
from ansible.utils.path import unfrackpath
diff --git a/lib/ansible/cli/doc.py b/lib/ansible/cli/doc.py
index 42ff62488b..8e45e7cb66 100644
--- a/lib/ansible/cli/doc.py
+++ b/lib/ansible/cli/doc.py
@@ -25,12 +25,11 @@ import traceback
import textwrap
import yaml
-from ansible.compat.six import iteritems, string_types
-
from ansible import constants as C
-from ansible.errors import AnsibleError, AnsibleOptionsError
-from ansible.plugins import module_loader, action_loader, lookup_loader, callback_loader, cache_loader, connection_loader, strategy_loader
from ansible.cli import CLI
+from ansible.errors import AnsibleError, AnsibleOptionsError
+from ansible.module_utils.six import iteritems, string_types
+from ansible.plugins import module_loader, action_loader, lookup_loader, callback_loader, cache_loader, connection_loader, strategy_loader
from ansible.utils import plugin_docs
try:
diff --git a/lib/ansible/compat/six/__init__.py b/lib/ansible/compat/six/__init__.py
deleted file mode 100644
index 61d9ac5646..0000000000
--- a/lib/ansible/compat/six/__init__.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# (c) 2014, Toshio Kuratomi
-#
-# This file is part of Ansible
-#
-# Ansible is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Ansible is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Ansible. If not, see .
-
-# Make coding more python3-ish
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-'''
-Compat six library. RHEL7 has python-six 1.3.0 which is too old
-'''
-# The following makes it easier for us to script updates of the bundled code
-_BUNDLED_METADATA = { "pypi_name": "six", "version": "1.10.0" }
-
-import os.path
-
-try:
- import six as _system_six
-except ImportError:
- _system_six = None
-
-if _system_six:
- # If we need some things from even newer versions of six, then we need to
- # use our bundled copy instead
-
- if ( # Added in six-1.8.0
- not hasattr(_system_six.moves, 'shlex_quote') or
- # Added in six-1.4.0
- not hasattr(_system_six, 'byte2int') or
- not hasattr(_system_six, 'add_metaclass') or
- not hasattr(_system_six.moves, 'urllib')
- ):
-
- _system_six = False
-
-if _system_six:
- six = _system_six
-else:
- from . import _six as six
-six_py_file = '{0}.py'.format(os.path.splitext(six.__file__)[0])
-exec(open(six_py_file, 'rb').read())
diff --git a/lib/ansible/constants.py b/lib/ansible/constants.py
index 7abf402968..c40320462d 100644
--- a/lib/ansible/constants.py
+++ b/lib/ansible/constants.py
@@ -23,9 +23,9 @@ import os
import tempfile
from string import ascii_letters, digits
-from ansible.compat.six import string_types
-from ansible.compat.six.moves import configparser
from ansible.errors import AnsibleOptionsError
+from ansible.module_utils.six import string_types
+from ansible.module_utils.six.moves import configparser
from ansible.module_utils._text import to_text
from ansible.parsing.quoting import unquote
from ansible.utils.path import makedirs_safe
diff --git a/lib/ansible/executor/module_common.py b/lib/ansible/executor/module_common.py
index c1d337dcba..e7384b92af 100644
--- a/lib/ansible/executor/module_common.py
+++ b/lib/ansible/executor/module_common.py
@@ -406,7 +406,11 @@ class ModuleDepFinder(ast.NodeVisitor):
self.generic_visit(node)
def visit_ImportFrom(self, node):
- if node.module.startswith('ansible.module_utils'):
+ # Specialcase: six is a special case because of its
+ # import logic
+ if node.names[0].name == '_six':
+ self.submodules.add(('_six',))
+ elif node.module.startswith('ansible.module_utils'):
where_from = node.module[self.IMPORT_PREFIX_SIZE:]
if where_from:
# from ansible.module_utils.MODULE1[.MODULEn] import IDENTIFIER [as asname]
@@ -484,6 +488,12 @@ def recursive_finder(name, data, py_module_names, py_module_cache, zf):
module_info = imp.find_module('six', module_utils_paths)
py_module_name = ('six',)
idx = 0
+ elif py_module_name[0] == '_six':
+ # Special case the python six library because it messes up the
+ # import process in an incompatible way
+ module_info = imp.find_module('_six', [os.path.join(p, 'six') for p in module_utils_paths])
+ py_module_name = ('six', '_six')
+ idx = 0
else:
# Check whether either the last or the second to last identifier is
# a module name
@@ -499,7 +509,7 @@ def recursive_finder(name, data, py_module_names, py_module_cache, zf):
# Could not find the module. Construct a helpful error message.
if module_info is None:
- msg = ['Could not find imported module support code for %s. Looked for' % name]
+ msg = ['Could not find imported module support code for %s. Looked for' % (name,)]
if idx == 2:
msg.append('either %s.py or %s.py' % (py_module_name[-1], py_module_name[-2]))
else:
diff --git a/lib/ansible/executor/play_iterator.py b/lib/ansible/executor/play_iterator.py
index 616076cc5b..b3808021f0 100644
--- a/lib/ansible/executor/play_iterator.py
+++ b/lib/ansible/executor/play_iterator.py
@@ -21,14 +21,14 @@ __metaclass__ = type
import fnmatch
-from ansible.compat.six import iteritems
from ansible import constants as C
from ansible.errors import AnsibleError
-from ansible.module_utils.six import cmp
+from ansible.module_utils.six import iteritems
from ansible.playbook.block import Block
from ansible.playbook.task import Task
from ansible.playbook.role_include import IncludeRole
+
boolean = C.mk_boolean
__all__ = ['PlayIterator']
diff --git a/lib/ansible/executor/task_executor.py b/lib/ansible/executor/task_executor.py
index 033b3743f4..32b121d311 100644
--- a/lib/ansible/executor/task_executor.py
+++ b/lib/ansible/executor/task_executor.py
@@ -24,11 +24,10 @@ import sys
import time
import traceback
-from ansible.compat.six import iteritems, string_types, binary_type
-
from ansible import constants as C
from ansible.errors import AnsibleError, AnsibleParserError, AnsibleUndefinedVariable, AnsibleConnectionFailure
from ansible.executor.task_result import TaskResult
+from ansible.module_utils.six import iteritems, string_types, binary_type
from ansible.module_utils._text import to_text
from ansible.playbook.conditional import Conditional
from ansible.playbook.task import Task
@@ -44,6 +43,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
__all__ = ['TaskExecutor']
diff --git a/lib/ansible/executor/task_queue_manager.py b/lib/ansible/executor/task_queue_manager.py
index a68eb70a38..1b27a887d6 100644
--- a/lib/ansible/executor/task_queue_manager.py
+++ b/lib/ansible/executor/task_queue_manager.py
@@ -24,10 +24,10 @@ import os
import tempfile
from ansible import constants as C
-from ansible.compat.six import string_types
from ansible.errors import AnsibleError
from ansible.executor.play_iterator import PlayIterator
from ansible.executor.stats import AggregateStats
+from ansible.module_utils.six import string_types
from ansible.module_utils._text import to_text
from ansible.playbook.block import Block
from ansible.playbook.play_context import PlayContext
@@ -44,6 +44,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
__all__ = ['TaskQueueManager']
diff --git a/lib/ansible/galaxy/__init__.py b/lib/ansible/galaxy/__init__.py
index 129e860c90..f221a85cce 100644
--- a/lib/ansible/galaxy/__init__.py
+++ b/lib/ansible/galaxy/__init__.py
@@ -25,9 +25,8 @@ __metaclass__ = type
import os
-from ansible.compat.six import string_types
-
from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types
# default_readme_template
# default_meta_template
diff --git a/lib/ansible/galaxy/api.py b/lib/ansible/galaxy/api.py
index 068a888e41..08befce0cd 100644
--- a/lib/ansible/galaxy/api.py
+++ b/lib/ansible/galaxy/api.py
@@ -25,11 +25,11 @@ __metaclass__ = type
import json
import ansible.constants as C
-from ansible.compat.six import string_types
-from ansible.compat.six.moves.urllib.error import HTTPError
-from ansible.compat.six.moves.urllib.parse import quote as urlquote, urlencode
from ansible.errors import AnsibleError
from ansible.galaxy.token import GalaxyToken
+from ansible.module_utils.six import string_types
+from ansible.module_utils.six.moves.urllib.error import HTTPError
+from ansible.module_utils.six.moves.urllib.parse import quote as urlquote, urlencode
from ansible.module_utils._text import to_native, to_text
from ansible.module_utils.urls import open_url
diff --git a/lib/ansible/galaxy/login.py b/lib/ansible/galaxy/login.py
index 4e1b194e65..affe3c82f0 100644
--- a/lib/ansible/galaxy/login.py
+++ b/lib/ansible/galaxy/login.py
@@ -25,10 +25,9 @@ __metaclass__ = type
import getpass
import json
-from ansible.compat.six.moves.urllib.parse import quote as urlquote, urlparse
-from ansible.compat.six.moves.urllib.error import HTTPError
-
from ansible.errors import AnsibleError, AnsibleOptionsError
+from ansible.module_utils.six.moves.urllib.parse import quote as urlquote, urlparse
+from ansible.module_utils.six.moves.urllib.error import HTTPError
from ansible.module_utils.urls import open_url
from ansible.utils.color import stringc
@@ -38,6 +37,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
class GalaxyLogin(object):
''' Class to handle authenticating user with Galaxy API prior to performing CUD operations '''
diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py
index 20e117d0ab..2e530e7f3e 100644
--- a/lib/ansible/inventory/__init__.py
+++ b/lib/ansible/inventory/__init__.py
@@ -26,14 +26,13 @@ import sys
import re
import itertools
-from ansible.compat.six import string_types, iteritems
from ansible import constants as C
from ansible.errors import AnsibleError
-
from ansible.inventory.dir import InventoryDirectory, get_file_parser
from ansible.inventory.group import Group
from ansible.inventory.host import Host
+from ansible.module_utils.six import string_types, iteritems
from ansible.module_utils._text import to_bytes, to_text
from ansible.parsing.utils.addresses import parse_address
from ansible.plugins import vars_loader
diff --git a/lib/ansible/inventory/script.py b/lib/ansible/inventory/script.py
index bf9d06c2f1..d9cc9d0a9f 100644
--- a/lib/ansible/inventory/script.py
+++ b/lib/ansible/inventory/script.py
@@ -24,13 +24,12 @@ import subprocess
import sys
from collections import Mapping
-from ansible.compat.six import iteritems
-
from ansible import constants as C
from ansible.errors import AnsibleError
from ansible.inventory.host import Host
from ansible.inventory.group import Group
from ansible.module_utils.basic import json_dict_bytes_to_unicode
+from ansible.module_utils.six import iteritems
from ansible.module_utils._text import to_native, to_text
diff --git a/lib/ansible/inventory/yaml.py b/lib/ansible/inventory/yaml.py
index a652846aca..2e89e8f76e 100644
--- a/lib/ansible/inventory/yaml.py
+++ b/lib/ansible/inventory/yaml.py
@@ -26,8 +26,9 @@ from ansible.inventory.host import Host
from ansible.inventory.group import Group
from ansible.inventory.expand_hosts import detect_range
from ansible.inventory.expand_hosts import expand_hostname_range
+from ansible.module_utils.six import string_types
from ansible.parsing.utils.addresses import parse_address
-from ansible.compat.six import string_types
+
class InventoryParser(object):
"""
diff --git a/lib/ansible/module_utils/six.py b/lib/ansible/module_utils/six.py
deleted file mode 100644
index b93d4bf8bb..0000000000
--- a/lib/ansible/module_utils/six.py
+++ /dev/null
@@ -1,579 +0,0 @@
-"""Utilities for writing code that runs on Python 2 and 3"""
-
-# Copyright (c) 2010-2013 Benjamin Peterson
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-import operator
-import sys
-import types
-
-__author__ = "Benjamin Peterson "
-__version__ = "1.4.1"
-
-
-# Useful for very coarse version differentiation.
-PY2 = sys.version_info[0] == 2
-PY3 = sys.version_info[0] == 3
-
-if PY3:
- string_types = str,
- integer_types = int,
- class_types = type,
- text_type = str
- binary_type = bytes
- cmp = lambda a, b: (a > b) - (a < b)
-
- MAXSIZE = sys.maxsize
-else:
- string_types = basestring,
- integer_types = (int, long)
- class_types = (type, types.ClassType)
- text_type = unicode
- binary_type = str
- cmp = cmp
-
- if sys.platform.startswith("java"):
- # Jython always uses 32 bits.
- MAXSIZE = int((1 << 31) - 1)
- else:
- # It's possible to have sizeof(long) != sizeof(Py_ssize_t).
- class X(object):
- def __len__(self):
- return 1 << 31
- try:
- len(X())
- except OverflowError:
- # 32-bit
- MAXSIZE = int((1 << 31) - 1)
- else:
- # 64-bit
- MAXSIZE = int((1 << 63) - 1)
- del X
-
-
-def _add_doc(func, doc):
- """Add documentation to a function."""
- func.__doc__ = doc
-
-
-def _import_module(name):
- """Import module, returning the module after the last dot."""
- __import__(name)
- return sys.modules[name]
-
-
-class _LazyDescr(object):
-
- def __init__(self, name):
- self.name = name
-
- def __get__(self, obj, tp):
- result = self._resolve()
- setattr(obj, self.name, result)
- # This is a bit ugly, but it avoids running this again.
- delattr(tp, self.name)
- return result
-
-
-class MovedModule(_LazyDescr):
-
- def __init__(self, name, old, new=None):
- super(MovedModule, self).__init__(name)
- if PY3:
- if new is None:
- new = name
- self.mod = new
- else:
- self.mod = old
-
- def _resolve(self):
- return _import_module(self.mod)
-
-
-class MovedAttribute(_LazyDescr):
-
- def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
- super(MovedAttribute, self).__init__(name)
- if PY3:
- if new_mod is None:
- new_mod = name
- self.mod = new_mod
- if new_attr is None:
- if old_attr is None:
- new_attr = name
- else:
- new_attr = old_attr
- self.attr = new_attr
- else:
- self.mod = old_mod
- if old_attr is None:
- old_attr = name
- self.attr = old_attr
-
- def _resolve(self):
- module = _import_module(self.mod)
- return getattr(module, self.attr)
-
-
-
-class _MovedItems(types.ModuleType):
- """Lazy loading of moved objects"""
-
-
-_moved_attributes = [
- MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"),
- MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"),
- MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"),
- MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"),
- MovedAttribute("map", "itertools", "builtins", "imap", "map"),
- MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"),
- MovedAttribute("reload_module", "__builtin__", "imp", "reload"),
- MovedAttribute("reduce", "__builtin__", "functools"),
- MovedAttribute("StringIO", "StringIO", "io"),
- MovedAttribute("UserString", "UserString", "collections"),
- MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"),
- MovedAttribute("zip", "itertools", "builtins", "izip", "zip"),
- MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"),
-
- MovedModule("builtins", "__builtin__"),
- MovedModule("configparser", "ConfigParser"),
- MovedModule("copyreg", "copy_reg"),
- MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
- MovedModule("http_cookies", "Cookie", "http.cookies"),
- MovedModule("html_entities", "htmlentitydefs", "html.entities"),
- MovedModule("html_parser", "HTMLParser", "html.parser"),
- MovedModule("http_client", "httplib", "http.client"),
- MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"),
- MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"),
- MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"),
- MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"),
- MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"),
- MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"),
- MovedModule("cPickle", "cPickle", "pickle"),
- MovedModule("queue", "Queue"),
- MovedModule("reprlib", "repr"),
- MovedModule("socketserver", "SocketServer"),
- MovedModule("tkinter", "Tkinter"),
- MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"),
- MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"),
- MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"),
- MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"),
- MovedModule("tkinter_tix", "Tix", "tkinter.tix"),
- MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"),
- MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"),
- MovedModule("tkinter_colorchooser", "tkColorChooser",
- "tkinter.colorchooser"),
- MovedModule("tkinter_commondialog", "tkCommonDialog",
- "tkinter.commondialog"),
- MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"),
- MovedModule("tkinter_font", "tkFont", "tkinter.font"),
- MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"),
- MovedModule("tkinter_tksimpledialog", "tkSimpleDialog",
- "tkinter.simpledialog"),
- MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"),
- MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"),
- MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"),
- MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"),
- MovedModule("winreg", "_winreg"),
-]
-for attr in _moved_attributes:
- setattr(_MovedItems, attr.name, attr)
-del attr
-
-moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
-
-
-
-class Module_six_moves_urllib_parse(types.ModuleType):
- """Lazy loading of moved objects in six.moves.urllib_parse"""
-
-
-_urllib_parse_moved_attributes = [
- MovedAttribute("ParseResult", "urlparse", "urllib.parse"),
- MovedAttribute("parse_qs", "urlparse", "urllib.parse"),
- MovedAttribute("parse_qsl", "urlparse", "urllib.parse"),
- MovedAttribute("urldefrag", "urlparse", "urllib.parse"),
- MovedAttribute("urljoin", "urlparse", "urllib.parse"),
- MovedAttribute("urlparse", "urlparse", "urllib.parse"),
- MovedAttribute("urlsplit", "urlparse", "urllib.parse"),
- MovedAttribute("urlunparse", "urlparse", "urllib.parse"),
- MovedAttribute("urlunsplit", "urlparse", "urllib.parse"),
- MovedAttribute("quote", "urllib", "urllib.parse"),
- MovedAttribute("quote_plus", "urllib", "urllib.parse"),
- MovedAttribute("unquote", "urllib", "urllib.parse"),
- MovedAttribute("unquote_plus", "urllib", "urllib.parse"),
- MovedAttribute("urlencode", "urllib", "urllib.parse"),
-]
-for attr in _urllib_parse_moved_attributes:
- setattr(Module_six_moves_urllib_parse, attr.name, attr)
-del attr
-
-sys.modules[__name__ + ".moves.urllib_parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse")
-sys.modules[__name__ + ".moves.urllib.parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib.parse")
-
-
-class Module_six_moves_urllib_error(types.ModuleType):
- """Lazy loading of moved objects in six.moves.urllib_error"""
-
-
-_urllib_error_moved_attributes = [
- MovedAttribute("URLError", "urllib2", "urllib.error"),
- MovedAttribute("HTTPError", "urllib2", "urllib.error"),
- MovedAttribute("ContentTooShortError", "urllib", "urllib.error"),
-]
-for attr in _urllib_error_moved_attributes:
- setattr(Module_six_moves_urllib_error, attr.name, attr)
-del attr
-
-sys.modules[__name__ + ".moves.urllib_error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib_error")
-sys.modules[__name__ + ".moves.urllib.error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib.error")
-
-
-class Module_six_moves_urllib_request(types.ModuleType):
- """Lazy loading of moved objects in six.moves.urllib_request"""
-
-
-_urllib_request_moved_attributes = [
- MovedAttribute("urlopen", "urllib2", "urllib.request"),
- MovedAttribute("install_opener", "urllib2", "urllib.request"),
- MovedAttribute("build_opener", "urllib2", "urllib.request"),
- MovedAttribute("pathname2url", "urllib", "urllib.request"),
- MovedAttribute("url2pathname", "urllib", "urllib.request"),
- MovedAttribute("getproxies", "urllib", "urllib.request"),
- MovedAttribute("Request", "urllib2", "urllib.request"),
- MovedAttribute("OpenerDirector", "urllib2", "urllib.request"),
- MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"),
- MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"),
- MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"),
- MovedAttribute("ProxyHandler", "urllib2", "urllib.request"),
- MovedAttribute("BaseHandler", "urllib2", "urllib.request"),
- MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"),
- MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"),
- MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"),
- MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"),
- MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"),
- MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"),
- MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"),
- MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"),
- MovedAttribute("HTTPHandler", "urllib2", "urllib.request"),
- MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"),
- MovedAttribute("FileHandler", "urllib2", "urllib.request"),
- MovedAttribute("FTPHandler", "urllib2", "urllib.request"),
- MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"),
- MovedAttribute("UnknownHandler", "urllib2", "urllib.request"),
- MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"),
- MovedAttribute("urlretrieve", "urllib", "urllib.request"),
- MovedAttribute("urlcleanup", "urllib", "urllib.request"),
- MovedAttribute("URLopener", "urllib", "urllib.request"),
- MovedAttribute("FancyURLopener", "urllib", "urllib.request"),
-]
-for attr in _urllib_request_moved_attributes:
- setattr(Module_six_moves_urllib_request, attr.name, attr)
-del attr
-
-sys.modules[__name__ + ".moves.urllib_request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib_request")
-sys.modules[__name__ + ".moves.urllib.request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib.request")
-
-
-class Module_six_moves_urllib_response(types.ModuleType):
- """Lazy loading of moved objects in six.moves.urllib_response"""
-
-
-_urllib_response_moved_attributes = [
- MovedAttribute("addbase", "urllib", "urllib.response"),
- MovedAttribute("addclosehook", "urllib", "urllib.response"),
- MovedAttribute("addinfo", "urllib", "urllib.response"),
- MovedAttribute("addinfourl", "urllib", "urllib.response"),
-]
-for attr in _urllib_response_moved_attributes:
- setattr(Module_six_moves_urllib_response, attr.name, attr)
-del attr
-
-sys.modules[__name__ + ".moves.urllib_response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib_response")
-sys.modules[__name__ + ".moves.urllib.response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib.response")
-
-
-class Module_six_moves_urllib_robotparser(types.ModuleType):
- """Lazy loading of moved objects in six.moves.urllib_robotparser"""
-
-
-_urllib_robotparser_moved_attributes = [
- MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"),
-]
-for attr in _urllib_robotparser_moved_attributes:
- setattr(Module_six_moves_urllib_robotparser, attr.name, attr)
-del attr
-
-sys.modules[__name__ + ".moves.urllib_robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib_robotparser")
-sys.modules[__name__ + ".moves.urllib.robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser")
-
-
-class Module_six_moves_urllib(types.ModuleType):
- """Create a six.moves.urllib namespace that resembles the Python 3 namespace"""
- parse = sys.modules[__name__ + ".moves.urllib_parse"]
- error = sys.modules[__name__ + ".moves.urllib_error"]
- request = sys.modules[__name__ + ".moves.urllib_request"]
- response = sys.modules[__name__ + ".moves.urllib_response"]
- robotparser = sys.modules[__name__ + ".moves.urllib_robotparser"]
-
-
-sys.modules[__name__ + ".moves.urllib"] = Module_six_moves_urllib(__name__ + ".moves.urllib")
-
-
-def add_move(move):
- """Add an item to six.moves."""
- setattr(_MovedItems, move.name, move)
-
-
-def remove_move(name):
- """Remove item from six.moves."""
- try:
- delattr(_MovedItems, name)
- except AttributeError:
- try:
- del moves.__dict__[name]
- except KeyError:
- raise AttributeError("no such move, %r" % (name,))
-
-
-if PY3:
- _meth_func = "__func__"
- _meth_self = "__self__"
-
- _func_closure = "__closure__"
- _func_code = "__code__"
- _func_defaults = "__defaults__"
- _func_globals = "__globals__"
-
- _iterkeys = "keys"
- _itervalues = "values"
- _iteritems = "items"
- _iterlists = "lists"
-else:
- _meth_func = "im_func"
- _meth_self = "im_self"
-
- _func_closure = "func_closure"
- _func_code = "func_code"
- _func_defaults = "func_defaults"
- _func_globals = "func_globals"
-
- _iterkeys = "iterkeys"
- _itervalues = "itervalues"
- _iteritems = "iteritems"
- _iterlists = "iterlists"
-
-
-try:
- advance_iterator = next
-except NameError:
- def advance_iterator(it):
- return it.next()
-next = advance_iterator
-
-
-try:
- callable = callable
-except NameError:
- def callable(obj):
- return any("__call__" in klass.__dict__ for klass in type(obj).__mro__)
-
-
-if PY3:
- def get_unbound_function(unbound):
- return unbound
-
- create_bound_method = types.MethodType
-
- Iterator = object
-else:
- def get_unbound_function(unbound):
- return unbound.im_func
-
- def create_bound_method(func, obj):
- return types.MethodType(func, obj, obj.__class__)
-
- class Iterator(object):
-
- def next(self):
- return type(self).__next__(self)
-
- callable = callable
-_add_doc(get_unbound_function,
- """Get the function out of a possibly unbound function""")
-
-
-get_method_function = operator.attrgetter(_meth_func)
-get_method_self = operator.attrgetter(_meth_self)
-get_function_closure = operator.attrgetter(_func_closure)
-get_function_code = operator.attrgetter(_func_code)
-get_function_defaults = operator.attrgetter(_func_defaults)
-get_function_globals = operator.attrgetter(_func_globals)
-
-
-def iterkeys(d, **kw):
- """Return an iterator over the keys of a dictionary."""
- return iter(getattr(d, _iterkeys)(**kw))
-
-def itervalues(d, **kw):
- """Return an iterator over the values of a dictionary."""
- return iter(getattr(d, _itervalues)(**kw))
-
-def iteritems(d, **kw):
- """Return an iterator over the (key, value) pairs of a dictionary."""
- return iter(getattr(d, _iteritems)(**kw))
-
-def iterlists(d, **kw):
- """Return an iterator over the (key, [values]) pairs of a dictionary."""
- return iter(getattr(d, _iterlists)(**kw))
-
-
-if PY3:
- def b(s):
- return s.encode("latin-1")
- def u(s):
- return s
- unichr = chr
- if sys.version_info[1] <= 1:
- def int2byte(i):
- return bytes((i,))
- else:
- # This is about 2x faster than the implementation above on 3.2+
- int2byte = operator.methodcaller("to_bytes", 1, "big")
- byte2int = operator.itemgetter(0)
- indexbytes = operator.getitem
- iterbytes = iter
- import io
- StringIO = io.StringIO
- BytesIO = io.BytesIO
-else:
- def b(s):
- return s
- def u(s):
- return unicode(s, "unicode_escape")
- unichr = unichr
- int2byte = chr
- def byte2int(bs):
- return ord(bs[0])
- def indexbytes(buf, i):
- return ord(buf[i])
- def iterbytes(buf):
- return (ord(byte) for byte in buf)
- import StringIO
- StringIO = BytesIO = StringIO.StringIO
-_add_doc(b, """Byte literal""")
-_add_doc(u, """Text literal""")
-
-
-if PY3:
- import builtins
- exec_ = getattr(builtins, "exec")
-
-
- def reraise(tp, value, tb=None):
- if value.__traceback__ is not tb:
- raise value.with_traceback(tb)
- raise value
-
-
- print_ = getattr(builtins, "print")
- del builtins
-
-else:
- def exec_(_code_, _globs_=None, _locs_=None):
- """Execute code in a namespace."""
- if _globs_ is None:
- frame = sys._getframe(1)
- _globs_ = frame.f_globals
- if _locs_ is None:
- _locs_ = frame.f_locals
- del frame
- elif _locs_ is None:
- _locs_ = _globs_
- exec("""exec _code_ in _globs_, _locs_""")
-
-
- exec_("""def reraise(tp, value, tb=None):
- raise tp, value, tb
-""")
-
-
- def print_(*args, **kwargs):
- """The new-style print function."""
- fp = kwargs.pop("file", sys.stdout)
- if fp is None:
- return
- def write(data):
- if not isinstance(data, basestring):
- data = str(data)
- fp.write(data)
- want_unicode = False
- sep = kwargs.pop("sep", None)
- if sep is not None:
- if isinstance(sep, unicode):
- want_unicode = True
- elif not isinstance(sep, str):
- raise TypeError("sep must be None or a string")
- end = kwargs.pop("end", None)
- if end is not None:
- if isinstance(end, unicode):
- want_unicode = True
- elif not isinstance(end, str):
- raise TypeError("end must be None or a string")
- if kwargs:
- raise TypeError("invalid keyword arguments to print()")
- if not want_unicode:
- for arg in args:
- if isinstance(arg, unicode):
- want_unicode = True
- break
- if want_unicode:
- newline = unicode("\n")
- space = unicode(" ")
- else:
- newline = "\n"
- space = " "
- if sep is None:
- sep = space
- if end is None:
- end = newline
- for i, arg in enumerate(args):
- if i:
- write(sep)
- write(arg)
- write(end)
-
-_add_doc(reraise, """Reraise an exception.""")
-
-
-def with_metaclass(meta, *bases):
- """Create a base class with a metaclass."""
- return meta("NewBase", bases, {})
-
-def add_metaclass(metaclass):
- """Class decorator for creating a class with a metaclass."""
- def wrapper(cls):
- orig_vars = cls.__dict__.copy()
- orig_vars.pop('__dict__', None)
- orig_vars.pop('__weakref__', None)
- for slots_var in orig_vars.get('__slots__', ()):
- orig_vars.pop(slots_var)
- return metaclass(cls.__name__, cls.__bases__, orig_vars)
- return wrapper
diff --git a/lib/ansible/module_utils/six/__init__.py b/lib/ansible/module_utils/six/__init__.py
new file mode 100644
index 0000000000..644db3d9ad
--- /dev/null
+++ b/lib/ansible/module_utils/six/__init__.py
@@ -0,0 +1,116 @@
+# This code is part of Ansible, but is an independent component.
+# This particular file snippet, and this file snippet only, is BSD licensed.
+# Modules you write using this snippet, which is embedded dynamically by Ansible
+# still belong to the author of the module, and may assign their own license
+# to the complete work.
+#
+# Copyright (c) 2017, Toshio Kuratomi
+#
+# This code is based on code from Astropy and retains their 3-clause BSD license
+# reproduced below:
+#
+# Copyright (c) 2011-2016, Astropy Developers
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Astropy Team nor the names of its contributors may
+# be used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Astropy License: https://github.com/astropy/astropy/blob/cf3265e42a0db8e00bb90644db37c8150f5ac00c/licenses/LICENSE.rst
+# Astropy Code: https://github.com/astropy/astropy/blob/cf3265e42a0db8e00bb90644db37c8150f5ac00c/astropy/extern/six.py
+
+"""
+Handle loading six package from system or from the bundled copy
+"""
+from __future__ import absolute_import
+
+import imp as _imp
+import sys as _sys
+
+try:
+ from distutils.version import LooseVersion as _LooseVersion
+except ImportError:
+ # Some platforms *cough*Solaris*cough* don't ship the whole stdlib
+ _LooseVersion = None
+
+try:
+ import six as _system_six
+except ImportError:
+ _system_six = None
+
+from . import _six as _bundled_six
+
+
+def _find_module(name, path=None):
+ """Alternative to `imp.find_module` that can also search in subpackages"""
+ parts = name.split('.')
+
+ for part in parts:
+ if path is not None:
+ path = [path]
+ fh, path, descr = _imp.find_module(part, path)
+ return fh, path, descr
+
+
+def _get_bundled_six_source():
+ # Special import loader (zipimport for instance)
+ found = False
+ for path in _sys.path:
+ importer = _sys.path_importer_cache.get(path)
+ if importer:
+ try:
+ found = importer.find_module('ansible/module_utils/six/_six')
+ except ImportError:
+ continue
+ if found:
+ break
+ else:
+ raise ImportError("Could not find ansible.module_utils.six._six")
+
+ module_source = importer.get_source('ansible/module_utils/six/_six')
+ return module_source
+
+
+def _get_six_source():
+ """Import the newest version of the six library that's available"""
+ mod_info = None
+ try:
+ if _system_six and _LooseVersion and \
+ _LooseVersion(_system_six.__version__) >= _LooseVersion(_bundled_six.__version__):
+ mod_info = _find_module('six')
+ except:
+ # Any errors finding the system library, use our bundled lib instead
+ pass
+
+ if not mod_info:
+ try:
+ mod_info = _find_module('ansible.module_utils.six._six')
+ except ImportError:
+ # zipimport
+ module_source = _get_bundled_six_source()
+ return module_source
+
+ return mod_info[0].read()
+
+source = _get_six_source()
+exec(source)
diff --git a/lib/ansible/compat/six/_six.py b/lib/ansible/module_utils/six/_six.py
similarity index 100%
rename from lib/ansible/compat/six/_six.py
rename to lib/ansible/module_utils/six/_six.py
diff --git a/lib/ansible/parsing/dataloader.py b/lib/ansible/parsing/dataloader.py
index aa306aafd7..9022de381a 100644
--- a/lib/ansible/parsing/dataloader.py
+++ b/lib/ansible/parsing/dataloader.py
@@ -25,10 +25,10 @@ import json
import tempfile
from yaml import YAMLError
-from ansible.compat.six import text_type, string_types
from ansible.errors import AnsibleFileNotFound, AnsibleParserError
from ansible.errors.yaml_strings import YAML_SYNTAX_ERROR
from ansible.module_utils.basic import is_executable
+from ansible.module_utils.six import text_type, string_types
from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.parsing.vault import VaultLib, b_HEADER, is_encrypted, is_encrypted_file
from ansible.parsing.quoting import unquote
@@ -43,7 +43,7 @@ except ImportError:
display = Display()
-class DataLoader():
+class DataLoader:
'''
The DataLoader class is used to load and parse YAML or JSON content,
diff --git a/lib/ansible/parsing/mod_args.py b/lib/ansible/parsing/mod_args.py
index 299554197a..c309bf1bd7 100644
--- a/lib/ansible/parsing/mod_args.py
+++ b/lib/ansible/parsing/mod_args.py
@@ -19,14 +19,15 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import iteritems, string_types
from ansible.errors import AnsibleParserError,AnsibleError
+from ansible.module_utils.six import iteritems, string_types
from ansible.module_utils._text import to_text
from ansible.plugins import module_loader
from ansible.parsing.splitter import parse_kv, split_args
from ansible.template import Templar
+
# For filtering out modules correctly below
RAW_PARAM_MODULES = ([
'command',
@@ -43,6 +44,7 @@ RAW_PARAM_MODULES = ([
'meta',
])
+
class ModuleArgsParser:
"""
diff --git a/lib/ansible/parsing/vault/__init__.py b/lib/ansible/parsing/vault/__init__.py
index 9e88514277..ddcb7cfc8b 100644
--- a/lib/ansible/parsing/vault/__init__.py
+++ b/lib/ansible/parsing/vault/__init__.py
@@ -62,9 +62,9 @@ try:
except ImportError:
HAS_AES = False
-from ansible.compat.six import PY3, binary_type
-from ansible.compat.six.moves import zip
from ansible.errors import AnsibleError
+from ansible.module_utils.six import PY3, binary_type
+from ansible.module_utils.six.moves import zip
from ansible.module_utils._text import to_bytes, to_text
try:
diff --git a/lib/ansible/parsing/yaml/dumper.py b/lib/ansible/parsing/yaml/dumper.py
index f04c3200f2..6060f1647c 100644
--- a/lib/ansible/parsing/yaml/dumper.py
+++ b/lib/ansible/parsing/yaml/dumper.py
@@ -20,8 +20,8 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import yaml
-from ansible.compat.six import PY3
+from ansible.module_utils.six import PY3
from ansible.parsing.yaml.objects import AnsibleUnicode, AnsibleSequence, AnsibleMapping
from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode
from ansible.vars.hostvars import HostVars
diff --git a/lib/ansible/parsing/yaml/objects.py b/lib/ansible/parsing/yaml/objects.py
index 67aa2b9967..7c2726c445 100644
--- a/lib/ansible/parsing/yaml/objects.py
+++ b/lib/ansible/parsing/yaml/objects.py
@@ -21,7 +21,7 @@ __metaclass__ = type
import yaml
-from ansible.compat.six import text_type
+from ansible.module_utils.six import text_type
from ansible.module_utils._text import to_bytes
diff --git a/lib/ansible/playbook/base.py b/lib/ansible/playbook/base.py
index 4e7525198e..bd4bef91b6 100644
--- a/lib/ansible/playbook/base.py
+++ b/lib/ansible/playbook/base.py
@@ -27,7 +27,7 @@ from functools import partial
from jinja2.exceptions import UndefinedError
-from ansible.compat.six import iteritems, string_types, with_metaclass
+from ansible.module_utils.six import iteritems, string_types, with_metaclass
from ansible.errors import AnsibleParserError, AnsibleUndefinedVariable
from ansible.module_utils._text import to_text
from ansible.playbook.attribute import Attribute, FieldAttribute
diff --git a/lib/ansible/playbook/conditional.py b/lib/ansible/playbook/conditional.py
index ac342c9089..0681482e7d 100644
--- a/lib/ansible/playbook/conditional.py
+++ b/lib/ansible/playbook/conditional.py
@@ -25,12 +25,12 @@ import re
from jinja2.compiler import generate
from jinja2.exceptions import UndefinedError
-from ansible.compat.six import text_type
from ansible.errors import AnsibleError, AnsibleUndefinedVariable
+from ansible.module_utils.six import text_type
+from ansible.module_utils._text import to_native
from ansible.playbook.attribute import FieldAttribute
from ansible.template import Templar
from ansible.template.safe_eval import safe_eval
-from ansible.module_utils._text import to_native
try:
from __main__ import display
@@ -38,6 +38,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
DEFINED_REGEX = re.compile(r'(hostvars\[.+\]|[\w_]+)\s+(not\s+is|is|is\s+not)\s+(defined|undefined)')
LOOKUP_REGEX = re.compile(r'lookup\s*\(')
VALID_VAR_REGEX = re.compile("^[_A-Za-z][_a-zA-Z0-9]*$")
diff --git a/lib/ansible/playbook/helpers.py b/lib/ansible/playbook/helpers.py
index 6c6e1151a0..7ded4c6540 100644
--- a/lib/ansible/playbook/helpers.py
+++ b/lib/ansible/playbook/helpers.py
@@ -21,8 +21,8 @@ __metaclass__ = type
import os
from ansible import constants as C
-from ansible.compat.six import string_types
from ansible.errors import AnsibleParserError, AnsibleUndefinedVariable, AnsibleFileNotFound
+from ansible.module_utils.six import string_types
try:
from __main__ import display
diff --git a/lib/ansible/playbook/loop_control.py b/lib/ansible/playbook/loop_control.py
index 78501a982f..cd7a9c7b59 100644
--- a/lib/ansible/playbook/loop_control.py
+++ b/lib/ansible/playbook/loop_control.py
@@ -21,11 +21,12 @@ __metaclass__ = type
import itertools
-from ansible.compat.six import string_types
from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types
from ansible.playbook.attribute import FieldAttribute
from ansible.playbook.base import Base
+
class LoopControl(Base):
_loop_var = FieldAttribute(isa='str')
diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py
index 429019cbb1..ce943f09a8 100644
--- a/lib/ansible/playbook/play.py
+++ b/lib/ansible/playbook/play.py
@@ -19,10 +19,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import string_types
from ansible import constants as C
from ansible.errors import AnsibleParserError
+from ansible.module_utils.six import string_types
from ansible.playbook.attribute import FieldAttribute
from ansible.playbook.base import Base
diff --git a/lib/ansible/playbook/play_context.py b/lib/ansible/playbook/play_context.py
index c77f0ff405..abe0e89adb 100644
--- a/lib/ansible/playbook/play_context.py
+++ b/lib/ansible/playbook/play_context.py
@@ -27,14 +27,15 @@ import random
import re
import string
-from ansible.compat.six import iteritems, string_types
-from ansible.compat.six.moves import shlex_quote
from ansible import constants as C
from ansible.errors import AnsibleError
+from ansible.module_utils.six import iteritems, string_types
+from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes
from ansible.playbook.attribute import FieldAttribute
from ansible.playbook.base import Base
+
boolean = C.mk_boolean
__all__ = ['PlayContext']
diff --git a/lib/ansible/playbook/playbook_include.py b/lib/ansible/playbook/playbook_include.py
index 1b13efe0eb..8523d11f01 100644
--- a/lib/ansible/playbook/playbook_include.py
+++ b/lib/ansible/playbook/playbook_include.py
@@ -21,8 +21,8 @@ __metaclass__ = type
import os
-from ansible.compat.six import iteritems
from ansible.errors import AnsibleParserError, AnsibleError
+from ansible.module_utils.six import iteritems
from ansible.parsing.splitter import split_args, parse_kv
from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject, AnsibleMapping
from ansible.playbook.attribute import FieldAttribute
@@ -31,6 +31,7 @@ from ansible.playbook.conditional import Conditional
from ansible.playbook.taggable import Taggable
from ansible.template import Templar
+
class PlaybookInclude(Base, Conditional, Taggable):
_name = FieldAttribute(isa='string')
diff --git a/lib/ansible/playbook/role/__init__.py b/lib/ansible/playbook/role/__init__.py
index 5400a08119..e1e876c54f 100644
--- a/lib/ansible/playbook/role/__init__.py
+++ b/lib/ansible/playbook/role/__init__.py
@@ -22,8 +22,8 @@ __metaclass__ = type
import collections
import os
-from ansible.compat.six import iteritems, binary_type, text_type
from ansible.errors import AnsibleError, AnsibleParserError
+from ansible.module_utils.six import iteritems, binary_type, text_type
from ansible.playbook.attribute import FieldAttribute
from ansible.playbook.base import Base
from ansible.playbook.become import Become
diff --git a/lib/ansible/playbook/role/definition.py b/lib/ansible/playbook/role/definition.py
index 7fa8d0761c..306e78f47c 100644
--- a/lib/ansible/playbook/role/definition.py
+++ b/lib/ansible/playbook/role/definition.py
@@ -19,12 +19,11 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import iteritems, string_types
-
import os
from ansible import constants as C
from ansible.errors import AnsibleError
+from ansible.module_utils.six import iteritems, string_types
from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject, AnsibleMapping
from ansible.playbook.attribute import Attribute, FieldAttribute
from ansible.playbook.base import Base
diff --git a/lib/ansible/playbook/role/include.py b/lib/ansible/playbook/role/include.py
index 78079b3813..5e6e451561 100644
--- a/lib/ansible/playbook/role/include.py
+++ b/lib/ansible/playbook/role/include.py
@@ -19,11 +19,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import iteritems, string_types
-
import os
from ansible.errors import AnsibleError, AnsibleParserError
+from ansible.module_utils.six import iteritems, string_types
from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject
from ansible.playbook.attribute import Attribute, FieldAttribute
from ansible.playbook.role.definition import RoleDefinition
diff --git a/lib/ansible/playbook/role/metadata.py b/lib/ansible/playbook/role/metadata.py
index a2009c6f4b..50e104f4bc 100644
--- a/lib/ansible/playbook/role/metadata.py
+++ b/lib/ansible/playbook/role/metadata.py
@@ -21,9 +21,8 @@ __metaclass__ = type
import os
-from ansible.compat.six import iteritems, string_types
-
from ansible.errors import AnsibleParserError, AnsibleError
+from ansible.module_utils.six import iteritems, string_types
from ansible.playbook.attribute import Attribute, FieldAttribute
from ansible.playbook.base import Base
from ansible.playbook.helpers import load_list_of_roles
diff --git a/lib/ansible/playbook/role/requirement.py b/lib/ansible/playbook/role/requirement.py
index e41b6c37f9..55b2087793 100644
--- a/lib/ansible/playbook/role/requirement.py
+++ b/lib/ansible/playbook/role/requirement.py
@@ -19,16 +19,16 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import string_types
-
import os
import shutil
import subprocess
import tempfile
from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types
from ansible.playbook.role.definition import RoleDefinition
+
__all__ = ['RoleRequirement']
diff --git a/lib/ansible/playbook/taggable.py b/lib/ansible/playbook/taggable.py
index 3b8556010e..ed9dc2caa5 100644
--- a/lib/ansible/playbook/taggable.py
+++ b/lib/ansible/playbook/taggable.py
@@ -21,11 +21,12 @@ __metaclass__ = type
import itertools
-from ansible.compat.six import string_types
from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types
from ansible.playbook.attribute import FieldAttribute
from ansible.template import Templar
+
class Taggable:
untagged = frozenset(['untagged'])
diff --git a/lib/ansible/playbook/task.py b/lib/ansible/playbook/task.py
index 43a1c9dd8e..f93e6d5096 100644
--- a/lib/ansible/playbook/task.py
+++ b/lib/ansible/playbook/task.py
@@ -21,8 +21,8 @@ __metaclass__ = type
import os
-from ansible.compat.six import iteritems, string_types
from ansible.errors import AnsibleError, AnsibleParserError
+from ansible.module_utils.six import iteritems, string_types
from ansible.module_utils._text import to_native
from ansible.parsing.mod_args import ModuleArgsParser
from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject, AnsibleMapping, AnsibleUnicode
diff --git a/lib/ansible/plugins/action/__init__.py b/lib/ansible/plugins/action/__init__.py
index e7660a8496..a4372bdaa4 100644
--- a/lib/ansible/plugins/action/__init__.py
+++ b/lib/ansible/plugins/action/__init__.py
@@ -30,12 +30,12 @@ import time
from abc import ABCMeta, abstractmethod
from ansible import constants as C
-from ansible.compat.six import binary_type, string_types, text_type, iteritems, with_metaclass
-from ansible.compat.six.moves import shlex_quote
from ansible.errors import AnsibleError, AnsibleConnectionFailure
from ansible.executor.module_common import modify_module, build_windows_module_payload
-from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.module_utils.json_utils import _filter_non_json_lines
+from ansible.module_utils.six import binary_type, string_types, text_type, iteritems, with_metaclass
+from ansible.module_utils.six.moves import shlex_quote
+from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.parsing.utils.jsonify import jsonify
from ansible.playbook.play_context import MAGIC_VARIABLE_MAPPING
from ansible.release import __version__
diff --git a/lib/ansible/plugins/action/add_host.py b/lib/ansible/plugins/action/add_host.py
index b253c22865..c41c89d01e 100644
--- a/lib/ansible/plugins/action/add_host.py
+++ b/lib/ansible/plugins/action/add_host.py
@@ -20,11 +20,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import string_types
-
+from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types
from ansible.plugins.action import ActionBase
from ansible.parsing.utils.addresses import parse_address
-from ansible.errors import AnsibleError
try:
from __main__ import display
diff --git a/lib/ansible/plugins/action/debug.py b/lib/ansible/plugins/action/debug.py
index f9f87adef5..2280b65615 100644
--- a/lib/ansible/plugins/action/debug.py
+++ b/lib/ansible/plugins/action/debug.py
@@ -18,8 +18,8 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import string_types
from ansible.errors import AnsibleUndefinedVariable
+from ansible.module_utils.six import string_types
from ansible.module_utils._text import to_text
from ansible.plugins.action import ActionBase
diff --git a/lib/ansible/plugins/action/eos.py b/lib/ansible/plugins/action/eos.py
index 4aa1d39a88..631a1c1c8d 100644
--- a/lib/ansible/plugins/action/eos.py
+++ b/lib/ansible/plugins/action/eos.py
@@ -23,13 +23,13 @@ import os
import sys
import copy
+from ansible.module_utils.basic import AnsibleFallbackNotFound
+from ansible.module_utils.eos import eos_argument_spec
+from ansible.module_utils.six import iteritems
+from ansible.module_utils._text import to_bytes
+from ansible.plugins import connection_loader
from ansible.plugins.action.normal import ActionModule as _ActionModule
from ansible.utils.path import unfrackpath
-from ansible.plugins import connection_loader
-from ansible.compat.six import iteritems
-from ansible.module_utils.eos import eos_argument_spec
-from ansible.module_utils.basic import AnsibleFallbackNotFound
-from ansible.module_utils._text import to_bytes
try:
from __main__ import display
@@ -37,6 +37,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
class ActionModule(_ActionModule):
def run(self, tmp=None, task_vars=None):
diff --git a/lib/ansible/plugins/action/include_vars.py b/lib/ansible/plugins/action/include_vars.py
index 1f57e50604..f4559e436d 100644
--- a/lib/ansible/plugins/action/include_vars.py
+++ b/lib/ansible/plugins/action/include_vars.py
@@ -22,9 +22,10 @@ from os import path, walk
import re
from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types
from ansible.module_utils._text import to_native, to_text
from ansible.plugins.action import ActionBase
-from ansible.compat.six import string_types
+
class ActionModule(ActionBase):
diff --git a/lib/ansible/plugins/action/ios.py b/lib/ansible/plugins/action/ios.py
index 2a8a532c97..fc162cb79c 100644
--- a/lib/ansible/plugins/action/ios.py
+++ b/lib/ansible/plugins/action/ios.py
@@ -26,9 +26,9 @@ import copy
from ansible.plugins.action.normal import ActionModule as _ActionModule
from ansible.utils.path import unfrackpath
from ansible.plugins import connection_loader
-from ansible.compat.six import iteritems
-from ansible.module_utils.ios import ios_argument_spec
from ansible.module_utils.basic import AnsibleFallbackNotFound
+from ansible.module_utils.ios import ios_argument_spec
+from ansible.module_utils.six import iteritems
from ansible.module_utils._text import to_bytes
try:
@@ -37,6 +37,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
class ActionModule(_ActionModule):
def run(self, tmp=None, task_vars=None):
diff --git a/lib/ansible/plugins/action/iosxr.py b/lib/ansible/plugins/action/iosxr.py
index 83fb1d2f5b..f746de09e8 100644
--- a/lib/ansible/plugins/action/iosxr.py
+++ b/lib/ansible/plugins/action/iosxr.py
@@ -23,13 +23,13 @@ import os
import sys
import copy
-from ansible.plugins.action.normal import ActionModule as _ActionModule
-from ansible.module_utils._text import to_bytes
-from ansible.utils.path import unfrackpath
-from ansible.plugins import connection_loader
-from ansible.compat.six import iteritems
-from ansible.module_utils.iosxr import iosxr_argument_spec
from ansible.module_utils.basic import AnsibleFallbackNotFound
+from ansible.module_utils.iosxr import iosxr_argument_spec
+from ansible.module_utils.six import iteritems
+from ansible.module_utils._text import to_bytes
+from ansible.plugins import connection_loader
+from ansible.plugins.action.normal import ActionModule as _ActionModule
+from ansible.utils.path import unfrackpath
try:
from __main__ import display
diff --git a/lib/ansible/plugins/action/junos.py b/lib/ansible/plugins/action/junos.py
index 8b0b975c97..ee2744c4e5 100644
--- a/lib/ansible/plugins/action/junos.py
+++ b/lib/ansible/plugins/action/junos.py
@@ -23,12 +23,12 @@ import os
import sys
import copy
+from ansible.module_utils.basic import AnsibleFallbackNotFound
+from ansible.module_utils.junos import junos_argument_spec
+from ansible.module_utils.six import iteritems
+from ansible.plugins import connection_loader, module_loader
from ansible.plugins.action.normal import ActionModule as _ActionModule
from ansible.utils.path import unfrackpath
-from ansible.plugins import connection_loader, module_loader
-from ansible.compat.six import iteritems
-from ansible.module_utils.junos import junos_argument_spec
-from ansible.module_utils.basic import AnsibleFallbackNotFound
try:
from __main__ import display
@@ -36,6 +36,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
class ActionModule(_ActionModule):
def run(self, tmp=None, task_vars=None):
diff --git a/lib/ansible/plugins/action/nxos.py b/lib/ansible/plugins/action/nxos.py
index 59d454c2b8..8c865c5c80 100644
--- a/lib/ansible/plugins/action/nxos.py
+++ b/lib/ansible/plugins/action/nxos.py
@@ -26,9 +26,9 @@ import copy
from ansible.plugins.action.normal import ActionModule as _ActionModule
from ansible.utils.path import unfrackpath
from ansible.plugins import connection_loader
-from ansible.compat.six import iteritems
-from ansible.module_utils.nxos import nxos_argument_spec
from ansible.module_utils.basic import AnsibleFallbackNotFound
+from ansible.module_utils.nxos import nxos_argument_spec
+from ansible.module_utils.six import iteritems
from ansible.module_utils._text import to_bytes
try:
@@ -37,6 +37,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
class ActionModule(_ActionModule):
def run(self, tmp=None, task_vars=None):
diff --git a/lib/ansible/plugins/action/ops_template.py b/lib/ansible/plugins/action/ops_template.py
index 944f4eab69..45cc9bb70c 100644
--- a/lib/ansible/plugins/action/ops_template.py
+++ b/lib/ansible/plugins/action/ops_template.py
@@ -21,10 +21,11 @@ __metaclass__ = type
import json
-from ansible.compat.six import string_types
+from ansible.module_utils.six import string_types
from ansible.plugins.action import ActionBase
from ansible.plugins.action.net_template import ActionModule as NetActionModule
+
class ActionModule(NetActionModule, ActionBase):
def run(self, tmp=None, task_vars=None):
diff --git a/lib/ansible/plugins/action/set_fact.py b/lib/ansible/plugins/action/set_fact.py
index 7bd7ec6455..7532e12ac2 100644
--- a/lib/ansible/plugins/action/set_fact.py
+++ b/lib/ansible/plugins/action/set_fact.py
@@ -18,12 +18,12 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import iteritems, string_types
-
from ansible.constants import mk_boolean as boolean
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
from ansible.utils.vars import isidentifier
+
class ActionModule(ActionBase):
TRANSFERS_FILES = False
diff --git a/lib/ansible/plugins/action/set_stats.py b/lib/ansible/plugins/action/set_stats.py
index 13f866539e..f57a920321 100644
--- a/lib/ansible/plugins/action/set_stats.py
+++ b/lib/ansible/plugins/action/set_stats.py
@@ -18,11 +18,12 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import iteritems, string_types
from ansible.constants import mk_boolean as boolean
+from ansible.module_utils.six import iteritems, string_types
from ansible.plugins.action import ActionBase
from ansible.utils.vars import isidentifier
+
class ActionModule(ActionBase):
TRANSFERS_FILES = False
diff --git a/lib/ansible/plugins/action/template.py b/lib/ansible/plugins/action/template.py
index 2bedf66c19..bd0bd39c1f 100644
--- a/lib/ansible/plugins/action/template.py
+++ b/lib/ansible/plugins/action/template.py
@@ -23,10 +23,9 @@ import pwd
import time
from ansible import constants as C
-from ansible.compat.six import string_types
from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types
from ansible.module_utils._text import to_bytes, to_native, to_text
-from ansible.module_utils.pycompat24 import get_exception
from ansible.plugins.action import ActionBase
from ansible.utils.hashing import checksum_s
@@ -45,8 +44,8 @@ class ActionModule(ActionBase):
dest = os.path.join(dest, base)
dest_stat = self._execute_remote_stat(dest, all_vars=all_vars, follow=False, tmp=tmp)
- except AnsibleError:
- return dict(failed=True, msg=to_native(get_exception()))
+ except AnsibleError as e:
+ return dict(failed=True, msg=to_native(e))
return dest_stat['checksum']
@@ -72,9 +71,9 @@ class ActionModule(ActionBase):
else:
try:
source = self._find_needle('templates', source)
- except AnsibleError:
+ except AnsibleError as e:
result['failed'] = True
- result['msg'] = to_native(get_exception())
+ result['msg'] = to_native(e)
if 'failed' in result:
return result
diff --git a/lib/ansible/plugins/action/vyos.py b/lib/ansible/plugins/action/vyos.py
index 6e9c8cd8b1..2720d1fa90 100644
--- a/lib/ansible/plugins/action/vyos.py
+++ b/lib/ansible/plugins/action/vyos.py
@@ -26,10 +26,10 @@ import copy
from ansible.plugins.action.normal import ActionModule as _ActionModule
from ansible.utils.path import unfrackpath
from ansible.plugins import connection_loader
-from ansible.compat.six import iteritems
-from ansible.module_utils.vyos import vyos_argument_spec
from ansible.module_utils.basic import AnsibleFallbackNotFound
+from ansible.module_utils.six import iteritems
from ansible.module_utils._text import to_bytes
+from ansible.module_utils.vyos import vyos_argument_spec
try:
from __main__ import display
@@ -37,6 +37,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
class ActionModule(_ActionModule):
def run(self, tmp=None, task_vars=None):
diff --git a/lib/ansible/plugins/cache/__init__.py b/lib/ansible/plugins/cache/__init__.py
index c288da0a56..6f4bb19f24 100644
--- a/lib/ansible/plugins/cache/__init__.py
+++ b/lib/ansible/plugins/cache/__init__.py
@@ -24,10 +24,10 @@ from abc import ABCMeta, abstractmethod
from collections import MutableMapping
from ansible import constants as C
-from ansible.compat.six import with_metaclass
from ansible.errors import AnsibleError
-from ansible.plugins import cache_loader
+from ansible.module_utils.six import with_metaclass
from ansible.module_utils._text import to_bytes
+from ansible.plugins import cache_loader
try:
from __main__ import display
@@ -36,7 +36,6 @@ except ImportError:
display = Display()
-
class BaseCacheModule(with_metaclass(ABCMeta, object)):
# Backwards compat only. Just import the global display instead
diff --git a/lib/ansible/plugins/callback/logentries.py b/lib/ansible/plugins/callback/logentries.py
index 83af727350..da4c55bcac 100644
--- a/lib/ansible/plugins/callback/logentries.py
+++ b/lib/ansible/plugins/callback/logentries.py
@@ -61,7 +61,6 @@ import random
import time
import codecs
import uuid
-from ansible.compat.six.moves import configparser
try:
import certifi
@@ -75,6 +74,7 @@ try:
except ImportError:
HAS_FLATDICT = False
+from ansible.module_utils.six.moves import configparser
from ansible.plugins.callback import CallbackBase
diff --git a/lib/ansible/plugins/callback/mail.py b/lib/ansible/plugins/callback/mail.py
index 68a43ab3f1..71d54073a4 100644
--- a/lib/ansible/plugins/callback/mail.py
+++ b/lib/ansible/plugins/callback/mail.py
@@ -24,7 +24,7 @@ import os
import smtplib
import json
-from ansible.compat.six import string_types
+from ansible.module_utils.six import string_types
from ansible.module_utils._text import to_bytes
from ansible.plugins.callback import CallbackBase
diff --git a/lib/ansible/plugins/callback/profile_tasks.py b/lib/ansible/plugins/callback/profile_tasks.py
index 644dd51748..2ebdd30834 100644
--- a/lib/ansible/plugins/callback/profile_tasks.py
+++ b/lib/ansible/plugins/callback/profile_tasks.py
@@ -27,12 +27,14 @@ import collections
import os
import time
+from ansible.module_utils.six.moves import reduce
from ansible.plugins.callback import CallbackBase
-from ansible.compat.six.moves import reduce
+
# define start time
t0 = tn = time.time()
+
def secondsToStr(t):
# http://bytes.com/topic/python/answers/635958-handy-short-cut-formatting-elapsed-time-floating-point-seconds
rediv = lambda ll, b: list(divmod(ll[0], b)) + ll[1:]
diff --git a/lib/ansible/plugins/connection/__init__.py b/lib/ansible/plugins/connection/__init__.py
index 9a606f679b..2286aea227 100644
--- a/lib/ansible/plugins/connection/__init__.py
+++ b/lib/ansible/plugins/connection/__init__.py
@@ -24,23 +24,21 @@ import gettext
import os
import shlex
from abc import ABCMeta, abstractmethod, abstractproperty
-
from functools import wraps
-from ansible.compat.six import with_metaclass
from ansible import constants as C
-from ansible.compat.six import string_types
from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types, with_metaclass
from ansible.module_utils._text import to_bytes, to_text
from ansible.plugins import shell_loader
-
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
+
__all__ = ['ConnectionBase', 'ensure_connect']
BUFSIZE = 65536
diff --git a/lib/ansible/plugins/connection/chroot.py b/lib/ansible/plugins/connection/chroot.py
index 2c2c35341e..7304420c8f 100644
--- a/lib/ansible/plugins/connection/chroot.py
+++ b/lib/ansible/plugins/connection/chroot.py
@@ -26,9 +26,9 @@ import subprocess
import traceback
from ansible import constants as C
-from ansible.compat.six.moves import shlex_quote
from ansible.errors import AnsibleError
from ansible.module_utils.basic import is_executable
+from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes
from ansible.plugins.connection import ConnectionBase, BUFSIZE
diff --git a/lib/ansible/plugins/connection/docker.py b/lib/ansible/plugins/connection/docker.py
index 8fe4d3f8a5..67dc5a3042 100644
--- a/lib/ansible/plugins/connection/docker.py
+++ b/lib/ansible/plugins/connection/docker.py
@@ -33,8 +33,8 @@ import re
from distutils.version import LooseVersion
import ansible.constants as C
-from ansible.compat.six.moves import shlex_quote
from ansible.errors import AnsibleError, AnsibleFileNotFound
+from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes
from ansible.plugins.connection import ConnectionBase, BUFSIZE
diff --git a/lib/ansible/plugins/connection/jail.py b/lib/ansible/plugins/connection/jail.py
index 5e54d95229..47c43000ca 100644
--- a/lib/ansible/plugins/connection/jail.py
+++ b/lib/ansible/plugins/connection/jail.py
@@ -26,8 +26,8 @@ import os.path
import subprocess
import traceback
-from ansible.compat.six.moves import shlex_quote
from ansible.errors import AnsibleError
+from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes
from ansible.plugins.connection import ConnectionBase, BUFSIZE
diff --git a/lib/ansible/plugins/connection/libvirt_lxc.py b/lib/ansible/plugins/connection/libvirt_lxc.py
index 77f377eafb..9583eeda8a 100644
--- a/lib/ansible/plugins/connection/libvirt_lxc.py
+++ b/lib/ansible/plugins/connection/libvirt_lxc.py
@@ -27,8 +27,8 @@ import subprocess
import traceback
from ansible import constants as C
-from ansible.compat.six.moves import shlex_quote
from ansible.errors import AnsibleError
+from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes
from ansible.plugins.connection import ConnectionBase, BUFSIZE
diff --git a/lib/ansible/plugins/connection/local.py b/lib/ansible/plugins/connection/local.py
index 481fce9866..abb7a0c4a4 100644
--- a/lib/ansible/plugins/connection/local.py
+++ b/lib/ansible/plugins/connection/local.py
@@ -38,8 +38,8 @@ import getpass
import ansible.constants as C
from ansible.compat import selectors
-from ansible.compat.six import text_type, binary_type
from ansible.errors import AnsibleError, AnsibleFileNotFound
+from ansible.module_utils.six import text_type, binary_type
from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.plugins.connection import ConnectionBase
diff --git a/lib/ansible/plugins/connection/paramiko_ssh.py b/lib/ansible/plugins/connection/paramiko_ssh.py
index d965dff121..9aa581183e 100644
--- a/lib/ansible/plugins/connection/paramiko_ssh.py
+++ b/lib/ansible/plugins/connection/paramiko_ssh.py
@@ -37,11 +37,10 @@ import re
from termios import tcflush, TCIFLUSH
from binascii import hexlify
-from ansible.compat.six import iteritems
-
from ansible import constants as C
-from ansible.compat.six.moves import input
from ansible.errors import AnsibleError, AnsibleConnectionFailure, AnsibleFileNotFound
+from ansible.module_utils.six import iteritems
+from ansible.module_utils.six.moves import input
from ansible.plugins.connection import ConnectionBase
from ansible.utils.path import makedirs_safe
from ansible.module_utils._text import to_bytes
diff --git a/lib/ansible/plugins/connection/ssh.py b/lib/ansible/plugins/connection/ssh.py
index 48cf065c15..e54a880dce 100644
--- a/lib/ansible/plugins/connection/ssh.py
+++ b/lib/ansible/plugins/connection/ssh.py
@@ -109,12 +109,12 @@ import time
from functools import wraps
from ansible import constants as C
-from ansible.compat import selectors
-from ansible.compat.six import PY3, text_type, binary_type
-from ansible.compat.six.moves import shlex_quote
from ansible.errors import AnsibleError, AnsibleConnectionFailure, AnsibleFileNotFound
from ansible.errors import AnsibleOptionsError
from ansible.module_utils.basic import BOOLEANS
+from ansible.compat import selectors
+from ansible.module_utils.six import PY3, text_type, binary_type
+from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.plugins.connection import ConnectionBase, BUFSIZE
from ansible.utils.path import unfrackpath, makedirs_safe
@@ -127,6 +127,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
SSHPASS_AVAILABLE = None
diff --git a/lib/ansible/plugins/connection/winrm.py b/lib/ansible/plugins/connection/winrm.py
index 4157cf82a7..aca000d640 100644
--- a/lib/ansible/plugins/connection/winrm.py
+++ b/lib/ansible/plugins/connection/winrm.py
@@ -37,12 +37,11 @@ try:
except ImportError:
pass
-from ansible.compat.six import string_types
-from ansible.compat.six.moves.urllib.parse import urlunsplit
from ansible.errors import AnsibleError, AnsibleConnectionFailure
from ansible.errors import AnsibleFileNotFound
+from ansible.module_utils.six import string_types
+from ansible.module_utils.six.moves.urllib.parse import urlunsplit
from ansible.module_utils._text import to_bytes, to_native, to_text
-from ansible.module_utils.pycompat24 import get_exception
from ansible.plugins.connection import ConnectionBase
from ansible.plugins.shell.powershell import exec_wrapper, become_wrapper, leaf_exec
from ansible.utils.hashing import secure_hash
@@ -52,14 +51,12 @@ try:
import winrm
from winrm import Response
from winrm.protocol import Protocol
-except ImportError:
- e = get_exception()
+except ImportError as e:
raise AnsibleError("winrm or requests is not installed: %s" % str(e))
try:
import xmltodict
-except ImportError:
- e = get_exception()
+except ImportError as e:
raise AnsibleError("xmltodict is not installed: %s" % str(e))
try:
diff --git a/lib/ansible/plugins/connection/zone.py b/lib/ansible/plugins/connection/zone.py
index b52ad41022..75fec60d91 100644
--- a/lib/ansible/plugins/connection/zone.py
+++ b/lib/ansible/plugins/connection/zone.py
@@ -28,10 +28,10 @@ import subprocess
import traceback
from ansible import constants as C
-from ansible.compat.six.moves import shlex_quote
from ansible.errors import AnsibleError
-from ansible.plugins.connection import ConnectionBase, BUFSIZE
+from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes
+from ansible.plugins.connection import ConnectionBase, BUFSIZE
try:
diff --git a/lib/ansible/plugins/filter/core.py b/lib/ansible/plugins/filter/core.py
index 6c8eb2c509..afc7efcfd3 100644
--- a/lib/ansible/plugins/filter/core.py
+++ b/lib/ansible/plugins/filter/core.py
@@ -19,21 +19,21 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-import sys
import base64
+import crypt
+import glob
+import hashlib
import itertools
import json
-import os.path
import ntpath
-import glob
+import os.path
import re
-import crypt
-import hashlib
import string
+import sys
+import uuid
+from datetime import datetime
from functools import partial
from random import Random, SystemRandom, shuffle
-from datetime import datetime
-import uuid
import yaml
from jinja2.filters import environmentfilter, do_groupby as _do_groupby
@@ -45,9 +45,8 @@ except:
HAS_PASSLIB = False
from ansible import errors
-from ansible.compat.six import iteritems, string_types, integer_types
-from ansible.compat.six.moves import reduce
-from ansible.compat.six.moves import shlex_quote
+from ansible.module_utils.six import iteritems, string_types, integer_types
+from ansible.module_utils.six.moves import reduce, shlex_quote
from ansible.module_utils._text import to_bytes, to_text
from ansible.parsing.yaml.dumper import AnsibleDumper
from ansible.utils.hashing import md5s, checksum_s
@@ -58,6 +57,7 @@ from ansible.vars.hostvars import HostVars
UUID_NAMESPACE_ANSIBLE = uuid.UUID('361E6D51-FAEC-444A-9079-341386DA8E2E')
+
class AnsibleJSONEncoder(json.JSONEncoder):
'''
Simple encoder class to deal with JSON encoding of internal
diff --git a/lib/ansible/plugins/lookup/__init__.py b/lib/ansible/plugins/lookup/__init__.py
index 61bbea4505..9df9ef20a4 100644
--- a/lib/ansible/plugins/lookup/__init__.py
+++ b/lib/ansible/plugins/lookup/__init__.py
@@ -21,7 +21,7 @@ __metaclass__ = type
from abc import ABCMeta, abstractmethod
-from ansible.compat.six import with_metaclass
+from ansible.module_utils.six import with_metaclass
try:
from __main__ import display
diff --git a/lib/ansible/plugins/lookup/first_found.py b/lib/ansible/plugins/lookup/first_found.py
index 70095aa724..569a0ad055 100644
--- a/lib/ansible/plugins/lookup/first_found.py
+++ b/lib/ansible/plugins/lookup/first_found.py
@@ -122,10 +122,11 @@ import os
from jinja2.exceptions import UndefinedError
-from ansible.compat.six import string_types
-from ansible.errors import AnsibleFileNotFound, AnsibleLookupError, AnsibleUndefinedVariable
-from ansible.plugins.lookup import LookupBase
from ansible.constants import mk_boolean as boolean
+from ansible.errors import AnsibleFileNotFound, AnsibleLookupError, AnsibleUndefinedVariable
+from ansible.module_utils.six import string_types
+from ansible.plugins.lookup import LookupBase
+
class LookupModule(LookupBase):
diff --git a/lib/ansible/plugins/lookup/flattened.py b/lib/ansible/plugins/lookup/flattened.py
index 6616aa35c5..7c04b91bc0 100644
--- a/lib/ansible/plugins/lookup/flattened.py
+++ b/lib/ansible/plugins/lookup/flattened.py
@@ -17,11 +17,12 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import string_types
from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types
from ansible.plugins.lookup import LookupBase
from ansible.utils.listify import listify_lookup_plugin_terms
+
class LookupModule(LookupBase):
def _check_list_of_one_list(self, term):
diff --git a/lib/ansible/plugins/lookup/ini.py b/lib/ansible/plugins/lookup/ini.py
index 78d187a1cc..7f67fe06ff 100644
--- a/lib/ansible/plugins/lookup/ini.py
+++ b/lib/ansible/plugins/lookup/ini.py
@@ -21,10 +21,10 @@ from io import StringIO
import os
import re
-from ansible.compat.six.moves import configparser
from ansible.errors import AnsibleError
-from ansible.plugins.lookup import LookupBase
+from ansible.module_utils.six.moves import configparser
from ansible.module_utils._text import to_bytes, to_text
+from ansible.plugins.lookup import LookupBase
def _parse_params(term):
diff --git a/lib/ansible/plugins/lookup/password.py b/lib/ansible/plugins/lookup/password.py
index d9c10e6c2d..426efaeb7a 100644
--- a/lib/ansible/plugins/lookup/password.py
+++ b/lib/ansible/plugins/lookup/password.py
@@ -24,8 +24,8 @@ import string
import random
from ansible import constants as C
-from ansible.compat.six import text_type
from ansible.errors import AnsibleError
+from ansible.module_utils.six import text_type
from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.parsing.splitter import parse_kv
from ansible.plugins.lookup import LookupBase
diff --git a/lib/ansible/plugins/lookup/sequence.py b/lib/ansible/plugins/lookup/sequence.py
index 9efa12b0d5..3f63d171c5 100644
--- a/lib/ansible/plugins/lookup/sequence.py
+++ b/lib/ansible/plugins/lookup/sequence.py
@@ -19,11 +19,12 @@ __metaclass__ = type
from re import compile as re_compile, IGNORECASE
-from ansible.compat.six.moves import xrange
from ansible.errors import AnsibleError
+from ansible.module_utils.six.moves import xrange
from ansible.parsing.splitter import parse_kv
from ansible.plugins.lookup import LookupBase
+
# shortcut format
NUM = "(0?x?[0-9a-f]+)"
SHORTCUT = re_compile(
diff --git a/lib/ansible/plugins/lookup/subelements.py b/lib/ansible/plugins/lookup/subelements.py
index 8e8c16b885..6ed44c0006 100644
--- a/lib/ansible/plugins/lookup/subelements.py
+++ b/lib/ansible/plugins/lookup/subelements.py
@@ -17,11 +17,12 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import string_types
+from ansible.constants import mk_boolean as boolean
from ansible.errors import AnsibleError
+from ansible.module_utils.six import string_types
from ansible.plugins.lookup import LookupBase
from ansible.utils.listify import listify_lookup_plugin_terms
-from ansible.constants import mk_boolean as boolean
+
FLAGS = ('skip_missing',)
diff --git a/lib/ansible/plugins/lookup/together.py b/lib/ansible/plugins/lookup/together.py
index 130e75b92e..64bca90684 100644
--- a/lib/ansible/plugins/lookup/together.py
+++ b/lib/ansible/plugins/lookup/together.py
@@ -17,11 +17,12 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six.moves import zip_longest
from ansible.errors import AnsibleError
+from ansible.module_utils.six.moves import zip_longest
from ansible.plugins.lookup import LookupBase
from ansible.utils.listify import listify_lookup_plugin_terms
+
class LookupModule(LookupBase):
"""
Transpose a list of arrays:
diff --git a/lib/ansible/plugins/lookup/url.py b/lib/ansible/plugins/lookup/url.py
index e84dbe0ae7..2686543c30 100644
--- a/lib/ansible/plugins/lookup/url.py
+++ b/lib/ansible/plugins/lookup/url.py
@@ -18,8 +18,8 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six.moves.urllib.error import HTTPError, URLError
from ansible.errors import AnsibleError
+from ansible.module_utils.six.moves.urllib.error import HTTPError, URLError
from ansible.module_utils._text import to_text
from ansible.module_utils.urls import open_url, ConnectionError, SSLValidationError
from ansible.plugins.lookup import LookupBase
diff --git a/lib/ansible/plugins/shell/__init__.py b/lib/ansible/plugins/shell/__init__.py
index 2e57c4249b..95f40cc52b 100644
--- a/lib/ansible/plugins/shell/__init__.py
+++ b/lib/ansible/plugins/shell/__init__.py
@@ -23,8 +23,8 @@ import ansible.constants as C
import time
import random
-from ansible.compat.six import text_type
-from ansible.compat.six.moves import shlex_quote
+from ansible.module_utils.six import text_type
+from ansible.module_utils.six.moves import shlex_quote
_USER_HOME_PATH_RE = re.compile(r'^~[_.A-Za-z0-9][-_.A-Za-z0-9]*$')
diff --git a/lib/ansible/plugins/shell/fish.py b/lib/ansible/plugins/shell/fish.py
index c5746782d3..0e3a516d42 100644
--- a/lib/ansible/plugins/shell/fish.py
+++ b/lib/ansible/plugins/shell/fish.py
@@ -17,9 +17,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
+from ansible.module_utils.six import text_type
+from ansible.module_utils.six.moves import shlex_quote
from ansible.plugins.shell.sh import ShellModule as ShModule
-from ansible.compat.six import text_type
-from ansible.compat.six.moves import shlex_quote
class ShellModule(ShModule):
diff --git a/lib/ansible/plugins/shell/sh.py b/lib/ansible/plugins/shell/sh.py
index e3d3f8f57f..fe7e6345fa 100644
--- a/lib/ansible/plugins/shell/sh.py
+++ b/lib/ansible/plugins/shell/sh.py
@@ -18,7 +18,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six.moves import shlex_quote
+from ansible.module_utils.six.moves import shlex_quote
from ansible.plugins.shell import ShellBase
diff --git a/lib/ansible/plugins/strategy/__init__.py b/lib/ansible/plugins/strategy/__init__.py
index b0b876df60..fa6746b194 100644
--- a/lib/ansible/plugins/strategy/__init__.py
+++ b/lib/ansible/plugins/strategy/__init__.py
@@ -27,14 +27,15 @@ from multiprocessing import Lock
from jinja2.exceptions import UndefinedError
from ansible import constants as C
-from ansible.compat.six.moves import queue as Queue
-from ansible.compat.six import iteritems, string_types
from ansible.errors import AnsibleError, AnsibleParserError, AnsibleUndefinedVariable
from ansible.executor import action_write_locks
from ansible.executor.process.worker import WorkerProcess
from ansible.executor.task_result import TaskResult
from ansible.inventory.host import Host
from ansible.inventory.group import Group
+from ansible.module_utils.six.moves import queue as Queue
+from ansible.module_utils.six import iteritems, string_types
+from ansible.module_utils._text import to_text
from ansible.playbook.helpers import load_list_of_blocks
from ansible.playbook.included_file import IncludedFile
from ansible.playbook.task_include import TaskInclude
@@ -42,7 +43,6 @@ from ansible.playbook.role_include import IncludeRole
from ansible.plugins import action_loader, connection_loader, filter_loader, lookup_loader, module_loader, test_loader
from ansible.template import Templar
from ansible.vars import combine_vars, strip_internal_keys
-from ansible.module_utils._text import to_text
try:
diff --git a/lib/ansible/plugins/strategy/debug.py b/lib/ansible/plugins/strategy/debug.py
index b37e9ada49..177655df6e 100644
--- a/lib/ansible/plugins/strategy/debug.py
+++ b/lib/ansible/plugins/strategy/debug.py
@@ -29,8 +29,8 @@ import cmd
import pprint
import sys
+from ansible.module_utils.six.moves import reduce
from ansible.plugins.strategy.linear import StrategyModule as LinearStrategyModule
-from ansible.compat.six.moves import reduce
try:
from __main__ import display
diff --git a/lib/ansible/plugins/strategy/linear.py b/lib/ansible/plugins/strategy/linear.py
index 1c26ea312e..b21cb68df4 100644
--- a/lib/ansible/plugins/strategy/linear.py
+++ b/lib/ansible/plugins/strategy/linear.py
@@ -31,17 +31,16 @@ DOCUMENTATION:
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import iteritems
-
from ansible.errors import AnsibleError
from ansible.executor.play_iterator import PlayIterator
+from ansible.module_utils.six import iteritems
+from ansible.module_utils._text import to_text
from ansible.playbook.block import Block
from ansible.playbook.included_file import IncludedFile
from ansible.playbook.task import Task
from ansible.plugins import action_loader
from ansible.plugins.strategy import StrategyBase
from ansible.template import Templar
-from ansible.module_utils._text import to_text
try:
diff --git a/lib/ansible/plugins/terminal/__init__.py b/lib/ansible/plugins/terminal/__init__.py
index b6798e3fa0..1daad69e4f 100644
--- a/lib/ansible/plugins/terminal/__init__.py
+++ b/lib/ansible/plugins/terminal/__init__.py
@@ -23,8 +23,8 @@ import re
from abc import ABCMeta, abstractmethod
-from ansible.compat.six import with_metaclass
from ansible.errors import AnsibleConnectionFailure
+from ansible.module_utils.six import with_metaclass
class TerminalBase(with_metaclass(ABCMeta, object)):
diff --git a/lib/ansible/template/__init__.py b/lib/ansible/template/__init__.py
index 61850f6734..8d5a807366 100644
--- a/lib/ansible/template/__init__.py
+++ b/lib/ansible/template/__init__.py
@@ -27,25 +27,25 @@ import re
from io import StringIO
from numbers import Number
-from jinja2 import Environment
-from jinja2.loaders import FileSystemLoader
-from jinja2.exceptions import TemplateSyntaxError, UndefinedError
-from jinja2.utils import concat as j2_concat, missing
-from jinja2.runtime import Context, StrictUndefined
-from ansible import constants as C
-from ansible.compat.six import string_types, text_type
-from ansible.errors import AnsibleError, AnsibleFilterError, AnsibleUndefinedVariable
-from ansible.plugins import filter_loader, lookup_loader, test_loader
-from ansible.template.safe_eval import safe_eval
-from ansible.template.template import AnsibleJ2Template
-from ansible.template.vars import AnsibleJ2Vars
-from ansible.module_utils._text import to_native, to_text
-
try:
from hashlib import sha1
except ImportError:
from sha import sha as sha1
+from jinja2 import Environment
+from jinja2.loaders import FileSystemLoader
+from jinja2.exceptions import TemplateSyntaxError, UndefinedError
+from jinja2.utils import concat as j2_concat, missing
+from jinja2.runtime import Context, StrictUndefined
+
+from ansible import constants as C
+from ansible.errors import AnsibleError, AnsibleFilterError, AnsibleUndefinedVariable
+from ansible.module_utils.six import string_types, text_type
+from ansible.module_utils._text import to_native, to_text
+from ansible.plugins import filter_loader, lookup_loader, test_loader
+from ansible.template.safe_eval import safe_eval
+from ansible.template.template import AnsibleJ2Template
+from ansible.template.vars import AnsibleJ2Vars
try:
from __main__ import display
@@ -53,6 +53,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
__all__ = ['Templar']
# A regex for checking to see if a variable we're trying to
diff --git a/lib/ansible/template/safe_eval.py b/lib/ansible/template/safe_eval.py
index f2511e64e2..efe5600f5a 100644
--- a/lib/ansible/template/safe_eval.py
+++ b/lib/ansible/template/safe_eval.py
@@ -20,12 +20,12 @@ __metaclass__ = type
import ast
import sys
-from ansible.compat.six import string_types
-from ansible.compat.six.moves import builtins
-
from ansible import constants as C
+from ansible.module_utils.six import string_types
+from ansible.module_utils.six.moves import builtins
from ansible.plugins import filter_loader, test_loader
+
def safe_eval(expr, locals={}, include_exceptions=False):
'''
This is intended for allowing things like:
diff --git a/lib/ansible/template/vars.py b/lib/ansible/template/vars.py
index fc6140c297..bc36046a10 100644
--- a/lib/ansible/template/vars.py
+++ b/lib/ansible/template/vars.py
@@ -19,8 +19,9 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import iteritems
from jinja2.utils import missing
+
+from ansible.module_utils.six import iteritems
from ansible.module_utils._text import to_native
diff --git a/lib/ansible/utils/cmd_functions.py b/lib/ansible/utils/cmd_functions.py
index 8038af03d7..f41d430f23 100644
--- a/lib/ansible/utils/cmd_functions.py
+++ b/lib/ansible/utils/cmd_functions.py
@@ -24,9 +24,10 @@ import shlex
import subprocess
import select
-from ansible.compat.six import PY2, PY3
+from ansible.module_utils.six import PY2, PY3
from ansible.module_utils._text import to_bytes
+
def run_cmd(cmd, live=False, readsize=10):
#readsize = 10
diff --git a/lib/ansible/utils/helpers.py b/lib/ansible/utils/helpers.py
index 02a60ee53a..488c3e2d96 100644
--- a/lib/ansible/utils/helpers.py
+++ b/lib/ansible/utils/helpers.py
@@ -19,7 +19,8 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.six import string_types
+from ansible.module_utils.six import string_types
+
def pct_to_int(value, num_items, min_value=1):
'''
diff --git a/lib/ansible/utils/listify.py b/lib/ansible/utils/listify.py
index ad45521b8f..d84e62e154 100644
--- a/lib/ansible/utils/listify.py
+++ b/lib/ansible/utils/listify.py
@@ -21,13 +21,14 @@ __metaclass__ = type
from collections import Iterable
-from ansible.compat.six import string_types
-
+from ansible.module_utils.six import string_types
from ansible.template import Templar
from ansible.template.safe_eval import safe_eval
+
__all__ = ['listify_lookup_plugin_terms']
+
def listify_lookup_plugin_terms(terms, templar, loader, fail_on_undefined=True, convert_bare=False):
if isinstance(terms, string_types):
diff --git a/lib/ansible/utils/plugin_docs.py b/lib/ansible/utils/plugin_docs.py
index 9db68ad5a0..e13b2a6d15 100644
--- a/lib/ansible/utils/plugin_docs.py
+++ b/lib/ansible/utils/plugin_docs.py
@@ -25,7 +25,7 @@ import yaml
from collections import MutableMapping, MutableSet, MutableSequence
-from ansible.compat.six import string_types
+from ansible.module_utils.six import string_types
from ansible.parsing.yaml.loader import AnsibleLoader
from ansible.plugins import fragment_loader
@@ -35,6 +35,7 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
+
# modules that are ok that they do not have documentation strings
BLACKLIST = {
'MODULE': frozenset(('async_wrapper',)),
diff --git a/lib/ansible/utils/shlex.py b/lib/ansible/utils/shlex.py
index 1da7c66e58..5e82021bd5 100644
--- a/lib/ansible/utils/shlex.py
+++ b/lib/ansible/utils/shlex.py
@@ -20,7 +20,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import shlex
-from ansible.compat.six import PY3
+from ansible.module_utils.six import PY3
from ansible.module_utils._text import to_bytes, to_text
diff --git a/lib/ansible/utils/vars.py b/lib/ansible/utils/vars.py
index fc9f5cf33a..b14bd41d77 100644
--- a/lib/ansible/utils/vars.py
+++ b/lib/ansible/utils/vars.py
@@ -26,18 +26,20 @@ import uuid
from json import dumps
from collections import MutableMapping
-from ansible.compat.six import iteritems, string_types
+from ansible.module_utils.six import iteritems, string_types
from ansible import constants as C
from ansible.errors import AnsibleError, AnsibleOptionsError
from ansible.parsing.splitter import parse_kv
from ansible.module_utils._text import to_native, to_text
+
_MAXSIZE = 2**32
cur_id = 0
node_mac = ("%012x" % uuid.getnode())[:12]
random_int = ("%08x" % random.randint(0, _MAXSIZE))[:8]
+
def get_unique_id():
global cur_id
cur_id += 1
diff --git a/lib/ansible/vars/__init__.py b/lib/ansible/vars/__init__.py
index 0cfa4915cf..1c0b4997ea 100644
--- a/lib/ansible/vars/__init__.py
+++ b/lib/ansible/vars/__init__.py
@@ -24,19 +24,18 @@ import sys
from collections import defaultdict, MutableMapping
-from ansible.compat.six import iteritems
-from jinja2.exceptions import UndefinedError
-
try:
from hashlib import sha1
except ImportError:
from sha import sha as sha1
+from jinja2.exceptions import UndefinedError
+
from ansible import constants as C
from ansible.cli import CLI
-from ansible.compat.six import string_types, text_type
from ansible.errors import AnsibleError, AnsibleParserError, AnsibleUndefinedVariable, AnsibleFileNotFound
from ansible.inventory.host import Host
+from ansible.module_utils.six import iteritems, string_types, text_type
from ansible.plugins import lookup_loader
from ansible.plugins.cache import FactCache
from ansible.template import Templar
@@ -51,14 +50,17 @@ except ImportError:
from ansible.utils.display import Display
display = Display()
-VARIABLE_CACHE = dict()
-HOSTVARS_CACHE = dict()
+
+VARIABLE_CACHE = {}
+HOSTVARS_CACHE = {}
+
class AnsibleInventoryVarsData(dict):
def __init__(self, *args, **kwargs):
super(AnsibleInventoryVarsData, self).__init__(*args, **kwargs)
self.path = None
+
def preprocess_vars(a):
'''
Ensures that vars contained in the parameter passed in are
diff --git a/lib/ansible/vars/unsafe_proxy.py b/lib/ansible/vars/unsafe_proxy.py
index 426410ab61..00702dba05 100644
--- a/lib/ansible/vars/unsafe_proxy.py
+++ b/lib/ansible/vars/unsafe_proxy.py
@@ -54,7 +54,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import json
-from ansible.compat.six import string_types, text_type
+from ansible.module_utils.six import string_types, text_type
from ansible.module_utils._text import to_text
diff --git a/test/sanity/code-smell/boilerplate.sh b/test/sanity/code-smell/boilerplate.sh
index 5ed3bac57b..d5d71e1420 100755
--- a/test/sanity/code-smell/boilerplate.sh
+++ b/test/sanity/code-smell/boilerplate.sh
@@ -6,7 +6,7 @@ future1=$(find ./bin -type f -exec grep -HL 'from __future__ import (absolute_im
metaclass2=$(find ./lib/ansible -path ./lib/ansible/modules -prune \
-o -path ./lib/ansible/modules/__init__.py \
-o -path ./lib/ansible/module_utils -prune \
- -o -path ./lib/ansible/compat/six/_six.py -prune \
+ -o -path ./lib/ansible/module_utils/six/_six.py -prune \
-o -path ./lib/ansible/compat/selectors/_selectors2.py -prune \
-o -path ./lib/ansible/utils/module_docs_fragments -prune \
-o -name '*.py' -exec grep -HL '__metaclass__ = type' '{}' '+')
@@ -14,7 +14,7 @@ metaclass2=$(find ./lib/ansible -path ./lib/ansible/modules -prune \
future2=$(find ./lib/ansible -path ./lib/ansible/modules -prune \
-o -path ./lib/ansible/modules/__init__.py \
-o -path ./lib/ansible/module_utils -prune \
- -o -path ./lib/ansible/compat/six/_six.py -prune \
+ -o -path ./lib/ansible/module_utils/six/_six.py -prune \
-o -path ./lib/ansible/compat/selectors/_selectors2.py -prune \
-o -path ./lib/ansible/utils/module_docs_fragments -prune \
-o -name '*.py' -exec grep -HL 'from __future__ import (absolute_import, division, print_function)' '{}' '+')
diff --git a/test/sanity/code-smell/no-basestring.sh b/test/sanity/code-smell/no-basestring.sh
index c8d97e4910..ca2bbedc34 100755
--- a/test/sanity/code-smell/no-basestring.sh
+++ b/test/sanity/code-smell/no-basestring.sh
@@ -6,8 +6,7 @@ BASESTRING_USERS=$(grep -r basestring . \
| grep isinstance \
| grep -v \
-e test/results/ \
- -e lib/ansible/compat/six/_six.py \
- -e lib/ansible/module_utils/six.py \
+ -e lib/ansible/module_utils/six/_six.py \
-e lib/ansible/modules/ \
-e '^[^:]*:#'
)
diff --git a/test/sanity/code-smell/no-dict-iteritems.sh b/test/sanity/code-smell/no-dict-iteritems.sh
index 9984c9c7bc..0335f2f11b 100755
--- a/test/sanity/code-smell/no-dict-iteritems.sh
+++ b/test/sanity/code-smell/no-dict-iteritems.sh
@@ -6,8 +6,7 @@ ITERITEMS_USERS=$(grep -rI '\.iteritems' . \
--exclude-dir docsite \
| grep -v \
-e 'six\.iteritems' \
- -e lib/ansible/compat/six/_six.py \
- -e lib/ansible/module_utils/six.py \
+ -e lib/ansible/module_utils/six/_six.py \
-e test/sanity/code-smell/no-dict-iteritems.sh \
)
@@ -15,7 +14,6 @@ if [ "${ITERITEMS_USERS}" ]; then
echo 'iteritems has been removed in python3. Alternatives:'
echo ' for KEY, VALUE in DICT.items():'
echo ' from ansible.module_utils.six import iteritems ; for KEY, VALUE in iteritems(DICT):'
- echo ' from ansible.compat.six import iteritems ; for KEY, VALUE in iteritems(DICT):'
echo "${ITERITEMS_USERS}"
exit 1
fi
diff --git a/test/sanity/code-smell/no-dict-itervalues.sh b/test/sanity/code-smell/no-dict-itervalues.sh
index 7a7494860f..ed388125fa 100755
--- a/test/sanity/code-smell/no-dict-itervalues.sh
+++ b/test/sanity/code-smell/no-dict-itervalues.sh
@@ -6,8 +6,7 @@ ITERVALUES_USERS=$(grep -rI '\.itervalues' . \
--exclude-dir docsite \
| grep -v \
-e 'six\.itervalues' \
- -e lib/ansible/compat/six/_six.py \
- -e lib/ansible/module_utils/six.py \
+ -e lib/ansible/module_utils/six/_six.py \
-e test/sanity/code-smell/no-dict-itervalues.sh \
)
@@ -15,7 +14,6 @@ if [ "${ITERVALUES_USERS}" ]; then
echo 'itervalues has been removed in python3. Alternatives:'
echo ' for VALUE in DICT.values():'
echo ' from ansible.module_utils.six import itervalues ; for VALUE in itervalues(DICT):'
- echo ' from ansible.compat.six import itervalues ; for VALUE in itervalues(DICT):'
echo "${ITERVALUES_USERS}"
exit 1
fi
diff --git a/test/sanity/code-smell/no-iterkeys.sh b/test/sanity/code-smell/no-iterkeys.sh
index 7323309ec8..2c53398e05 100755
--- a/test/sanity/code-smell/no-iterkeys.sh
+++ b/test/sanity/code-smell/no-iterkeys.sh
@@ -7,8 +7,7 @@ ITERKEYS_USERS=$(grep -r -I iterkeys . \
--exclude-dir docsite \
--exclude-dir results \
| grep -v \
- -e lib/ansible/compat/six/_six.py \
- -e lib/ansible/module_utils/six.py \
+ -e lib/ansible/module_utils/six/_six.py \
-e test/sanity/code-smell/no-iterkeys.sh \
-e '^[^:]*:#'
)
diff --git a/test/sanity/code-smell/replace-urlopen.sh b/test/sanity/code-smell/replace-urlopen.sh
index 6bd0f6ee8c..a2ff60ba04 100755
--- a/test/sanity/code-smell/replace-urlopen.sh
+++ b/test/sanity/code-smell/replace-urlopen.sh
@@ -3,8 +3,7 @@
urllib_users=$(find . -name '*.py' -exec grep -H urlopen '{}' '+' | grep -v \
-e '^[^:]*/.tox/' \
-e '^\./lib/ansible/module_utils/urls.py:' \
- -e '^\./lib/ansible/module_utils/six.py:' \
- -e '^\./lib/ansible/compat/six/_six.py:' \
+ -e '^\./lib/ansible/module_utils/six/_six.py:' \
-e '^[^:]*:#'
)
diff --git a/test/sanity/code-smell/use-compat-six.sh b/test/sanity/code-smell/use-compat-six.sh
index c77ad7c7ec..d81b8f4ca4 100755
--- a/test/sanity/code-smell/use-compat-six.sh
+++ b/test/sanity/code-smell/use-compat-six.sh
@@ -10,8 +10,8 @@ WHITELIST='(lib/ansible/modules/cloud/digital_ocean/digital_ocean.py)'
SIX_USERS=$(find "$BASEDIR" -name '*.py' -exec grep -wH six '{}' '+' \
| grep import \
- | grep -v ansible.compat \
| grep -v ansible.module_utils.six \
+ | grep -v 'ansible.module_utils import six' \
| egrep -v "^$WHITELIST:"
)
diff --git a/test/sanity/pep8/legacy-files.txt b/test/sanity/pep8/legacy-files.txt
index 8dc3527ad8..f8836f4c00 100644
--- a/test/sanity/pep8/legacy-files.txt
+++ b/test/sanity/pep8/legacy-files.txt
@@ -57,8 +57,6 @@ lib/ansible/cli/pull.py
lib/ansible/cli/vault.py
lib/ansible/compat/__init__.py
lib/ansible/compat/selectors/__init__.py
-lib/ansible/compat/six/__init__.py
-lib/ansible/compat/six/_six.py
lib/ansible/compat/tests/__init__.py
lib/ansible/constants.py
lib/ansible/errors/__init__.py
@@ -135,7 +133,7 @@ lib/ansible/module_utils/pycompat24.py
lib/ansible/module_utils/redhat.py
lib/ansible/module_utils/service.py
lib/ansible/module_utils/shell.py
-lib/ansible/module_utils/six.py
+lib/ansible/module_utils/six/_six.py
lib/ansible/module_utils/splitter.py
lib/ansible/module_utils/sros.py
lib/ansible/module_utils/univention_umc.py
@@ -887,12 +885,9 @@ lib/ansible/plugins/action/copy.py
lib/ansible/plugins/action/dellos10_config.py
lib/ansible/plugins/action/dellos6_config.py
lib/ansible/plugins/action/dellos9_config.py
-lib/ansible/plugins/action/eos.py
lib/ansible/plugins/action/eos_template.py
lib/ansible/plugins/action/fetch.py
lib/ansible/plugins/action/group_by.py
-lib/ansible/plugins/action/include_vars.py
-lib/ansible/plugins/action/ios.py
lib/ansible/plugins/action/ios_template.py
lib/ansible/plugins/action/iosxr_template.py
lib/ansible/plugins/action/junos.py
@@ -908,13 +903,11 @@ lib/ansible/plugins/action/patch.py
lib/ansible/plugins/action/pause.py
lib/ansible/plugins/action/script.py
lib/ansible/plugins/action/service.py
-lib/ansible/plugins/action/set_fact.py
lib/ansible/plugins/action/set_stats.py
lib/ansible/plugins/action/sros_config.py
lib/ansible/plugins/action/synchronize.py
lib/ansible/plugins/action/template.py
lib/ansible/plugins/action/unarchive.py
-lib/ansible/plugins/action/vyos.py
lib/ansible/plugins/cache/__init__.py
lib/ansible/plugins/cache/base.py
lib/ansible/plugins/cache/jsonfile.py
@@ -1056,7 +1049,6 @@ test/units/executor/test_task_result.py
test/units/inventory/test_inventory.py
test/units/mock/generator.py
test/units/mock/loader.py
-test/units/mock/yaml_helper.py
test/units/module_utils/basic/test__log_invocation.py
test/units/module_utils/basic/test_deprecate_warn.py
test/units/module_utils/basic/test_exit_json.py
diff --git a/test/units/cli/test_galaxy.py b/test/units/cli/test_galaxy.py
index 0f1114536e..5df93901af 100644
--- a/test/units/cli/test_galaxy.py
+++ b/test/units/cli/test_galaxy.py
@@ -25,9 +25,9 @@ import tarfile
import tempfile
import yaml
-from ansible.compat.six import PY3
from ansible.compat.tests import unittest
from ansible.compat.tests.mock import call, patch
+from ansible.module_utils.six import PY3
import ansible
from ansible.errors import AnsibleError, AnsibleOptionsError
diff --git a/test/units/executor/module_common/test_module_common.py b/test/units/executor/module_common/test_module_common.py
index edbf836e10..0d7ff3e265 100644
--- a/test/units/executor/module_common/test_module_common.py
+++ b/test/units/executor/module_common/test_module_common.py
@@ -22,9 +22,9 @@ __metaclass__ = type
import pytest
import ansible.errors
-from ansible.compat.six import PY2
from ansible.executor import module_common as amc
+from ansible.module_utils.six import PY2
class TestStripComments(object):
diff --git a/test/units/executor/module_common/test_recursive_finder.py b/test/units/executor/module_common/test_recursive_finder.py
index aeb9ca13bd..a21a56ed1d 100644
--- a/test/units/executor/module_common/test_recursive_finder.py
+++ b/test/units/executor/module_common/test_recursive_finder.py
@@ -28,10 +28,10 @@ from io import BytesIO, StringIO
import pytest
import ansible.errors
-from ansible.compat.six import PY2
-from ansible.compat.six.moves import builtins
from ansible.executor.module_common import recursive_finder
+from ansible.module_utils.six import PY2
+from ansible.module_utils.six.moves import builtins
original_find_module = imp.find_module
@@ -113,22 +113,22 @@ class TestRecursiveFinder(object):
name = 'ping'
data = b'#!/usr/bin/python\nfrom ansible.module_utils import six'
recursive_finder(name, data, *finder_containers)
- assert finder_containers.py_module_names == set((('six',),))
+ assert finder_containers.py_module_names == set((('six', '__init__'), ('six', '_six')))
assert finder_containers.py_module_cache == {}
- assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six.py',))
+ assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six/__init__.py', 'ansible/module_utils/six/_six.py'))
def test_import_six(self, finder_containers):
name = 'ping'
data = b'#!/usr/bin/python\nimport ansible.module_utils.six'
recursive_finder(name, data, *finder_containers)
- assert finder_containers.py_module_names == set((('six',),))
+ assert finder_containers.py_module_names == set((('six', '__init__'), ('six', '_six')))
assert finder_containers.py_module_cache == {}
- assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six.py',))
+ assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six/__init__.py', 'ansible/module_utils/six/_six.py'))
def test_import_six_from_many_submodules(self, finder_containers):
name = 'ping'
data = b'#!/usr/bin/python\nfrom ansible.module_utils.six.moves.urllib.parse import urlparse'
recursive_finder(name, data, *finder_containers)
- assert finder_containers.py_module_names == set((('six',),))
+ assert finder_containers.py_module_names == set((('six', '__init__'), ('six', '_six')))
assert finder_containers.py_module_cache == {}
- assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six.py',))
+ assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six/__init__.py', 'ansible/module_utils/six/_six.py'))
diff --git a/test/units/inventory/test_host.py b/test/units/inventory/test_host.py
index c56956d77b..1a762d372b 100644
--- a/test/units/inventory/test_host.py
+++ b/test/units/inventory/test_host.py
@@ -18,11 +18,11 @@
# for __setstate__/__getstate__ tests
import pickle
-from ansible.compat.six import string_types
from ansible.compat.tests import unittest
from ansible.inventory.group import Group
from ansible.inventory.host import Host
+from ansible.module_utils.six import string_types
class TestHost(unittest.TestCase):
diff --git a/test/units/mock/procenv.py b/test/units/mock/procenv.py
index 6cf69a7acc..a74b4f5c58 100644
--- a/test/units/mock/procenv.py
+++ b/test/units/mock/procenv.py
@@ -25,8 +25,8 @@ import json
from contextlib import contextmanager
from io import BytesIO, StringIO
-from ansible.compat.six import PY3
from ansible.compat.tests import unittest
+from ansible.module_utils.six import PY3
from ansible.module_utils._text import to_bytes
diff --git a/test/units/mock/yaml_helper.py b/test/units/mock/yaml_helper.py
index 280979e1c8..d74c903cbb 100644
--- a/test/units/mock/yaml_helper.py
+++ b/test/units/mock/yaml_helper.py
@@ -1,10 +1,10 @@
import io
import yaml
+from ansible.module_utils.six import PY3
from ansible.parsing.yaml.loader import AnsibleLoader
from ansible.parsing.yaml.dumper import AnsibleDumper
-from ansible.compat.six import PY3
class YamlTestUtils(object):
"""Mixin class to combine with a unittest.TestCase subclass."""
diff --git a/test/units/module_utils/basic/test_run_command.py b/test/units/module_utils/basic/test_run_command.py
index b27b8cb2cd..2bfb6d17d6 100644
--- a/test/units/module_utils/basic/test_run_command.py
+++ b/test/units/module_utils/basic/test_run_command.py
@@ -27,7 +27,7 @@ from io import BytesIO, StringIO
import pytest
-from ansible.compat.six import PY3
+from ansible.module_utils.six import PY3
from ansible.compat.tests import unittest
from ansible.compat.tests.mock import call, MagicMock, Mock, patch, sentinel
diff --git a/test/units/module_utils/test_basic.py b/test/units/module_utils/test_basic.py
index bb899e616a..526dca1c9c 100644
--- a/test/units/module_utils/test_basic.py
+++ b/test/units/module_utils/test_basic.py
@@ -29,9 +29,9 @@ from io import BytesIO, StringIO
from units.mock.procenv import ModuleTestCase, swap_stdin_and_argv
-from ansible.compat.six.moves import builtins
from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch, MagicMock, mock_open, Mock, call
+from ansible.module_utils.six.moves import builtins
realimport = builtins.__import__
diff --git a/test/units/module_utils/test_postgresql.py b/test/units/module_utils/test_postgresql.py
index af6813f919..90fdb1dc9c 100644
--- a/test/units/module_utils/test_postgresql.py
+++ b/test/units/module_utils/test_postgresql.py
@@ -3,10 +3,10 @@ import sys
from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch, MagicMock
-from ansible.compat.six.moves import builtins
-from ansible.module_utils._text import to_native
from ansible.module_utils.basic import AnsibleModule
+from ansible.module_utils.six.moves import builtins
+from ansible.module_utils._text import to_native
from units.mock.procenv import swap_stdin_and_argv
diff --git a/test/units/module_utils/test_text.py b/test/units/module_utils/test_text.py
index 388d086b55..3026be9b3e 100644
--- a/test/units/module_utils/test_text.py
+++ b/test/units/module_utils/test_text.py
@@ -20,8 +20,8 @@
from __future__ import (absolute_import, division)
__metaclass__ = type
-from ansible.compat.six import PY3
from ansible.compat.tests import unittest
+from ansible.module_utils.six import PY3
from units.mock.generator import add_method
diff --git a/test/units/parsing/test_dataloader.py b/test/units/parsing/test_dataloader.py
index 6b2fe23c45..40bfab5e95 100644
--- a/test/units/parsing/test_dataloader.py
+++ b/test/units/parsing/test_dataloader.py
@@ -19,12 +19,11 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from six import PY3
-
from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch, mock_open
from ansible.errors import AnsibleParserError
from ansible.errors import yaml_strings
+from ansible.module_utils.six import PY3
from ansible.parsing.dataloader import DataLoader
diff --git a/test/units/parsing/vault/test_vault.py b/test/units/parsing/vault/test_vault.py
index cf95a90c84..d8720989ee 100644
--- a/test/units/parsing/vault/test_vault.py
+++ b/test/units/parsing/vault/test_vault.py
@@ -21,8 +21,6 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-import six
-
import binascii
import io
import os
@@ -33,9 +31,10 @@ from nose.plugins.skip import SkipTest
from ansible.compat.tests import unittest
from ansible import errors
+from ansible.module_utils import six
+from ansible.module_utils._text import to_bytes, to_text
from ansible.parsing.vault import VaultLib
from ansible.parsing import vault
-from ansible.module_utils._text import to_bytes, to_text
# Counter import fails for 2.0.1, requires >= 2.6.1 from pip
diff --git a/test/units/parsing/yaml/test_loader.py b/test/units/parsing/yaml/test_loader.py
index dffb0b4875..1727fec2ee 100644
--- a/test/units/parsing/yaml/test_loader.py
+++ b/test/units/parsing/yaml/test_loader.py
@@ -22,12 +22,12 @@ __metaclass__ = type
from io import StringIO
-from six import text_type, binary_type
from collections import Sequence, Set, Mapping
from ansible.compat.tests import unittest
from ansible import errors
+from ansible.module_utils.six import text_type, binary_type
from ansible.parsing.yaml.loader import AnsibleLoader
from ansible.parsing import vault
from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode
diff --git a/test/units/playbook/test_base.py b/test/units/playbook/test_base.py
index 862d659d3a..78d5e34e25 100644
--- a/test/units/playbook/test_base.py
+++ b/test/units/playbook/test_base.py
@@ -21,8 +21,8 @@ __metaclass__ = type
from ansible.compat.tests import unittest
-from ansible.compat.six import string_types
from ansible.errors import AnsibleParserError
+from ansible.module_utils.six import string_types
from ansible.playbook.attribute import FieldAttribute
from ansible.template import Templar
from ansible.playbook import base
diff --git a/test/units/playbook/test_play_context.py b/test/units/playbook/test_play_context.py
index 8d4ddf1407..ce8322f4c4 100644
--- a/test/units/playbook/test_play_context.py
+++ b/test/units/playbook/test_play_context.py
@@ -25,9 +25,9 @@ from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch, MagicMock
from ansible import constants as C
-from ansible.compat.six.moves import shlex_quote
from ansible.cli import CLI
from ansible.errors import AnsibleError, AnsibleParserError
+from ansible.module_utils.six.moves import shlex_quote
from ansible.playbook.play_context import PlayContext
from units.mock.loader import DictDataLoader
diff --git a/test/units/plugins/action/test_action.py b/test/units/plugins/action/test_action.py
index 910d1192f4..13f2480c9f 100644
--- a/test/units/plugins/action/test_action.py
+++ b/test/units/plugins/action/test_action.py
@@ -23,18 +23,19 @@ __metaclass__ = type
import os
from ansible import constants as C
-from ansible.compat.six import text_type
-from ansible.compat.six.moves import shlex_quote, builtins
from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch, MagicMock, mock_open
from ansible.errors import AnsibleError
+from ansible.module_utils.six import text_type
+from ansible.module_utils.six.moves import shlex_quote, builtins
+from ansible.module_utils._text import to_bytes
from ansible.playbook.play_context import PlayContext
from ansible.plugins.action import ActionBase
from ansible.template import Templar
from units.mock.loader import DictDataLoader
-from ansible.module_utils._text import to_bytes
+
python_module_replacers = b"""
#!/usr/bin/python
diff --git a/test/units/plugins/connection/test_ssh.py b/test/units/plugins/connection/test_ssh.py
index 2b0703fa7b..c6470d5eed 100644
--- a/test/units/plugins/connection/test_ssh.py
+++ b/test/units/plugins/connection/test_ssh.py
@@ -29,8 +29,8 @@ from ansible.compat.tests.mock import patch, MagicMock, PropertyMock
from ansible import constants as C
from ansible.compat.selectors import SelectorKey, EVENT_READ
-from ansible.compat.six.moves import shlex_quote
from ansible.errors import AnsibleError, AnsibleConnectionFailure, AnsibleFileNotFound
+from ansible.module_utils.six.moves import shlex_quote
from ansible.playbook.play_context import PlayContext
from ansible.plugins.connection import ssh
from ansible.module_utils._text import to_bytes
diff --git a/test/units/plugins/lookup/test_lastpass.py b/test/units/plugins/lookup/test_lastpass.py
index 9918d488d7..fe5d60f8b8 100644
--- a/test/units/plugins/lookup/test_lastpass.py
+++ b/test/units/plugins/lookup/test_lastpass.py
@@ -19,15 +19,16 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
-from ansible.compat.tests import unittest
-
-from ansible.plugins.lookup.lastpass import LookupModule, LPass, LPassException
-from ansible.errors import AnsibleError
from argparse import ArgumentParser
-import six
+from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch
+from ansible.errors import AnsibleError
+from ansible.module_utils import six
+from ansible.plugins.lookup.lastpass import LookupModule, LPass, LPassException
+
+
MOCK_ENTRIES = [{'username': 'user',
'name': 'Mock Entry',
'password': 't0pS3cret passphrase entry!',
diff --git a/test/units/plugins/lookup/test_password.py b/test/units/plugins/lookup/test_password.py
index 0fdffe99c5..08409270cf 100644
--- a/test/units/plugins/lookup/test_password.py
+++ b/test/units/plugins/lookup/test_password.py
@@ -23,11 +23,11 @@ __metaclass__ = type
import passlib
from passlib.handlers import pbkdf2
-from ansible.compat.six import text_type
-from ansible.compat.six.moves import builtins
from ansible.compat.tests import unittest
from ansible.compat.tests.mock import mock_open, patch
from ansible.errors import AnsibleError
+from ansible.module_utils.six import text_type
+from ansible.module_utils.six.moves import builtins
from ansible.plugins import PluginLoader
from ansible.utils import encrypt
diff --git a/test/units/plugins/strategy/test_strategy_base.py b/test/units/plugins/strategy/test_strategy_base.py
index 03f827df14..ba28c50a88 100644
--- a/test/units/plugins/strategy/test_strategy_base.py
+++ b/test/units/plugins/strategy/test_strategy_base.py
@@ -25,15 +25,15 @@ from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch, MagicMock
from ansible.errors import AnsibleError, AnsibleParserError
-from ansible.plugins.strategy import StrategyBase
from ansible.executor.process.worker import WorkerProcess
from ansible.executor.task_queue_manager import TaskQueueManager
from ansible.executor.task_result import TaskResult
+from ansible.inventory.host import Host
+from ansible.module_utils.six.moves import queue as Queue
from ansible.playbook.block import Block
from ansible.playbook.handler import Handler
-from ansible.inventory.host import Host
+from ansible.plugins.strategy import StrategyBase
-from six.moves import queue as Queue
from units.mock.loader import DictDataLoader
class TestStrategyBase(unittest.TestCase):
diff --git a/test/units/template/test_templar.py b/test/units/template/test_templar.py
index 80d305a9a3..5cc6c229e2 100644
--- a/test/units/template/test_templar.py
+++ b/test/units/template/test_templar.py
@@ -23,10 +23,10 @@ from jinja2.runtime import Context
from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch
-from ansible.compat.six import string_types
from ansible import constants as C
from ansible.errors import AnsibleError, AnsibleUndefinedVariable
+from ansible.module_utils.six import string_types
from ansible.template import Templar, AnsibleContext, AnsibleEnvironment
from ansible.vars.unsafe_proxy import AnsibleUnsafe, wrap_var
#from ansible.unsafe_proxy import AnsibleUnsafe, wrap_var
diff --git a/test/units/test_constants.py b/test/units/test_constants.py
index 776d2b9a76..4ee003a080 100644
--- a/test/units/test_constants.py
+++ b/test/units/test_constants.py
@@ -26,8 +26,8 @@ import os
import pytest
from ansible import constants
-from ansible.compat.six import StringIO
-from ansible.compat.six.moves import configparser
+from ansible.module_utils.six import StringIO
+from ansible.module_utils.six.moves import configparser
from ansible.module_utils._text import to_text
diff --git a/test/units/vars/test_variable_manager.py b/test/units/vars/test_variable_manager.py
index b2397d6cf2..d2bcde8bb1 100644
--- a/test/units/vars/test_variable_manager.py
+++ b/test/units/vars/test_variable_manager.py
@@ -21,11 +21,11 @@ __metaclass__ = type
from collections import defaultdict
-from ansible.compat.six import iteritems
-from ansible.compat.six.moves import builtins
from ansible.compat.tests import unittest
from ansible.compat.tests.mock import MagicMock, mock_open, patch
from ansible.inventory import Inventory
+from ansible.module_utils.six import iteritems
+from ansible.module_utils.six.moves import builtins
from ansible.playbook.play import Play
from units.mock.loader import DictDataLoader