|
|
|
@ -46,7 +46,7 @@ options:
|
|
|
|
|
description:
|
|
|
|
|
- Lists the self IP addresses and translations for each device. When creating a
|
|
|
|
|
new GTM server, this value is required. This list is a complex list that
|
|
|
|
|
specifies a number of keys. There are several supported keys.
|
|
|
|
|
specifies a number of keys.
|
|
|
|
|
- The C(name) key specifies a name for the device. The device name must
|
|
|
|
|
be unique per server. This key is required.
|
|
|
|
|
- The C(address) key contains an IP address, or list of IP addresses, for the
|
|
|
|
@ -106,6 +106,27 @@ options:
|
|
|
|
|
- Device partition to manage resources on.
|
|
|
|
|
default: Common
|
|
|
|
|
version_added: 2.5
|
|
|
|
|
iquery_options:
|
|
|
|
|
description:
|
|
|
|
|
- Specifies whether the Global Traffic Manager uses this BIG-IP
|
|
|
|
|
system to conduct a variety of probes before delegating traffic to it.
|
|
|
|
|
suboptions:
|
|
|
|
|
allow_path:
|
|
|
|
|
description:
|
|
|
|
|
- Specifies that the system verifies the logical network route between a data
|
|
|
|
|
center server and a local DNS server.
|
|
|
|
|
type: bool
|
|
|
|
|
allow_service_check:
|
|
|
|
|
description:
|
|
|
|
|
- Specifies that the system verifies that an application on a server is running,
|
|
|
|
|
by remotely running the application using an external service checker program.
|
|
|
|
|
type: bool
|
|
|
|
|
allow_snmp:
|
|
|
|
|
description:
|
|
|
|
|
- Specifies that the system checks the performance of a server running an SNMP
|
|
|
|
|
agent.
|
|
|
|
|
type: bool
|
|
|
|
|
version_added: 2.7
|
|
|
|
|
extends_documentation_fragment: f5
|
|
|
|
|
author:
|
|
|
|
|
- Robert Teller
|
|
|
|
@ -195,6 +216,7 @@ try:
|
|
|
|
|
from library.module_utils.network.f5.common import AnsibleF5Parameters
|
|
|
|
|
from library.module_utils.network.f5.common import cleanup_tokens
|
|
|
|
|
from library.module_utils.network.f5.common import f5_argument_spec
|
|
|
|
|
from library.module_utils.network.f5.common import fq_name
|
|
|
|
|
try:
|
|
|
|
|
from library.module_utils.network.f5.common import iControlUnexpectedHTTPError
|
|
|
|
|
except ImportError:
|
|
|
|
@ -206,6 +228,7 @@ except ImportError:
|
|
|
|
|
from ansible.module_utils.network.f5.common import AnsibleF5Parameters
|
|
|
|
|
from ansible.module_utils.network.f5.common import cleanup_tokens
|
|
|
|
|
from ansible.module_utils.network.f5.common import f5_argument_spec
|
|
|
|
|
from ansible.module_utils.network.f5.common import fq_name
|
|
|
|
|
try:
|
|
|
|
|
from ansible.module_utils.network.f5.common import iControlUnexpectedHTTPError
|
|
|
|
|
except ImportError:
|
|
|
|
@ -225,29 +248,47 @@ class Parameters(AnsibleF5Parameters):
|
|
|
|
|
'product': 'server_type',
|
|
|
|
|
'virtualServerDiscovery': 'virtual_server_discovery',
|
|
|
|
|
'linkDiscovery': 'link_discovery',
|
|
|
|
|
'addresses': 'devices'
|
|
|
|
|
'addresses': 'devices',
|
|
|
|
|
'iqAllowPath': 'iquery_allow_path',
|
|
|
|
|
'iqAllowServiceCheck': 'iquery_allow_service_check',
|
|
|
|
|
'iqAllowSnmp': 'iquery_allow_snmp',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updatables = [
|
|
|
|
|
'link_discovery', 'virtual_server_discovery', 'server_type_and_devices',
|
|
|
|
|
'datacenter', 'state'
|
|
|
|
|
api_attributes = [
|
|
|
|
|
'linkDiscovery',
|
|
|
|
|
'virtualServerDiscovery',
|
|
|
|
|
'product',
|
|
|
|
|
'addresses',
|
|
|
|
|
'datacenter',
|
|
|
|
|
'enabled',
|
|
|
|
|
'disabled',
|
|
|
|
|
'iqAllowPath',
|
|
|
|
|
'iqAllowServiceCheck',
|
|
|
|
|
'iqAllowSnmp',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
returnables = [
|
|
|
|
|
'link_discovery', 'virtual_server_discovery', 'server_type', 'datacenter',
|
|
|
|
|
'enabled'
|
|
|
|
|
updatables = [
|
|
|
|
|
'link_discovery',
|
|
|
|
|
'virtual_server_discovery',
|
|
|
|
|
'server_type_and_devices',
|
|
|
|
|
'datacenter',
|
|
|
|
|
'state',
|
|
|
|
|
'iquery_allow_path',
|
|
|
|
|
'iquery_allow_service_check',
|
|
|
|
|
'iquery_allow_snmp',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
api_attributes = [
|
|
|
|
|
'linkDiscovery', 'virtualServerDiscovery', 'product', 'addresses',
|
|
|
|
|
'datacenter', 'enabled', 'disabled'
|
|
|
|
|
returnables = [
|
|
|
|
|
'link_discovery',
|
|
|
|
|
'virtual_server_discovery',
|
|
|
|
|
'server_type',
|
|
|
|
|
'datacenter',
|
|
|
|
|
'enabled',
|
|
|
|
|
'iquery_allow_path',
|
|
|
|
|
'iquery_allow_service_check',
|
|
|
|
|
'iquery_allow_snmp',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
def _fqdn_name(self, value):
|
|
|
|
|
if value is not None and not value.startswith('/'):
|
|
|
|
|
return '/{0}/{1}'.format(self.partition, value)
|
|
|
|
|
return value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ApiParameters(Parameters):
|
|
|
|
|
@property
|
|
|
|
@ -283,6 +324,30 @@ class ApiParameters(Parameters):
|
|
|
|
|
return None
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def iquery_allow_path(self):
|
|
|
|
|
if self._values['iquery_allow_path'] is None:
|
|
|
|
|
return None
|
|
|
|
|
elif self._values['iquery_allow_path'] == 'yes':
|
|
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def iquery_allow_service_check(self):
|
|
|
|
|
if self._values['iquery_allow_service_check'] is None:
|
|
|
|
|
return None
|
|
|
|
|
elif self._values['iquery_allow_service_check'] == 'yes':
|
|
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def iquery_allow_snmp(self):
|
|
|
|
|
if self._values['iquery_allow_snmp'] is None:
|
|
|
|
|
return None
|
|
|
|
|
elif self._values['iquery_allow_snmp'] == 'yes':
|
|
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ModuleParameters(Parameters):
|
|
|
|
|
@property
|
|
|
|
@ -333,7 +398,7 @@ class ModuleParameters(Parameters):
|
|
|
|
|
def datacenter(self):
|
|
|
|
|
if self._values['datacenter'] is None:
|
|
|
|
|
return None
|
|
|
|
|
return self._fqdn_name(self._values['datacenter'])
|
|
|
|
|
return fq_name(self.partition, self._values['datacenter'])
|
|
|
|
|
|
|
|
|
|
def _determine_translation(self, device):
|
|
|
|
|
if 'translation' not in device:
|
|
|
|
@ -346,6 +411,30 @@ class ModuleParameters(Parameters):
|
|
|
|
|
return 'present'
|
|
|
|
|
return self._values['state']
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def iquery_allow_path(self):
|
|
|
|
|
if self._values['iquery_options'] is None:
|
|
|
|
|
return None
|
|
|
|
|
elif self._values['iquery_options']['allow_path'] is None:
|
|
|
|
|
return None
|
|
|
|
|
return self._values['iquery_options']['allow_path']
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def iquery_allow_service_check(self):
|
|
|
|
|
if self._values['iquery_options'] is None:
|
|
|
|
|
return None
|
|
|
|
|
elif self._values['iquery_options']['allow_service_check'] is None:
|
|
|
|
|
return None
|
|
|
|
|
return self._values['iquery_options']['allow_service_check']
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def iquery_allow_snmp(self):
|
|
|
|
|
if self._values['iquery_options'] is None:
|
|
|
|
|
return None
|
|
|
|
|
elif self._values['iquery_options']['allow_snmp'] is None:
|
|
|
|
|
return None
|
|
|
|
|
return self._values['iquery_options']['allow_snmp']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Changes(Parameters):
|
|
|
|
|
def to_return(self):
|
|
|
|
@ -357,7 +446,29 @@ class Changes(Parameters):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UsableChanges(Changes):
|
|
|
|
|
pass
|
|
|
|
|
@property
|
|
|
|
|
def iquery_allow_path(self):
|
|
|
|
|
if self._values['iquery_allow_path'] is None:
|
|
|
|
|
return None
|
|
|
|
|
elif self._values['iquery_allow_path']:
|
|
|
|
|
return 'yes'
|
|
|
|
|
return 'no'
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def iquery_allow_service_check(self):
|
|
|
|
|
if self._values['iquery_allow_service_check'] is None:
|
|
|
|
|
return None
|
|
|
|
|
elif self._values['iquery_allow_service_check']:
|
|
|
|
|
return 'yes'
|
|
|
|
|
return 'no'
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def iquery_allow_snmp(self):
|
|
|
|
|
if self._values['iquery_allow_snmp'] is None:
|
|
|
|
|
return None
|
|
|
|
|
elif self._values['iquery_allow_snmp']:
|
|
|
|
|
return 'yes'
|
|
|
|
|
return 'no'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ReportableChanges(Changes):
|
|
|
|
@ -381,13 +492,13 @@ class Difference(object):
|
|
|
|
|
return self.__default(param)
|
|
|
|
|
|
|
|
|
|
def __default(self, param):
|
|
|
|
|
attr1 = getattr(self.want, param)
|
|
|
|
|
want = getattr(self.want, param)
|
|
|
|
|
try:
|
|
|
|
|
attr2 = getattr(self.have, param)
|
|
|
|
|
if attr1 != attr2:
|
|
|
|
|
return attr1
|
|
|
|
|
have = getattr(self.have, param)
|
|
|
|
|
if want != have:
|
|
|
|
|
return want
|
|
|
|
|
except AttributeError:
|
|
|
|
|
return attr1
|
|
|
|
|
return want
|
|
|
|
|
|
|
|
|
|
def _discovery_constraints(self):
|
|
|
|
|
if self.want.virtual_server_discovery is None:
|
|
|
|
@ -810,6 +921,14 @@ class ArgumentSpec(object):
|
|
|
|
|
partition=dict(
|
|
|
|
|
default='Common',
|
|
|
|
|
fallback=(env_fallback, ['F5_PARTITION'])
|
|
|
|
|
),
|
|
|
|
|
iquery_options=dict(
|
|
|
|
|
type='dict',
|
|
|
|
|
options=dict(
|
|
|
|
|
allow_path=dict(type='bool'),
|
|
|
|
|
allow_service_check=dict(type='bool'),
|
|
|
|
|
allow_snmp=dict(type='bool')
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
self.argument_spec = {}
|
|
|
|
|