mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Remove and redirect all infoblox/nios content (#3592)
* Remove and redirect all infoblox/nios content. * Remove ignore.txt entries. * Update BOTMETA.
This commit is contained in:
parent
6580e7559b
commit
a68445486e
127 changed files with 23 additions and 9251 deletions
31
.github/BOTMETA.yml
vendored
31
.github/BOTMETA.yml
vendored
|
@ -205,9 +205,6 @@ files:
|
||||||
$lookups/manifold.py:
|
$lookups/manifold.py:
|
||||||
maintainers: galanoff
|
maintainers: galanoff
|
||||||
labels: manifold
|
labels: manifold
|
||||||
$lookups/nios:
|
|
||||||
maintainers: $team_networking sganesh-infoblox
|
|
||||||
labels: infoblox networking
|
|
||||||
$lookups/onepass:
|
$lookups/onepass:
|
||||||
maintainers: samdoran
|
maintainers: samdoran
|
||||||
labels: onepassword
|
labels: onepassword
|
||||||
|
@ -253,9 +250,6 @@ files:
|
||||||
$module_utils/module_helper.py:
|
$module_utils/module_helper.py:
|
||||||
maintainers: russoz
|
maintainers: russoz
|
||||||
labels: module_helper
|
labels: module_helper
|
||||||
$module_utils/net_tools/nios/api.py:
|
|
||||||
maintainers: $team_networking sganesh-infoblox
|
|
||||||
labels: infoblox networking
|
|
||||||
$module_utils/oracle/oci_utils.py:
|
$module_utils/oracle/oci_utils.py:
|
||||||
maintainers: $team_oracle
|
maintainers: $team_oracle
|
||||||
labels: cloud
|
labels: cloud
|
||||||
|
@ -647,31 +641,6 @@ files:
|
||||||
maintainers: amasolov nerzhul
|
maintainers: amasolov nerzhul
|
||||||
$modules/net_tools/pritunl/:
|
$modules/net_tools/pritunl/:
|
||||||
maintainers: Lowess
|
maintainers: Lowess
|
||||||
$modules/net_tools/nios/:
|
|
||||||
maintainers: $team_networking
|
|
||||||
labels: infoblox networking
|
|
||||||
$modules/net_tools/nios/nios_a_record.py:
|
|
||||||
maintainers: brampling
|
|
||||||
$modules/net_tools/nios/nios_aaaa_record.py:
|
|
||||||
maintainers: brampling
|
|
||||||
$modules/net_tools/nios/nios_cname_record.py:
|
|
||||||
maintainers: brampling
|
|
||||||
$modules/net_tools/nios/nios_fixed_address.py:
|
|
||||||
maintainers: sjaiswal
|
|
||||||
$modules/net_tools/nios/nios_member.py:
|
|
||||||
maintainers: krisvasudevan
|
|
||||||
$modules/net_tools/nios/nios_mx_record.py:
|
|
||||||
maintainers: brampling
|
|
||||||
$modules/net_tools/nios/nios_naptr_record.py:
|
|
||||||
maintainers: brampling
|
|
||||||
$modules/net_tools/nios/nios_nsgroup.py:
|
|
||||||
maintainers: ebirn sjaiswal
|
|
||||||
$modules/net_tools/nios/nios_ptr_record.py:
|
|
||||||
maintainers: clementtrebuchet
|
|
||||||
$modules/net_tools/nios/nios_srv_record.py:
|
|
||||||
maintainers: brampling
|
|
||||||
$modules/net_tools/nios/nios_txt_record.py:
|
|
||||||
maintainers: coreywan
|
|
||||||
$modules/net_tools/nmcli.py:
|
$modules/net_tools/nmcli.py:
|
||||||
maintainers: alcamie101
|
maintainers: alcamie101
|
||||||
$modules/net_tools/snmp_facts.py:
|
$modules/net_tools/snmp_facts.py:
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
deprecated_features:
|
removed_features:
|
||||||
- "The nios, nios_next_ip, nios_next_network lookup plugins, the nios documentation fragment, and the nios_host_record, nios_ptr_record, nios_mx_record, nios_fixed_address, nios_zone, nios_member, nios_a_record, nios_aaaa_record, nios_network, nios_dns_view, nios_txt_record, nios_naptr_record, nios_srv_record, nios_cname_record, nios_nsgroup, and nios_network_view module have been deprecated and will be removed from community.general 5.0.0. Please install the `infoblox.nios_modules <https://galaxy.ansible.com/infoblox/nios_modules>`_ collection instead and use its plugins and modules (https://github.com/ansible-collections/community.general/pull/2458)."
|
- "The nios, nios_next_ip, nios_next_network lookup plugins, the nios documentation fragment, and the nios_host_record, nios_ptr_record, nios_mx_record, nios_fixed_address, nios_zone, nios_member, nios_a_record, nios_aaaa_record, nios_network, nios_dns_view, nios_txt_record, nios_naptr_record, nios_srv_record, nios_cname_record, nios_nsgroup, and nios_network_view module have been removed from community.general 4.0.0 and were replaced by redirects to the `infoblox.nios_modules <https://galaxy.ansible.com/infoblox/nios_modules>`_ collection. Please install the ``infoblox.nios_modules`` collection to continue using these plugins and modules, and update your FQCNs (https://github.com/ansible-collections/community.general/pull/3592)."
|
105
meta/runtime.yml
105
meta/runtime.yml
|
@ -12,20 +12,11 @@ plugin_routing:
|
||||||
hashi_vault:
|
hashi_vault:
|
||||||
redirect: community.hashi_vault.hashi_vault
|
redirect: community.hashi_vault.hashi_vault
|
||||||
nios:
|
nios:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_lookup
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios lookup plugin has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_lookup instead.
|
|
||||||
nios_next_ip:
|
nios_next_ip:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_next_ip
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_next_ip lookup plugin has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_next_ip instead.
|
|
||||||
nios_next_network:
|
nios_next_network:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_next_network
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_next_network lookup plugin has been
|
|
||||||
deprecated. Please use infoblox.nios_modules.nios_next_network instead.
|
|
||||||
modules:
|
modules:
|
||||||
ali_instance_facts:
|
ali_instance_facts:
|
||||||
tombstone:
|
tombstone:
|
||||||
|
@ -266,85 +257,37 @@ plugin_routing:
|
||||||
removal_version: 3.0.0
|
removal_version: 3.0.0
|
||||||
warning_text: Use community.general.nginx_status_info instead.
|
warning_text: Use community.general.nginx_status_info instead.
|
||||||
nios_a_record:
|
nios_a_record:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_a_record
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_a_record module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_a_record instead.
|
|
||||||
nios_aaaa_record:
|
nios_aaaa_record:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_aaaa_record
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_aaaa_record module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_aaaa_record instead.
|
|
||||||
nios_cname_record:
|
nios_cname_record:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_cname_record
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_cname_record module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_cname_record instead.
|
|
||||||
nios_dns_view:
|
nios_dns_view:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_dns_view
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_dns_view module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_dns_view instead.
|
|
||||||
nios_fixed_address:
|
nios_fixed_address:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_fixed_address
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_fixed_address module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_fixed_address instead.
|
|
||||||
nios_host_record:
|
nios_host_record:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_host_record
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_host_record module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_host_record instead.
|
|
||||||
nios_member:
|
nios_member:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_member
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_member module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_member instead.
|
|
||||||
nios_mx_record:
|
nios_mx_record:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_mx_record
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_mx_record module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_mx_record instead.
|
|
||||||
nios_naptr_record:
|
nios_naptr_record:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_naptr_record
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_naptr_record module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_naptr_record instead.
|
|
||||||
nios_network:
|
nios_network:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_network
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_network module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_network instead.
|
|
||||||
nios_network_view:
|
nios_network_view:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_network_view
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_network_view module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_network_view instead.
|
|
||||||
nios_nsgroup:
|
nios_nsgroup:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_nsgroup
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_nsgroup module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_nsgroup instead.
|
|
||||||
nios_ptr_record:
|
nios_ptr_record:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_ptr_record
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_ptr_record module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_ptr_record instead.
|
|
||||||
nios_srv_record:
|
nios_srv_record:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_srv_record
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_srv_record module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_srv_record instead.
|
|
||||||
nios_txt_record:
|
nios_txt_record:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_txt_record
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_txt_record module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_txt_record instead.
|
|
||||||
nios_zone:
|
nios_zone:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios_zone
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios_zone module has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios_zone instead.
|
|
||||||
ome_device_info:
|
ome_device_info:
|
||||||
redirect: dellemc.openmanage.ome_device_info
|
redirect: dellemc.openmanage.ome_device_info
|
||||||
one_image_facts:
|
one_image_facts:
|
||||||
|
@ -628,10 +571,7 @@ plugin_routing:
|
||||||
kubevirt_vm_options:
|
kubevirt_vm_options:
|
||||||
redirect: community.kubevirt.kubevirt_vm_options
|
redirect: community.kubevirt.kubevirt_vm_options
|
||||||
nios:
|
nios:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.nios
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.nios document fragment has been deprecated.
|
|
||||||
Please use infoblox.nios_modules.nios instead.
|
|
||||||
postgresql:
|
postgresql:
|
||||||
redirect: community.postgresql.postgresql
|
redirect: community.postgresql.postgresql
|
||||||
module_utils:
|
module_utils:
|
||||||
|
@ -650,10 +590,7 @@ plugin_routing:
|
||||||
kubevirt:
|
kubevirt:
|
||||||
redirect: community.kubevirt.kubevirt
|
redirect: community.kubevirt.kubevirt
|
||||||
net_tools.nios.api:
|
net_tools.nios.api:
|
||||||
deprecation:
|
redirect: infoblox.nios_modules.api
|
||||||
removal_version: 5.0.0
|
|
||||||
warning_text: The community.general.net_tools.nios.api module_utils has been
|
|
||||||
deprecated. Please use infoblox.nios_modules.api instead.
|
|
||||||
postgresql:
|
postgresql:
|
||||||
redirect: community.postgresql.postgresql
|
redirect: community.postgresql.postgresql
|
||||||
remote_management.dellemc.dellemc_idrac:
|
remote_management.dellemc.dellemc_idrac:
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright: (c) 2015, Peter Sprygada <psprygada@ansible.com>
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleDocFragment(object):
|
|
||||||
|
|
||||||
# Standard files documentation fragment
|
|
||||||
DOCUMENTATION = r'''
|
|
||||||
options:
|
|
||||||
provider:
|
|
||||||
description:
|
|
||||||
- A dict object containing connection details.
|
|
||||||
type: dict
|
|
||||||
suboptions:
|
|
||||||
host:
|
|
||||||
description:
|
|
||||||
- Specifies the DNS host name or address for connecting to the remote
|
|
||||||
instance of NIOS WAPI over REST
|
|
||||||
- Value can also be specified using C(INFOBLOX_HOST) environment
|
|
||||||
variable.
|
|
||||||
type: str
|
|
||||||
username:
|
|
||||||
description:
|
|
||||||
- Configures the username to use to authenticate the connection to
|
|
||||||
the remote instance of NIOS.
|
|
||||||
- Value can also be specified using C(INFOBLOX_USERNAME) environment
|
|
||||||
variable.
|
|
||||||
type: str
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- Specifies the password to use to authenticate the connection to
|
|
||||||
the remote instance of NIOS.
|
|
||||||
- Value can also be specified using C(INFOBLOX_PASSWORD) environment
|
|
||||||
variable.
|
|
||||||
type: str
|
|
||||||
validate_certs:
|
|
||||||
description:
|
|
||||||
- Boolean value to enable or disable verifying SSL certificates
|
|
||||||
- Value can also be specified using C(INFOBLOX_SSL_VERIFY) environment
|
|
||||||
variable.
|
|
||||||
type: bool
|
|
||||||
default: no
|
|
||||||
aliases: [ ssl_verify ]
|
|
||||||
http_request_timeout:
|
|
||||||
description:
|
|
||||||
- The amount of time before to wait before receiving a response
|
|
||||||
- Value can also be specified using C(INFOBLOX_HTTP_REQUEST_TIMEOUT) environment
|
|
||||||
variable.
|
|
||||||
type: int
|
|
||||||
default: 10
|
|
||||||
max_retries:
|
|
||||||
description:
|
|
||||||
- Configures the number of attempted retries before the connection
|
|
||||||
is declared usable
|
|
||||||
- Value can also be specified using C(INFOBLOX_MAX_RETRIES) environment
|
|
||||||
variable.
|
|
||||||
type: int
|
|
||||||
default: 3
|
|
||||||
wapi_version:
|
|
||||||
description:
|
|
||||||
- Specifies the version of WAPI to use
|
|
||||||
- Value can also be specified using C(INFOBLOX_WAP_VERSION) environment
|
|
||||||
variable.
|
|
||||||
- Until ansible 2.8 the default WAPI was 1.4
|
|
||||||
type: str
|
|
||||||
default: '2.1'
|
|
||||||
max_results:
|
|
||||||
description:
|
|
||||||
- Specifies the maximum number of objects to be returned,
|
|
||||||
if set to a negative number the appliance will return an error when the
|
|
||||||
number of returned objects would exceed the setting.
|
|
||||||
- Value can also be specified using C(INFOBLOX_MAX_RESULTS) environment
|
|
||||||
variable.
|
|
||||||
type: int
|
|
||||||
default: 1000
|
|
||||||
http_pool_connections:
|
|
||||||
description:
|
|
||||||
- Number of pools to be used by the C(infoblox_client.Connector) object.
|
|
||||||
- This is passed as-is to the underlying C(requests.adapters.HTTPAdapter) class.
|
|
||||||
type: int
|
|
||||||
default: 10
|
|
||||||
http_pool_maxsize:
|
|
||||||
description:
|
|
||||||
- Maximum number of connections per pool to be used by the C(infoblox_client.Connector) object.
|
|
||||||
- This is passed as-is to the underlying C(requests.adapters.HTTPAdapter) class.
|
|
||||||
type: int
|
|
||||||
default: 10
|
|
||||||
silent_ssl_warnings:
|
|
||||||
description:
|
|
||||||
- Disable C(urllib3) SSL warnings in the C(infoblox_client.Connector) object.
|
|
||||||
- This is passed as-is to the underlying C(requests.adapters.HTTPAdapter) class.
|
|
||||||
type: bool
|
|
||||||
default: true
|
|
||||||
notes:
|
|
||||||
- "This module must be run locally, which can be achieved by specifying C(connection: local)."
|
|
||||||
- Please read the :ref:`nios_guide` for more detailed information on how to use Infoblox with Ansible.
|
|
||||||
|
|
||||||
'''
|
|
|
@ -1,126 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Copyright 2018 Red Hat | Ansible
|
|
||||||
#
|
|
||||||
# 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/>.
|
|
||||||
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
author: Unknown (!UNKNOWN)
|
|
||||||
name: nios
|
|
||||||
short_description: Query Infoblox NIOS objects
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding lookup from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_lookup
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Uses the Infoblox WAPI API to fetch NIOS specified objects. This lookup
|
|
||||||
supports adding additional keywords to filter the return data and specify
|
|
||||||
the desired set of returned fields.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
_terms:
|
|
||||||
description: The name of the object to return from NIOS
|
|
||||||
required: True
|
|
||||||
return_fields:
|
|
||||||
description: The list of field names to return for the specified object.
|
|
||||||
filter:
|
|
||||||
description: a dict object that is used to filter the return objects
|
|
||||||
extattrs:
|
|
||||||
description: a dict object that is used to filter on extattrs
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = """
|
|
||||||
- name: fetch all networkview objects
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
networkviews: "{{ lookup('community.general.nios', 'networkview',
|
|
||||||
provider={'host': 'nios01', 'username': 'admin', 'password': 'password'}) }}"
|
|
||||||
|
|
||||||
- name: fetch the default dns view
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
dns_views: "{{ lookup('community.general.nios', 'view', filter={'name': 'default'},
|
|
||||||
provider={'host': 'nios01', 'username': 'admin', 'password': 'password'}) }}"
|
|
||||||
|
|
||||||
# all of the examples below use credentials that are set using env variables
|
|
||||||
# export INFOBLOX_HOST=nios01
|
|
||||||
# export INFOBLOX_USERNAME=admin
|
|
||||||
# export INFOBLOX_PASSWORD=admin
|
|
||||||
|
|
||||||
- name: fetch all host records and include extended attributes
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
host_records: "{{ lookup('community.general.nios', 'record:host', return_fields=['extattrs', 'name', 'view', 'comment']}) }}"
|
|
||||||
|
|
||||||
|
|
||||||
- name: use env variables to pass credentials
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
networkviews: "{{ lookup('community.general.nios', 'networkview') }}"
|
|
||||||
|
|
||||||
- name: get a host record
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
host: "{{ lookup('community.general.nios', 'record:host', filter={'name': 'hostname.ansible.com'}) }}"
|
|
||||||
|
|
||||||
- name: get the authoritative zone from a non default dns view
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
host: "{{ lookup('community.general.nios', 'zone_auth', filter={'fqdn': 'ansible.com', 'view': 'ansible-dns'}) }}"
|
|
||||||
"""
|
|
||||||
|
|
||||||
RETURN = """
|
|
||||||
obj_type:
|
|
||||||
description:
|
|
||||||
- The object type specified in the terms argument
|
|
||||||
type: dictionary
|
|
||||||
contains:
|
|
||||||
obj_field:
|
|
||||||
description:
|
|
||||||
- One or more obj_type fields as specified by return_fields argument or
|
|
||||||
the default set of fields as per the object type
|
|
||||||
"""
|
|
||||||
|
|
||||||
from ansible.plugins.lookup import LookupBase
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiLookup
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_extattrs, flatten_extattrs
|
|
||||||
from ansible.errors import AnsibleError
|
|
||||||
|
|
||||||
|
|
||||||
class LookupModule(LookupBase):
|
|
||||||
|
|
||||||
def run(self, terms, variables=None, **kwargs):
|
|
||||||
try:
|
|
||||||
obj_type = terms[0]
|
|
||||||
except IndexError:
|
|
||||||
raise AnsibleError('the object_type must be specified')
|
|
||||||
|
|
||||||
return_fields = kwargs.pop('return_fields', None)
|
|
||||||
filter_data = kwargs.pop('filter', {})
|
|
||||||
extattrs = normalize_extattrs(kwargs.pop('extattrs', {}))
|
|
||||||
provider = kwargs.pop('provider', {})
|
|
||||||
wapi = WapiLookup(provider)
|
|
||||||
res = wapi.get_object(obj_type, filter_data, return_fields=return_fields, extattrs=extattrs)
|
|
||||||
if res is not None:
|
|
||||||
for obj in res:
|
|
||||||
if 'extattrs' in obj:
|
|
||||||
obj['extattrs'] = flatten_extattrs(obj['extattrs'])
|
|
||||||
else:
|
|
||||||
res = []
|
|
||||||
return res
|
|
|
@ -1,105 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Copyright 2018 Red Hat | Ansible
|
|
||||||
#
|
|
||||||
# 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/>.
|
|
||||||
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
author: Unknown (!UNKNOWN)
|
|
||||||
name: nios_next_ip
|
|
||||||
short_description: Return the next available IP address for a network
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding lookup from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_next_ip
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Uses the Infoblox WAPI API to return the next available IP addresses
|
|
||||||
for a given network CIDR
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
_terms:
|
|
||||||
description: The CIDR network to retrieve the next addresses from
|
|
||||||
required: True
|
|
||||||
num:
|
|
||||||
description: The number of IP addresses to return
|
|
||||||
required: false
|
|
||||||
default: 1
|
|
||||||
exclude:
|
|
||||||
description: List of IP's that need to be excluded from returned IP addresses
|
|
||||||
required: false
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = """
|
|
||||||
- name: return next available IP address for network 192.168.10.0/24
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
ipaddr: "{{ lookup('community.general.nios_next_ip', '192.168.10.0/24', provider={'host': 'nios01', 'username': 'admin', 'password': 'password'}) }}"
|
|
||||||
|
|
||||||
- name: return the next 3 available IP addresses for network 192.168.10.0/24
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
ipaddr: "{{ lookup('community.general.nios_next_ip', '192.168.10.0/24', num=3, provider={'host': 'nios01', 'username': 'admin', 'password': 'password'}) }}"
|
|
||||||
|
|
||||||
- name: return the next 3 available IP addresses for network 192.168.10.0/24 excluding ip addresses - ['192.168.10.1', '192.168.10.2']
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
ipaddr: "{{ lookup('community.general.nios_next_ip', '192.168.10.0/24', num=3, exclude=['192.168.10.1', '192.168.10.2'],
|
|
||||||
provider={'host': 'nios01', 'username': 'admin', 'password': 'password'}) }}"
|
|
||||||
"""
|
|
||||||
|
|
||||||
RETURN = """
|
|
||||||
_list:
|
|
||||||
description:
|
|
||||||
- The list of next IP addresses available
|
|
||||||
type: list
|
|
||||||
"""
|
|
||||||
|
|
||||||
from ansible.plugins.lookup import LookupBase
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiLookup
|
|
||||||
from ansible.module_utils.common.text.converters import to_text
|
|
||||||
from ansible.errors import AnsibleError
|
|
||||||
|
|
||||||
|
|
||||||
class LookupModule(LookupBase):
|
|
||||||
|
|
||||||
def run(self, terms, variables=None, **kwargs):
|
|
||||||
try:
|
|
||||||
network = terms[0]
|
|
||||||
except IndexError:
|
|
||||||
raise AnsibleError('missing argument in the form of A.B.C.D/E')
|
|
||||||
|
|
||||||
provider = kwargs.pop('provider', {})
|
|
||||||
wapi = WapiLookup(provider)
|
|
||||||
|
|
||||||
network_obj = wapi.get_object('network', {'network': network})
|
|
||||||
if network_obj is None:
|
|
||||||
raise AnsibleError('unable to find network object %s' % network)
|
|
||||||
|
|
||||||
num = kwargs.get('num', 1)
|
|
||||||
exclude_ip = kwargs.get('exclude', [])
|
|
||||||
|
|
||||||
try:
|
|
||||||
ref = network_obj[0]['_ref']
|
|
||||||
avail_ips = wapi.call_func('next_available_ip', ref, {'num': num, 'exclude': exclude_ip})
|
|
||||||
return [avail_ips['ips']]
|
|
||||||
except Exception as exc:
|
|
||||||
raise AnsibleError(to_text(exc))
|
|
|
@ -1,118 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Copyright 2018 Red Hat | Ansible
|
|
||||||
#
|
|
||||||
# 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/>.
|
|
||||||
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
author: Unknown (!UNKNOWN)
|
|
||||||
name: nios_next_network
|
|
||||||
short_description: Return the next available network range for a network-container
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding lookup from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_next_network
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Uses the Infoblox WAPI API to return the next available network addresses for
|
|
||||||
a given network CIDR
|
|
||||||
requirements:
|
|
||||||
- infoblox_client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
_terms:
|
|
||||||
description: The CIDR network to retrieve the next network from next available network within the specified
|
|
||||||
container.
|
|
||||||
required: True
|
|
||||||
cidr:
|
|
||||||
description:
|
|
||||||
- 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
|
|
||||||
num:
|
|
||||||
description: The number of network addresses to return from network-container
|
|
||||||
required: false
|
|
||||||
default: 1
|
|
||||||
exclude:
|
|
||||||
description: Network addresses returned from network-container excluding list of user's input network range
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = """
|
|
||||||
- name: return next available network for network-container 192.168.10.0/24
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
networkaddr: "{{ lookup('community.general.nios_next_network', '192.168.10.0/24', cidr=25,
|
|
||||||
provider={'host': 'nios01', 'username': 'admin', 'password': 'password'}) }}"
|
|
||||||
|
|
||||||
- name: return the next 2 available network addresses for network-container 192.168.10.0/24
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
networkaddr: "{{ lookup('community.general.nios_next_network', '192.168.10.0/24', cidr=25, num=2,
|
|
||||||
provider={'host': 'nios01', 'username': 'admin', 'password': 'password'}) }}"
|
|
||||||
|
|
||||||
- name: return the available network addresses for network-container 192.168.10.0/24 excluding network range '192.168.10.0/25'
|
|
||||||
ansible.builtin.set_fact:
|
|
||||||
networkaddr: "{{ lookup('community.general.nios_next_network', '192.168.10.0/24', cidr=25, exclude=['192.168.10.0/25'],
|
|
||||||
provider={'host': 'nios01', 'username': 'admin', 'password': 'password'}) }}"
|
|
||||||
"""
|
|
||||||
|
|
||||||
RETURN = """
|
|
||||||
_list:
|
|
||||||
description:
|
|
||||||
- The list of next network addresses available
|
|
||||||
type: list
|
|
||||||
"""
|
|
||||||
|
|
||||||
from ansible.plugins.lookup import LookupBase
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiLookup
|
|
||||||
from ansible.module_utils.common.text.converters import to_text
|
|
||||||
from ansible.errors import AnsibleError
|
|
||||||
|
|
||||||
|
|
||||||
class LookupModule(LookupBase):
|
|
||||||
|
|
||||||
def run(self, terms, variables=None, **kwargs):
|
|
||||||
try:
|
|
||||||
network = terms[0]
|
|
||||||
except IndexError:
|
|
||||||
raise AnsibleError('missing network argument in the form of A.B.C.D/E')
|
|
||||||
try:
|
|
||||||
cidr = kwargs.get('cidr', 24)
|
|
||||||
except IndexError:
|
|
||||||
raise AnsibleError('missing CIDR argument in the form of xx')
|
|
||||||
|
|
||||||
provider = kwargs.pop('provider', {})
|
|
||||||
wapi = WapiLookup(provider)
|
|
||||||
network_obj = wapi.get_object('networkcontainer', {'network': network})
|
|
||||||
|
|
||||||
if network_obj is None:
|
|
||||||
raise AnsibleError('unable to find network-container object %s' % network)
|
|
||||||
num = kwargs.get('num', 1)
|
|
||||||
exclude_ip = kwargs.get('exclude', [])
|
|
||||||
|
|
||||||
try:
|
|
||||||
ref = network_obj[0]['_ref']
|
|
||||||
avail_nets = wapi.call_func('next_available_network', ref, {'cidr': cidr, 'num': num, 'exclude': exclude_ip})
|
|
||||||
return [avail_nets['networks']]
|
|
||||||
except Exception as exc:
|
|
||||||
raise AnsibleError(to_text(exc))
|
|
|
@ -1,598 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
# (c) 2018 Red Hat Inc.
|
|
||||||
#
|
|
||||||
# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
|
|
||||||
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
|
|
||||||
import os
|
|
||||||
from functools import partial
|
|
||||||
from ansible.module_utils.common.text.converters import to_native
|
|
||||||
from ansible.module_utils.six import iteritems
|
|
||||||
from ansible.module_utils.common.text.converters import to_text
|
|
||||||
from ansible.module_utils.basic import env_fallback
|
|
||||||
from ansible.module_utils.common.validation import check_type_dict
|
|
||||||
|
|
||||||
try:
|
|
||||||
from infoblox_client.connector import Connector
|
|
||||||
from infoblox_client.exceptions import InfobloxException
|
|
||||||
HAS_INFOBLOX_CLIENT = True
|
|
||||||
except ImportError:
|
|
||||||
HAS_INFOBLOX_CLIENT = False
|
|
||||||
|
|
||||||
# defining nios constants
|
|
||||||
NIOS_DNS_VIEW = 'view'
|
|
||||||
NIOS_NETWORK_VIEW = 'networkview'
|
|
||||||
NIOS_HOST_RECORD = 'record:host'
|
|
||||||
NIOS_IPV4_NETWORK = 'network'
|
|
||||||
NIOS_IPV6_NETWORK = 'ipv6network'
|
|
||||||
NIOS_ZONE = 'zone_auth'
|
|
||||||
NIOS_PTR_RECORD = 'record:ptr'
|
|
||||||
NIOS_A_RECORD = 'record:a'
|
|
||||||
NIOS_AAAA_RECORD = 'record:aaaa'
|
|
||||||
NIOS_CNAME_RECORD = 'record:cname'
|
|
||||||
NIOS_MX_RECORD = 'record:mx'
|
|
||||||
NIOS_SRV_RECORD = 'record:srv'
|
|
||||||
NIOS_NAPTR_RECORD = 'record:naptr'
|
|
||||||
NIOS_TXT_RECORD = 'record:txt'
|
|
||||||
NIOS_NSGROUP = 'nsgroup'
|
|
||||||
NIOS_IPV4_FIXED_ADDRESS = 'fixedaddress'
|
|
||||||
NIOS_IPV6_FIXED_ADDRESS = 'ipv6fixedaddress'
|
|
||||||
NIOS_NEXT_AVAILABLE_IP = 'func:nextavailableip'
|
|
||||||
NIOS_IPV4_NETWORK_CONTAINER = 'networkcontainer'
|
|
||||||
NIOS_IPV6_NETWORK_CONTAINER = 'ipv6networkcontainer'
|
|
||||||
NIOS_MEMBER = 'member'
|
|
||||||
|
|
||||||
NIOS_PROVIDER_SPEC = {
|
|
||||||
'host': dict(fallback=(env_fallback, ['INFOBLOX_HOST'])),
|
|
||||||
'username': dict(fallback=(env_fallback, ['INFOBLOX_USERNAME'])),
|
|
||||||
'password': dict(fallback=(env_fallback, ['INFOBLOX_PASSWORD']), no_log=True),
|
|
||||||
'validate_certs': dict(type='bool', default=False, fallback=(env_fallback, ['INFOBLOX_SSL_VERIFY']), aliases=['ssl_verify']),
|
|
||||||
'silent_ssl_warnings': dict(type='bool', default=True),
|
|
||||||
'http_request_timeout': dict(type='int', default=10, fallback=(env_fallback, ['INFOBLOX_HTTP_REQUEST_TIMEOUT'])),
|
|
||||||
'http_pool_connections': dict(type='int', default=10),
|
|
||||||
'http_pool_maxsize': dict(type='int', default=10),
|
|
||||||
'max_retries': dict(type='int', default=3, fallback=(env_fallback, ['INFOBLOX_MAX_RETRIES'])),
|
|
||||||
'wapi_version': dict(default='2.1', fallback=(env_fallback, ['INFOBLOX_WAP_VERSION'])),
|
|
||||||
'max_results': dict(type='int', default=1000, fallback=(env_fallback, ['INFOBLOX_MAX_RETRIES']))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def get_connector(*args, **kwargs):
|
|
||||||
''' Returns an instance of infoblox_client.connector.Connector
|
|
||||||
:params args: positional arguments are silently ignored
|
|
||||||
:params kwargs: dict that is passed to Connector init
|
|
||||||
:returns: Connector
|
|
||||||
'''
|
|
||||||
if not HAS_INFOBLOX_CLIENT:
|
|
||||||
raise Exception('infoblox-client is required but does not appear '
|
|
||||||
'to be installed. It can be installed using the '
|
|
||||||
'command `pip install infoblox-client`')
|
|
||||||
|
|
||||||
if not set(kwargs.keys()).issubset(list(NIOS_PROVIDER_SPEC.keys()) + ['ssl_verify']):
|
|
||||||
raise Exception('invalid or unsupported keyword argument for connector')
|
|
||||||
for key, value in iteritems(NIOS_PROVIDER_SPEC):
|
|
||||||
if key not in kwargs:
|
|
||||||
# apply default values from NIOS_PROVIDER_SPEC since we cannot just
|
|
||||||
# assume the provider values are coming from AnsibleModule
|
|
||||||
if 'default' in value:
|
|
||||||
kwargs[key] = value['default']
|
|
||||||
|
|
||||||
# override any values with env variables unless they were
|
|
||||||
# explicitly set
|
|
||||||
env = ('INFOBLOX_%s' % key).upper()
|
|
||||||
if env in os.environ:
|
|
||||||
kwargs[key] = os.environ.get(env)
|
|
||||||
|
|
||||||
if 'validate_certs' in kwargs.keys():
|
|
||||||
kwargs['ssl_verify'] = kwargs['validate_certs']
|
|
||||||
kwargs.pop('validate_certs', None)
|
|
||||||
|
|
||||||
return Connector(kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
def normalize_extattrs(value):
|
|
||||||
''' Normalize extattrs field to expected format
|
|
||||||
The module accepts extattrs as key/value pairs. This method will
|
|
||||||
transform the key/value pairs into a structure suitable for
|
|
||||||
sending across WAPI in the format of:
|
|
||||||
extattrs: {
|
|
||||||
key: {
|
|
||||||
value: <value>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'''
|
|
||||||
return dict([(k, {'value': v}) for k, v in iteritems(value)])
|
|
||||||
|
|
||||||
|
|
||||||
def flatten_extattrs(value):
|
|
||||||
''' Flatten the key/value struct for extattrs
|
|
||||||
WAPI returns extattrs field as a dict in form of:
|
|
||||||
extattrs: {
|
|
||||||
key: {
|
|
||||||
value: <value>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
This method will flatten the structure to:
|
|
||||||
extattrs: {
|
|
||||||
key: value
|
|
||||||
}
|
|
||||||
'''
|
|
||||||
return dict([(k, v['value']) for k, v in iteritems(value)])
|
|
||||||
|
|
||||||
|
|
||||||
def member_normalize(member_spec):
|
|
||||||
''' Transforms the member module arguments into a valid WAPI struct
|
|
||||||
This function will transform the arguments into a structure that
|
|
||||||
is a valid WAPI structure in the format of:
|
|
||||||
{
|
|
||||||
key: <value>,
|
|
||||||
}
|
|
||||||
It will remove any arguments that are set to None since WAPI will error on
|
|
||||||
that condition.
|
|
||||||
The remainder of the value validation is performed by WAPI
|
|
||||||
Some parameters in ib_spec are passed as a list in order to pass the validation for elements.
|
|
||||||
In this function, they are converted to dictionary.
|
|
||||||
'''
|
|
||||||
member_elements = ['vip_setting', 'ipv6_setting', 'lan2_port_setting', 'mgmt_port_setting',
|
|
||||||
'pre_provisioning', 'network_setting', 'v6_network_setting',
|
|
||||||
'ha_port_setting', 'lan_port_setting', 'lan2_physical_setting',
|
|
||||||
'lan_ha_port_setting', 'mgmt_network_setting', 'v6_mgmt_network_setting']
|
|
||||||
for key in list(member_spec.keys()):
|
|
||||||
if key in member_elements and member_spec[key] is not None:
|
|
||||||
member_spec[key] = member_spec[key][0]
|
|
||||||
if isinstance(member_spec[key], dict):
|
|
||||||
member_spec[key] = member_normalize(member_spec[key])
|
|
||||||
elif isinstance(member_spec[key], list):
|
|
||||||
for x in member_spec[key]:
|
|
||||||
if isinstance(x, dict):
|
|
||||||
x = member_normalize(x)
|
|
||||||
elif member_spec[key] is None:
|
|
||||||
del member_spec[key]
|
|
||||||
return member_spec
|
|
||||||
|
|
||||||
|
|
||||||
def normalize_ib_spec(ib_spec):
|
|
||||||
result = {}
|
|
||||||
for arg in ib_spec:
|
|
||||||
result[arg] = dict([(k, v)
|
|
||||||
for k, v in iteritems(ib_spec[arg])
|
|
||||||
if k not in ('ib_req', 'transform', 'update')])
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
class WapiBase(object):
|
|
||||||
''' Base class for implementing Infoblox WAPI API '''
|
|
||||||
provider_spec = {'provider': dict(type='dict', options=NIOS_PROVIDER_SPEC)}
|
|
||||||
|
|
||||||
def __init__(self, provider):
|
|
||||||
self.connector = get_connector(**provider)
|
|
||||||
|
|
||||||
def __getattr__(self, name):
|
|
||||||
try:
|
|
||||||
return self.__dict__[name]
|
|
||||||
except KeyError:
|
|
||||||
if name.startswith('_'):
|
|
||||||
raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
|
|
||||||
return partial(self._invoke_method, name)
|
|
||||||
|
|
||||||
def _invoke_method(self, name, *args, **kwargs):
|
|
||||||
try:
|
|
||||||
method = getattr(self.connector, name)
|
|
||||||
return method(*args, **kwargs)
|
|
||||||
except InfobloxException as exc:
|
|
||||||
if hasattr(self, 'handle_exception'):
|
|
||||||
self.handle_exception(name, exc)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
|
|
||||||
class WapiLookup(WapiBase):
|
|
||||||
''' Implements WapiBase for lookup plugins '''
|
|
||||||
def handle_exception(self, method_name, exc):
|
|
||||||
if ('text' in exc.response):
|
|
||||||
raise Exception(exc.response['text'])
|
|
||||||
else:
|
|
||||||
raise Exception(exc)
|
|
||||||
|
|
||||||
|
|
||||||
class WapiInventory(WapiBase):
|
|
||||||
''' Implements WapiBase for dynamic inventory script '''
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class WapiModule(WapiBase):
|
|
||||||
''' Implements WapiBase for executing a NIOS module '''
|
|
||||||
def __init__(self, module):
|
|
||||||
self.module = module
|
|
||||||
provider = module.params['provider']
|
|
||||||
try:
|
|
||||||
super(WapiModule, self).__init__(provider)
|
|
||||||
except Exception as exc:
|
|
||||||
self.module.fail_json(msg=to_text(exc))
|
|
||||||
|
|
||||||
def handle_exception(self, method_name, exc):
|
|
||||||
''' Handles any exceptions raised
|
|
||||||
This method will be called if an InfobloxException is raised for
|
|
||||||
any call to the instance of Connector and also, in case of generic
|
|
||||||
exception. This method will then gracefully fail the module.
|
|
||||||
:args exc: instance of InfobloxException
|
|
||||||
'''
|
|
||||||
if ('text' in exc.response):
|
|
||||||
self.module.fail_json(
|
|
||||||
msg=exc.response['text'],
|
|
||||||
type=exc.response['Error'].split(':')[0],
|
|
||||||
code=exc.response.get('code'),
|
|
||||||
operation=method_name
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
self.module.fail_json(msg=to_native(exc))
|
|
||||||
|
|
||||||
def run(self, ib_obj_type, ib_spec):
|
|
||||||
''' Runs the module and performans configuration tasks
|
|
||||||
:args ib_obj_type: the WAPI object type to operate against
|
|
||||||
:args ib_spec: the specification for the WAPI object as a dict
|
|
||||||
:returns: a results dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
update = new_name = None
|
|
||||||
state = self.module.params['state']
|
|
||||||
if state not in ('present', 'absent'):
|
|
||||||
self.module.fail_json(msg='state must be one of `present`, `absent`, got `%s`' % state)
|
|
||||||
|
|
||||||
result = {'changed': False}
|
|
||||||
|
|
||||||
obj_filter = dict([(k, self.module.params[k]) for k, v in iteritems(ib_spec) if v.get('ib_req')])
|
|
||||||
|
|
||||||
# get object reference
|
|
||||||
ib_obj_ref, update, new_name = self.get_object_ref(self.module, ib_obj_type, obj_filter, ib_spec)
|
|
||||||
proposed_object = {}
|
|
||||||
for key, value in iteritems(ib_spec):
|
|
||||||
if self.module.params[key] is not None:
|
|
||||||
if 'transform' in value:
|
|
||||||
proposed_object[key] = value['transform'](self.module)
|
|
||||||
else:
|
|
||||||
proposed_object[key] = self.module.params[key]
|
|
||||||
|
|
||||||
# If configure_by_dns is set to False and view is 'default', then delete the default dns
|
|
||||||
if not proposed_object.get('configure_for_dns') and proposed_object.get('view') == 'default'\
|
|
||||||
and ib_obj_type == NIOS_HOST_RECORD:
|
|
||||||
del proposed_object['view']
|
|
||||||
|
|
||||||
if ib_obj_ref:
|
|
||||||
if len(ib_obj_ref) > 1:
|
|
||||||
for each in ib_obj_ref:
|
|
||||||
# To check for existing A_record with same name with input A_record by IP
|
|
||||||
if each.get('ipv4addr') and each.get('ipv4addr') == proposed_object.get('ipv4addr'):
|
|
||||||
current_object = each
|
|
||||||
# To check for existing Host_record with same name with input Host_record by IP
|
|
||||||
elif each.get('ipv4addrs')[0].get('ipv4addr') and each.get('ipv4addrs')[0].get('ipv4addr')\
|
|
||||||
== proposed_object.get('ipv4addrs')[0].get('ipv4addr'):
|
|
||||||
current_object = each
|
|
||||||
# Else set the current_object with input value
|
|
||||||
else:
|
|
||||||
current_object = obj_filter
|
|
||||||
ref = None
|
|
||||||
else:
|
|
||||||
current_object = ib_obj_ref[0]
|
|
||||||
if 'extattrs' in current_object:
|
|
||||||
current_object['extattrs'] = flatten_extattrs(current_object['extattrs'])
|
|
||||||
if current_object.get('_ref'):
|
|
||||||
ref = current_object.pop('_ref')
|
|
||||||
else:
|
|
||||||
current_object = obj_filter
|
|
||||||
ref = None
|
|
||||||
# checks if the object type is member to normalize the attributes being passed
|
|
||||||
if (ib_obj_type == NIOS_MEMBER):
|
|
||||||
proposed_object = member_normalize(proposed_object)
|
|
||||||
|
|
||||||
# checks if the name's field has been updated
|
|
||||||
if update and new_name:
|
|
||||||
proposed_object['name'] = new_name
|
|
||||||
|
|
||||||
check_remove = []
|
|
||||||
if (ib_obj_type == NIOS_HOST_RECORD):
|
|
||||||
# this check is for idempotency, as if the same ip address shall be passed
|
|
||||||
# add param will be removed, and same exists true for remove case as well.
|
|
||||||
if 'ipv4addrs' in [current_object and proposed_object]:
|
|
||||||
for each in current_object['ipv4addrs']:
|
|
||||||
if each['ipv4addr'] == proposed_object['ipv4addrs'][0]['ipv4addr']:
|
|
||||||
if 'add' in proposed_object['ipv4addrs'][0]:
|
|
||||||
del proposed_object['ipv4addrs'][0]['add']
|
|
||||||
break
|
|
||||||
check_remove += each.values()
|
|
||||||
if proposed_object['ipv4addrs'][0]['ipv4addr'] not in check_remove:
|
|
||||||
if 'remove' in proposed_object['ipv4addrs'][0]:
|
|
||||||
del proposed_object['ipv4addrs'][0]['remove']
|
|
||||||
|
|
||||||
res = None
|
|
||||||
modified = not self.compare_objects(current_object, proposed_object)
|
|
||||||
if 'extattrs' in proposed_object:
|
|
||||||
proposed_object['extattrs'] = normalize_extattrs(proposed_object['extattrs'])
|
|
||||||
|
|
||||||
# Checks if nios_next_ip param is passed in ipv4addrs/ipv4addr args
|
|
||||||
proposed_object = self.check_if_nios_next_ip_exists(proposed_object)
|
|
||||||
|
|
||||||
if state == 'present':
|
|
||||||
if ref is None:
|
|
||||||
if not self.module.check_mode:
|
|
||||||
self.create_object(ib_obj_type, proposed_object)
|
|
||||||
result['changed'] = True
|
|
||||||
# Check if NIOS_MEMBER and the flag to call function create_token is set
|
|
||||||
elif (ib_obj_type == NIOS_MEMBER) and (proposed_object['create_token']):
|
|
||||||
proposed_object = None
|
|
||||||
# the function creates a token that can be used by a pre-provisioned member to join the grid
|
|
||||||
result['api_results'] = self.call_func('create_token', ref, proposed_object)
|
|
||||||
result['changed'] = True
|
|
||||||
elif modified:
|
|
||||||
if 'ipv4addrs' in proposed_object:
|
|
||||||
if ('add' not in proposed_object['ipv4addrs'][0]) and ('remove' not in proposed_object['ipv4addrs'][0]):
|
|
||||||
self.check_if_recordname_exists(obj_filter, ib_obj_ref, ib_obj_type, current_object, proposed_object)
|
|
||||||
|
|
||||||
if (ib_obj_type in (NIOS_HOST_RECORD, NIOS_NETWORK_VIEW, NIOS_DNS_VIEW)):
|
|
||||||
run_update = True
|
|
||||||
proposed_object = self.on_update(proposed_object, ib_spec)
|
|
||||||
if 'ipv4addrs' in proposed_object:
|
|
||||||
if ('add' or 'remove') in proposed_object['ipv4addrs'][0]:
|
|
||||||
run_update, proposed_object = self.check_if_add_remove_ip_arg_exists(proposed_object)
|
|
||||||
if run_update:
|
|
||||||
res = self.update_object(ref, proposed_object)
|
|
||||||
result['changed'] = True
|
|
||||||
else:
|
|
||||||
res = ref
|
|
||||||
if (ib_obj_type in (NIOS_A_RECORD, NIOS_AAAA_RECORD, NIOS_PTR_RECORD, NIOS_SRV_RECORD)):
|
|
||||||
# popping 'view' key as update of 'view' is not supported with respect to a:record/aaaa:record/srv:record/ptr:record
|
|
||||||
proposed_object = self.on_update(proposed_object, ib_spec)
|
|
||||||
del proposed_object['view']
|
|
||||||
if not self.module.check_mode:
|
|
||||||
res = self.update_object(ref, proposed_object)
|
|
||||||
result['changed'] = True
|
|
||||||
elif 'network_view' in proposed_object:
|
|
||||||
proposed_object.pop('network_view')
|
|
||||||
result['changed'] = True
|
|
||||||
if not self.module.check_mode and res is None:
|
|
||||||
proposed_object = self.on_update(proposed_object, ib_spec)
|
|
||||||
self.update_object(ref, proposed_object)
|
|
||||||
result['changed'] = True
|
|
||||||
|
|
||||||
elif state == 'absent':
|
|
||||||
if ref is not None:
|
|
||||||
if 'ipv4addrs' in proposed_object:
|
|
||||||
if 'remove' in proposed_object['ipv4addrs'][0]:
|
|
||||||
self.check_if_add_remove_ip_arg_exists(proposed_object)
|
|
||||||
self.update_object(ref, proposed_object)
|
|
||||||
result['changed'] = True
|
|
||||||
elif not self.module.check_mode:
|
|
||||||
self.delete_object(ref)
|
|
||||||
result['changed'] = True
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
def check_if_recordname_exists(self, obj_filter, ib_obj_ref, ib_obj_type, current_object, proposed_object):
|
|
||||||
''' Send POST request if host record input name and retrieved ref name is same,
|
|
||||||
but input IP and retrieved IP is different'''
|
|
||||||
|
|
||||||
if 'name' in (obj_filter and ib_obj_ref[0]) and ib_obj_type == NIOS_HOST_RECORD:
|
|
||||||
obj_host_name = obj_filter['name']
|
|
||||||
ref_host_name = ib_obj_ref[0]['name']
|
|
||||||
if 'ipv4addrs' in (current_object and proposed_object):
|
|
||||||
current_ip_addr = current_object['ipv4addrs'][0]['ipv4addr']
|
|
||||||
proposed_ip_addr = proposed_object['ipv4addrs'][0]['ipv4addr']
|
|
||||||
elif 'ipv6addrs' in (current_object and proposed_object):
|
|
||||||
current_ip_addr = current_object['ipv6addrs'][0]['ipv6addr']
|
|
||||||
proposed_ip_addr = proposed_object['ipv6addrs'][0]['ipv6addr']
|
|
||||||
|
|
||||||
if obj_host_name == ref_host_name and current_ip_addr != proposed_ip_addr:
|
|
||||||
self.create_object(ib_obj_type, proposed_object)
|
|
||||||
|
|
||||||
def check_if_nios_next_ip_exists(self, proposed_object):
|
|
||||||
''' Check if nios_next_ip argument is passed in ipaddr while creating
|
|
||||||
host record, if yes then format proposed object ipv4addrs and pass
|
|
||||||
func:nextavailableip and ipaddr range to create hostrecord with next
|
|
||||||
available ip in one call to avoid any race condition '''
|
|
||||||
|
|
||||||
if 'ipv4addrs' in proposed_object:
|
|
||||||
if 'nios_next_ip' in proposed_object['ipv4addrs'][0]['ipv4addr']:
|
|
||||||
ip_range = check_type_dict(proposed_object['ipv4addrs'][0]['ipv4addr'])['nios_next_ip']
|
|
||||||
proposed_object['ipv4addrs'][0]['ipv4addr'] = NIOS_NEXT_AVAILABLE_IP + ':' + ip_range
|
|
||||||
elif 'ipv4addr' in proposed_object:
|
|
||||||
if 'nios_next_ip' in proposed_object['ipv4addr']:
|
|
||||||
ip_range = check_type_dict(proposed_object['ipv4addr'])['nios_next_ip']
|
|
||||||
proposed_object['ipv4addr'] = NIOS_NEXT_AVAILABLE_IP + ':' + ip_range
|
|
||||||
|
|
||||||
return proposed_object
|
|
||||||
|
|
||||||
def check_if_add_remove_ip_arg_exists(self, proposed_object):
|
|
||||||
'''
|
|
||||||
This function shall check if add/remove param is set to true and
|
|
||||||
is passed in the args, then we will update the proposed dictionary
|
|
||||||
to add/remove IP to existing host_record, if the user passes false
|
|
||||||
param with the argument nothing shall be done.
|
|
||||||
:returns: True if param is changed based on add/remove, and also the
|
|
||||||
changed proposed_object.
|
|
||||||
'''
|
|
||||||
update = False
|
|
||||||
if 'add' in proposed_object['ipv4addrs'][0]:
|
|
||||||
if proposed_object['ipv4addrs'][0]['add']:
|
|
||||||
proposed_object['ipv4addrs+'] = proposed_object['ipv4addrs']
|
|
||||||
del proposed_object['ipv4addrs']
|
|
||||||
del proposed_object['ipv4addrs+'][0]['add']
|
|
||||||
update = True
|
|
||||||
else:
|
|
||||||
del proposed_object['ipv4addrs'][0]['add']
|
|
||||||
elif 'remove' in proposed_object['ipv4addrs'][0]:
|
|
||||||
if proposed_object['ipv4addrs'][0]['remove']:
|
|
||||||
proposed_object['ipv4addrs-'] = proposed_object['ipv4addrs']
|
|
||||||
del proposed_object['ipv4addrs']
|
|
||||||
del proposed_object['ipv4addrs-'][0]['remove']
|
|
||||||
update = True
|
|
||||||
else:
|
|
||||||
del proposed_object['ipv4addrs'][0]['remove']
|
|
||||||
return update, proposed_object
|
|
||||||
|
|
||||||
def issubset(self, item, objects):
|
|
||||||
''' Checks if item is a subset of objects
|
|
||||||
:args item: the subset item to validate
|
|
||||||
:args objects: superset list of objects to validate against
|
|
||||||
:returns: True if item is a subset of one entry in objects otherwise
|
|
||||||
this method will return None
|
|
||||||
'''
|
|
||||||
for obj in objects:
|
|
||||||
if isinstance(item, dict):
|
|
||||||
if all(entry in obj.items() for entry in item.items()):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
if item in obj:
|
|
||||||
return True
|
|
||||||
|
|
||||||
def compare_objects(self, current_object, proposed_object):
|
|
||||||
for key, proposed_item in iteritems(proposed_object):
|
|
||||||
current_item = current_object.get(key)
|
|
||||||
|
|
||||||
# if proposed has a key that current doesn't then the objects are
|
|
||||||
# not equal and False will be immediately returned
|
|
||||||
if current_item is None:
|
|
||||||
return False
|
|
||||||
|
|
||||||
elif isinstance(proposed_item, list):
|
|
||||||
if key == 'aliases':
|
|
||||||
if set(current_item) != set(proposed_item):
|
|
||||||
return False
|
|
||||||
for subitem in proposed_item:
|
|
||||||
if not self.issubset(subitem, current_item):
|
|
||||||
return False
|
|
||||||
|
|
||||||
elif isinstance(proposed_item, dict):
|
|
||||||
return self.compare_objects(current_item, proposed_item)
|
|
||||||
|
|
||||||
else:
|
|
||||||
if current_item != proposed_item:
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def get_object_ref(self, module, ib_obj_type, obj_filter, ib_spec):
|
|
||||||
''' this function gets the reference object of pre-existing nios objects '''
|
|
||||||
|
|
||||||
update = False
|
|
||||||
old_name = new_name = None
|
|
||||||
if ('name' in obj_filter):
|
|
||||||
# gets and returns the current object based on name/old_name passed
|
|
||||||
try:
|
|
||||||
name_obj = check_type_dict(obj_filter['name'])
|
|
||||||
old_name = name_obj['old_name']
|
|
||||||
new_name = name_obj['new_name']
|
|
||||||
except TypeError:
|
|
||||||
name = obj_filter['name']
|
|
||||||
|
|
||||||
if old_name and new_name:
|
|
||||||
if (ib_obj_type == NIOS_HOST_RECORD):
|
|
||||||
test_obj_filter = dict([('name', old_name), ('view', obj_filter['view'])])
|
|
||||||
elif (ib_obj_type in (NIOS_AAAA_RECORD, NIOS_A_RECORD)):
|
|
||||||
test_obj_filter = obj_filter
|
|
||||||
else:
|
|
||||||
test_obj_filter = dict([('name', old_name)])
|
|
||||||
# get the object reference
|
|
||||||
ib_obj = self.get_object(ib_obj_type, test_obj_filter, return_fields=list(ib_spec.keys()))
|
|
||||||
if ib_obj:
|
|
||||||
obj_filter['name'] = new_name
|
|
||||||
else:
|
|
||||||
test_obj_filter['name'] = new_name
|
|
||||||
ib_obj = self.get_object(ib_obj_type, test_obj_filter, return_fields=list(ib_spec.keys()))
|
|
||||||
update = True
|
|
||||||
return ib_obj, update, new_name
|
|
||||||
if (ib_obj_type == NIOS_HOST_RECORD):
|
|
||||||
# to check only by name if dns bypassing is set
|
|
||||||
if not obj_filter['configure_for_dns']:
|
|
||||||
test_obj_filter = dict([('name', name)])
|
|
||||||
else:
|
|
||||||
test_obj_filter = dict([('name', name), ('view', obj_filter['view'])])
|
|
||||||
elif (ib_obj_type == NIOS_IPV4_FIXED_ADDRESS or ib_obj_type == NIOS_IPV6_FIXED_ADDRESS and 'mac' in obj_filter):
|
|
||||||
test_obj_filter = dict([['mac', obj_filter['mac']]])
|
|
||||||
elif (ib_obj_type == NIOS_A_RECORD):
|
|
||||||
# resolves issue where a_record with uppercase name was returning null and was failing
|
|
||||||
test_obj_filter = obj_filter
|
|
||||||
test_obj_filter['name'] = test_obj_filter['name'].lower()
|
|
||||||
# resolves issue where multiple a_records with same name and different IP address
|
|
||||||
try:
|
|
||||||
ipaddr_obj = check_type_dict(obj_filter['ipv4addr'])
|
|
||||||
ipaddr = ipaddr_obj['old_ipv4addr']
|
|
||||||
except TypeError:
|
|
||||||
ipaddr = obj_filter['ipv4addr']
|
|
||||||
test_obj_filter['ipv4addr'] = ipaddr
|
|
||||||
elif (ib_obj_type == NIOS_TXT_RECORD):
|
|
||||||
# resolves issue where multiple txt_records with same name and different text
|
|
||||||
test_obj_filter = obj_filter
|
|
||||||
try:
|
|
||||||
text_obj = check_type_dict(obj_filter['text'])
|
|
||||||
txt = text_obj['old_text']
|
|
||||||
except TypeError:
|
|
||||||
txt = obj_filter['text']
|
|
||||||
test_obj_filter['text'] = txt
|
|
||||||
# check if test_obj_filter is empty copy passed obj_filter
|
|
||||||
else:
|
|
||||||
test_obj_filter = obj_filter
|
|
||||||
ib_obj = self.get_object(ib_obj_type, test_obj_filter.copy(), return_fields=list(ib_spec.keys()))
|
|
||||||
elif (ib_obj_type == NIOS_A_RECORD):
|
|
||||||
# resolves issue where multiple a_records with same name and different IP address
|
|
||||||
test_obj_filter = obj_filter
|
|
||||||
try:
|
|
||||||
ipaddr_obj = check_type_dict(obj_filter['ipv4addr'])
|
|
||||||
ipaddr = ipaddr_obj['old_ipv4addr']
|
|
||||||
except TypeError:
|
|
||||||
ipaddr = obj_filter['ipv4addr']
|
|
||||||
test_obj_filter['ipv4addr'] = ipaddr
|
|
||||||
ib_obj = self.get_object(ib_obj_type, test_obj_filter.copy(), return_fields=list(ib_spec.keys()))
|
|
||||||
elif (ib_obj_type == NIOS_TXT_RECORD):
|
|
||||||
# resolves issue where multiple txt_records with same name and different text
|
|
||||||
test_obj_filter = obj_filter
|
|
||||||
try:
|
|
||||||
text_obj = check_type_dict(obj_filter['text'])
|
|
||||||
txt = text_obj['old_text']
|
|
||||||
except TypeError:
|
|
||||||
txt = obj_filter['text']
|
|
||||||
test_obj_filter['text'] = txt
|
|
||||||
ib_obj = self.get_object(ib_obj_type, test_obj_filter.copy(), return_fields=list(ib_spec.keys()))
|
|
||||||
elif (ib_obj_type == NIOS_ZONE):
|
|
||||||
# del key 'restart_if_needed' as nios_zone get_object fails with the key present
|
|
||||||
temp = ib_spec['restart_if_needed']
|
|
||||||
del ib_spec['restart_if_needed']
|
|
||||||
ib_obj = self.get_object(ib_obj_type, obj_filter.copy(), return_fields=list(ib_spec.keys()))
|
|
||||||
# reinstate restart_if_needed if ib_obj is none, meaning there's no existing nios_zone ref
|
|
||||||
if not ib_obj:
|
|
||||||
ib_spec['restart_if_needed'] = temp
|
|
||||||
elif (ib_obj_type == NIOS_MEMBER):
|
|
||||||
# del key 'create_token' as nios_member get_object fails with the key present
|
|
||||||
temp = ib_spec['create_token']
|
|
||||||
del ib_spec['create_token']
|
|
||||||
ib_obj = self.get_object(ib_obj_type, obj_filter.copy(), return_fields=list(ib_spec.keys()))
|
|
||||||
if temp:
|
|
||||||
# reinstate 'create_token' key
|
|
||||||
ib_spec['create_token'] = temp
|
|
||||||
else:
|
|
||||||
ib_obj = self.get_object(ib_obj_type, obj_filter.copy(), return_fields=list(ib_spec.keys()))
|
|
||||||
return ib_obj, update, new_name
|
|
||||||
|
|
||||||
def on_update(self, proposed_object, ib_spec):
|
|
||||||
''' Event called before the update is sent to the API endpoing
|
|
||||||
This method will allow the final proposed object to be changed
|
|
||||||
and/or keys filtered before it is sent to the API endpoint to
|
|
||||||
be processed.
|
|
||||||
:args proposed_object: A dict item that will be encoded and sent
|
|
||||||
the API endpoint with the updated data structure
|
|
||||||
:returns: updated object to be sent to API endpoint
|
|
||||||
'''
|
|
||||||
keys = set()
|
|
||||||
for key, value in iteritems(proposed_object):
|
|
||||||
update = ib_spec[key].get('update', True)
|
|
||||||
if not update:
|
|
||||||
keys.add(key)
|
|
||||||
return dict([(k, v) for k, v in iteritems(proposed_object) if k not in keys])
|
|
|
@ -1,179 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_a_record
|
|
||||||
author: "Blair Rampling (@brampling)"
|
|
||||||
short_description: Configure Infoblox NIOS A records
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_a_record
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of A record objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(record:a) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Sets the DNS view to associate this A record with. The DNS
|
|
||||||
view must already be configured on the system
|
|
||||||
default: default
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
ipv4addr:
|
|
||||||
description:
|
|
||||||
- Configures the IPv4 address for this A record. Users can dynamically
|
|
||||||
allocate ipv4 address to A record by passing dictionary containing,
|
|
||||||
I(nios_next_ip) and I(CIDR network range). See example
|
|
||||||
aliases:
|
|
||||||
- ipv4
|
|
||||||
type: str
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Configures the TTL to be associated with this A record
|
|
||||||
type: int
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure an A record
|
|
||||||
community.general.nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Add a comment to an existing A record
|
|
||||||
community.general.nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Remove an A record from the system
|
|
||||||
community.general.nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Update an A record name
|
|
||||||
community.general.nios_a_record:
|
|
||||||
name: {new_name: a_new.ansible.com, old_name: a.ansible.com}
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Dynamically add a record to next available ip
|
|
||||||
community.general.nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: {nios_next_ip: 192.168.10.0/24}
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_A_RECORD
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, ib_req=True),
|
|
||||||
view=dict(default='default', aliases=['dns_view'], ib_req=True),
|
|
||||||
|
|
||||||
ipv4addr=dict(aliases=['ipv4'], ib_req=True),
|
|
||||||
|
|
||||||
ttl=dict(type='int'),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_A_RECORD, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,166 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_aaaa_record
|
|
||||||
author: "Blair Rampling (@brampling)"
|
|
||||||
short_description: Configure Infoblox NIOS AAAA records
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_aaaa_record
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of AAAA record objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(record:aaaa) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Sets the DNS view to associate this AAAA record with. The DNS
|
|
||||||
view must already be configured on the system
|
|
||||||
default: default
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
ipv6addr:
|
|
||||||
description:
|
|
||||||
- Configures the IPv6 address for this AAAA record.
|
|
||||||
aliases:
|
|
||||||
- ipv6
|
|
||||||
type: str
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Configures the TTL to be associated with this AAAA record
|
|
||||||
type: int
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure an AAAA record
|
|
||||||
community.general.nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Add a comment to an existing AAAA record
|
|
||||||
community.general.nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Remove an AAAA record from the system
|
|
||||||
community.general.nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Update an AAAA record name
|
|
||||||
community.general.nios_aaaa_record:
|
|
||||||
name: {new_name: aaaa_new.ansible.com, old_name: aaaa.ansible.com}
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_AAAA_RECORD
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, ib_req=True),
|
|
||||||
view=dict(default='default', aliases=['dns_view'], ib_req=True),
|
|
||||||
|
|
||||||
ipv6addr=dict(aliases=['ipv6'], ib_req=True),
|
|
||||||
|
|
||||||
ttl=dict(type='int'),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_AAAA_RECORD, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,155 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_cname_record
|
|
||||||
author: "Blair Rampling (@brampling)"
|
|
||||||
short_description: Configure Infoblox NIOS CNAME records
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_cname_record
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of CNAME record objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(record:cname) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Sets the DNS view to associate this CNAME record with. The DNS
|
|
||||||
view must already be configured on the system
|
|
||||||
default: default
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
canonical:
|
|
||||||
description:
|
|
||||||
- Configures the canonical name for this CNAME record.
|
|
||||||
aliases:
|
|
||||||
- cname
|
|
||||||
type: str
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Configures the TTL to be associated with this CNAME record
|
|
||||||
type: int
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure a CNAME record
|
|
||||||
community.general.nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Add a comment to an existing CNAME record
|
|
||||||
community.general.nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Remove a CNAME record from the system
|
|
||||||
community.general.nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_CNAME_RECORD
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, ib_req=True),
|
|
||||||
view=dict(default='default', aliases=['dns_view'], ib_req=True),
|
|
||||||
|
|
||||||
canonical=dict(aliases=['cname'], ib_req=True),
|
|
||||||
|
|
||||||
ttl=dict(type='int'),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_CNAME_RECORD, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,150 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_dns_view
|
|
||||||
author: "Peter Sprygada (@privateip)"
|
|
||||||
short_description: Configure Infoblox NIOS DNS views
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_dns_view
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of DNS view objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(view) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
- Updates instances of DNS view object from Infoblox NIOS servers.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system. User can also update the hostname as it is possible
|
|
||||||
to pass a dict containing I(new_name), I(old_name). See examples.
|
|
||||||
required: true
|
|
||||||
aliases:
|
|
||||||
- view
|
|
||||||
type: str
|
|
||||||
network_view:
|
|
||||||
description:
|
|
||||||
- Specifies the name of the network view to assign the configured
|
|
||||||
DNS view to. The network view must already be configured on the
|
|
||||||
target system.
|
|
||||||
default: default
|
|
||||||
type: str
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
required: false
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
required: false
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
required: false
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure a new dns view instance
|
|
||||||
community.general.nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Update the comment for dns view
|
|
||||||
community.general.nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
comment: this is an example comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove the dns view instance
|
|
||||||
community.general.nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Update the dns view instance
|
|
||||||
community.general.nios_dns_view:
|
|
||||||
name: {new_name: ansible-dns-new, old_name: ansible-dns}
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_DNS_VIEW
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, aliases=['view'], ib_req=True),
|
|
||||||
network_view=dict(default='default', ib_req=True),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict()
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_DNS_VIEW, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,301 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_fixed_address
|
|
||||||
author: "Sumit Jaiswal (@sjaiswal)"
|
|
||||||
short_description: Configure Infoblox NIOS DHCP Fixed Address
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_fixed_address
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- A fixed address is a specific IP address that a DHCP server
|
|
||||||
always assigns when a lease request comes from a particular
|
|
||||||
MAC address of the client.
|
|
||||||
- Supports both IPV4 and IPV6 internet protocols
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the hostname with which fixed DHCP ip-address is stored
|
|
||||||
for respective mac.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
ipaddr:
|
|
||||||
description:
|
|
||||||
- IPV4/V6 address of the fixed address.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
mac:
|
|
||||||
description:
|
|
||||||
- The MAC address of the interface.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- Specifies the network range in which ipaddr exists.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
network_view:
|
|
||||||
description:
|
|
||||||
- Configures the name of the network view to associate with this
|
|
||||||
configured instance.
|
|
||||||
required: false
|
|
||||||
default: default
|
|
||||||
type: str
|
|
||||||
options:
|
|
||||||
description:
|
|
||||||
- Configures the set of DHCP options to be included as part of
|
|
||||||
the configured network instance. This argument accepts a list
|
|
||||||
of values (see suboptions). When configuring suboptions at
|
|
||||||
least one of C(name) or C(num) must be specified.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the DHCP option to configure
|
|
||||||
type: str
|
|
||||||
num:
|
|
||||||
description:
|
|
||||||
- The number of the DHCP option to configure
|
|
||||||
type: int
|
|
||||||
value:
|
|
||||||
description:
|
|
||||||
- The value of the DHCP option specified by C(name)
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
use_option:
|
|
||||||
description:
|
|
||||||
- Only applies to a subset of options (see NIOS API documentation)
|
|
||||||
type: bool
|
|
||||||
default: 'yes'
|
|
||||||
vendor_class:
|
|
||||||
description:
|
|
||||||
- The name of the space this DHCP option is associated to
|
|
||||||
default: DHCP
|
|
||||||
type: str
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure ipv4 dhcp fixed address
|
|
||||||
community.general.nios_fixed_address:
|
|
||||||
name: ipv4_fixed
|
|
||||||
ipaddr: 192.168.10.1
|
|
||||||
mac: 08:6d:41:e8:fd:e8
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
network_view: default
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Configure a ipv6 dhcp fixed address
|
|
||||||
community.general.nios_fixed_address:
|
|
||||||
name: ipv6_fixed
|
|
||||||
ipaddr: fe80::1/10
|
|
||||||
mac: 08:6d:41:e8:fd:e8
|
|
||||||
network: fe80::/64
|
|
||||||
network_view: default
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Set dhcp options for a ipv4 fixed address
|
|
||||||
community.general.nios_fixed_address:
|
|
||||||
name: ipv4_fixed
|
|
||||||
ipaddr: 192.168.10.1
|
|
||||||
mac: 08:6d:41:e8:fd:e8
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
network_view: default
|
|
||||||
comment: this is a test comment
|
|
||||||
options:
|
|
||||||
- name: domain-name
|
|
||||||
value: ansible.com
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove a ipv4 dhcp fixed address
|
|
||||||
community.general.nios_fixed_address:
|
|
||||||
name: ipv4_fixed
|
|
||||||
ipaddr: 192.168.10.1
|
|
||||||
mac: 08:6d:41:e8:fd:e8
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
network_view: default
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
import socket
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible.module_utils.six import iteritems
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_IPV4_FIXED_ADDRESS, NIOS_IPV6_FIXED_ADDRESS
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def validate_ip_address(address):
|
|
||||||
try:
|
|
||||||
socket.inet_aton(address)
|
|
||||||
except socket.error:
|
|
||||||
return False
|
|
||||||
return address.count(".") == 3
|
|
||||||
|
|
||||||
|
|
||||||
def validate_ip_v6_address(address):
|
|
||||||
try:
|
|
||||||
socket.inet_pton(socket.AF_INET6, address)
|
|
||||||
except socket.error:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def options(module):
|
|
||||||
''' Transforms the module argument into a valid WAPI struct
|
|
||||||
This function will transform the options argument into a structure that
|
|
||||||
is a valid WAPI structure in the format of:
|
|
||||||
{
|
|
||||||
name: <value>,
|
|
||||||
num: <value>,
|
|
||||||
value: <value>,
|
|
||||||
use_option: <value>,
|
|
||||||
vendor_class: <value>
|
|
||||||
}
|
|
||||||
It will remove any options that are set to None since WAPI will error on
|
|
||||||
that condition. The use_option field only applies
|
|
||||||
to special options that are displayed separately from other options and
|
|
||||||
have a use flag. This function removes the use_option flag from all
|
|
||||||
other options. It will also verify that either `name` or `num` is
|
|
||||||
set in the structure but does not validate the values are equal.
|
|
||||||
The remainder of the value validation is performed by WAPI
|
|
||||||
'''
|
|
||||||
special_options = ['routers', 'router-templates', 'domain-name-servers',
|
|
||||||
'domain-name', 'broadcast-address', 'broadcast-address-offset',
|
|
||||||
'dhcp-lease-time', 'dhcp6.name-servers']
|
|
||||||
options = list()
|
|
||||||
for item in module.params['options']:
|
|
||||||
opt = dict([(k, v) for k, v in iteritems(item) if v is not None])
|
|
||||||
if 'name' not in opt and 'num' not in opt:
|
|
||||||
module.fail_json(msg='one of `name` or `num` is required for option value')
|
|
||||||
if opt['name'] not in special_options:
|
|
||||||
del opt['use_option']
|
|
||||||
options.append(opt)
|
|
||||||
return options
|
|
||||||
|
|
||||||
|
|
||||||
def validate_ip_addr_type(ip, arg_spec, module):
|
|
||||||
'''This function will check if the argument ip is type v4/v6 and return appropriate infoblox network type
|
|
||||||
'''
|
|
||||||
check_ip = ip.split('/')
|
|
||||||
|
|
||||||
if validate_ip_address(check_ip[0]) and 'ipaddr' in arg_spec:
|
|
||||||
arg_spec['ipv4addr'] = arg_spec.pop('ipaddr')
|
|
||||||
module.params['ipv4addr'] = module.params.pop('ipaddr')
|
|
||||||
return NIOS_IPV4_FIXED_ADDRESS, arg_spec, module
|
|
||||||
elif validate_ip_v6_address(check_ip[0]) and 'ipaddr' in arg_spec:
|
|
||||||
arg_spec['ipv6addr'] = arg_spec.pop('ipaddr')
|
|
||||||
module.params['ipv6addr'] = module.params.pop('ipaddr')
|
|
||||||
return NIOS_IPV6_FIXED_ADDRESS, arg_spec, module
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
option_spec = dict(
|
|
||||||
# one of name or num is required; enforced by the function options()
|
|
||||||
name=dict(),
|
|
||||||
num=dict(type='int'),
|
|
||||||
|
|
||||||
value=dict(required=True),
|
|
||||||
|
|
||||||
use_option=dict(type='bool', default=True),
|
|
||||||
vendor_class=dict(default='DHCP')
|
|
||||||
)
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True),
|
|
||||||
ipaddr=dict(required=True, ib_req=True),
|
|
||||||
mac=dict(required=True, ib_req=True),
|
|
||||||
network=dict(required=True),
|
|
||||||
network_view=dict(default='default'),
|
|
||||||
|
|
||||||
options=dict(type='list', elements='dict', options=option_spec, transform=options),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict()
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
# to get the argument ipaddr
|
|
||||||
obj_filter = dict([(k, module.params[k]) for k, v in iteritems(ib_spec) if v.get('ib_req')])
|
|
||||||
# to modify argument based on ipaddr type i.e. IPV4/IPV6
|
|
||||||
fixed_address_ip_type, ib_spec, module = validate_ip_addr_type(obj_filter['ipaddr'], ib_spec, module)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
|
|
||||||
result = wapi.run(fixed_address_ip_type, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,361 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_host_record
|
|
||||||
author: "Peter Sprygada (@privateip)"
|
|
||||||
short_description: Configure Infoblox NIOS host records
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_host_record
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of host record objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(record:host) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
- Updates instances of host record object from Infoblox NIOS servers.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system. User can also update the hostname as it is possible
|
|
||||||
to pass a dict containing I(new_name), I(old_name). See examples.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Sets the DNS view to associate this host record with. The DNS
|
|
||||||
view must already be configured on the system
|
|
||||||
default: default
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
configure_for_dns:
|
|
||||||
description:
|
|
||||||
- Sets the DNS to particular parent. If user needs to bypass DNS
|
|
||||||
user can make the value to false.
|
|
||||||
type: bool
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
aliases:
|
|
||||||
- dns
|
|
||||||
ipv4addrs:
|
|
||||||
description:
|
|
||||||
- Configures the IPv4 addresses for this host record. This argument
|
|
||||||
accepts a list of values (see suboptions)
|
|
||||||
aliases:
|
|
||||||
- ipv4
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
ipv4addr:
|
|
||||||
description:
|
|
||||||
- Configures the IPv4 address for the host record. Users can dynamically
|
|
||||||
allocate ipv4 address to host record by passing dictionary containing,
|
|
||||||
I(nios_next_ip) and I(CIDR network range). If user wants to add or
|
|
||||||
remove the ipv4 address from existing record, I(add/remove)
|
|
||||||
params need to be used. See examples
|
|
||||||
required: true
|
|
||||||
aliases:
|
|
||||||
- address
|
|
||||||
type: str
|
|
||||||
configure_for_dhcp:
|
|
||||||
description:
|
|
||||||
- Configure the host_record over DHCP instead of DNS, if user
|
|
||||||
changes it to true, user need to mention MAC address to configure
|
|
||||||
required: false
|
|
||||||
aliases:
|
|
||||||
- dhcp
|
|
||||||
type: bool
|
|
||||||
mac:
|
|
||||||
description:
|
|
||||||
- Configures the hardware MAC address for the host record. If user makes
|
|
||||||
DHCP to true, user need to mention MAC address.
|
|
||||||
required: false
|
|
||||||
type: str
|
|
||||||
add:
|
|
||||||
description:
|
|
||||||
- If user wants to add the ipv4 address to an existing host record.
|
|
||||||
Note that with I(add) user will have to keep the I(state) as I(present),
|
|
||||||
as new IP address is allocated to existing host record. See examples.
|
|
||||||
type: bool
|
|
||||||
required: false
|
|
||||||
version_added: '0.2.0'
|
|
||||||
remove:
|
|
||||||
description:
|
|
||||||
- If user wants to remove the ipv4 address from an existing host record.
|
|
||||||
Note that with I(remove) user will have to change the I(state) to I(absent),
|
|
||||||
as IP address is de-allocated from an existing host record. See examples.
|
|
||||||
type: bool
|
|
||||||
required: false
|
|
||||||
version_added: '0.2.0'
|
|
||||||
ipv6addrs:
|
|
||||||
description:
|
|
||||||
- Configures the IPv6 addresses for the host record. This argument
|
|
||||||
accepts a list of values (see options)
|
|
||||||
aliases:
|
|
||||||
- ipv6
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
ipv6addr:
|
|
||||||
description:
|
|
||||||
- Configures the IPv6 address for the host record
|
|
||||||
required: true
|
|
||||||
aliases:
|
|
||||||
- address
|
|
||||||
type: str
|
|
||||||
configure_for_dhcp:
|
|
||||||
description:
|
|
||||||
- Configure the host_record over DHCP instead of DNS, if user
|
|
||||||
changes it to true, user need to mention MAC address to configure
|
|
||||||
required: false
|
|
||||||
type: bool
|
|
||||||
mac:
|
|
||||||
description:
|
|
||||||
- Configures the hardware MAC address for the host record. If user makes
|
|
||||||
DHCP to true, user need to mention MAC address.
|
|
||||||
required: false
|
|
||||||
type: str
|
|
||||||
aliases:
|
|
||||||
description:
|
|
||||||
- Configures an optional list of additional aliases to add to the host
|
|
||||||
record. These are equivalent to CNAMEs but held within a host
|
|
||||||
record. Must be in list format.
|
|
||||||
type: list
|
|
||||||
elements: str
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Configures the TTL to be associated with this host record
|
|
||||||
type: int
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure an ipv4 host record
|
|
||||||
community.general.nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
aliases:
|
|
||||||
- cname.ansible.com
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Add a comment to an existing host record
|
|
||||||
community.general.nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove a host record from the system
|
|
||||||
community.general.nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Update an ipv4 host record
|
|
||||||
community.general.nios_host_record:
|
|
||||||
name: {new_name: host-new.ansible.com, old_name: host.ansible.com}
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Create an ipv4 host record bypassing DNS
|
|
||||||
community.general.nios_host_record:
|
|
||||||
name: new_host
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
dns: false
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Create an ipv4 host record over DHCP
|
|
||||||
community.general.nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
dhcp: true
|
|
||||||
mac: 00-80-C8-E3-4C-BD
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Dynamically add host record to next available ip
|
|
||||||
community.general.nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: {nios_next_ip: 192.168.10.0/24}
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Add ip to host record
|
|
||||||
community.general.nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.2
|
|
||||||
add: true
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove ip to host record
|
|
||||||
community.general.nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
remove: true
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible.module_utils.six import iteritems
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_HOST_RECORD
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def ipaddr(module, key, filtered_keys=None):
|
|
||||||
''' Transforms the input value into a struct supported by WAPI
|
|
||||||
This function will transform the input from the playbook into a struct
|
|
||||||
that is valid for WAPI in the form of:
|
|
||||||
{
|
|
||||||
ipv4addr: <value>,
|
|
||||||
mac: <value>
|
|
||||||
}
|
|
||||||
This function does not validate the values are properly formatted or in
|
|
||||||
the acceptable range, that is left to WAPI.
|
|
||||||
'''
|
|
||||||
filtered_keys = filtered_keys or list()
|
|
||||||
objects = list()
|
|
||||||
for item in module.params[key]:
|
|
||||||
objects.append(dict([(k, v) for k, v in iteritems(item) if v is not None and k not in filtered_keys]))
|
|
||||||
return objects
|
|
||||||
|
|
||||||
|
|
||||||
def ipv4addrs(module):
|
|
||||||
return ipaddr(module, 'ipv4addrs', filtered_keys=['address', 'dhcp'])
|
|
||||||
|
|
||||||
|
|
||||||
def ipv6addrs(module):
|
|
||||||
return ipaddr(module, 'ipv6addrs', filtered_keys=['address', 'dhcp'])
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
ipv4addr_spec = dict(
|
|
||||||
ipv4addr=dict(required=True, aliases=['address']),
|
|
||||||
configure_for_dhcp=dict(type='bool', required=False, aliases=['dhcp']),
|
|
||||||
mac=dict(required=False),
|
|
||||||
add=dict(type='bool', required=False),
|
|
||||||
remove=dict(type='bool', required=False)
|
|
||||||
)
|
|
||||||
|
|
||||||
ipv6addr_spec = dict(
|
|
||||||
ipv6addr=dict(required=True, aliases=['address']),
|
|
||||||
configure_for_dhcp=dict(type='bool', required=False),
|
|
||||||
mac=dict(required=False)
|
|
||||||
)
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, ib_req=True),
|
|
||||||
view=dict(default='default', aliases=['dns_view'], ib_req=True),
|
|
||||||
|
|
||||||
ipv4addrs=dict(type='list', aliases=['ipv4'], elements='dict', options=ipv4addr_spec, transform=ipv4addrs),
|
|
||||||
ipv6addrs=dict(type='list', aliases=['ipv6'], elements='dict', options=ipv6addr_spec, transform=ipv6addrs),
|
|
||||||
configure_for_dns=dict(type='bool', default=True, required=False, aliases=['dns'], ib_req=True),
|
|
||||||
aliases=dict(type='list', elements='str'),
|
|
||||||
|
|
||||||
ttl=dict(type='int'),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_HOST_RECORD, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,574 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_member
|
|
||||||
author: "Krishna Vasudevan (@krisvasudevan)"
|
|
||||||
short_description: Configure Infoblox NIOS members
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_member
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes Infoblox NIOS servers. This module manages NIOS C(member) objects using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
host_name:
|
|
||||||
description:
|
|
||||||
- Specifies the host name of the member to either add or remove from
|
|
||||||
the NIOS instance.
|
|
||||||
required: true
|
|
||||||
aliases:
|
|
||||||
- name
|
|
||||||
type: str
|
|
||||||
vip_setting:
|
|
||||||
description:
|
|
||||||
- Configures the network settings for the grid member.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- The IPv4 Address of the Grid Member
|
|
||||||
type: str
|
|
||||||
subnet_mask:
|
|
||||||
description:
|
|
||||||
- The subnet mask for the Grid Member
|
|
||||||
type: str
|
|
||||||
gateway:
|
|
||||||
description:
|
|
||||||
- The default gateway for the Grid Member
|
|
||||||
type: str
|
|
||||||
ipv6_setting:
|
|
||||||
description:
|
|
||||||
- Configures the IPv6 settings for the grid member.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
virtual_ip:
|
|
||||||
description:
|
|
||||||
- The IPv6 Address of the Grid Member
|
|
||||||
type: str
|
|
||||||
cidr_prefix:
|
|
||||||
description:
|
|
||||||
- The IPv6 CIDR prefix for the Grid Member
|
|
||||||
type: int
|
|
||||||
gateway:
|
|
||||||
description:
|
|
||||||
- The gateway address for the Grid Member
|
|
||||||
type: str
|
|
||||||
config_addr_type:
|
|
||||||
description:
|
|
||||||
- Address configuration type (IPV4/IPV6/BOTH)
|
|
||||||
default: IPV4
|
|
||||||
type: str
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- A descriptive comment of the Grid member.
|
|
||||||
type: str
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Extensible attributes associated with the object.
|
|
||||||
type: dict
|
|
||||||
enable_ha:
|
|
||||||
description:
|
|
||||||
- If set to True, the member has two physical nodes (HA pair).
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
router_id:
|
|
||||||
description:
|
|
||||||
- Virtual router identifier. Provide this ID if "ha_enabled" is set to "true". This is a unique VRID number (from 1 to 255) for the local subnet.
|
|
||||||
type: int
|
|
||||||
lan2_enabled:
|
|
||||||
description:
|
|
||||||
- When set to "true", the LAN2 port is enabled as an independent port or as a port for failover purposes.
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
lan2_port_setting:
|
|
||||||
description:
|
|
||||||
- Settings for the Grid member LAN2 port if 'lan2_enabled' is set to "true".
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
enabled:
|
|
||||||
description:
|
|
||||||
- If set to True, then it has its own IP settings.
|
|
||||||
type: bool
|
|
||||||
network_setting:
|
|
||||||
description:
|
|
||||||
- If the 'enable' field is set to True, this defines IPv4 network settings for LAN2.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- The IPv4 Address of LAN2
|
|
||||||
type: str
|
|
||||||
subnet_mask:
|
|
||||||
description:
|
|
||||||
- The subnet mask of LAN2
|
|
||||||
type: str
|
|
||||||
gateway:
|
|
||||||
description:
|
|
||||||
- The default gateway of LAN2
|
|
||||||
type: str
|
|
||||||
v6_network_setting:
|
|
||||||
description:
|
|
||||||
- If the 'enable' field is set to True, this defines IPv6 network settings for LAN2.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
virtual_ip:
|
|
||||||
description:
|
|
||||||
- The IPv6 Address of LAN2
|
|
||||||
type: str
|
|
||||||
cidr_prefix:
|
|
||||||
description:
|
|
||||||
- The IPv6 CIDR prefix of LAN2
|
|
||||||
type: int
|
|
||||||
gateway:
|
|
||||||
description:
|
|
||||||
- The gateway address of LAN2
|
|
||||||
type: str
|
|
||||||
platform:
|
|
||||||
description:
|
|
||||||
- Configures the Hardware Platform.
|
|
||||||
default: INFOBLOX
|
|
||||||
type: str
|
|
||||||
node_info:
|
|
||||||
description:
|
|
||||||
- Configures the node information list with detailed status report on the operations of the Grid Member.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
lan2_physical_setting:
|
|
||||||
description:
|
|
||||||
- Physical port settings for the LAN2 interface.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
auto_port_setting_enabled:
|
|
||||||
description:
|
|
||||||
- Enable or disalbe the auto port setting.
|
|
||||||
type: bool
|
|
||||||
duplex:
|
|
||||||
description:
|
|
||||||
- The port duplex; if speed is 1000, duplex must be FULL.
|
|
||||||
type: str
|
|
||||||
speed:
|
|
||||||
description:
|
|
||||||
- The port speed; if speed is 1000, duplex is FULL.
|
|
||||||
type: str
|
|
||||||
lan_ha_port_setting:
|
|
||||||
description:
|
|
||||||
- LAN/HA port settings for the node.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
ha_ip_address:
|
|
||||||
description:
|
|
||||||
- HA IP address.
|
|
||||||
type: str
|
|
||||||
ha_port_setting:
|
|
||||||
description:
|
|
||||||
- Physical port settings for the HA interface.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
auto_port_setting_enabled:
|
|
||||||
description:
|
|
||||||
- Enable or disalbe the auto port setting.
|
|
||||||
type: bool
|
|
||||||
duplex:
|
|
||||||
description:
|
|
||||||
- The port duplex; if speed is 1000, duplex must be FULL.
|
|
||||||
type: str
|
|
||||||
speed:
|
|
||||||
description:
|
|
||||||
- The port speed; if speed is 1000, duplex is FULL.
|
|
||||||
type: str
|
|
||||||
lan_port_setting:
|
|
||||||
description:
|
|
||||||
- Physical port settings for the LAN interface.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
auto_port_setting_enabled:
|
|
||||||
description:
|
|
||||||
- Enable or disalbe the auto port setting.
|
|
||||||
type: bool
|
|
||||||
duplex:
|
|
||||||
description:
|
|
||||||
- The port duplex; if speed is 1000, duplex must be FULL.
|
|
||||||
type: str
|
|
||||||
speed:
|
|
||||||
description:
|
|
||||||
- The port speed; if speed is 1000, duplex is FULL.
|
|
||||||
type: str
|
|
||||||
mgmt_ipv6addr:
|
|
||||||
description:
|
|
||||||
- Public IPv6 address for the LAN1 interface.
|
|
||||||
type: str
|
|
||||||
mgmt_lan:
|
|
||||||
description:
|
|
||||||
- Public IPv4 address for the LAN1 interface.
|
|
||||||
type: str
|
|
||||||
mgmt_network_setting:
|
|
||||||
description:
|
|
||||||
- Network settings for the MGMT port of the node.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- The IPv4 Address of MGMT
|
|
||||||
type: str
|
|
||||||
subnet_mask:
|
|
||||||
description:
|
|
||||||
- The subnet mask of MGMT
|
|
||||||
type: str
|
|
||||||
gateway:
|
|
||||||
description:
|
|
||||||
- The default gateway of MGMT
|
|
||||||
type: str
|
|
||||||
v6_mgmt_network_setting:
|
|
||||||
description:
|
|
||||||
- The network settings for the IPv6 MGMT port of the node.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
virtual_ip:
|
|
||||||
description:
|
|
||||||
- The IPv6 Address of MGMT
|
|
||||||
type: str
|
|
||||||
cidr_prefix:
|
|
||||||
description:
|
|
||||||
- The IPv6 CIDR prefix of MGMT
|
|
||||||
type: int
|
|
||||||
gateway:
|
|
||||||
description:
|
|
||||||
- The gateway address of MGMT
|
|
||||||
type: str
|
|
||||||
mgmt_port_setting:
|
|
||||||
description:
|
|
||||||
- Settings for the member MGMT port.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
enabled:
|
|
||||||
description:
|
|
||||||
- Determines if MGMT port settings should be enabled.
|
|
||||||
type: bool
|
|
||||||
security_access_enabled:
|
|
||||||
description:
|
|
||||||
- Determines if security access on the MGMT port is enabled or not.
|
|
||||||
type: bool
|
|
||||||
vpn_enabled:
|
|
||||||
description:
|
|
||||||
- Determines if VPN on the MGMT port is enabled or not.
|
|
||||||
type: bool
|
|
||||||
upgrade_group:
|
|
||||||
description:
|
|
||||||
- The name of the upgrade group to which this Grid member belongs.
|
|
||||||
default: Default
|
|
||||||
type: str
|
|
||||||
use_syslog_proxy_setting:
|
|
||||||
description:
|
|
||||||
- Use flag for external_syslog_server_enable , syslog_servers, syslog_proxy_setting, syslog_size
|
|
||||||
type: bool
|
|
||||||
external_syslog_server_enable:
|
|
||||||
description:
|
|
||||||
- Determines if external syslog servers should be enabled
|
|
||||||
type: bool
|
|
||||||
syslog_servers:
|
|
||||||
description:
|
|
||||||
- The list of external syslog servers.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- The server address.
|
|
||||||
type: str
|
|
||||||
category_list:
|
|
||||||
description:
|
|
||||||
- The list of all syslog logging categories.
|
|
||||||
type: list
|
|
||||||
elements: str
|
|
||||||
connection_type:
|
|
||||||
description:
|
|
||||||
- The connection type for communicating with this server.(STCP/TCP?UDP)
|
|
||||||
default: UDP
|
|
||||||
type: str
|
|
||||||
local_interface:
|
|
||||||
description:
|
|
||||||
- The local interface through which the appliance sends syslog messages to the syslog server.(ANY/LAN/MGMT)
|
|
||||||
default: ANY
|
|
||||||
type: str
|
|
||||||
message_node_id:
|
|
||||||
description:
|
|
||||||
- Identify the node in the syslog message. (HOSTNAME/IP_HOSTNAME/LAN/MGMT)
|
|
||||||
default: LAN
|
|
||||||
type: str
|
|
||||||
message_source:
|
|
||||||
description:
|
|
||||||
- The source of syslog messages to be sent to the external syslog server.
|
|
||||||
default: ANY
|
|
||||||
type: str
|
|
||||||
only_category_list:
|
|
||||||
description:
|
|
||||||
- The list of selected syslog logging categories. The appliance forwards syslog messages that belong to the selected categories.
|
|
||||||
type: bool
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The port this server listens on.
|
|
||||||
default: 514
|
|
||||||
type: int
|
|
||||||
severity:
|
|
||||||
description:
|
|
||||||
- The severity filter. The appliance sends log messages of the specified severity and above to the external syslog server.
|
|
||||||
default: DEBUG
|
|
||||||
type: str
|
|
||||||
pre_provisioning:
|
|
||||||
description:
|
|
||||||
- Pre-provisioning information.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
hardware_info:
|
|
||||||
description:
|
|
||||||
- An array of structures that describe the hardware being pre-provisioned.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
hwmodel:
|
|
||||||
description:
|
|
||||||
- Hardware model
|
|
||||||
type: str
|
|
||||||
hwtype:
|
|
||||||
description:
|
|
||||||
- Hardware type.
|
|
||||||
type: str
|
|
||||||
licenses:
|
|
||||||
description:
|
|
||||||
- An array of license types.
|
|
||||||
type: list
|
|
||||||
elements: str
|
|
||||||
create_token:
|
|
||||||
description:
|
|
||||||
- Flag for initiating a create token request for pre-provisioned members.
|
|
||||||
type: bool
|
|
||||||
default: False
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Add a member to the grid with IPv4 address
|
|
||||||
community.general.nios_member:
|
|
||||||
host_name: member01.localdomain
|
|
||||||
vip_setting:
|
|
||||||
- address: 192.168.1.100
|
|
||||||
subnet_mask: 255.255.255.0
|
|
||||||
gateway: 192.168.1.1
|
|
||||||
config_addr_type: IPV4
|
|
||||||
platform: VNIOS
|
|
||||||
comment: "Created by Ansible"
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Add a HA member to the grid
|
|
||||||
community.general.nios_member:
|
|
||||||
host_name: memberha.localdomain
|
|
||||||
vip_setting:
|
|
||||||
- address: 192.168.1.100
|
|
||||||
subnet_mask: 255.255.255.0
|
|
||||||
gateway: 192.168.1.1
|
|
||||||
config_addr_type: IPV4
|
|
||||||
platform: VNIOS
|
|
||||||
enable_ha: true
|
|
||||||
router_id: 150
|
|
||||||
node_info:
|
|
||||||
- lan_ha_port_setting:
|
|
||||||
- ha_ip_address: 192.168.1.70
|
|
||||||
mgmt_lan: 192.168.1.80
|
|
||||||
- lan_ha_port_setting:
|
|
||||||
- ha_ip_address: 192.168.1.71
|
|
||||||
mgmt_lan: 192.168.1.81
|
|
||||||
comment: "Created by Ansible"
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Update the member with pre-provisioning details specified
|
|
||||||
community.general.nios_member:
|
|
||||||
name: member01.localdomain
|
|
||||||
pre_provisioning:
|
|
||||||
- hardware_info:
|
|
||||||
- hwmodel: IB-VM-820
|
|
||||||
hwtype: IB-VNIOS
|
|
||||||
licenses:
|
|
||||||
- dns
|
|
||||||
- dhcp
|
|
||||||
- enterprise
|
|
||||||
- vnios
|
|
||||||
comment: "Updated by Ansible"
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove the member
|
|
||||||
community.general.nios_member:
|
|
||||||
name: member01.localdomain
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_MEMBER
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
ipv4_spec = dict(
|
|
||||||
address=dict(),
|
|
||||||
subnet_mask=dict(),
|
|
||||||
gateway=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
ipv6_spec = dict(
|
|
||||||
virtual_ip=dict(),
|
|
||||||
cidr_prefix=dict(type='int'),
|
|
||||||
gateway=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
port_spec = dict(
|
|
||||||
auto_port_setting_enabled=dict(type='bool'),
|
|
||||||
duplex=dict(),
|
|
||||||
speed=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
lan2_port_spec = dict(
|
|
||||||
enabled=dict(type='bool'),
|
|
||||||
network_setting=dict(type='list', elements='dict', options=ipv4_spec),
|
|
||||||
v6_network_setting=dict(type='list', elements='dict', options=ipv6_spec),
|
|
||||||
)
|
|
||||||
|
|
||||||
ha_port_spec = dict(
|
|
||||||
ha_ip_address=dict(),
|
|
||||||
ha_port_setting=dict(type='list', elements='dict', options=port_spec),
|
|
||||||
lan_port_setting=dict(type='list', elements='dict', options=port_spec),
|
|
||||||
mgmt_lan=dict(),
|
|
||||||
mgmt_ipv6addr=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
node_spec = dict(
|
|
||||||
lan2_physical_setting=dict(type='list', elements='dict', options=port_spec),
|
|
||||||
lan_ha_port_setting=dict(type='list', elements='dict', options=ha_port_spec),
|
|
||||||
mgmt_network_setting=dict(type='list', elements='dict', options=ipv4_spec),
|
|
||||||
v6_mgmt_network_setting=dict(type='list', elements='dict', options=ipv6_spec),
|
|
||||||
)
|
|
||||||
|
|
||||||
mgmt_port_spec = dict(
|
|
||||||
enabled=dict(type='bool'),
|
|
||||||
security_access_enabled=dict(type='bool'),
|
|
||||||
vpn_enabled=dict(type='bool'),
|
|
||||||
)
|
|
||||||
|
|
||||||
syslog_spec = dict(
|
|
||||||
address=dict(),
|
|
||||||
category_list=dict(type='list', elements='str'),
|
|
||||||
connection_type=dict(default='UDP'),
|
|
||||||
local_interface=dict(default='ANY'),
|
|
||||||
message_node_id=dict(default='LAN'),
|
|
||||||
message_source=dict(default='ANY'),
|
|
||||||
only_category_list=dict(type='bool'),
|
|
||||||
port=dict(type='int', default=514),
|
|
||||||
severity=dict(default='DEBUG'),
|
|
||||||
)
|
|
||||||
|
|
||||||
hw_spec = dict(
|
|
||||||
hwmodel=dict(),
|
|
||||||
hwtype=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
pre_prov_spec = dict(
|
|
||||||
hardware_info=dict(type='list', elements='dict', options=hw_spec),
|
|
||||||
licenses=dict(type='list', elements='str'),
|
|
||||||
)
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
host_name=dict(required=True, aliases=['name'], ib_req=True),
|
|
||||||
vip_setting=dict(type='list', elements='dict', options=ipv4_spec),
|
|
||||||
ipv6_setting=dict(type='list', elements='dict', options=ipv6_spec),
|
|
||||||
config_addr_type=dict(default='IPV4'),
|
|
||||||
comment=dict(),
|
|
||||||
enable_ha=dict(type='bool', default=False),
|
|
||||||
router_id=dict(type='int'),
|
|
||||||
lan2_enabled=dict(type='bool', default=False),
|
|
||||||
lan2_port_setting=dict(type='list', elements='dict', options=lan2_port_spec),
|
|
||||||
platform=dict(default='INFOBLOX'),
|
|
||||||
node_info=dict(type='list', elements='dict', options=node_spec),
|
|
||||||
mgmt_port_setting=dict(type='list', elements='dict', options=mgmt_port_spec),
|
|
||||||
upgrade_group=dict(default='Default'),
|
|
||||||
use_syslog_proxy_setting=dict(type='bool'),
|
|
||||||
external_syslog_server_enable=dict(type='bool'),
|
|
||||||
syslog_servers=dict(type='list', elements='dict', options=syslog_spec),
|
|
||||||
pre_provisioning=dict(type='list', elements='dict', options=pre_prov_spec),
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
create_token=dict(type='bool', default=False),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_MEMBER, ib_spec)
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,163 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_mx_record
|
|
||||||
author: "Blair Rampling (@brampling)"
|
|
||||||
short_description: Configure Infoblox NIOS MX records
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_mx_record
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of MX record objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(record:mx) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Sets the DNS view to associate this a record with. The DNS
|
|
||||||
view must already be configured on the system
|
|
||||||
default: default
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
mail_exchanger:
|
|
||||||
description:
|
|
||||||
- Configures the mail exchanger FQDN for this MX record.
|
|
||||||
aliases:
|
|
||||||
- mx
|
|
||||||
type: str
|
|
||||||
preference:
|
|
||||||
description:
|
|
||||||
- Configures the preference (0-65535) for this MX record.
|
|
||||||
type: int
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Configures the TTL to be associated with this host record
|
|
||||||
type: int
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure an MX record
|
|
||||||
community.general.nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Add a comment to an existing MX record
|
|
||||||
community.general.nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Remove an MX record from the system
|
|
||||||
community.general.nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_MX_RECORD
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, ib_req=True),
|
|
||||||
view=dict(default='default', aliases=['dns_view'], ib_req=True),
|
|
||||||
|
|
||||||
mail_exchanger=dict(aliases=['mx'], ib_req=True),
|
|
||||||
preference=dict(type='int', ib_req=True),
|
|
||||||
|
|
||||||
ttl=dict(type='int'),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_MX_RECORD, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,200 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_naptr_record
|
|
||||||
author: "Blair Rampling (@brampling)"
|
|
||||||
short_description: Configure Infoblox NIOS NAPTR records
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_naptr_record
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of NAPTR record objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(record:naptr) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox_client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Sets the DNS view to associate this a record with. The DNS
|
|
||||||
view must already be configured on the system
|
|
||||||
default: default
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
order:
|
|
||||||
description:
|
|
||||||
- Configures the order (0-65535) for this NAPTR record. This parameter
|
|
||||||
specifies the order in which the NAPTR rules are applied when
|
|
||||||
multiple rules are present.
|
|
||||||
type: int
|
|
||||||
preference:
|
|
||||||
description:
|
|
||||||
- Configures the preference (0-65535) for this NAPTR record. The
|
|
||||||
preference field determines the order NAPTR records are processed
|
|
||||||
when multiple records with the same order parameter are present.
|
|
||||||
type: int
|
|
||||||
replacement:
|
|
||||||
description:
|
|
||||||
- Configures the replacement field for this NAPTR record.
|
|
||||||
For nonterminal NAPTR records, this field specifies the
|
|
||||||
next domain name to look up.
|
|
||||||
type: str
|
|
||||||
services:
|
|
||||||
description:
|
|
||||||
- Configures the services field (128 characters maximum) for this
|
|
||||||
NAPTR record. The services field contains protocol and service
|
|
||||||
identifiers, such as "http+E2U" or "SIPS+D2T".
|
|
||||||
required: false
|
|
||||||
type: str
|
|
||||||
flags:
|
|
||||||
description:
|
|
||||||
- Configures the flags field for this NAPTR record. These control the
|
|
||||||
interpretation of the fields for an NAPTR record object. Supported
|
|
||||||
values for the flags field are "U", "S", "P" and "A".
|
|
||||||
required: false
|
|
||||||
type: str
|
|
||||||
regexp:
|
|
||||||
description:
|
|
||||||
- Configures the regexp field for this NAPTR record. This is the
|
|
||||||
regular expression-based rewriting rule of the NAPTR record. This
|
|
||||||
should be a POSIX compliant regular expression, including the
|
|
||||||
substitution rule and flags. Refer to RFC 2915 for the field syntax
|
|
||||||
details.
|
|
||||||
required: false
|
|
||||||
type: str
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Configures the TTL to be associated with this NAPTR record
|
|
||||||
type: int
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure a NAPTR record
|
|
||||||
community.general.nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Add a comment to an existing NAPTR record
|
|
||||||
community.general.nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Remove a NAPTR record from the system
|
|
||||||
community.general.nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, ib_req=True),
|
|
||||||
view=dict(default='default', aliases=['dns_view'], ib_req=True),
|
|
||||||
|
|
||||||
order=dict(type='int', ib_req=True),
|
|
||||||
preference=dict(type='int', ib_req=True),
|
|
||||||
replacement=dict(ib_req=True),
|
|
||||||
services=dict(),
|
|
||||||
flags=dict(),
|
|
||||||
regexp=dict(),
|
|
||||||
|
|
||||||
ttl=dict(type='int'),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run('record:naptr', ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,334 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_network
|
|
||||||
author: "Peter Sprygada (@privateip)"
|
|
||||||
short_description: Configure Infoblox NIOS network object
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_network
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of network objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(network) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
- Supports both IPV4 and IPV6 internet protocols
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- Specifies the network to add or remove from the system. The value
|
|
||||||
should use CIDR notation.
|
|
||||||
required: true
|
|
||||||
aliases:
|
|
||||||
- name
|
|
||||||
- cidr
|
|
||||||
type: str
|
|
||||||
network_view:
|
|
||||||
description:
|
|
||||||
- Configures the name of the network view to associate with this
|
|
||||||
configured instance.
|
|
||||||
default: default
|
|
||||||
type: str
|
|
||||||
options:
|
|
||||||
description:
|
|
||||||
- Configures the set of DHCP options to be included as part of
|
|
||||||
the configured network instance. This argument accepts a list
|
|
||||||
of values (see suboptions). When configuring suboptions at
|
|
||||||
least one of C(name) or C(num) must be specified.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the DHCP option to configure. The standard options are
|
|
||||||
C(router), C(router-templates), C(domain-name-servers), C(domain-name),
|
|
||||||
C(broadcast-address), C(broadcast-address-offset), C(dhcp-lease-time),
|
|
||||||
and C(dhcp6.name-servers).
|
|
||||||
type: str
|
|
||||||
num:
|
|
||||||
description:
|
|
||||||
- The number of the DHCP option to configure
|
|
||||||
type: int
|
|
||||||
value:
|
|
||||||
description:
|
|
||||||
- The value of the DHCP option specified by C(name)
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
use_option:
|
|
||||||
description:
|
|
||||||
- Only applies to a subset of options (see NIOS API documentation)
|
|
||||||
type: bool
|
|
||||||
default: 'yes'
|
|
||||||
vendor_class:
|
|
||||||
description:
|
|
||||||
- The name of the space this DHCP option is associated to
|
|
||||||
default: DHCP
|
|
||||||
type: str
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
container:
|
|
||||||
description:
|
|
||||||
- If set to true it'll create the network container to be added or removed
|
|
||||||
from the system.
|
|
||||||
type: bool
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure a network ipv4
|
|
||||||
community.general.nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Configure a network ipv6
|
|
||||||
community.general.nios_network:
|
|
||||||
network: fe80::/64
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Set dhcp options for a network ipv4
|
|
||||||
community.general.nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
comment: this is a test comment
|
|
||||||
options:
|
|
||||||
- name: domain-name
|
|
||||||
value: ansible.com
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove a network ipv4
|
|
||||||
community.general.nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Configure a ipv4 network container
|
|
||||||
community.general.nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
container: true
|
|
||||||
comment: test network container
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Configure a ipv6 network container
|
|
||||||
community.general.nios_network:
|
|
||||||
network: fe80::/64
|
|
||||||
container: true
|
|
||||||
comment: test network container
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove a ipv4 network container
|
|
||||||
community.general.nios_network:
|
|
||||||
networkr: 192.168.10.0/24
|
|
||||||
container: true
|
|
||||||
comment: test network container
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
import socket
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible.module_utils.six import iteritems
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_IPV4_NETWORK, NIOS_IPV6_NETWORK
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_IPV4_NETWORK_CONTAINER, NIOS_IPV6_NETWORK_CONTAINER
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
# The following function validate_ip_address has been taken from
|
|
||||||
# https://github.com/ansible-collections/ansible.netcommon/blob/20124ecbb420daa0f5bb9cdaa865a952657aa0e7/plugins/module_utils/network/common/utils.py#L496
|
|
||||||
# The code there is licensed under BSD 2-clause.
|
|
||||||
# Copyright (c) 2016 Red Hat Inc.
|
|
||||||
def validate_ip_address(address):
|
|
||||||
try:
|
|
||||||
socket.inet_aton(address)
|
|
||||||
except socket.error:
|
|
||||||
return False
|
|
||||||
return address.count(".") == 3
|
|
||||||
|
|
||||||
|
|
||||||
# The following function validate_ip_v6_address has been taken from
|
|
||||||
# https://github.com/ansible-collections/ansible.netcommon/blob/20124ecbb420daa0f5bb9cdaa865a952657aa0e7/plugins/module_utils/network/common/utils.py#L504
|
|
||||||
# The code there is licensed under BSD 2-clause.
|
|
||||||
# Copyright (c) 2016 Red Hat Inc.
|
|
||||||
def validate_ip_v6_address(address):
|
|
||||||
try:
|
|
||||||
socket.inet_pton(socket.AF_INET6, address)
|
|
||||||
except socket.error:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def options(module):
|
|
||||||
''' Transforms the module argument into a valid WAPI struct
|
|
||||||
This function will transform the options argument into a structure that
|
|
||||||
is a valid WAPI structure in the format of:
|
|
||||||
{
|
|
||||||
name: <value>,
|
|
||||||
num: <value>,
|
|
||||||
value: <value>,
|
|
||||||
use_option: <value>,
|
|
||||||
vendor_class: <value>
|
|
||||||
}
|
|
||||||
It will remove any options that are set to None since WAPI will error on
|
|
||||||
that condition. It will also verify that either `name` or `num` is
|
|
||||||
set in the structure but does not validate the values are equal.
|
|
||||||
The remainder of the value validation is performed by WAPI
|
|
||||||
'''
|
|
||||||
options = list()
|
|
||||||
for item in module.params['options']:
|
|
||||||
opt = dict([(k, v) for k, v in iteritems(item) if v is not None])
|
|
||||||
if 'name' not in opt and 'num' not in opt:
|
|
||||||
module.fail_json(msg='one of `name` or `num` is required for option value')
|
|
||||||
options.append(opt)
|
|
||||||
return options
|
|
||||||
|
|
||||||
|
|
||||||
def check_ip_addr_type(obj_filter, ib_spec):
|
|
||||||
'''This function will check if the argument ip is type v4/v6 and return appropriate infoblox
|
|
||||||
network/networkcontainer type
|
|
||||||
'''
|
|
||||||
|
|
||||||
ip = obj_filter['network']
|
|
||||||
if 'container' in obj_filter and obj_filter['container']:
|
|
||||||
check_ip = ip.split('/')
|
|
||||||
del ib_spec['container'] # removing the container key from post arguments
|
|
||||||
del ib_spec['options'] # removing option argument as for network container it's not supported
|
|
||||||
if validate_ip_address(check_ip[0]):
|
|
||||||
return NIOS_IPV4_NETWORK_CONTAINER, ib_spec
|
|
||||||
elif validate_ip_v6_address(check_ip[0]):
|
|
||||||
return NIOS_IPV6_NETWORK_CONTAINER, ib_spec
|
|
||||||
else:
|
|
||||||
check_ip = ip.split('/')
|
|
||||||
del ib_spec['container'] # removing the container key from post arguments
|
|
||||||
if validate_ip_address(check_ip[0]):
|
|
||||||
return NIOS_IPV4_NETWORK, ib_spec
|
|
||||||
elif validate_ip_v6_address(check_ip[0]):
|
|
||||||
return NIOS_IPV6_NETWORK, ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def check_vendor_specific_dhcp_option(module, ib_spec):
|
|
||||||
'''This function will check if the argument dhcp option belongs to vendor-specific and if yes then will remove
|
|
||||||
use_options flag which is not supported with vendor-specific dhcp options.
|
|
||||||
'''
|
|
||||||
for key, value in iteritems(ib_spec):
|
|
||||||
if isinstance(module.params[key], list):
|
|
||||||
temp_dict = module.params[key][0]
|
|
||||||
if 'num' in temp_dict:
|
|
||||||
if temp_dict['num'] in (43, 124, 125):
|
|
||||||
del module.params[key][0]['use_option']
|
|
||||||
return ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
option_spec = dict(
|
|
||||||
# one of name or num is required; enforced by the function options()
|
|
||||||
name=dict(),
|
|
||||||
num=dict(type='int'),
|
|
||||||
|
|
||||||
value=dict(required=True),
|
|
||||||
|
|
||||||
use_option=dict(type='bool', default=True),
|
|
||||||
vendor_class=dict(default='DHCP')
|
|
||||||
)
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
network=dict(required=True, aliases=['name', 'cidr'], ib_req=True),
|
|
||||||
network_view=dict(default='default', ib_req=True),
|
|
||||||
|
|
||||||
options=dict(type='list', elements='dict', options=option_spec, transform=options),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
container=dict(type='bool', ib_req=True)
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
# to get the argument ipaddr
|
|
||||||
obj_filter = dict([(k, module.params[k]) for k, v in iteritems(ib_spec) if v.get('ib_req')])
|
|
||||||
network_type, ib_spec = check_ip_addr_type(obj_filter, ib_spec)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
# to check for vendor specific dhcp option
|
|
||||||
ib_spec = check_vendor_specific_dhcp_option(module, ib_spec)
|
|
||||||
|
|
||||||
result = wapi.run(network_type, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,138 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_network_view
|
|
||||||
author: "Peter Sprygada (@privateip)"
|
|
||||||
short_description: Configure Infoblox NIOS network views
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_network_view
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of network view objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(networkview) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
- Updates instances of network view object from Infoblox NIOS servers.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system. User can also update the hostname as it is possible
|
|
||||||
to pass a dict containing I(new_name), I(old_name). See examples.
|
|
||||||
required: true
|
|
||||||
aliases:
|
|
||||||
- network_view
|
|
||||||
type: str
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure a new network view
|
|
||||||
community.general.nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Update the comment for network view
|
|
||||||
community.general.nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
comment: this is an example comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove the network view
|
|
||||||
community.general.nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Update a existing network view
|
|
||||||
community.general.nios_network_view:
|
|
||||||
name: {new_name: ansible-new, old_name: ansible}
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_NETWORK_VIEW
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, aliases=['network_view'], ib_req=True),
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_NETWORK_VIEW, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,446 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_nsgroup
|
|
||||||
short_description: Configure InfoBlox DNS Nameserver Groups
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_nsgroup
|
|
||||||
removed_in: 5.0.0
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
author:
|
|
||||||
- Erich Birngruber (@ebirn)
|
|
||||||
- Sumit Jaiswal (@sjaiswal)
|
|
||||||
description:
|
|
||||||
- Adds and/or removes nameserver groups form Infoblox NIOS servers.
|
|
||||||
This module manages NIOS C(nsgroup) objects using the Infoblox. WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox_client
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the name of the NIOS nameserver group to be managed.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
grid_primary:
|
|
||||||
description:
|
|
||||||
- This host is to be used as primary server in this nameserver group. It must be a grid member.
|
|
||||||
This option is required when setting I(use_external_primaries) to C(false).
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Provide the name of the grid member to identify the host.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
enable_preferred_primaries:
|
|
||||||
description:
|
|
||||||
- This flag represents whether the preferred_primaries field values of this member are used (see Infoblox WAPI docs).
|
|
||||||
default: false
|
|
||||||
type: bool
|
|
||||||
grid_replicate:
|
|
||||||
description:
|
|
||||||
- Use DNS zone transfers if set to C(True) or ID Grid Replication if set to C(False).
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
lead:
|
|
||||||
description:
|
|
||||||
- This flag controls if the grid lead secondary nameserver performs zone transfers to non lead secondaries.
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
stealth:
|
|
||||||
description:
|
|
||||||
- Configure the external nameserver as stealth server (without NS record) in the zones.
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
preferred_primaries:
|
|
||||||
description:
|
|
||||||
- Provide a list of elements like in I(external_primaries) to set the precedence of preferred primary nameservers.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- Configures the IP address of the preferred primary nameserver.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Set a label for the preferred primary nameserver.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
stealth:
|
|
||||||
description:
|
|
||||||
- Configure the preferred primary nameserver as stealth server (without NS record) in the zones.
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
tsig_key_name:
|
|
||||||
description:
|
|
||||||
- Sets a label for the I(tsig_key) value.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
tsig_key_alg:
|
|
||||||
description:
|
|
||||||
- Provides the algorithm used for the I(tsig_key) in use.
|
|
||||||
choices: ['HMAC-MD5', 'HMAC-SHA256']
|
|
||||||
default: 'HMAC-MD5'
|
|
||||||
type: str
|
|
||||||
tsig_key:
|
|
||||||
description:
|
|
||||||
- Set a DNS TSIG key for the nameserver to secure zone transfers (AFXRs).
|
|
||||||
type: str
|
|
||||||
grid_secondaries:
|
|
||||||
description:
|
|
||||||
- Configures the list of grid member hosts that act as secondary nameservers.
|
|
||||||
This option is required when setting I(use_external_primaries) to C(true).
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Provide the name of the grid member to identify the host.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
enable_preferred_primaries:
|
|
||||||
description:
|
|
||||||
- This flag represents whether the preferred_primaries field values of this member are used (see Infoblox WAPI docs).
|
|
||||||
default: false
|
|
||||||
type: bool
|
|
||||||
grid_replicate:
|
|
||||||
description:
|
|
||||||
- Use DNS zone transfers if set to C(True) or ID Grid Replication if set to C(False)
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
lead:
|
|
||||||
description:
|
|
||||||
- This flag controls if the grid lead secondary nameserver performs zone transfers to non lead secondaries.
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
stealth:
|
|
||||||
description:
|
|
||||||
- Configure the external nameserver as stealth server (without NS record) in the zones.
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
preferred_primaries:
|
|
||||||
description:
|
|
||||||
- Provide a list of elements like in I(external_primaries) to set the precedence of preferred primary nameservers.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- Configures the IP address of the preferred primary nameserver.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Set a label for the preferred primary nameserver.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
stealth:
|
|
||||||
description:
|
|
||||||
- Configure the preferred primary nameserver as stealth server (without NS record) in the zones.
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
tsig_key_name:
|
|
||||||
description:
|
|
||||||
- Sets a label for the I(tsig_key) value.
|
|
||||||
type: str
|
|
||||||
required: true
|
|
||||||
tsig_key_alg:
|
|
||||||
description:
|
|
||||||
- Provides the algorithm used for the I(tsig_key) in use.
|
|
||||||
choices: ['HMAC-MD5', 'HMAC-SHA256']
|
|
||||||
default: 'HMAC-MD5'
|
|
||||||
type: str
|
|
||||||
tsig_key:
|
|
||||||
description:
|
|
||||||
- Set a DNS TSIG key for the nameserver to secure zone transfers (AFXRs).
|
|
||||||
type: str
|
|
||||||
is_grid_default:
|
|
||||||
description:
|
|
||||||
- If set to C(True) this nsgroup will become the default nameserver group for new zones.
|
|
||||||
type: bool
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
use_external_primary:
|
|
||||||
description:
|
|
||||||
- This flag controls whether the group is using an external primary nameserver.
|
|
||||||
Note that modification of this field requires passing values for I(grid_secondaries) and I(external_primaries).
|
|
||||||
type: bool
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
external_primaries:
|
|
||||||
description:
|
|
||||||
- Configures a list of external nameservers (non-members of the grid).
|
|
||||||
This option is required when setting I(use_external_primaries) to C(true).
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- Configures the IP address of the external nameserver
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Set a label for the external nameserver
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
stealth:
|
|
||||||
description:
|
|
||||||
- Configure the external nameserver as stealth server (without NS record) in the zones.
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
tsig_key_name:
|
|
||||||
description:
|
|
||||||
- Sets a label for the I(tsig_key) value
|
|
||||||
type: str
|
|
||||||
required: true
|
|
||||||
tsig_key_alg:
|
|
||||||
description:
|
|
||||||
- Provides the algorithm used for the I(tsig_key) in use.
|
|
||||||
choices: ['HMAC-MD5', 'HMAC-SHA256']
|
|
||||||
default: 'HMAC-MD5'
|
|
||||||
type: str
|
|
||||||
tsig_key:
|
|
||||||
description:
|
|
||||||
- Set a DNS TSIG key for the nameserver to secure zone transfers (AFXRs).
|
|
||||||
type: str
|
|
||||||
required: false
|
|
||||||
external_secondaries:
|
|
||||||
description:
|
|
||||||
- Allows to provide a list of external secondary nameservers, that are not members of the grid.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- Configures the IP address of the external nameserver
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Set a label for the external nameserver
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
stealth:
|
|
||||||
description:
|
|
||||||
- Configure the external nameserver as stealth server (without NS record) in the zones.
|
|
||||||
type: bool
|
|
||||||
default: false
|
|
||||||
tsig_key_name:
|
|
||||||
description:
|
|
||||||
- Sets a label for the I(tsig_key) value
|
|
||||||
type: str
|
|
||||||
required: true
|
|
||||||
tsig_key_alg:
|
|
||||||
description:
|
|
||||||
- Provides the algorithm used for the I(tsig_key) in use.
|
|
||||||
choices: ['HMAC-MD5', 'HMAC-SHA256']
|
|
||||||
default: 'HMAC-MD5'
|
|
||||||
type: str
|
|
||||||
tsig_key:
|
|
||||||
description:
|
|
||||||
- Set a DNS TSIG key for the nameserver to secure zone transfers (AFXRs).
|
|
||||||
type: str
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
required: false
|
|
||||||
type: str
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
required: false
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
choices: [present, absent]
|
|
||||||
default: present
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Create simple infoblox nameserver group
|
|
||||||
community.general.nios_nsgroup:
|
|
||||||
name: my-simple-group
|
|
||||||
comment: "this is a simple nameserver group"
|
|
||||||
grid_primary:
|
|
||||||
- name: infoblox-test.example.com
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Create infoblox nameserver group with external primaries
|
|
||||||
community.general.nios_nsgroup:
|
|
||||||
name: my-example-group
|
|
||||||
use_external_primary: true
|
|
||||||
comment: "this is my example nameserver group"
|
|
||||||
external_primaries: "{{ ext_nameservers }}"
|
|
||||||
grid_secondaries:
|
|
||||||
- name: infoblox-test.example.com
|
|
||||||
lead: True
|
|
||||||
preferred_primaries: "{{ ext_nameservers }}"
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Delete infoblox nameserver group
|
|
||||||
community.general.nios_nsgroup:
|
|
||||||
name: my-simple-group
|
|
||||||
comment: "this is a simple nameserver group"
|
|
||||||
grid_primary:
|
|
||||||
- name: infoblox-test.example.com
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_NSGROUP
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
# from infoblox documentation
|
|
||||||
# Fields List
|
|
||||||
# Field Type Req R/O Base Search
|
|
||||||
# comment String N N Y : = ~
|
|
||||||
# extattrs Extattr N N N ext
|
|
||||||
# external_primaries [struct] N N N N/A
|
|
||||||
# external_secondaries [struct] N N N N/A
|
|
||||||
# grid_primary [struct] N N N N/A
|
|
||||||
# grid_secondaries [struct] N N N N/A
|
|
||||||
# is_grid_default Bool N N N N/A
|
|
||||||
# is_multimaster Bool N Y N N/A
|
|
||||||
# name String Y N Y : = ~
|
|
||||||
# use_external_primary Bool N N N N/A
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
'''entrypoint for module execution.'''
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent']),
|
|
||||||
)
|
|
||||||
|
|
||||||
# cleanup tsig fields
|
|
||||||
def clean_tsig(ext):
|
|
||||||
if 'tsig_key' in ext and not ext['tsig_key']:
|
|
||||||
del ext['tsig_key']
|
|
||||||
if 'tsig_key' not in ext and 'tsig_key_name' in ext and not ext['tsig_key_name']:
|
|
||||||
del ext['tsig_key_name']
|
|
||||||
if 'tsig_key' not in ext and 'tsig_key_alg' in ext:
|
|
||||||
del ext['tsig_key_alg']
|
|
||||||
|
|
||||||
def clean_grid_member(member):
|
|
||||||
if member['preferred_primaries']:
|
|
||||||
for ext in member['preferred_primaries']:
|
|
||||||
clean_tsig(ext)
|
|
||||||
if member['enable_preferred_primaries'] is False:
|
|
||||||
del member['enable_preferred_primaries']
|
|
||||||
del member['preferred_primaries']
|
|
||||||
if member['lead'] is False:
|
|
||||||
del member['lead']
|
|
||||||
if member['grid_replicate'] is False:
|
|
||||||
del member['grid_replicate']
|
|
||||||
|
|
||||||
def ext_primaries_transform(module):
|
|
||||||
if module.params['external_primaries']:
|
|
||||||
for ext in module.params['external_primaries']:
|
|
||||||
clean_tsig(ext)
|
|
||||||
return module.params['external_primaries']
|
|
||||||
|
|
||||||
def ext_secondaries_transform(module):
|
|
||||||
if module.params['external_secondaries']:
|
|
||||||
for ext in module.params['external_secondaries']:
|
|
||||||
clean_tsig(ext)
|
|
||||||
return module.params['external_secondaries']
|
|
||||||
|
|
||||||
def grid_primary_preferred_transform(module):
|
|
||||||
for member in module.params['grid_primary']:
|
|
||||||
clean_grid_member(member)
|
|
||||||
return module.params['grid_primary']
|
|
||||||
|
|
||||||
def grid_secondaries_preferred_primaries_transform(module):
|
|
||||||
for member in module.params['grid_secondaries']:
|
|
||||||
clean_grid_member(member)
|
|
||||||
return module.params['grid_secondaries']
|
|
||||||
|
|
||||||
extserver_spec = dict(
|
|
||||||
address=dict(required=True),
|
|
||||||
name=dict(required=True),
|
|
||||||
stealth=dict(type='bool', default=False),
|
|
||||||
tsig_key=dict(no_log=True),
|
|
||||||
tsig_key_alg=dict(choices=['HMAC-MD5', 'HMAC-SHA256'], default='HMAC-MD5'),
|
|
||||||
tsig_key_name=dict(required=True)
|
|
||||||
)
|
|
||||||
|
|
||||||
memberserver_spec = dict(
|
|
||||||
name=dict(required=True, ),
|
|
||||||
enable_preferred_primaries=dict(type='bool', default=False),
|
|
||||||
grid_replicate=dict(type='bool', default=False),
|
|
||||||
lead=dict(type='bool', default=False),
|
|
||||||
preferred_primaries=dict(type='list', elements='dict', options=extserver_spec, default=[]),
|
|
||||||
stealth=dict(type='bool', default=False),
|
|
||||||
)
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, ib_req=True),
|
|
||||||
grid_primary=dict(type='list', elements='dict', options=memberserver_spec,
|
|
||||||
transform=grid_primary_preferred_transform),
|
|
||||||
grid_secondaries=dict(type='list', elements='dict', options=memberserver_spec,
|
|
||||||
transform=grid_secondaries_preferred_primaries_transform),
|
|
||||||
external_primaries=dict(type='list', elements='dict', options=extserver_spec, transform=ext_primaries_transform),
|
|
||||||
external_secondaries=dict(type='list', elements='dict', options=extserver_spec,
|
|
||||||
transform=ext_secondaries_transform),
|
|
||||||
is_grid_default=dict(type='bool', default=False),
|
|
||||||
use_external_primary=dict(type='bool', default=False),
|
|
||||||
extattrs=dict(),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_NSGROUP, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,168 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_ptr_record
|
|
||||||
author: "Trebuchet Clement (@clementtrebuchet)"
|
|
||||||
short_description: Configure Infoblox NIOS PTR records
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_ptr_record
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of PTR record objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(record:ptr) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox_client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the DNS PTR record in FQDN format to add or remove from
|
|
||||||
the system.
|
|
||||||
The field is required only for an PTR object in Forward Mapping Zone.
|
|
||||||
required: false
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Sets the DNS view to associate this a record with. The DNS
|
|
||||||
view must already be configured on the system
|
|
||||||
required: false
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
ipv4addr:
|
|
||||||
description:
|
|
||||||
- The IPv4 Address of the record. Mutually exclusive with the ipv6addr.
|
|
||||||
aliases:
|
|
||||||
- ipv4
|
|
||||||
type: str
|
|
||||||
ipv6addr:
|
|
||||||
description:
|
|
||||||
- The IPv6 Address of the record. Mutually exclusive with the ipv4addr.
|
|
||||||
aliases:
|
|
||||||
- ipv6
|
|
||||||
type: str
|
|
||||||
ptrdname:
|
|
||||||
description:
|
|
||||||
- The domain name of the DNS PTR record in FQDN format.
|
|
||||||
type: str
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Time To Live (TTL) value for the record.
|
|
||||||
A 32-bit unsigned integer that represents the duration, in seconds, that the record is valid (cached).
|
|
||||||
Zero indicates that the record should not be cached.
|
|
||||||
type: int
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance. Maximum 256 characters.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Create a PTR Record
|
|
||||||
community.general.nios_ptr_record:
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
ptrdname: host.ansible.com
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Delete a PTR Record
|
|
||||||
community.general.nios_ptr_record:
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
ptrdname: host.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_PTR_RECORD
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
# Module entry point
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=False),
|
|
||||||
view=dict(aliases=['dns_view'], ib_req=True),
|
|
||||||
ipv4addr=dict(aliases=['ipv4'], ib_req=True),
|
|
||||||
ipv6addr=dict(aliases=['ipv6'], ib_req=True),
|
|
||||||
ptrdname=dict(ib_req=True),
|
|
||||||
|
|
||||||
ttl=dict(type='int'),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
mutually_exclusive = [('ipv4addr', 'ipv6addr')]
|
|
||||||
required_one_of = [
|
|
||||||
['ipv4addr', 'ipv6addr']
|
|
||||||
]
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
mutually_exclusive=mutually_exclusive,
|
|
||||||
supports_check_mode=True,
|
|
||||||
required_one_of=required_one_of)
|
|
||||||
|
|
||||||
if module.params['ipv4addr']:
|
|
||||||
del ib_spec['ipv6addr']
|
|
||||||
elif module.params['ipv6addr']:
|
|
||||||
del ib_spec['ipv4addr']
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_PTR_RECORD, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,177 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_srv_record
|
|
||||||
author: "Blair Rampling (@brampling)"
|
|
||||||
short_description: Configure Infoblox NIOS SRV records
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_srv_record
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of SRV record objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(record:srv) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Sets the DNS view to associate this a record with. The DNS
|
|
||||||
view must already be configured on the system
|
|
||||||
default: default
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- Configures the port (0-65535) of this SRV record.
|
|
||||||
type: int
|
|
||||||
priority:
|
|
||||||
description:
|
|
||||||
- Configures the priority (0-65535) for this SRV record.
|
|
||||||
type: int
|
|
||||||
target:
|
|
||||||
description:
|
|
||||||
- Configures the target FQDN for this SRV record.
|
|
||||||
type: str
|
|
||||||
weight:
|
|
||||||
description:
|
|
||||||
- Configures the weight (0-65535) for this SRV record.
|
|
||||||
type: int
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Configures the TTL to be associated with this host record
|
|
||||||
type: int
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure an SRV record
|
|
||||||
community.general.nios_srv_record:
|
|
||||||
name: _sip._tcp.service.ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Add a comment to an existing SRV record
|
|
||||||
community.general.nios_srv_record:
|
|
||||||
name: _sip._tcp.service.ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
|
|
||||||
- name: Remove an SRV record from the system
|
|
||||||
community.general.nios_srv_record:
|
|
||||||
name: _sip._tcp.service.ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_SRV_RECORD
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, ib_req=True),
|
|
||||||
view=dict(default='default', aliases=['dns_view'], ib_req=True),
|
|
||||||
|
|
||||||
port=dict(type='int', ib_req=True),
|
|
||||||
priority=dict(type='int', ib_req=True),
|
|
||||||
target=dict(ib_req=True),
|
|
||||||
weight=dict(type='int', ib_req=True),
|
|
||||||
|
|
||||||
ttl=dict(type='int'),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_SRV_RECORD, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,140 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_txt_record
|
|
||||||
author: "Corey Wanless (@coreywan)"
|
|
||||||
short_description: Configure Infoblox NIOS txt records
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_txt_record
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of txt record objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(record:txt) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox_client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Specifies the fully qualified hostname to add or remove from
|
|
||||||
the system
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Sets the DNS view to associate this tst record with. The DNS
|
|
||||||
view must already be configured on the system
|
|
||||||
default: default
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
text:
|
|
||||||
description:
|
|
||||||
- Text associated with the record. It can contain up to 255 bytes
|
|
||||||
per substring, up to a total of 512 bytes. To enter leading,
|
|
||||||
trailing, or embedded spaces in the text, add quotes around the
|
|
||||||
text to preserve the spaces.
|
|
||||||
type: str
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Configures the TTL to be associated with this tst record
|
|
||||||
type: int
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Ensure a text Record Exists
|
|
||||||
community.general.nios_txt_record:
|
|
||||||
name: fqdn.txt.record.com
|
|
||||||
text: mytext
|
|
||||||
state: present
|
|
||||||
view: External
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
|
|
||||||
- name: Ensure a text Record does not exist
|
|
||||||
community.general.nios_txt_record:
|
|
||||||
name: fqdn.txt.record.com
|
|
||||||
text: mytext
|
|
||||||
state: absent
|
|
||||||
view: External
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
name=dict(required=True, ib_req=True),
|
|
||||||
view=dict(default='default', aliases=['dns_view'], ib_req=True),
|
|
||||||
text=dict(ib_req=True),
|
|
||||||
ttl=dict(type='int'),
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run('record:txt', ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,241 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2018 Red Hat, Inc.
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: nios_zone
|
|
||||||
author: "Peter Sprygada (@privateip)"
|
|
||||||
short_description: Configure Infoblox NIOS DNS zones
|
|
||||||
deprecated:
|
|
||||||
why: Please install the infoblox.nios_modules collection and use the corresponding module from it.
|
|
||||||
alternative: infoblox.nios_modules.nios_zone
|
|
||||||
removed_in: 5.0.0
|
|
||||||
description:
|
|
||||||
- Adds and/or removes instances of DNS zone objects from
|
|
||||||
Infoblox NIOS servers. This module manages NIOS C(zone_auth) objects
|
|
||||||
using the Infoblox WAPI interface over REST.
|
|
||||||
requirements:
|
|
||||||
- infoblox-client
|
|
||||||
extends_documentation_fragment:
|
|
||||||
- community.general.nios
|
|
||||||
|
|
||||||
options:
|
|
||||||
fqdn:
|
|
||||||
description:
|
|
||||||
- Specifies the qualified domain name to either add or remove from
|
|
||||||
the NIOS instance based on the configured C(state) value.
|
|
||||||
required: true
|
|
||||||
aliases:
|
|
||||||
- name
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- Configures the DNS view name for the configured resource. The
|
|
||||||
specified DNS zone must already exist on the running NIOS instance
|
|
||||||
prior to configuring zones.
|
|
||||||
default: default
|
|
||||||
aliases:
|
|
||||||
- dns_view
|
|
||||||
type: str
|
|
||||||
grid_primary:
|
|
||||||
description:
|
|
||||||
- Configures the grid primary servers for this zone.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the grid primary server
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
grid_secondaries:
|
|
||||||
description:
|
|
||||||
- Configures the grid secondary servers for this zone.
|
|
||||||
type: list
|
|
||||||
elements: dict
|
|
||||||
suboptions:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the grid secondary server
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
ns_group:
|
|
||||||
description:
|
|
||||||
- Configures the name server group for this zone. Name server group is
|
|
||||||
mutually exclusive with grid primary and grid secondaries.
|
|
||||||
type: str
|
|
||||||
restart_if_needed:
|
|
||||||
description:
|
|
||||||
- If set to true, causes the NIOS DNS service to restart and load the
|
|
||||||
new zone configuration
|
|
||||||
type: bool
|
|
||||||
zone_format:
|
|
||||||
description:
|
|
||||||
- Create an authorative Reverse-Mapping Zone which is an area of network
|
|
||||||
space for which one or more name servers-primary and secondary-have the
|
|
||||||
responsibility to respond to address-to-name queries. It supports
|
|
||||||
reverse-mapping zones for both IPv4 and IPv6 addresses.
|
|
||||||
default: FORWARD
|
|
||||||
type: str
|
|
||||||
extattrs:
|
|
||||||
description:
|
|
||||||
- Allows for the configuration of Extensible Attributes on the
|
|
||||||
instance of the object. This argument accepts a set of key / value
|
|
||||||
pairs for configuration.
|
|
||||||
type: dict
|
|
||||||
comment:
|
|
||||||
description:
|
|
||||||
- Configures a text string comment to be associated with the instance
|
|
||||||
of this object. The provided text string will be configured on the
|
|
||||||
object instance.
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Configures the intended state of the instance of the object on
|
|
||||||
the NIOS server. When this value is set to C(present), the object
|
|
||||||
is configured on the device and when this value is set to C(absent)
|
|
||||||
the value is removed (if necessary) from the device.
|
|
||||||
default: present
|
|
||||||
choices:
|
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Configure a zone on the system using grid primary and secondaries
|
|
||||||
community.general.nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
grid_primary:
|
|
||||||
- name: gridprimary.grid.com
|
|
||||||
grid_secondaries:
|
|
||||||
- name: gridsecondary1.grid.com
|
|
||||||
- name: gridsecondary2.grid.com
|
|
||||||
restart_if_needed: true
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Configure a zone on the system using a name server group
|
|
||||||
community.general.nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
ns_group: examplensg
|
|
||||||
restart_if_needed: true
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Configure a reverse mapping zone on the system using IPV4 zone format
|
|
||||||
community.general.nios_zone:
|
|
||||||
name: 10.10.10.0/24
|
|
||||||
zone_format: IPV4
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Configure a reverse mapping zone on the system using IPV6 zone format
|
|
||||||
community.general.nios_zone:
|
|
||||||
name: 100::1/128
|
|
||||||
zone_format: IPV6
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Update the comment and ext attributes for an existing zone
|
|
||||||
community.general.nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
comment: this is an example comment
|
|
||||||
extattrs:
|
|
||||||
Site: west-dc
|
|
||||||
state: present
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove the dns zone
|
|
||||||
community.general.nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
- name: Remove the reverse mapping dns zone from the system with IPV4 zone format
|
|
||||||
community.general.nios_zone:
|
|
||||||
name: 10.10.10.0/24
|
|
||||||
zone_format: IPV4
|
|
||||||
state: absent
|
|
||||||
provider:
|
|
||||||
host: "{{ inventory_hostname_short }}"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
connection: local
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = ''' # '''
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import WapiModule
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import NIOS_ZONE
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios.api import normalize_ib_spec
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
''' Main entry point for module execution
|
|
||||||
'''
|
|
||||||
grid_spec = dict(
|
|
||||||
name=dict(required=True),
|
|
||||||
)
|
|
||||||
|
|
||||||
ib_spec = dict(
|
|
||||||
fqdn=dict(required=True, aliases=['name'], ib_req=True, update=False),
|
|
||||||
zone_format=dict(default='FORWARD', ib_req=False),
|
|
||||||
view=dict(default='default', aliases=['dns_view'], ib_req=True),
|
|
||||||
|
|
||||||
grid_primary=dict(type='list', elements='dict', options=grid_spec),
|
|
||||||
grid_secondaries=dict(type='list', elements='dict', options=grid_spec),
|
|
||||||
ns_group=dict(),
|
|
||||||
restart_if_needed=dict(type='bool'),
|
|
||||||
|
|
||||||
extattrs=dict(type='dict'),
|
|
||||||
comment=dict()
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec = dict(
|
|
||||||
provider=dict(required=True),
|
|
||||||
state=dict(default='present', choices=['present', 'absent'])
|
|
||||||
)
|
|
||||||
|
|
||||||
argument_spec.update(normalize_ib_spec(ib_spec))
|
|
||||||
argument_spec.update(WapiModule.provider_spec)
|
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
supports_check_mode=True,
|
|
||||||
mutually_exclusive=[
|
|
||||||
['ns_group', 'grid_primary'],
|
|
||||||
['ns_group', 'grid_secondaries']
|
|
||||||
])
|
|
||||||
|
|
||||||
wapi = WapiModule(module)
|
|
||||||
result = wapi.run(NIOS_ZONE, ib_spec)
|
|
||||||
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_a_record.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_aaaa_record.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_cname_record.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_dns_view.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_fixed_address.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_host_record.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_member.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_mx_record.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_naptr_record.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_network.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_network_view.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_nsgroup.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_ptr_record.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_srv_record.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_txt_record.py
|
|
|
@ -1 +0,0 @@
|
||||||
./net_tools/nios/nios_zone.py
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_a_record_idempotence.yml
|
|
|
@ -1,77 +0,0 @@
|
||||||
- name: cleanup the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: cleanup a_record
|
|
||||||
nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create an a_record
|
|
||||||
nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: a_record_create1
|
|
||||||
|
|
||||||
- name: recreate an a_record
|
|
||||||
nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: a_record_create2
|
|
||||||
|
|
||||||
- name: add a comment to an existing a_record
|
|
||||||
nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: a_record_update1
|
|
||||||
|
|
||||||
- name: add a comment to an existing a_record
|
|
||||||
nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: a_record_update2
|
|
||||||
|
|
||||||
- name: remove a a_record from the system
|
|
||||||
nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: a_record_delete1
|
|
||||||
|
|
||||||
- name: remove a a_record from the system
|
|
||||||
nios_a_record:
|
|
||||||
name: a.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: a_record_delete2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "a_record_create1.changed"
|
|
||||||
- "not a_record_create2.changed"
|
|
||||||
- "a_record_update1.changed"
|
|
||||||
- "not a_record_update2.changed"
|
|
||||||
- "a_record_delete1.changed"
|
|
||||||
- "not a_record_delete2.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_aaaa_record_idempotence.yml
|
|
|
@ -1,77 +0,0 @@
|
||||||
- name: cleanup the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: cleanup aaaa record
|
|
||||||
nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create an aaaa record
|
|
||||||
nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: aaaa_record_create1
|
|
||||||
|
|
||||||
- name: recreate an aaaa record
|
|
||||||
nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: aaaa_record_create2
|
|
||||||
|
|
||||||
- name: add a comment to an existing aaaa record
|
|
||||||
nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: aaaa_record_update1
|
|
||||||
|
|
||||||
- name: add a comment to an existing aaaa record
|
|
||||||
nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: aaaa_record_update2
|
|
||||||
|
|
||||||
- name: remove a aaaa record from the system
|
|
||||||
nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: aaaa_record_delete1
|
|
||||||
|
|
||||||
- name: remove a aaaa record from the system
|
|
||||||
nios_aaaa_record:
|
|
||||||
name: aaaa.ansible.com
|
|
||||||
ipv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: aaaa_record_delete2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "aaaa_record_create1.changed"
|
|
||||||
- "not aaaa_record_create2.changed"
|
|
||||||
- "aaaa_record_update1.changed"
|
|
||||||
- "not aaaa_record_update2.changed"
|
|
||||||
- "aaaa_record_delete1.changed"
|
|
||||||
- "not aaaa_record_delete2.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_cname_record_idempotence.yml
|
|
|
@ -1,77 +0,0 @@
|
||||||
- name: cleanup the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: cleanup cname record
|
|
||||||
nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create an cname record
|
|
||||||
nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: cname_record_create1
|
|
||||||
|
|
||||||
- name: recreate an cname record
|
|
||||||
nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: cname_record_create2
|
|
||||||
|
|
||||||
- name: add a comment to an existing cname record
|
|
||||||
nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: cname_record_update1
|
|
||||||
|
|
||||||
- name: add a comment to an existing cname record
|
|
||||||
nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: cname_record_update2
|
|
||||||
|
|
||||||
- name: remove a cname record from the system
|
|
||||||
nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: cname_record_delete1
|
|
||||||
|
|
||||||
- name: remove a cname record from the system
|
|
||||||
nios_cname_record:
|
|
||||||
name: cname.ansible.com
|
|
||||||
canonical: realhost.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: cname_record_delete2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "cname_record_create1.changed"
|
|
||||||
- "not cname_record_create2.changed"
|
|
||||||
- "cname_record_update1.changed"
|
|
||||||
- "not cname_record_update2.changed"
|
|
||||||
- "cname_record_delete1.changed"
|
|
||||||
- "not cname_record_delete2.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_dns_view_idempotence.yml
|
|
|
@ -1,58 +0,0 @@
|
||||||
- name: delete dns view instance
|
|
||||||
nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: configure a new dns view instance
|
|
||||||
nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_dns_create1
|
|
||||||
|
|
||||||
- name: configure a new dns view instance
|
|
||||||
nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_dns_create2
|
|
||||||
|
|
||||||
- name: update the comment for dns view
|
|
||||||
nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
comment: this is an example comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_dns_update1
|
|
||||||
|
|
||||||
- name: update the comment for dns view
|
|
||||||
nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
comment: this is an example comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_dns_update2
|
|
||||||
|
|
||||||
- name: delete dns view instance
|
|
||||||
nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_dns_delete1
|
|
||||||
|
|
||||||
- name: delete dns view instance
|
|
||||||
nios_dns_view:
|
|
||||||
name: ansible-dns
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_dns_delete2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "nios_dns_create1.changed"
|
|
||||||
- "not nios_dns_create2.changed"
|
|
||||||
- "nios_dns_update1.changed"
|
|
||||||
- "not nios_dns_update2.changed"
|
|
||||||
- "nios_dns_delete1.changed"
|
|
||||||
- "not nios_dns_delete2.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_host_record_idempotence.yml
|
|
|
@ -1,126 +0,0 @@
|
||||||
- name: cleanup the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: cleanup ipv4 host record
|
|
||||||
nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create an ipv4 host record
|
|
||||||
nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_create1
|
|
||||||
|
|
||||||
- name: recreate an ipv4 host record
|
|
||||||
nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_create2
|
|
||||||
|
|
||||||
- name: add a comment to an existing host record
|
|
||||||
nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_update1
|
|
||||||
|
|
||||||
- name: add a comment to an existing host record
|
|
||||||
nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_update2
|
|
||||||
|
|
||||||
- name: remove a host record from the system
|
|
||||||
nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_delete1
|
|
||||||
|
|
||||||
- name: remove a host record from the system
|
|
||||||
nios_host_record:
|
|
||||||
name: host.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_delete2
|
|
||||||
|
|
||||||
- name: create an ipv4 host record bypassing DNS
|
|
||||||
nios_host_record:
|
|
||||||
name: host
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
dns: false
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_create3
|
|
||||||
|
|
||||||
- name: recreate an ipv4 host record bypassing DNS
|
|
||||||
nios_host_record:
|
|
||||||
name: host
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
dns: false
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_create4
|
|
||||||
|
|
||||||
- name: create an ipv4 host record via DHCP and MAC
|
|
||||||
nios_host_record:
|
|
||||||
name: host
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
dhcp: true
|
|
||||||
mac: 00-80-C8-E3-4C-BD
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_create5
|
|
||||||
|
|
||||||
- name: recreate an ipv4 host record via DHCP and MAC
|
|
||||||
nios_host_record:
|
|
||||||
name: host
|
|
||||||
ipv4:
|
|
||||||
- address: 192.168.10.1
|
|
||||||
dhcp: true
|
|
||||||
mac: 00-80-C8-E3-4C-BD
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_create6
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "ipv4_create1.changed"
|
|
||||||
- "not ipv4_create2.changed"
|
|
||||||
- "ipv4_update1.changed"
|
|
||||||
- "not ipv4_update2.changed"
|
|
||||||
- "ipv4_delete1.changed"
|
|
||||||
- "not ipv4_delete2.changed"
|
|
||||||
- "ipv4_create3.changed"
|
|
||||||
- "not ipv4_create4.changed"
|
|
||||||
- "ipv4_create5.changed"
|
|
||||||
- "not ipv4_create6.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_mx_record_idempotence.yml
|
|
|
@ -1,84 +0,0 @@
|
||||||
- name: cleanup the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: cleanup mx record
|
|
||||||
nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create an mx record
|
|
||||||
nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: mx_record_create1
|
|
||||||
|
|
||||||
- name: recreate an mx record
|
|
||||||
nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: mx_record_create2
|
|
||||||
|
|
||||||
- name: add a comment to an existing mx record
|
|
||||||
nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: mx_record_update1
|
|
||||||
|
|
||||||
- name: add a comment to an existing mx record
|
|
||||||
nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: mx_record_update2
|
|
||||||
|
|
||||||
- name: remove a mx record from the system
|
|
||||||
nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: mx_record_delete1
|
|
||||||
|
|
||||||
- name: remove a mx record from the system
|
|
||||||
nios_mx_record:
|
|
||||||
name: ansible.com
|
|
||||||
mx: mailhost.ansible.com
|
|
||||||
preference: 0
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: mx_record_delete2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "mx_record_create1.changed"
|
|
||||||
- "not mx_record_create2.changed"
|
|
||||||
- "mx_record_update1.changed"
|
|
||||||
- "not mx_record_update2.changed"
|
|
||||||
- "mx_record_delete1.changed"
|
|
||||||
- "not mx_record_delete2.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_naptr_record_idempotence.yml
|
|
|
@ -1,91 +0,0 @@
|
||||||
- name: cleanup the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: cleanup naptr record
|
|
||||||
nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create an naptr record
|
|
||||||
nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: naptr_record_create1
|
|
||||||
|
|
||||||
- name: recreate an naptr record
|
|
||||||
nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: naptr_record_create2
|
|
||||||
|
|
||||||
- name: add a comment to an existing naptr record
|
|
||||||
nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: naptr_record_update1
|
|
||||||
|
|
||||||
- name: add a comment to an existing naptr record
|
|
||||||
nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: naptr_record_update2
|
|
||||||
|
|
||||||
- name: remove a naptr record from the system
|
|
||||||
nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: naptr_record_delete1
|
|
||||||
|
|
||||||
- name: remove a naptr record from the system
|
|
||||||
nios_naptr_record:
|
|
||||||
name: '*.subscriber-100.ansiblezone.com'
|
|
||||||
order: 1000
|
|
||||||
preference: 10
|
|
||||||
replacement: replacement1.network.ansiblezone.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: naptr_record_delete2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "naptr_record_create1.changed"
|
|
||||||
- "not naptr_record_create2.changed"
|
|
||||||
- "naptr_record_update1.changed"
|
|
||||||
- "not naptr_record_update2.changed"
|
|
||||||
- "naptr_record_delete1.changed"
|
|
||||||
- "not naptr_record_delete2.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_network_idempotence.yml
|
|
|
@ -1,80 +0,0 @@
|
||||||
- name: cleanup a network ipv4
|
|
||||||
nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
comment: this is a test comment
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: configure a network ipv4
|
|
||||||
nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_ipv4_create1
|
|
||||||
|
|
||||||
- name: configure a network ipv4
|
|
||||||
nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_ipv4_create2
|
|
||||||
|
|
||||||
#- assert:
|
|
||||||
# that:
|
|
||||||
# - "nios_ipv4_create1.changed"
|
|
||||||
# - "not nios_ipv4_create2.changed"
|
|
||||||
|
|
||||||
- name: set dhcp options for a network ipv4
|
|
||||||
nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
comment: this is a test comment
|
|
||||||
options:
|
|
||||||
- name: domain-name
|
|
||||||
value: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_ipv4_update1
|
|
||||||
|
|
||||||
- name: set dhcp options for a network ipv4
|
|
||||||
nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
comment: this is a test comment
|
|
||||||
options:
|
|
||||||
- name: domain-name
|
|
||||||
value: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_ipv4_update2
|
|
||||||
|
|
||||||
- name: remove a network ipv4
|
|
||||||
nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_ipv4_remove1
|
|
||||||
|
|
||||||
- name: remove a network ipv4
|
|
||||||
nios_network:
|
|
||||||
network: 192.168.10.0/24
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_ipv4_remove2
|
|
||||||
|
|
||||||
- name: configure a network ipv6
|
|
||||||
nios_network:
|
|
||||||
network: fe80::/64
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_ipv6_create1
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "nios_ipv4_create1.changed"
|
|
||||||
- "not nios_ipv4_create2.changed"
|
|
||||||
- "nios_ipv4_update1.changed"
|
|
||||||
- "not nios_ipv4_update2.changed"
|
|
||||||
- "nios_ipv4_remove1.changed"
|
|
||||||
- "not nios_ipv4_remove2.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_network_view_idempotence.yml
|
|
|
@ -1,58 +0,0 @@
|
||||||
- name: cleanup a new network view
|
|
||||||
nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: configure a new network view
|
|
||||||
nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_network_view_create1
|
|
||||||
|
|
||||||
- name: configure a new network view
|
|
||||||
nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_network_view_create2
|
|
||||||
|
|
||||||
- name: update the comment for network view
|
|
||||||
nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
comment: this is an example comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_network_view_update1
|
|
||||||
|
|
||||||
- name: update the comment for network view
|
|
||||||
nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
comment: this is an example comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_network_view_update2
|
|
||||||
|
|
||||||
- name: remove the network view
|
|
||||||
nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_network_view_delete1
|
|
||||||
|
|
||||||
- name: remove the network view
|
|
||||||
nios_network_view:
|
|
||||||
name: ansible
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: nios_network_view_delete2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "nios_network_view_create1.changed"
|
|
||||||
- "not nios_network_view_create2.changed"
|
|
||||||
- "nios_network_view_update1.changed"
|
|
||||||
- "not nios_network_view_update2.changed"
|
|
||||||
- "nios_network_view_delete1.changed"
|
|
||||||
- "not nios_network_view_delete2.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_ptr_record_idempotence.yml
|
|
|
@ -1,83 +0,0 @@
|
||||||
---
|
|
||||||
|
|
||||||
- name: create an ipv4 ptr record
|
|
||||||
nios_ptr_record:
|
|
||||||
name: ptr.ansible.com
|
|
||||||
ptrdname: ptr.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
view: default
|
|
||||||
register: ipv4_ptr_create1
|
|
||||||
|
|
||||||
- name: create the same ipv4 ptr record
|
|
||||||
nios_ptr_record:
|
|
||||||
name: ptr.ansible.com
|
|
||||||
ptrdname: ptr.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
state: present
|
|
||||||
view: default
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_ptr_create2
|
|
||||||
|
|
||||||
- name: add a comment to an existing ipv4 ptr record
|
|
||||||
nios_ptr_record:
|
|
||||||
name: ptr.ansible.com
|
|
||||||
ptrdname: ptr.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
comment: this is a test comment
|
|
||||||
view: default
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_ptr_update1
|
|
||||||
|
|
||||||
- name: add the same comment to the same ipv4 ptr host record
|
|
||||||
nios_ptr_record:
|
|
||||||
name: ptr.ansible.com
|
|
||||||
ptrdname: ptr.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
comment: this is a test comment
|
|
||||||
view: default
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_ptr_update2
|
|
||||||
|
|
||||||
- name: remove a ptr record from the system
|
|
||||||
nios_ptr_record:
|
|
||||||
name: ptr.ansible.com
|
|
||||||
ptrdname: ptr.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
view: default
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_ptr_delete1
|
|
||||||
|
|
||||||
- name: remove the same ptr record from the system
|
|
||||||
nios_ptr_record:
|
|
||||||
ptrdname: ptr.ansible.com
|
|
||||||
name: ptr.ansible.com
|
|
||||||
ipv4: 192.168.10.1
|
|
||||||
view: default
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv4_ptr_delete2
|
|
||||||
|
|
||||||
- name: create an ipv6 ptr record
|
|
||||||
nios_ptr_record:
|
|
||||||
ptrdname: ptr6.ansible.com
|
|
||||||
name: ptr6.ansible.com
|
|
||||||
ipv6: "2002:8ac3:802d:1242:20d:60ff:fe38:6d16"
|
|
||||||
view: default
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: ipv6_ptr_create1
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "ipv4_ptr_create1.changed"
|
|
||||||
- "not ipv4_ptr_create2.changed"
|
|
||||||
- "ipv4_ptr_update1.changed"
|
|
||||||
- "not ipv4_ptr_update2.changed"
|
|
||||||
- "ipv4_ptr_delete1.changed"
|
|
||||||
- "not ipv4_ptr_delete2.changed"
|
|
||||||
- "ipv6_ptr_create1.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_srv_record_idempotence.yml
|
|
|
@ -1,98 +0,0 @@
|
||||||
- name: cleanup the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: cleanup srv record
|
|
||||||
nios_srv_record:
|
|
||||||
name: ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create an srv record
|
|
||||||
nios_srv_record:
|
|
||||||
name: ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: srv_record_create1
|
|
||||||
|
|
||||||
- name: recreate an srv record
|
|
||||||
nios_srv_record:
|
|
||||||
name: ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: srv_record_create2
|
|
||||||
|
|
||||||
- name: add a comment to an existing srv record
|
|
||||||
nios_srv_record:
|
|
||||||
name: ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: srv_record_update1
|
|
||||||
|
|
||||||
- name: add a comment to an existing srv record
|
|
||||||
nios_srv_record:
|
|
||||||
name: ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
comment: this is a test comment
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: srv_record_update2
|
|
||||||
|
|
||||||
- name: remove a srv record from the system
|
|
||||||
nios_srv_record:
|
|
||||||
name: ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: srv_record_delete1
|
|
||||||
|
|
||||||
- name: remove a srv record from the system
|
|
||||||
nios_srv_record:
|
|
||||||
name: ansible.com
|
|
||||||
port: 5080
|
|
||||||
priority: 10
|
|
||||||
target: service1.ansible.com
|
|
||||||
weight: 10
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: srv_record_delete2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "srv_record_create1.changed"
|
|
||||||
- "not srv_record_create2.changed"
|
|
||||||
- "srv_record_update1.changed"
|
|
||||||
- "not srv_record_update2.changed"
|
|
||||||
- "srv_record_delete1.changed"
|
|
||||||
- "not srv_record_delete2.changed"
|
|
|
@ -1,3 +0,0 @@
|
||||||
shippable/cloud/group1
|
|
||||||
cloud/nios
|
|
||||||
destructive
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
testcase: "*"
|
|
||||||
test_items: []
|
|
|
@ -1,2 +0,0 @@
|
||||||
dependencies:
|
|
||||||
- prepare_nios_tests
|
|
|
@ -1,6 +0,0 @@
|
||||||
####################################################################
|
|
||||||
# WARNING: These are designed specifically for Ansible tests #
|
|
||||||
# and should not be used as examples of how to write Ansible roles #
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
- include: nios_txt_record_idempotence.yml
|
|
|
@ -1,80 +0,0 @@
|
||||||
- name: cleanup the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create the parent object
|
|
||||||
nios_zone:
|
|
||||||
name: ansible.com
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: cleanup txt record
|
|
||||||
nios_txt_record:
|
|
||||||
name: txt.ansible.com
|
|
||||||
text: mytext
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
|
|
||||||
- name: create txt record
|
|
||||||
nios_txt_record:
|
|
||||||
name: txt.ansible.com
|
|
||||||
text: mytext
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: txt_create1
|
|
||||||
|
|
||||||
- name: create txt record
|
|
||||||
nios_txt_record:
|
|
||||||
name: txt.ansible.com
|
|
||||||
text: mytext
|
|
||||||
state: present
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: txt_create2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "txt_create1.changed"
|
|
||||||
- "not txt_create2.changed"
|
|
||||||
|
|
||||||
- name: add a comment to an existing txt record
|
|
||||||
nios_txt_record:
|
|
||||||
name: txt.ansible.com
|
|
||||||
text: mytext
|
|
||||||
state: present
|
|
||||||
comment: mycomment
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: txt_update1
|
|
||||||
|
|
||||||
- name: add a comment to an existing txt record
|
|
||||||
nios_txt_record:
|
|
||||||
name: txt.ansible.com
|
|
||||||
text: mytext
|
|
||||||
state: present
|
|
||||||
comment: mycomment
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: txt_update2
|
|
||||||
|
|
||||||
- name: remove a txt record from the system
|
|
||||||
nios_txt_record:
|
|
||||||
name: txt.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: txt_delete1
|
|
||||||
|
|
||||||
- name: remove a txt record from the system
|
|
||||||
nios_txt_record:
|
|
||||||
name: txt.ansible.com
|
|
||||||
state: absent
|
|
||||||
provider: "{{ nios_provider }}"
|
|
||||||
register: txt_delete2
|
|
||||||
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "txt_create1.changed"
|
|
||||||
- "not txt_create2.changed"
|
|
||||||
- "txt_update1.changed"
|
|
||||||
- "not txt_update2.changed"
|
|
||||||
- "txt_delete1.changed"
|
|
||||||
- "not txt_delete2.changed"
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue