Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master' into additional_nsgrou…
Browse files Browse the repository at this point in the history
…p_commands
  • Loading branch information
badnetmask committed May 3, 2022
2 parents 41069d5 + 1630566 commit ec1cf4f
Show file tree
Hide file tree
Showing 9 changed files with 138 additions and 10 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/ansible-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,9 @@ jobs:
working-directory: /home/runner/.ansible/collections/ansible_collections/infoblox/nios_modules/

- name: Generate coverage report
run: ansible-test coverage xml -v --group-by command --group-by version
run: |
if [ "${{ matrix.ansible-version }}" == "devel" ]; then pip install coverage==6.3.2; fi
ansible-test coverage xml -v --group-by command --group-by version
working-directory: /home/runner/.ansible/collections/ansible_collections/infoblox/nios_modules/


Expand Down
Binary file removed plugins/.DS_Store
Binary file not shown.
2 changes: 0 additions & 2 deletions plugins/inventory/nios_inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

DOCUMENTATION = r'''
name: nios_inventory
plugin_type: inventory
author:
- Will Tome (@willtome)
short_description: Infoblox inventory plugin
Expand Down Expand Up @@ -42,7 +41,6 @@
- Value can also be specified using C(INFOBLOX_PASSWORD) environment
variable.
type: string
secret: true
env:
- name: INFOBLOX_PASSWORD
extattrs:
Expand Down
5 changes: 3 additions & 2 deletions plugins/lookup/nios_lookup.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

DOCUMENTATION = '''
---
lookup: nios
name: nios_lookup
short_description: Query Infoblox NIOS objects
version_added: "1.0.0"
description:
Expand All @@ -28,6 +28,7 @@
return_fields:
description: The list of field names to return for the specified object.
type: list
elements: str
filter:
description: A dict object that is used to filter the returned objects.
type: dict
Expand Down Expand Up @@ -74,7 +75,7 @@
description:
- The object type specified in the terms argument
returned: always
type: complex
type: list
contains:
obj_field:
description:
Expand Down
5 changes: 3 additions & 2 deletions plugins/lookup/nios_next_ip.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

DOCUMENTATION = '''
---
lookup: nios_next_ip
name: nios_next_ip
short_description: Return the next available IP address for a network
version_added: "1.0.0"
description:
Expand All @@ -32,6 +32,7 @@
description: List of IP's that need to be excluded from returned IP addresses.
required: false
type: list
elements: str
'''

EXAMPLES = """
Expand Down Expand Up @@ -80,7 +81,7 @@ def run(self, terms, variables=None, **kwargs):
provider = kwargs.pop('provider', {})
wapi = WapiLookup(provider)

if type(ipaddress.ip_network(network)) == ipaddress.IPv6Network:
if isinstance(ipaddress.ip_network(network), ipaddress.IPv6Network):
network_obj = wapi.get_object('ipv6network', {'network': network})
else:
network_obj = wapi.get_object('network', {'network': network})
Expand Down
4 changes: 2 additions & 2 deletions plugins/lookup/nios_next_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

DOCUMENTATION = '''
---
lookup: nios_next_network
name: nios_next_network
short_description: Return the next available network range for a network-container
version_added: "1.0.0"
description:
Expand All @@ -29,7 +29,6 @@
- The CIDR of the network to retrieve the next network from next available network within the
specified container. Also, Requested CIDR must be specified and greater than the parent CIDR.
required: True
default: 24
type: str
num:
description: The number of network addresses to return from network-container.
Expand All @@ -41,6 +40,7 @@
required: false
default: ''
type: list
elements: str
'''

EXAMPLES = """
Expand Down
8 changes: 7 additions & 1 deletion plugins/modules/nios_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@
- The name of the space this DHCP option is associated to
type: str
default: DHCP
template:
description:
- If set on creation, the network is created according to the values
specified in the selected template.
type: str
extattrs:
description:
- Allows for the configuration of Extensible Attributes on the
Expand Down Expand Up @@ -254,7 +259,7 @@ def check_vendor_specific_dhcp_option(module, ib_spec):
if isinstance(module.params[key], list):
for temp_dict in module.params[key]:
if 'num' in temp_dict:
if temp_dict['num'] in (43, 124, 125, 67):
if temp_dict['num'] in (43, 124, 125, 67, 60):
del temp_dict['use_option']
return ib_spec

Expand All @@ -279,6 +284,7 @@ def main():

options=dict(type='list', elements='dict', options=option_spec, transform=options),

template=dict(type='str'),
extattrs=dict(type='dict'),
comment=dict(),
container=dict(type='bool', ib_req=True)
Expand Down
Empty file added tests/unit/compat/__init__.py
Empty file.
120 changes: 120 additions & 0 deletions tests/unit/compat/mock.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# (c) 2014, Toshio Kuratomi <[email protected]>
#
# 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 <http://www.gnu.org/licenses/>.

# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

'''
Compat module for Python3.x's unittest.mock module
'''
import sys

# Python 2.7

# Note: Could use the pypi mock library on python3.x as well as python2.x. It
# is the same as the python3 stdlib mock library

try:
# Allow wildcard import because we really do want to import all of mock's
# symbols into this compat shim
# pylint: disable=wildcard-import,unused-wildcard-import
from unittest.mock import *
except ImportError:
# Python 2
# pylint: disable=wildcard-import,unused-wildcard-import
try:
from mock import *
except ImportError:
print('You need the mock library installed on python2.x to run tests')


# Prior to 3.4.4, mock_open cannot handle binary read_data
if sys.version_info >= (3,) and sys.version_info < (3, 4, 4):
file_spec = None

def _iterate_read_data(read_data):
# Helper for mock_open:
# Retrieve lines from read_data via a generator so that separate calls to
# readline, read, and readlines are properly interleaved
sep = b'\n' if isinstance(read_data, bytes) else '\n'
data_as_list = [l + sep for l in read_data.split(sep)]

if data_as_list[-1] == sep:
# If the last line ended in a newline, the list comprehension will have an
# extra entry that's just a newline. Remove this.
data_as_list = data_as_list[:-1]
else:
# If there wasn't an extra newline by itself, then the file being
# emulated doesn't have a newline to end the last line remove the
# newline that our naive format() added
data_as_list[-1] = data_as_list[-1][:-1]

for line in data_as_list:
yield line

def mock_open(mock=None, read_data=''):
"""
A helper function to create a mock to replace the use of `open`. It works
for `open` called directly or used as a context manager.
The `mock` argument is the mock object to configure. If `None` (the
default) then a `MagicMock` will be created for you, with the API limited
to methods or attributes available on standard file handles.
`read_data` is a string for the `read` methoddline`, and `readlines` of the
file handle to return. This is an empty string by default.
"""
def _readlines_side_effect(*args, **kwargs):
if handle.readlines.return_value is not None:
return handle.readlines.return_value
return list(_data)

def _read_side_effect(*args, **kwargs):
if handle.read.return_value is not None:
return handle.read.return_value
return type(read_data)().join(_data)

def _readline_side_effect():
if handle.readline.return_value is not None:
while True:
yield handle.readline.return_value
for line in _data:
yield line

global file_spec
if file_spec is None:
import _io
file_spec = list(set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO))))

if mock is None:
mock = MagicMock(name='open', spec=open)

handle = MagicMock(spec=file_spec)
handle.__enter__.return_value = handle

_data = _iterate_read_data(read_data)

handle.write.return_value = None
handle.read.return_value = None
handle.readline.return_value = None
handle.readlines.return_value = None

handle.read.side_effect = _read_side_effect
handle.readline.side_effect = _readline_side_effect()
handle.readlines.side_effect = _readlines_side_effect

mock.return_value = handle
return mock

0 comments on commit ec1cf4f

Please sign in to comment.