Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VMware: Fix module usages in module_utils #49421

Merged
merged 4 commits into from
Dec 4, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions changelogs/fragments/47313-vmware-fix_module_error.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
bugfixes:
- Fix VMware module utils for self usage.
4 changes: 2 additions & 2 deletions lib/ansible/module_utils/vmware.py
Original file line number Diff line number Diff line change
Expand Up @@ -774,8 +774,8 @@ def __init__(self, module):
Constructor
"""
if not HAS_REQUESTS:
self.module.fail_json(msg="Unable to find 'requests' Python library which is required."
" Please install using 'pip install requests'")
module.fail_json(msg="Unable to find 'requests' Python library which is required."
" Please install using 'pip install requests'")

if not HAS_PYVMOMI:
module.fail_json(msg='PyVmomi Python module required. Install using "pip install PyVmomi"')
Expand Down
52 changes: 52 additions & 0 deletions test/units/module_utils/test_vmware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Copyright: (c) 2018, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

import sys

from units.compat import unittest
Akasurde marked this conversation as resolved.
Show resolved Hide resolved
from units.compat.mock import patch, MagicMock

from ansible.module_utils.six.moves import builtins
from ansible.module_utils._text import to_native

realimport = builtins.__import__


class TestVmware(unittest.TestCase):
def clear_modules(self, mods):
for mod in mods:
if mod in sys.modules:
del sys.modules[mod]

@patch.object(builtins, '__import__')
def test_vmware_missing_ensure_libs(self, mock_import):
def _mock_import(name, *args, **kwargs):
if name in ('pyVmomi', 'requests'):
raise ImportError
return realimport(name, *args, **kwargs)

self.clear_modules(['pyVmomi', 'ansible.module_utils.vmware', 'requests'])
mock_import.side_effect = _mock_import
mod = builtins.__import__('ansible.module_utils.vmware')

self.assertFalse(mod.module_utils.vmware.HAS_PYVMOMI)
self.assertFalse(mod.module_utils.vmware.HAS_REQUESTS)

with self.assertRaises(NameError) as context:
mod.module_utils.vmware.PyVmomi(MagicMock())

self.assertIn("name 'vim' is not defined", to_native(context.exception))

@patch.object(builtins, '__import__')
def test_vmware_found_ensure_libs(self, mock_import):
def _mock_import(name, *args, **kwargs):
if 'pyVmomi' in name:
return MagicMock()
return realimport(name, *args, **kwargs)

self.clear_modules(['pyVmomi', 'ansible.module_utils.vmware', 'requests'])
mock_import.side_effect = _mock_import
mod = builtins.__import__('ansible.module_utils.vmware')

self.assertTrue(mod.module_utils.vmware.HAS_PYVMOMI)
self.assertTrue(mod.module_utils.vmware.HAS_REQUESTS)