Refactors main() function and module manager in multiple modules in line with recent changes (#53982)
Adds variable types to docs Refactors unit tests to remove deprecated parameters
This commit is contained in:
parent
1a411e9c6b
commit
348b6e7da9
40 changed files with 776 additions and 431 deletions
|
@ -34,16 +34,18 @@ options:
|
|||
cannot be resolved. These situations disable your ability to change their
|
||||
C(state) to C(disabled) or C(offline). They will remain in an
|
||||
*Unavailable - Enabled* state.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
- enabled
|
||||
- disabled
|
||||
- offline
|
||||
default: present
|
||||
name:
|
||||
description:
|
||||
- Specifies the name of the node.
|
||||
type: str
|
||||
required: True
|
||||
monitor_type:
|
||||
description:
|
||||
|
@ -55,21 +57,28 @@ options:
|
|||
or it has a list of one. Where they differ is in the extra guards that
|
||||
C(single) provides; namely that it only allows a single monitor.
|
||||
version_added: "1.3"
|
||||
choices: ['and_list', 'm_of_n', 'single']
|
||||
type: str
|
||||
choices:
|
||||
- and_list
|
||||
- m_of_n
|
||||
- single
|
||||
quorum:
|
||||
description:
|
||||
- Monitor quorum value when C(monitor_type) is C(m_of_n).
|
||||
type: int
|
||||
version_added: 2.2
|
||||
monitors:
|
||||
description:
|
||||
- Specifies the health monitors that the system currently uses to
|
||||
monitor this node.
|
||||
type: list
|
||||
version_added: 2.2
|
||||
address:
|
||||
description:
|
||||
- IP address of the node. This can be either IPv4 or IPv6. When creating a
|
||||
new node, one of either C(address) or C(fqdn) must be provided. This
|
||||
parameter cannot be updated after it is set.
|
||||
type: str
|
||||
aliases:
|
||||
- ip
|
||||
- host
|
||||
|
@ -84,6 +93,7 @@ options:
|
|||
- FQDN names must end with a letter or a number.
|
||||
- When creating a new node, one of either C(address) or C(fqdn) must be
|
||||
provided. This parameter cannot be updated after it is set.
|
||||
type: str
|
||||
aliases:
|
||||
- hostname
|
||||
version_added: 2.5
|
||||
|
@ -93,6 +103,7 @@ options:
|
|||
- When creating a new node, if this parameter is not specified and C(fqdn) is
|
||||
specified, this parameter will default to C(ipv4).
|
||||
- This parameter cannot be changed after it has been set.
|
||||
type: str
|
||||
choices:
|
||||
- ipv4
|
||||
- ipv6
|
||||
|
@ -124,6 +135,7 @@ options:
|
|||
the FQDN. The default TTL interval is akin to specifying C(3600).
|
||||
- When creating a new node, if this parameter is not specified and C(fqdn) is
|
||||
specified, this parameter will default to C(3600).
|
||||
type: str
|
||||
version_added: 2.6
|
||||
fqdn_down_interval:
|
||||
description:
|
||||
|
@ -131,31 +143,37 @@ options:
|
|||
The associated monitor continues polling as long as the DNS server is down.
|
||||
- When creating a new node, if this parameter is not specified and C(fqdn) is
|
||||
specified, this parameter will default to C(5).
|
||||
type: int
|
||||
version_added: 2.6
|
||||
description:
|
||||
description:
|
||||
- Specifies descriptive text that identifies the node.
|
||||
- You can remove a description by either specifying an empty string, or by
|
||||
specifying the special value C(none).
|
||||
type: str
|
||||
connection_limit:
|
||||
description:
|
||||
- Node connection limit. Setting this to 0 disables the limit.
|
||||
type: int
|
||||
version_added: 2.7
|
||||
rate_limit:
|
||||
description:
|
||||
- Node rate limit (connections-per-second). Setting this to 0 disables the limit.
|
||||
type: int
|
||||
version_added: 2.7
|
||||
ratio:
|
||||
description:
|
||||
- Node ratio weight. Valid values range from 1 through 100.
|
||||
- When creating a new node, if this parameter is not specified, the default of
|
||||
C(1) will be used.
|
||||
type: int
|
||||
version_added: 2.7
|
||||
dynamic_ratio:
|
||||
description:
|
||||
- The dynamic ratio number for the node. Used for dynamic ratio load balancing.
|
||||
- When creating a new node, if this parameter is not specified, the default of
|
||||
C(1) will be used.
|
||||
type: int
|
||||
version_added: 2.7
|
||||
availability_requirements:
|
||||
description:
|
||||
|
@ -168,17 +186,22 @@ options:
|
|||
- Monitor rule type when C(monitors) is specified.
|
||||
- When creating a new pool, if this value is not specified, the default of
|
||||
'all' will be used.
|
||||
choices: ['all', 'at_least']
|
||||
choices:
|
||||
- all
|
||||
- at_least
|
||||
at_least:
|
||||
description:
|
||||
- Specifies the minimum number of active health monitors that must be successful
|
||||
before the link is considered up.
|
||||
- This parameter is only relevant when a C(type) of C(at_least) is used.
|
||||
- This parameter will be ignored if a type of C(all) is used.
|
||||
type: int
|
||||
type: dict
|
||||
version_added: 2.8
|
||||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
version_added: 2.5
|
||||
extends_documentation_fragment: f5
|
||||
|
@ -765,11 +788,10 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.have = None
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.changes = UsableChanges()
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
|
||||
def _set_changed_options(self):
|
||||
changed = {}
|
||||
|
@ -1157,6 +1179,7 @@ def main():
|
|||
module = AnsibleModule(
|
||||
argument_spec=spec.argument_spec,
|
||||
supports_check_mode=spec.supports_check_mode,
|
||||
mutually_exclusive=spec.mutually_exclusive
|
||||
)
|
||||
|
||||
try:
|
||||
|
|
|
@ -23,22 +23,26 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Name of the partition
|
||||
type: str
|
||||
required: True
|
||||
description:
|
||||
description:
|
||||
- The description to attach to the Partition.
|
||||
type: str
|
||||
route_domain:
|
||||
description:
|
||||
- The default Route Domain to assign to the Partition. If no route domain
|
||||
is specified, then the default route domain for the system (typically
|
||||
zero) will be used only when creating a new partition.
|
||||
type: int
|
||||
state:
|
||||
description:
|
||||
- Whether the partition should exist or not.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
notes:
|
||||
- Requires BIG-IP software version >= 12
|
||||
extends_documentation_fragment: f5
|
||||
|
@ -118,18 +122,12 @@ try:
|
|||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
from library.module_utils.network.f5.common import AnsibleF5Parameters
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import cleanup_tokens
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.compare import cmp_str_with_none
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
from ansible.module_utils.network.f5.common import AnsibleF5Parameters
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import cleanup_tokens
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.compare import cmp_str_with_none
|
||||
|
||||
|
||||
|
@ -238,7 +236,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -486,16 +484,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -25,21 +25,26 @@ options:
|
|||
- Specifies the number of days before a password expires.
|
||||
- Based on this value, the BIG-IP system automatically warns users when their
|
||||
password is about to expire.
|
||||
type: int
|
||||
max_duration:
|
||||
description:
|
||||
- Specifies the maximum number of days a password is valid.
|
||||
type: int
|
||||
max_login_failures:
|
||||
description:
|
||||
- Specifies the number of consecutive unsuccessful login attempts
|
||||
that the system allows before locking out the user.
|
||||
- Specify zero (0) to disable this parameter.
|
||||
type: int
|
||||
min_duration:
|
||||
description:
|
||||
- Specifies the minimum number of days a password is valid.
|
||||
type: int
|
||||
min_length:
|
||||
description:
|
||||
- Specifies the minimum number of characters in a valid password.
|
||||
- This value must be between 6 and 255.
|
||||
type: int
|
||||
policy_enforcement:
|
||||
description:
|
||||
- Enables or disables the password policy on the BIG-IP system.
|
||||
|
@ -48,23 +53,28 @@ options:
|
|||
description:
|
||||
- Specifies the number of lowercase alpha characters that must be
|
||||
present in a password for the password to be valid.
|
||||
type: int
|
||||
required_numeric:
|
||||
description:
|
||||
- Specifies the number of numeric characters that must be present in
|
||||
a password for the password to be valid.
|
||||
type: int
|
||||
required_special:
|
||||
description:
|
||||
- Specifies the number of special characters that must be present in
|
||||
a password for the password to be valid.
|
||||
type: int
|
||||
required_uppercase:
|
||||
description:
|
||||
- Specifies the number of uppercase alpha characters that must be
|
||||
present in a password for the password to be valid.
|
||||
type: int
|
||||
password_memory:
|
||||
description:
|
||||
- Specifies whether the user has configured the BIG-IP system to
|
||||
remember a password on a specific computer and how many passwords
|
||||
to remember.
|
||||
type: int
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -145,23 +155,17 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
|
||||
|
||||
|
@ -288,7 +292,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -423,16 +427,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -30,9 +30,11 @@ options:
|
|||
- The description to attach to the policy.
|
||||
- This parameter is only supported on versions of BIG-IP >= 12.1.0. On earlier
|
||||
versions it will simply be ignored.
|
||||
type: str
|
||||
name:
|
||||
description:
|
||||
- The name of the policy to create.
|
||||
type: str
|
||||
required: True
|
||||
state:
|
||||
description:
|
||||
|
@ -43,6 +45,7 @@ options:
|
|||
When modifying rules, it is required that policies first be in a draft.
|
||||
- Drafting is only supported on versions of BIG-IP >= 12.1.0. On versions
|
||||
prior to that, specifying a C(state) of C(draft) will raise an error.
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
|
@ -55,6 +58,7 @@ options:
|
|||
policies, the default is C(first).
|
||||
- This module does not allow you to specify the C(best) strategy to use.
|
||||
It will choose the system default (C(/Common/best-match)) for you instead.
|
||||
type: str
|
||||
choices:
|
||||
- first
|
||||
- all
|
||||
|
@ -69,9 +73,11 @@ options:
|
|||
- The C(actions) for a default rule are C(ignore).
|
||||
- The C(bigip_policy_rule) module can be used to create and edit existing
|
||||
and new rules.
|
||||
type: list
|
||||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
|
@ -197,23 +203,17 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.icontrol import tmos_version
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.icontrol import tmos_version
|
||||
|
||||
|
||||
|
@ -343,7 +343,7 @@ class ComplexChanges(ComplexParameters):
|
|||
class BaseManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.have = None
|
||||
self.want = Parameters(params=self.module.params)
|
||||
|
||||
|
@ -1058,7 +1058,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.kwargs = kwargs
|
||||
|
||||
def exec_module(self):
|
||||
|
@ -1116,16 +1116,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,6 +23,7 @@ options:
|
|||
description:
|
||||
description:
|
||||
- Description of the policy rule.
|
||||
type: str
|
||||
actions:
|
||||
description:
|
||||
- The actions that you want the policy rule to perform.
|
||||
|
@ -41,31 +42,43 @@ options:
|
|||
- When C(type) is C(ignore), will remove all existing actions from this
|
||||
rule.
|
||||
- When C(type) is C(redirect), will redirect an HTTP request to a different URL.
|
||||
type: str
|
||||
required: true
|
||||
choices: ['forward', 'enable', 'ignore', 'redirect']
|
||||
choices:
|
||||
- forward
|
||||
- enable
|
||||
- ignore
|
||||
- redirect
|
||||
pool:
|
||||
description:
|
||||
- Pool that you want to forward traffic to.
|
||||
- This parameter is only valid with the C(forward) type.
|
||||
type: str
|
||||
virtual:
|
||||
description:
|
||||
- Virtual Server that you want to forward traffic to.
|
||||
- This parameter is only valid with the C(forward) type.
|
||||
type: str
|
||||
asm_policy:
|
||||
description:
|
||||
- ASM policy to enable.
|
||||
- This parameter is only valid with the C(enable) type.
|
||||
type: str
|
||||
location:
|
||||
description:
|
||||
- The new URL for which a redirect response will be sent.
|
||||
- A Tcl command substitution can be used for this field.
|
||||
type: str
|
||||
type: list
|
||||
policy:
|
||||
description:
|
||||
- The name of the policy that you want to associate this rule with.
|
||||
type: str
|
||||
required: True
|
||||
name:
|
||||
description:
|
||||
- The name of the rule.
|
||||
type: str
|
||||
required: True
|
||||
conditions:
|
||||
description:
|
||||
|
@ -86,32 +99,42 @@ options:
|
|||
list will provide a match.
|
||||
- When C(type) is C(all_traffic), will remove all existing conditions from
|
||||
this rule.
|
||||
type: str
|
||||
required: True
|
||||
choices: [ 'http_uri', 'all_traffic', 'http_host' ]
|
||||
choices:
|
||||
- http_uri
|
||||
- all_traffic
|
||||
- http_host
|
||||
path_begins_with_any:
|
||||
description:
|
||||
- A list of strings of characters that the HTTP URI should start with.
|
||||
- This parameter is only valid with the C(http_uri) type.
|
||||
type: str
|
||||
host_is_any:
|
||||
description:
|
||||
- A list of strings of characters that the HTTP Host should match.
|
||||
- This parameter is only valid with the C(http_host) type.
|
||||
type: str
|
||||
host_begins_with_any:
|
||||
description:
|
||||
- A list of strings of characters that the HTTP Host should start with.
|
||||
- This parameter is only valid with the C(http_host) type.
|
||||
type: str
|
||||
type: list
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the key is uploaded to the device. When
|
||||
C(absent), ensures that the key is removed from the device. If the key
|
||||
is currently in use, the module will not be able to remove the key.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
extends_documentation_fragment: f5
|
||||
requirements:
|
||||
|
@ -238,22 +261,16 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
|
||||
|
||||
class Parameters(AnsibleF5Parameters):
|
||||
|
@ -694,7 +711,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -1039,16 +1056,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,10 +23,12 @@ options:
|
|||
description:
|
||||
description:
|
||||
- Specifies descriptive text that identifies the pool.
|
||||
type: str
|
||||
version_added: 2.3
|
||||
name:
|
||||
description:
|
||||
- Pool name
|
||||
type: str
|
||||
required: True
|
||||
aliases:
|
||||
- pool
|
||||
|
@ -34,6 +36,7 @@ options:
|
|||
description:
|
||||
- Load balancing method. When creating a new pool, if this value is not
|
||||
specified, the default of C(round-robin) will be used.
|
||||
type: str
|
||||
version_added: 1.3
|
||||
choices:
|
||||
- dynamic-ratio-member
|
||||
|
@ -69,40 +72,50 @@ options:
|
|||
or already existing on the device.
|
||||
- Both C(single) and C(and_list) are functionally identical since BIG-IP
|
||||
considers all monitors as "a list".
|
||||
type: str
|
||||
choices:
|
||||
- and_list
|
||||
- m_of_n
|
||||
- single
|
||||
version_added: 1.3
|
||||
choices: ['and_list', 'm_of_n', 'single']
|
||||
quorum:
|
||||
description:
|
||||
- Monitor quorum value when C(monitor_type) is C(m_of_n).
|
||||
- Quorum must be a value of 1 or greater when C(monitor_type) is C(m_of_n).
|
||||
type: int
|
||||
version_added: 1.3
|
||||
monitors:
|
||||
description:
|
||||
- Monitor template name list. If the partition is not provided as part of
|
||||
the monitor name, then the C(partition) option will be used instead.
|
||||
type: list
|
||||
version_added: 1.3
|
||||
slow_ramp_time:
|
||||
description:
|
||||
- Sets the ramp-up time (in seconds) to gradually ramp up the load on
|
||||
newly added or freshly detected up pool members.
|
||||
type: int
|
||||
version_added: 1.3
|
||||
reselect_tries:
|
||||
description:
|
||||
- Sets the number of times the system tries to contact a pool member
|
||||
after a passive failure.
|
||||
type: int
|
||||
version_added: 2.2
|
||||
service_down_action:
|
||||
description:
|
||||
- Sets the action to take when node goes down in pool.
|
||||
version_added: 1.3
|
||||
type: str
|
||||
choices:
|
||||
- none
|
||||
- reset
|
||||
- drop
|
||||
- reselect
|
||||
version_added: 1.3
|
||||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
version_added: 2.5
|
||||
state:
|
||||
|
@ -110,10 +123,11 @@ options:
|
|||
- When C(present), guarantees that the pool exists with the provided
|
||||
attributes.
|
||||
- When C(absent), removes the pool from the system.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- absent
|
||||
- present
|
||||
default: present
|
||||
version_added: 2.5
|
||||
metadata:
|
||||
description:
|
||||
|
@ -123,6 +137,7 @@ options:
|
|||
- Values for all of the keys will be stored as strings; this includes values
|
||||
that are numbers.
|
||||
- Data will be persisted, not ephemeral.
|
||||
type: raw
|
||||
version_added: 2.5
|
||||
priority_group_activation:
|
||||
description:
|
||||
|
@ -140,12 +155,14 @@ options:
|
|||
priority group.
|
||||
- When a sufficient number of members become available in the higher priority
|
||||
group, the system again directs traffic to the higher priority group.
|
||||
type: int
|
||||
aliases:
|
||||
- minimum_active_members
|
||||
version_added: 2.6
|
||||
aggregate:
|
||||
description:
|
||||
- List of pool definitions to be created, modified or removed.
|
||||
type: list
|
||||
aliases:
|
||||
- pools
|
||||
version_added: 2.8
|
||||
|
@ -154,8 +171,8 @@ options:
|
|||
- Remove pools not defined in the C(aggregate) parameter.
|
||||
- This operation is all or none, meaning that it will stop if there are some pools
|
||||
that cannot be removed.
|
||||
default: no
|
||||
type: bool
|
||||
default: no
|
||||
aliases:
|
||||
- purge
|
||||
version_added: 2.8
|
||||
|
@ -395,24 +412,18 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.compare import cmp_str_with_none
|
||||
from library.module_utils.network.f5.icontrol import TransactionContextManager
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.compare import cmp_str_with_none
|
||||
from ansible.module_utils.network.f5.icontrol import TransactionContextManager
|
||||
|
||||
|
@ -799,7 +810,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = None
|
||||
self.have = None
|
||||
self.changes = None
|
||||
|
@ -1248,16 +1259,12 @@ def main():
|
|||
required_one_of=spec.required_one_of
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -27,31 +27,36 @@ options:
|
|||
- This parameter is optional and, if not specified, a node name will be
|
||||
created automatically from either the specified C(address) or C(fqdn).
|
||||
- The C(enabled) state is an alias of C(present).
|
||||
type: str
|
||||
version_added: 2.6
|
||||
state:
|
||||
description:
|
||||
- Pool member state.
|
||||
type: str
|
||||
required: True
|
||||
default: present
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
- enabled
|
||||
- disabled
|
||||
- forced_offline
|
||||
default: present
|
||||
pool:
|
||||
description:
|
||||
- Pool name. This pool must exist.
|
||||
type: str
|
||||
required: True
|
||||
partition:
|
||||
description:
|
||||
- Partition
|
||||
- Partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
address:
|
||||
description:
|
||||
- IP address of the pool member. This can be either IPv4 or IPv6. When creating a
|
||||
new pool member, one of either C(address) or C(fqdn) must be provided. This
|
||||
parameter cannot be updated after it is set.
|
||||
type: str
|
||||
aliases:
|
||||
- ip
|
||||
- host
|
||||
|
@ -66,6 +71,7 @@ options:
|
|||
- FQDN names must end with a letter or a number.
|
||||
- When creating a new pool member, one of either C(address) or C(fqdn) must be
|
||||
provided. This parameter cannot be updated after it is set.
|
||||
type: str
|
||||
aliases:
|
||||
- hostname
|
||||
version_added: 2.6
|
||||
|
@ -73,22 +79,27 @@ options:
|
|||
description:
|
||||
- Pool member port.
|
||||
- This value cannot be changed after it has been set.
|
||||
type: int
|
||||
required: True
|
||||
connection_limit:
|
||||
description:
|
||||
- Pool member connection limit. Setting this to 0 disables the limit.
|
||||
type: int
|
||||
description:
|
||||
description:
|
||||
- Pool member description.
|
||||
type: str
|
||||
rate_limit:
|
||||
description:
|
||||
- Pool member rate limit (connections-per-second). Setting this to 0
|
||||
disables the limit.
|
||||
type: int
|
||||
ratio:
|
||||
description:
|
||||
- Pool member ratio weight. Valid values range from 1 through 100.
|
||||
New pool members -- unless overridden with this value -- default
|
||||
to 1.
|
||||
type: int
|
||||
preserve_node:
|
||||
description:
|
||||
- When state is C(absent) attempts to remove the node that the pool
|
||||
|
@ -108,6 +119,7 @@ options:
|
|||
assigned to the pool member.
|
||||
- The higher the number, the higher the priority, so a member with a priority
|
||||
of 3 has higher priority than a member with a priority of 1.
|
||||
type: int
|
||||
version_added: 2.5
|
||||
fqdn_auto_populate:
|
||||
description:
|
||||
|
@ -128,13 +140,14 @@ options:
|
|||
reuse_nodes:
|
||||
description:
|
||||
- Reuses node definitions if requested.
|
||||
default: yes
|
||||
type: bool
|
||||
default: yes
|
||||
version_added: 2.6
|
||||
monitors:
|
||||
description:
|
||||
- Specifies the health monitors that the system currently uses to monitor
|
||||
this resource.
|
||||
type: list
|
||||
version_added: 2.8
|
||||
availability_requirements:
|
||||
description:
|
||||
|
@ -147,13 +160,18 @@ options:
|
|||
- Monitor rule type when C(monitors) is specified.
|
||||
- When creating a new pool, if this value is not specified, the default of
|
||||
'all' will be used.
|
||||
choices: ['all', 'at_least']
|
||||
type: str
|
||||
choices:
|
||||
- all
|
||||
- at_least
|
||||
at_least:
|
||||
description:
|
||||
- Specifies the minimum number of active health monitors that must be successful
|
||||
before the link is considered up.
|
||||
- This parameter is only relevant when a C(type) of C(at_least) is used.
|
||||
- This parameter will be ignored if a type of C(all) is used.
|
||||
type: int
|
||||
type: dict
|
||||
version_added: 2.8
|
||||
ip_encapsulation:
|
||||
description:
|
||||
|
@ -163,10 +181,12 @@ options:
|
|||
- When C(none), disables IP encapsulation.
|
||||
- When C(inherit), inherits IP encapsulation setting from the member's pool.
|
||||
- When any other value, Options are None, Inherit from Pool, and Member Specific.
|
||||
type: str
|
||||
version_added: 2.8
|
||||
aggregate:
|
||||
description:
|
||||
- List of pool member definitions to be created, modified or removed.
|
||||
type: list
|
||||
aliases:
|
||||
- members
|
||||
version_added: 2.8
|
||||
|
@ -175,8 +195,8 @@ options:
|
|||
- Remove members not defined in the C(aggregate) parameter.
|
||||
- This operation is all or none, meaning that it will stop if there are some pool members
|
||||
that cannot be removed.
|
||||
default: no
|
||||
type: bool
|
||||
default: no
|
||||
aliases:
|
||||
- purge
|
||||
version_added: 2.8
|
||||
|
@ -257,16 +277,16 @@ EXAMPLES = '''
|
|||
password: secret
|
||||
delegate_to: localhost
|
||||
loop:
|
||||
- host: 1.1.1.1
|
||||
- address: 1.1.1.1
|
||||
name: web1
|
||||
priority_group: 4
|
||||
- host: 2.2.2.2
|
||||
- address: 2.2.2.2
|
||||
name: web2
|
||||
priority_group: 3
|
||||
- host: 3.3.3.3
|
||||
- address: 3.3.3.3
|
||||
name: web3
|
||||
priority_group: 2
|
||||
- host: 4.4.4.4
|
||||
- address: 4.4.4.4
|
||||
name: web4
|
||||
priority_group: 1
|
||||
|
||||
|
@ -403,10 +423,7 @@ try:
|
|||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
from library.module_utils.network.f5.common import AnsibleF5Parameters
|
||||
from library.module_utils.network.f5.common import fq_name
|
||||
from library.module_utils.network.f5.common import cleanup_tokens
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import is_valid_hostname
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
|
@ -419,13 +436,9 @@ except ImportError:
|
|||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
from ansible.module_utils.network.f5.common import AnsibleF5Parameters
|
||||
from ansible.module_utils.network.f5.common import fq_name
|
||||
from ansible.module_utils.network.f5.common import cleanup_tokens
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import is_valid_hostname
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
from ansible.module_utils.network.f5.compare import cmp_str_with_none
|
||||
from ansible.module_utils.network.f5.ipaddress import is_valid_ip
|
||||
|
@ -990,7 +1003,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = None
|
||||
self.have = None
|
||||
self.changes = None
|
||||
|
@ -1618,16 +1631,12 @@ def main():
|
|||
required_one_of=spec.required_one_of,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,15 +23,18 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(analytics) profile.
|
||||
type: str
|
||||
description:
|
||||
description:
|
||||
- Description of the profile.
|
||||
type: str
|
||||
collect_geo:
|
||||
description:
|
||||
- Enables or disables the collection of the names of the countries
|
||||
|
@ -77,6 +80,7 @@ options:
|
|||
description:
|
||||
- Specifies the external logging publisher used to send statistical
|
||||
data to one or more destinations.
|
||||
type: str
|
||||
notification_by_syslog:
|
||||
description:
|
||||
- Enables or disables logging of the analytics alerts into the
|
||||
|
@ -90,18 +94,21 @@ options:
|
|||
description:
|
||||
- Specifies which email addresses receive alerts by email when
|
||||
C(notification_by_email) is enabled.
|
||||
type: list
|
||||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -138,24 +145,18 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
from library.module_utils.network.f5.compare import cmp_simple_list
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
from ansible.module_utils.network.f5.compare import cmp_simple_list
|
||||
|
||||
|
@ -523,7 +524,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -748,16 +749,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,17 +23,20 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- The parent template of this monitor template. Once this value has
|
||||
been set, it cannot be changed. By default, this value is the C(clientssl)
|
||||
parent on the C(Common) partition.
|
||||
type: str
|
||||
default: /Common/clientssl
|
||||
ciphers:
|
||||
description:
|
||||
- Specifies the list of ciphers that the system supports. When creating a new
|
||||
profile, the default cipher list is provided by the parent profile.
|
||||
type: str
|
||||
cert_key_chain:
|
||||
description:
|
||||
- One or more certificates and keys to associate with the SSL profile. This
|
||||
|
@ -47,25 +50,31 @@ options:
|
|||
cert:
|
||||
description:
|
||||
- Specifies a cert name for use.
|
||||
type: str
|
||||
required: True
|
||||
key:
|
||||
description:
|
||||
- Contains a key name.
|
||||
type: str
|
||||
required: True
|
||||
chain:
|
||||
description:
|
||||
- Contains a certificate chain that is relevant to the certificate and key
|
||||
mentioned earlier.
|
||||
- This key is optional.
|
||||
type: str
|
||||
passphrase:
|
||||
description:
|
||||
- Contains the passphrase of the key file, should it require one.
|
||||
- Passphrases are encrypted on the remote BIG-IP device. Therefore, there is no way
|
||||
to compare them when updating a client SSL profile. Due to this, if you specify a
|
||||
passphrase, this module will always register a C(changed) event.
|
||||
type: str
|
||||
type: list
|
||||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
version_added: 2.5
|
||||
options:
|
||||
|
@ -73,6 +82,7 @@ options:
|
|||
- Options that the system uses for SSL processing in the form of a list. When
|
||||
creating a new profile, the list is provided by the parent profile.
|
||||
- When a C('') or C(none) value is provided all options for SSL processing are disabled.
|
||||
type: list
|
||||
choices:
|
||||
- netscape-reuse-cipher-change-bug
|
||||
- microsoft-big-sslv3-buffer
|
||||
|
@ -111,6 +121,7 @@ options:
|
|||
- The C(require-strict) setting the system requires strict renegotiation of SSL
|
||||
connections. In this mode the system refuses connections to insecure servers,
|
||||
and terminates existing SSL connections to insecure servers.
|
||||
type: str
|
||||
choices:
|
||||
- require
|
||||
- require-strict
|
||||
|
@ -138,8 +149,15 @@ options:
|
|||
version_added: 2.8
|
||||
sni_require:
|
||||
description:
|
||||
- Requires that the network peers also provide SNI support. This setting only takes effect when C(sni_default) is
|
||||
set to C(true). When creating a new profile, the setting is provided by the parent profile.
|
||||
- Requires that the network peers also provide SNI support, this setting only takes effect when C(sni_default) is
|
||||
set to C(true).
|
||||
- When creating a new profile, the setting is provided by the parent profile.
|
||||
type: bool
|
||||
version_added: 2.8
|
||||
strict_resume:
|
||||
description:
|
||||
- Enables or disables the resumption of SSL sessions after an unclean shutdown.
|
||||
- When creating a new profile, the setting is provided by the parent profile.
|
||||
type: bool
|
||||
version_added: 2.8
|
||||
client_certificate:
|
||||
|
@ -151,6 +169,7 @@ options:
|
|||
valid certificate.
|
||||
- When C(request), specifies that the system requests a valid certificate from a
|
||||
client but always authenticate the client.
|
||||
type: str
|
||||
choices:
|
||||
- ignore
|
||||
- require
|
||||
|
@ -163,10 +182,17 @@ options:
|
|||
SSL session.
|
||||
- When C(always), specifies that the system authenticates the client once for an
|
||||
SSL session and also upon reuse of that session.
|
||||
type: str
|
||||
choices:
|
||||
- once
|
||||
- always
|
||||
version_added: 2.8
|
||||
renegotiation:
|
||||
description:
|
||||
- Enables or disables SSL renegotiation.
|
||||
- When creating a new profile, the setting is provided by the parent profile.
|
||||
type: bool
|
||||
version_added: 2.8
|
||||
retain_certificate:
|
||||
description:
|
||||
- When C(yes), client certificate is retained in SSL session.
|
||||
|
@ -176,19 +202,23 @@ options:
|
|||
description:
|
||||
- Specifies the maximum number of certificates to be traversed in a client
|
||||
certificate chain.
|
||||
type: int
|
||||
version_added: 2.8
|
||||
trusted_cert_authority:
|
||||
description:
|
||||
- Specifies a client CA that the system trusts.
|
||||
type: str
|
||||
version_added: 2.8
|
||||
advertised_cert_authority:
|
||||
description:
|
||||
- Specifies that the CAs that the system advertises to clients is being trusted
|
||||
by the profile.
|
||||
type: str
|
||||
version_added: 2.8
|
||||
client_auth_crl:
|
||||
description:
|
||||
- Specifies the name of a file containing a list of revoked client certificates.
|
||||
type: str
|
||||
version_added: 2.8
|
||||
allow_expired_crl:
|
||||
description:
|
||||
|
@ -199,10 +229,11 @@ options:
|
|||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
version_added: 2.5
|
||||
notes:
|
||||
- Requires BIG-IP software version >= 12
|
||||
|
@ -251,7 +282,7 @@ EXAMPLES = r'''
|
|||
bigip_profile_client_ssl:
|
||||
state: present
|
||||
name: my_profile
|
||||
secure_renegotation: request
|
||||
secure_renegotiation: request
|
||||
provider:
|
||||
server: lb.mydomain.com
|
||||
user: admin
|
||||
|
@ -284,7 +315,7 @@ options:
|
|||
returned: changed
|
||||
type: list
|
||||
sample: ['no-sslv2', 'no-sslv3']
|
||||
secure_renegotation:
|
||||
secure_renegotiation:
|
||||
description: The method of secure SSL renegotiation.
|
||||
returned: changed
|
||||
type: str
|
||||
|
@ -294,6 +325,16 @@ allow_non_ssl:
|
|||
returned: changed
|
||||
type: bool
|
||||
sample: yes
|
||||
strict_resume:
|
||||
description: Resumption of SSL sessions after an unclean shutdown.
|
||||
returned: changed
|
||||
type: bool
|
||||
sample: yes
|
||||
renegotiation:
|
||||
description: Renegotiation of SSL sessions.
|
||||
returned: changed
|
||||
type: bool
|
||||
sample: yes
|
||||
'''
|
||||
|
||||
import os
|
||||
|
@ -306,25 +347,19 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.common import is_empty_list
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.common import is_empty_list
|
||||
|
||||
|
||||
|
@ -346,6 +381,8 @@ class Parameters(AnsibleF5Parameters):
|
|||
'clientCertCa': 'advertised_cert_authority',
|
||||
'crlFile': 'client_auth_crl',
|
||||
'allowExpiredCrl': 'allow_expired_crl',
|
||||
'strictResume': 'strict_resume',
|
||||
'renegotiation': 'renegotiation',
|
||||
}
|
||||
|
||||
api_attributes = [
|
||||
|
@ -366,6 +403,8 @@ class Parameters(AnsibleF5Parameters):
|
|||
'clientCertCa',
|
||||
'crlFile',
|
||||
'allowExpiredCrl',
|
||||
'strictResume',
|
||||
'renegotiation',
|
||||
]
|
||||
|
||||
returnables = [
|
||||
|
@ -386,6 +425,8 @@ class Parameters(AnsibleF5Parameters):
|
|||
'advertised_cert_authority',
|
||||
'client_auth_crl',
|
||||
'allow_expired_crl',
|
||||
'strict_resume',
|
||||
'renegotiation',
|
||||
]
|
||||
|
||||
updatables = [
|
||||
|
@ -405,6 +446,8 @@ class Parameters(AnsibleF5Parameters):
|
|||
'advertised_cert_authority',
|
||||
'client_auth_crl',
|
||||
'allow_expired_crl',
|
||||
'strict_resume',
|
||||
'renegotiation',
|
||||
]
|
||||
|
||||
@property
|
||||
|
@ -485,6 +528,24 @@ class ModuleParameters(Parameters):
|
|||
return 'enabled'
|
||||
return 'disabled'
|
||||
|
||||
@property
|
||||
def strict_resume(self):
|
||||
result = flatten_boolean(self._values['strict_resume'])
|
||||
if result is None:
|
||||
return None
|
||||
if result == 'yes':
|
||||
return 'enabled'
|
||||
return 'disabled'
|
||||
|
||||
@property
|
||||
def renegotiation(self):
|
||||
result = flatten_boolean(self._values['renegotiation'])
|
||||
if result is None:
|
||||
return None
|
||||
if result == 'yes':
|
||||
return 'enabled'
|
||||
return 'disabled'
|
||||
|
||||
@property
|
||||
def options(self):
|
||||
options = self._values['options']
|
||||
|
@ -634,6 +695,14 @@ class ReportableChanges(Changes):
|
|||
return 'yes'
|
||||
return 'no'
|
||||
|
||||
@property
|
||||
def strict_resume(self):
|
||||
if self._values['strict_resume'] is None:
|
||||
return None
|
||||
elif self._values['strict_resume'] == 'enabled':
|
||||
return 'yes'
|
||||
return 'no'
|
||||
|
||||
@property
|
||||
def retain_certificate(self):
|
||||
return flatten_boolean(self._values['retain_certificate'])
|
||||
|
@ -757,7 +826,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -1008,6 +1077,8 @@ class ArgumentSpec(object):
|
|||
advertised_cert_authority=dict(),
|
||||
client_auth_crl=dict(),
|
||||
allow_expired_crl=dict(type='bool'),
|
||||
strict_resume=dict(type='bool'),
|
||||
renegotiation=dict(type='bool'),
|
||||
partition=dict(
|
||||
default='Common',
|
||||
fallback=(env_fallback, ['F5_PARTITION'])
|
||||
|
@ -1026,16 +1097,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -26,12 +26,14 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the DNS profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(dns) profile.
|
||||
type: str
|
||||
enable_dns_express:
|
||||
description:
|
||||
- Specifies whether the DNS Express engine is enabled.
|
||||
|
@ -112,6 +114,7 @@ options:
|
|||
- Specifies the user-created cache that the system uses to cache DNS responses.
|
||||
- When you select a cache for the system to use, you must also set C(enable_dns_cache)
|
||||
to C(yes)
|
||||
type: str
|
||||
version_added: 2.7
|
||||
unhandled_query_action:
|
||||
description:
|
||||
|
@ -125,6 +128,7 @@ options:
|
|||
- When C(no-error), the BIG-IP system returns the query with the NOERROR return code.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is provided by the parent profile.
|
||||
type: str
|
||||
choices:
|
||||
- allow
|
||||
- drop
|
||||
|
@ -135,15 +139,17 @@ options:
|
|||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -226,7 +232,6 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
|
@ -234,7 +239,6 @@ except ImportError:
|
|||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
|
@ -503,7 +507,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -735,15 +739,11 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
|
|
|
@ -23,12 +23,14 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(fastL4) profile.
|
||||
type: str
|
||||
idle_timeout:
|
||||
description:
|
||||
- Specifies the length of time that a connection is idle (has no traffic) before
|
||||
|
@ -42,6 +44,7 @@ options:
|
|||
regardless of how long they remain idle.
|
||||
- When C(0), or C(immediate), specifies that the system deletes connections
|
||||
immediately when they become idle.
|
||||
type: str
|
||||
client_timeout:
|
||||
description:
|
||||
- Specifies a timeout for Late Binding.
|
||||
|
@ -53,9 +56,11 @@ options:
|
|||
transmission.
|
||||
- When C(indefinite), disables the limit. This allows the client unlimited time
|
||||
to send the sender and target information.
|
||||
type: str
|
||||
description:
|
||||
description:
|
||||
- Description of the profile.
|
||||
type: str
|
||||
explicit_flow_migration:
|
||||
description:
|
||||
- Specifies whether a qualified late-binding connection requires an explicit iRule
|
||||
|
@ -75,6 +80,7 @@ options:
|
|||
Header DF bit.
|
||||
- When C(set), sets the outgoing packet's IP Header DF bit.
|
||||
- When C(clear), clears the outgoing packet's IP Header DF bit.
|
||||
type: str
|
||||
choices:
|
||||
- pmtu
|
||||
- preserve
|
||||
|
@ -89,6 +95,7 @@ options:
|
|||
- When C(pass-through), specifies that the IP ToS setting remains unchanged.
|
||||
- When C(mimic), specifies that the system sets the ToS level of outgoing packets to
|
||||
the same ToS level of the most-recently received incoming packet.
|
||||
type: str
|
||||
ip_tos_to_server:
|
||||
description:
|
||||
- Specifies, for IP traffic passing through the system to back-end servers, whether
|
||||
|
@ -98,6 +105,7 @@ options:
|
|||
- When C(pass-through), specifies that the IP ToS setting remains unchanged.
|
||||
- When C(mimic), specifies that the system sets the ToS level of outgoing packets to
|
||||
the same ToS level of the most-recently received incoming packet.
|
||||
type: str
|
||||
ip_ttl_mode:
|
||||
description:
|
||||
- Specifies the outgoing TCP packet's IP Header TTL mode.
|
||||
|
@ -108,6 +116,7 @@ options:
|
|||
incoming TTL value.
|
||||
- When C(set), sets the outgoing IP Header TTL value to a specific value(as specified
|
||||
by C(ip_ttl_v4) or C(ip_ttl_v6).
|
||||
type: str
|
||||
choices:
|
||||
- proxy
|
||||
- preserve
|
||||
|
@ -117,13 +126,16 @@ options:
|
|||
description:
|
||||
- Specifies the outgoing packet's IP Header TTL value for IPv4 traffic.
|
||||
- Maximum TTL value that can be specified is 255.
|
||||
type: int
|
||||
ip_ttl_v6:
|
||||
description:
|
||||
- Specifies the outgoing packet's IP Header TTL value for IPv6 traffic.
|
||||
- Maximum TTL value that can be specified is 255.
|
||||
type: int
|
||||
keep_alive_interval:
|
||||
description:
|
||||
- Specifies the keep-alive probe interval, in seconds.
|
||||
type: int
|
||||
late_binding:
|
||||
description:
|
||||
- Enables intelligent selection of a back-end server or pool, using an
|
||||
|
@ -140,6 +152,7 @@ options:
|
|||
- When a number, specifies the link QoS setting that the system inserts
|
||||
in the IP packet header.
|
||||
- When C(pass-through), specifies that the link QoS setting remains unchanged.
|
||||
type: str
|
||||
link_qos_to_server:
|
||||
description:
|
||||
- Specifies, for IP traffic passing through the system to back-end servers,
|
||||
|
@ -151,6 +164,7 @@ options:
|
|||
- When a number, specifies the link QoS setting that the system inserts
|
||||
in the IP packet header.
|
||||
- When C(pass-through), specifies that the link QoS setting remains unchanged.
|
||||
type: str
|
||||
loose_close:
|
||||
description:
|
||||
- When C(yes), specifies, that the system closes a loosely-initiated connection
|
||||
|
@ -166,6 +180,7 @@ options:
|
|||
description:
|
||||
- Specifies a maximum segment size (MSS) override for server-side connections.
|
||||
- Valid range is 256 to 9162 or 0 to disable.
|
||||
type: int
|
||||
reassemble_fragments:
|
||||
description:
|
||||
- When C(yes), specifies that the system reassembles IP fragments.
|
||||
|
@ -174,6 +189,7 @@ options:
|
|||
description:
|
||||
- Specifies the amount of data the BIG-IP system can accept without acknowledging
|
||||
the server.
|
||||
type: int
|
||||
reset_on_timeout:
|
||||
description:
|
||||
- When C(yes), specifies that the system sends a reset packet (RST) in addition
|
||||
|
@ -204,9 +220,11 @@ options:
|
|||
- Specifies a value that overrides the SYN cookie maximum segment size (MSS)
|
||||
value in the SYN-ACK packet that is returned to the client.
|
||||
- Valid values are 0, and values from 256 through 9162.
|
||||
type: int
|
||||
tcp_close_timeout:
|
||||
description:
|
||||
- Specifies the length of time a connection can remain idle before deletion.
|
||||
type: str
|
||||
tcp_generate_isn:
|
||||
description:
|
||||
- When C(yes), specifies that the system generates initial sequence numbers
|
||||
|
@ -223,6 +241,7 @@ options:
|
|||
- When C(disabled), specifies that the system does not apply a timeout to a
|
||||
TCP handshake.
|
||||
- When C(indefinite), specifies that attempting a TCP handshake never times out.
|
||||
type: str
|
||||
tcp_strip_sack:
|
||||
description:
|
||||
- When C(yes), specifies that the system blocks a TCP selective ACK SackOK
|
||||
|
@ -232,9 +251,11 @@ options:
|
|||
description:
|
||||
- Specifies the number of milliseconds that a connection is in the TIME-WAIT
|
||||
state before closing.
|
||||
type: int
|
||||
tcp_timestamp_mode:
|
||||
description:
|
||||
- Specifies the action that the system should take on TCP timestamps.
|
||||
type: str
|
||||
choices:
|
||||
- preserve
|
||||
- rewrite
|
||||
|
@ -242,6 +263,7 @@ options:
|
|||
tcp_wscale_mode:
|
||||
description:
|
||||
- Specifies the action that the system should take on TCP windows.
|
||||
type: str
|
||||
choices:
|
||||
- preserve
|
||||
- rewrite
|
||||
|
@ -254,21 +276,24 @@ options:
|
|||
- When C(fallback), reverts the connection to normal FastL4 load-balancing,
|
||||
based on the client's TCP header. This causes the BIG-IP system to choose
|
||||
a back-end server based only on the source address and port.
|
||||
type: str
|
||||
choices:
|
||||
- disconnect
|
||||
- fallback
|
||||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -460,22 +485,16 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
|
||||
|
@ -1115,7 +1134,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -1368,16 +1387,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,21 +23,25 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(http) profile.
|
||||
type: str
|
||||
default: /Common/http
|
||||
description:
|
||||
description:
|
||||
- Description of the profile.
|
||||
type: str
|
||||
proxy_type:
|
||||
description:
|
||||
- Specifies the proxy mode for the profile.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: str
|
||||
choices:
|
||||
- reverse
|
||||
- transparent
|
||||
|
@ -50,6 +54,7 @@ options:
|
|||
just as an object name (C(foo)).
|
||||
- To remove the entry a value of C(none) or C('') can be set, however the profile C(proxy_type)
|
||||
must not be set as C(explicit).
|
||||
type: str
|
||||
insert_xforwarded_for:
|
||||
description:
|
||||
- When specified system inserts an X-Forwarded-For header in an HTTP request
|
||||
|
@ -70,6 +75,7 @@ options:
|
|||
the system changes it to the virtual server address.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: str
|
||||
choices:
|
||||
- none
|
||||
- all
|
||||
|
@ -87,14 +93,16 @@ options:
|
|||
- Passphrase for cookie encryption.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: str
|
||||
update_password:
|
||||
description:
|
||||
- C(always) will update passwords if the C(encrypt_cookie_secret) is specified.
|
||||
- C(on_create) will only set the password for newly created profiles.
|
||||
default: always
|
||||
type: str
|
||||
choices:
|
||||
- always
|
||||
- on_create
|
||||
default: always
|
||||
header_erase:
|
||||
description:
|
||||
- The name of a header, in an HTTP request, which the system removes from request.
|
||||
|
@ -102,6 +110,7 @@ options:
|
|||
- The format of the header must be in C(KEY:VALUE) format, otherwise error is raised.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: str
|
||||
version_added: 2.8
|
||||
header_insert:
|
||||
description:
|
||||
|
@ -110,6 +119,7 @@ options:
|
|||
- The format of the header must be in C(KEY:VALUE) format, otherwise error is raised.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: str
|
||||
version_added: 2.8
|
||||
server_agent_name:
|
||||
description:
|
||||
|
@ -117,6 +127,7 @@ options:
|
|||
- To remove the entry completely a value of C(none) or C('') should be set.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: str
|
||||
version_added: 2.8
|
||||
include_subdomains:
|
||||
description:
|
||||
|
@ -134,6 +145,7 @@ options:
|
|||
re-enables plaintext HTTP access, while specifying C(indefinite) will set it to the maximum value.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: str
|
||||
version_added: 2.8
|
||||
hsts_mode:
|
||||
description:
|
||||
|
@ -145,15 +157,17 @@ options:
|
|||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Wojciech Wypior (@wojtek0806)
|
||||
|
@ -233,25 +247,19 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.urls import check_header_validity
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.urls import check_header_validity
|
||||
|
||||
|
||||
|
@ -639,7 +647,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -880,16 +888,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,16 +23,19 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(http2) profile.
|
||||
type: str
|
||||
default: /Common/http2
|
||||
description:
|
||||
description:
|
||||
- Description of the profile.
|
||||
type: str
|
||||
streams:
|
||||
description:
|
||||
- Specifies the number of outstanding concurrent requests that are allowed on a single HTTP/2 connection.
|
||||
|
@ -54,6 +57,7 @@ options:
|
|||
description:
|
||||
- Specifies the name of the HTTP header controlled by C(insert_header) parameter.
|
||||
- When creating a new profile, if this parameter is not specified, the default is provided by the parent profile.
|
||||
type: str
|
||||
enforce_tls_requirements:
|
||||
description:
|
||||
- Specifies whether the system requires TLS for communications between specified senders and recipients.
|
||||
|
@ -64,10 +68,10 @@ options:
|
|||
- Specifies what will cause an incoming connection to be handled as a HTTP/2 connection.
|
||||
- The C(alpn) and C(always) are mutually exclusive.
|
||||
- When creating a new profile, if this parameter is not specified, the default is provided by the parent profile.
|
||||
type: list
|
||||
choices:
|
||||
- alpn
|
||||
- always
|
||||
type: list
|
||||
frame_size:
|
||||
description:
|
||||
- Specifies the size of data frames, in bytes, that HTTP/2 sends to the client.
|
||||
|
@ -95,15 +99,17 @@ options:
|
|||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Wojciech Wypior (@wojtek0806)
|
||||
|
@ -184,26 +190,20 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
from library.module_utils.network.f5.common import is_empty_list
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
from ansible.module_utils.network.f5.common import is_empty_list
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
|
||||
|
||||
class Parameters(AnsibleF5Parameters):
|
||||
|
@ -440,7 +440,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -667,16 +667,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,27 +23,32 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the compression profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(httpcompression) profile.
|
||||
type: str
|
||||
description:
|
||||
description:
|
||||
- Description of the HTTP compression profile.
|
||||
type: str
|
||||
buffer_size:
|
||||
description:
|
||||
- Maximum number of compressed bytes that the system buffers before inserting
|
||||
a Content-Length header (which specifies the compressed size) into the response.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is provided by the parent profile.
|
||||
type: int
|
||||
gzip_level:
|
||||
description:
|
||||
- Specifies the degree to which the system compresses the content.
|
||||
- Higher compression levels cause the compression process to be slower.
|
||||
- Valid values are between 1 (least compression and fastest) to 9 (most
|
||||
compression and slowest).
|
||||
type: int
|
||||
choices:
|
||||
- 1
|
||||
- 2
|
||||
|
@ -58,6 +63,7 @@ options:
|
|||
description:
|
||||
- Number of kilobytes of memory that the system uses for internal compression
|
||||
buffers when compressing a server response.
|
||||
type: int
|
||||
choices:
|
||||
- 1
|
||||
- 2
|
||||
|
@ -72,6 +78,7 @@ options:
|
|||
description:
|
||||
- Number of kilobytes in the window size that the system uses when compressing
|
||||
a server response.
|
||||
type: int
|
||||
choices:
|
||||
- 1
|
||||
- 2
|
||||
|
@ -84,15 +91,17 @@ options:
|
|||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -149,21 +158,15 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
|
||||
|
||||
|
@ -303,7 +306,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -527,16 +530,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,12 +23,14 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the OneConnect profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(oneconnect) profile.
|
||||
type: str
|
||||
source_mask:
|
||||
description:
|
||||
- Specifies a value that the system applies to the source address to determine
|
||||
|
@ -42,9 +44,11 @@ options:
|
|||
connections originating from the same source address.
|
||||
- When you are using a SNAT or SNAT pool, the server-side source address is
|
||||
translated first and then the OneConnect mask is applied to the translated address.
|
||||
type: str
|
||||
description:
|
||||
description:
|
||||
- Description of the profile.
|
||||
type: str
|
||||
maximum_size:
|
||||
description:
|
||||
- Specifies the maximum number of connections that the system holds in the
|
||||
|
@ -53,6 +57,7 @@ options:
|
|||
response is completed.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: int
|
||||
maximum_age:
|
||||
description:
|
||||
- Specifies the maximum number of seconds allowed for a connection in the connection
|
||||
|
@ -61,11 +66,13 @@ options:
|
|||
connection from the re-use pool.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: int
|
||||
maximum_reuse:
|
||||
description:
|
||||
- Specifies the maximum number of times that a server-side connection can be reused.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: int
|
||||
idle_timeout_override:
|
||||
description:
|
||||
- Specifies the number of seconds that a connection is idle before the connection
|
||||
|
@ -76,6 +83,7 @@ options:
|
|||
- When C(disabled), specifies that there is no timeout override for the connection.
|
||||
- When C(indefinite), Specifies that a connection may be idle with no timeout
|
||||
override.
|
||||
type: str
|
||||
limit_type:
|
||||
description:
|
||||
- When C(none), simultaneous in-flight requests and responses over TCP connections
|
||||
|
@ -91,6 +99,7 @@ options:
|
|||
short expiration timeouts.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is provided by the parent profile.
|
||||
type: str
|
||||
choices:
|
||||
- none
|
||||
- idle
|
||||
|
@ -107,15 +116,17 @@ options:
|
|||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -183,23 +194,17 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.ipaddress import is_valid_ip
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.ipaddress import is_valid_ip
|
||||
|
||||
|
||||
|
@ -379,7 +384,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -600,16 +605,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,15 +23,18 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
description:
|
||||
description:
|
||||
- Description of the profile.
|
||||
type: str
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(cookie) profile.
|
||||
type: str
|
||||
default: cookie
|
||||
cookie_method:
|
||||
description:
|
||||
|
@ -47,6 +50,7 @@ options:
|
|||
- When C(rewrite), specifies that the system intercepts the BIGipCookie
|
||||
header, sent from the server, and overwrites the name and value of that
|
||||
cookie.
|
||||
type: str
|
||||
choices:
|
||||
- hash
|
||||
- insert
|
||||
|
@ -55,6 +59,7 @@ options:
|
|||
cookie_name:
|
||||
description:
|
||||
- Specifies a unique name for the cookie.
|
||||
type: str
|
||||
http_only:
|
||||
description:
|
||||
- Specifies whether the httponly attribute should be enabled or
|
||||
|
@ -87,6 +92,7 @@ options:
|
|||
- When C(disabled), generates the cookie format unencrypted.
|
||||
- When C(preferred), generate an encrypted cookie, but accepts both encrypted and unencrypted formats.
|
||||
- When C(required), cookie format must be encrypted.
|
||||
type: str
|
||||
choices:
|
||||
- disabled
|
||||
- preferred
|
||||
|
@ -114,33 +120,62 @@ options:
|
|||
encryption_passphrase:
|
||||
description:
|
||||
- Specifies a passphrase to be used for cookie encryption.
|
||||
type: str
|
||||
update_password:
|
||||
description:
|
||||
- C(always) will allow to update passphrases if the user chooses to do so.
|
||||
C(on_create) will only set the passphrase for newly created profiles.
|
||||
default: always
|
||||
type: str
|
||||
choices:
|
||||
- always
|
||||
- on_create
|
||||
default: always
|
||||
expiration:
|
||||
description:
|
||||
- Specifies the expiration time of the cookie. By default the system generates and uses session cookie.
|
||||
This cookie expires when the user session expires, that is when the browser is closed.
|
||||
suboptions:
|
||||
days:
|
||||
description:
|
||||
- Cookie expiration time in days, the value must be in range from C(0) to C(24855) days.
|
||||
type: int
|
||||
hours:
|
||||
description:
|
||||
- Cookie expiration time in hours, the value must be in the range from C(0) to C(23) hours.
|
||||
type: int
|
||||
minutes:
|
||||
description:
|
||||
- Cookie expiration time in minutes, the value must be in the range from C(0) to C(59) minutes.
|
||||
type: int
|
||||
seconds:
|
||||
description:
|
||||
- Cookie expiration time in seconds, the value must be in the range from C(0) to C(59) seconds.
|
||||
type: int
|
||||
default: 0
|
||||
type: dict
|
||||
version_added: 2.8
|
||||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
- Wojciech Wypior (@wojtek0806)
|
||||
'''
|
||||
|
||||
EXAMPLES = r'''
|
||||
- name: Create a ...
|
||||
- name: Create a persistence cookie profile
|
||||
bigip_profile_persistence_cookie:
|
||||
name: foo
|
||||
provider:
|
||||
|
@ -148,6 +183,18 @@ EXAMPLES = r'''
|
|||
server: lb.mydomain.com
|
||||
user: admin
|
||||
delegate_to: localhost
|
||||
- name: Create a persistence cookie profile with expiration time
|
||||
bigip_profile_persistence_cookie:
|
||||
name: foo
|
||||
expiration:
|
||||
days: 7
|
||||
hours: 12
|
||||
minutes: 30
|
||||
provider:
|
||||
password: secret
|
||||
server: lb.mydomain.com
|
||||
user: admin
|
||||
delegate_to: localhost
|
||||
'''
|
||||
|
||||
RETURN = r'''
|
||||
|
@ -216,6 +263,32 @@ secure:
|
|||
returned: changed
|
||||
type: bool
|
||||
sample: no
|
||||
expiration:
|
||||
description: The expiration time of the cookie.
|
||||
returned: changed
|
||||
type: complex
|
||||
contains:
|
||||
days:
|
||||
description: Cookie expiration time in days.
|
||||
returned: changed
|
||||
type: int
|
||||
sample: 125
|
||||
hours:
|
||||
description: Cookie expiration time in hours.
|
||||
returned: changed
|
||||
type: int
|
||||
sample: 22
|
||||
minutes:
|
||||
description: Cookie expiration time in minutes.
|
||||
returned: changed
|
||||
type: int
|
||||
sample: 58
|
||||
seconds:
|
||||
description: Cookie expiration time in seconds.
|
||||
returned: changed
|
||||
type: int
|
||||
sample: 20
|
||||
sample: hash/dictionary of values
|
||||
'''
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
|
@ -225,11 +298,8 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
from library.module_utils.network.f5.compare import cmp_str_with_none
|
||||
|
@ -237,11 +307,8 @@ except ImportError:
|
|||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
from ansible.module_utils.network.f5.compare import cmp_str_with_none
|
||||
|
@ -278,6 +345,7 @@ class Parameters(AnsibleF5Parameters):
|
|||
'secure',
|
||||
'cookieEncryptionPassphrase',
|
||||
'method',
|
||||
'expiration'
|
||||
]
|
||||
|
||||
returnables = [
|
||||
|
@ -295,6 +363,7 @@ class Parameters(AnsibleF5Parameters):
|
|||
'encryption_passphrase',
|
||||
'description',
|
||||
'secure',
|
||||
'expiration',
|
||||
]
|
||||
|
||||
updatables = [
|
||||
|
@ -312,6 +381,7 @@ class Parameters(AnsibleF5Parameters):
|
|||
'encryption_passphrase',
|
||||
'description',
|
||||
'secure',
|
||||
'expiration',
|
||||
]
|
||||
|
||||
@property
|
||||
|
@ -371,6 +441,86 @@ class ModuleParameters(Parameters):
|
|||
return ''
|
||||
return self._values['description']
|
||||
|
||||
@property
|
||||
def expiration(self):
|
||||
if self._values['expiration'] is None:
|
||||
return None
|
||||
|
||||
days = self.days
|
||||
hours = self.hours
|
||||
minutes = self.minutes
|
||||
seconds = self.seconds
|
||||
|
||||
if days is not None:
|
||||
if hours is None:
|
||||
raise F5ModuleError(
|
||||
"Incorrect format, 'hours' parameter is missing value."
|
||||
)
|
||||
if minutes is None:
|
||||
raise F5ModuleError(
|
||||
"Incorrect format, 'minutes' parameter is missing value."
|
||||
)
|
||||
|
||||
expiry_time = '{0}:{1}:{2}:{3}'.format(days, hours, minutes, seconds)
|
||||
return expiry_time
|
||||
|
||||
if hours is not None:
|
||||
if minutes is None:
|
||||
raise F5ModuleError(
|
||||
"Incorrect format, 'minutes' parameter is missing value."
|
||||
)
|
||||
|
||||
expiry_time = '{0}:{1}:{2}'.format(hours, minutes, seconds)
|
||||
return expiry_time
|
||||
|
||||
if minutes is not None:
|
||||
expiry_time = '{0}:{1}'.format(minutes, seconds)
|
||||
return expiry_time
|
||||
|
||||
return str(seconds)
|
||||
|
||||
@property
|
||||
def days(self):
|
||||
days = self._values['expiration']['days']
|
||||
if days is None:
|
||||
return None
|
||||
if days < 0 or days >= 24856:
|
||||
raise F5ModuleError(
|
||||
'The provided value is invalid, the correct value range is: 0 - 24855 days.'
|
||||
)
|
||||
return days
|
||||
|
||||
@property
|
||||
def hours(self):
|
||||
hours = self._values['expiration']['hours']
|
||||
if hours is None:
|
||||
return None
|
||||
if hours < 0 or hours > 23:
|
||||
raise F5ModuleError(
|
||||
'The provided value is invalid, the correct value range is: 0 - 23 hours.'
|
||||
)
|
||||
return hours
|
||||
|
||||
@property
|
||||
def minutes(self):
|
||||
minutes = self._values['expiration']['minutes']
|
||||
if minutes is None:
|
||||
return None
|
||||
if minutes < 0 or minutes > 59:
|
||||
raise F5ModuleError(
|
||||
'The provided value is invalid, the correct value range is: 0 - 59 minutes.'
|
||||
)
|
||||
return minutes
|
||||
|
||||
@property
|
||||
def seconds(self):
|
||||
seconds = self._values['expiration']['seconds']
|
||||
if seconds < 0 or seconds > 59:
|
||||
raise F5ModuleError(
|
||||
'The provided value is invalid, the correct value range is: 0 - 59 seconds.'
|
||||
)
|
||||
return seconds
|
||||
|
||||
|
||||
class Changes(Parameters):
|
||||
def to_return(self):
|
||||
|
@ -487,6 +637,32 @@ class ReportableChanges(Changes):
|
|||
def encryption_passphrase(self):
|
||||
return None
|
||||
|
||||
@property
|
||||
def expiration(self):
|
||||
expire = self._values['expiration']
|
||||
result = dict()
|
||||
|
||||
if expire is None:
|
||||
return None
|
||||
tmp = expire.split(':')
|
||||
|
||||
if len(tmp) == 1:
|
||||
result['seconds'] = int(tmp[0])
|
||||
if len(tmp) == 2:
|
||||
result['minutes'] = int(tmp[0])
|
||||
result['seconds'] = int(tmp[1])
|
||||
if len(tmp) == 3:
|
||||
result['hours'] = int(tmp[0])
|
||||
result['minutes'] = int(tmp[1])
|
||||
result['seconds'] = int(tmp[2])
|
||||
if len(tmp) == 4:
|
||||
result['days'] = int(tmp[0])
|
||||
result['hours'] = int(tmp[1])
|
||||
result['minutes'] = int(tmp[2])
|
||||
result['seconds'] = int(tmp[3])
|
||||
|
||||
return result
|
||||
|
||||
|
||||
class Difference(object):
|
||||
def __init__(self, want, have=None):
|
||||
|
@ -524,7 +700,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -744,6 +920,24 @@ class ArgumentSpec(object):
|
|||
default='always',
|
||||
choices=['always', 'on_create']
|
||||
),
|
||||
expiration=dict(
|
||||
type='dict',
|
||||
options=dict(
|
||||
days=dict(
|
||||
type='int'
|
||||
),
|
||||
hours=dict(
|
||||
type='int'
|
||||
),
|
||||
minutes=dict(
|
||||
type='int'
|
||||
),
|
||||
seconds=dict(
|
||||
type='int',
|
||||
default=0
|
||||
)
|
||||
)
|
||||
),
|
||||
state=dict(
|
||||
default='present',
|
||||
choices=['present', 'absent']
|
||||
|
@ -766,16 +960,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,12 +23,14 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(source_addr) profile.
|
||||
type: str
|
||||
match_across_services:
|
||||
description:
|
||||
- When C(yes), specifies that all persistent connections from a client IP address that go
|
||||
|
@ -60,6 +62,7 @@ options:
|
|||
to obtain the hash result for the input to the algorithm.
|
||||
- When creating a new profile, if this parameter is not specified, the
|
||||
default is provided by the parent profile.
|
||||
type: str
|
||||
choices:
|
||||
- default
|
||||
- carp
|
||||
|
@ -70,6 +73,7 @@ options:
|
|||
default is provided by the parent profile.
|
||||
- To specify an indefinite timeout, use the value C(indefinite).
|
||||
- If specifying a numeric timeout, the value must be between C(1) and C(4294967295).
|
||||
type: str
|
||||
override_connection_limit:
|
||||
description:
|
||||
- When C(yes), specifies that the system allows you to specify that pool member connection
|
||||
|
@ -79,15 +83,17 @@ options:
|
|||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -128,24 +134,18 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
|
||||
|
||||
class Parameters(AnsibleF5Parameters):
|
||||
|
@ -328,7 +328,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -544,16 +544,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -23,16 +23,19 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- The parent template of this monitor template. Once this value has
|
||||
been set, it cannot be changed.
|
||||
type: str
|
||||
default: /Common/serverssl
|
||||
ciphers:
|
||||
description:
|
||||
- Specifies the list of ciphers that the system supports. When creating a new
|
||||
profile, the default cipher list is provided by the parent profile.
|
||||
type: str
|
||||
secure_renegotiation:
|
||||
description:
|
||||
- Specifies the method of secure renegotiations for SSL connections. When
|
||||
|
@ -44,6 +47,7 @@ options:
|
|||
- The C(require-strict) setting the system requires strict renegotiation of SSL
|
||||
connections. In this mode the system refuses connections to insecure servers,
|
||||
and terminates existing SSL connections to insecure servers.
|
||||
type: str
|
||||
choices:
|
||||
- require
|
||||
- require-strict
|
||||
|
@ -53,6 +57,7 @@ options:
|
|||
- Specifies the fully qualified DNS hostname of the server used in Server Name
|
||||
Indication communications. When creating a new profile, the setting is provided
|
||||
by the parent profile.
|
||||
type: str
|
||||
sni_default:
|
||||
description:
|
||||
- Indicates that the system uses this profile as the default SSL profile when there
|
||||
|
@ -62,9 +67,9 @@ options:
|
|||
type: bool
|
||||
sni_require:
|
||||
description:
|
||||
- Requires that the network peers also provide SNI support. This setting only takes
|
||||
effect when C(sni_default) is C(yes). When creating a new profile, the setting
|
||||
is provided by the parent profile.
|
||||
- Requires that the network peers also provide SNI support, setting only takes
|
||||
effect when C(sni_default) is C(yes).
|
||||
- When creating a new profile, the setting is provided by the parent profile.
|
||||
type: bool
|
||||
server_certificate:
|
||||
description:
|
||||
|
@ -72,6 +77,7 @@ options:
|
|||
- When C(ignore), specifies that the system ignores certificates from server systems.
|
||||
- When C(require), specifies that the system requires a server to present a valid
|
||||
certificate.
|
||||
type: str
|
||||
choices:
|
||||
- ignore
|
||||
- require
|
||||
|
@ -79,39 +85,47 @@ options:
|
|||
description:
|
||||
- Specifies the name of the certificate that the system uses for server-side SSL
|
||||
processing.
|
||||
type: str
|
||||
key:
|
||||
description:
|
||||
- Specifies the file name of the SSL key.
|
||||
type: str
|
||||
chain:
|
||||
description:
|
||||
- Specifies the certificates-key chain to associate with the SSL profile.
|
||||
type: str
|
||||
passphrase:
|
||||
description:
|
||||
- Specifies a passphrase used to encrypt the key.
|
||||
type: str
|
||||
update_password:
|
||||
description:
|
||||
- C(always) will allow to update passwords if the user chooses to do so.
|
||||
C(on_create) will only set the password for newly created profiles.
|
||||
default: always
|
||||
type: str
|
||||
choices:
|
||||
- always
|
||||
- on_create
|
||||
default: always
|
||||
ocsp_profile:
|
||||
description:
|
||||
- Specifies the name of the OCSP profile for purpose of validating status
|
||||
of server certificate.
|
||||
type: str
|
||||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -134,7 +148,7 @@ ciphers:
|
|||
returned: changed
|
||||
type: str
|
||||
sample: "!SSLv3:!SSLv2:ECDHE+AES-GCM+SHA256:ECDHE-RSA-AES128-CBC-SHA"
|
||||
secure_renegotation:
|
||||
secure_renegotiation:
|
||||
description: The method of secure SSL renegotiation.
|
||||
returned: changed
|
||||
type: str
|
||||
|
@ -148,22 +162,16 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
|
||||
|
@ -404,7 +412,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -645,16 +653,12 @@ def main():
|
|||
required_together=spec.required_together,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -26,12 +26,14 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(tcp) profile.
|
||||
type: str
|
||||
idle_timeout:
|
||||
description:
|
||||
- Specifies the length of time that a connection is idle (has no traffic) before
|
||||
|
@ -43,6 +45,7 @@ options:
|
|||
connection can remain idle before the system deletes it.
|
||||
- When C(0), or C(indefinite), specifies that the system does not delete TCP connections
|
||||
regardless of how long they remain idle.
|
||||
type: str
|
||||
time_wait_recycle:
|
||||
description:
|
||||
- Specifies that connections in a TIME-WAIT state are reused, if a SYN packet,
|
||||
|
@ -55,15 +58,17 @@ options:
|
|||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -110,24 +115,18 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import flatten_boolean
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import flatten_boolean
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
|
||||
|
||||
class Parameters(AnsibleF5Parameters):
|
||||
|
@ -254,7 +253,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -469,16 +468,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -26,12 +26,14 @@ options:
|
|||
name:
|
||||
description:
|
||||
- Specifies the name of the profile.
|
||||
type: str
|
||||
required: True
|
||||
parent:
|
||||
description:
|
||||
- Specifies the profile from which this profile inherits settings.
|
||||
- When creating a new profile, if this parameter is not specified, the default
|
||||
is the system-supplied C(udp) profile.
|
||||
type: str
|
||||
idle_timeout:
|
||||
description:
|
||||
- Specifies the length of time that a connection is idle (has no traffic) before
|
||||
|
@ -45,6 +47,7 @@ options:
|
|||
indefinitely.
|
||||
- When C(immediate), specifies that you do not want the UDP connection to
|
||||
remain idle, and that it is therefore immediately eligible for deletion.
|
||||
type: str
|
||||
datagram_load_balancing:
|
||||
description:
|
||||
- Specifies, when C(yes), that the system load balances UDP traffic
|
||||
|
@ -53,15 +56,17 @@ options:
|
|||
partition:
|
||||
description:
|
||||
- Device partition to manage resources on.
|
||||
type: str
|
||||
default: Common
|
||||
state:
|
||||
description:
|
||||
- When C(present), ensures that the profile exists.
|
||||
- When C(absent), ensures the profile is removed.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -107,22 +112,16 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from library.module_utils.network.f5.common import f5_argument_spec
|
||||
from library.module_utils.network.f5.common import transform_name
|
||||
from library.module_utils.network.f5.common import exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 fq_name
|
||||
from ansible.module_utils.network.f5.common import f5_argument_spec
|
||||
from ansible.module_utils.network.f5.common import transform_name
|
||||
from ansible.module_utils.network.f5.common import exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
|
||||
|
||||
class Parameters(AnsibleF5Parameters):
|
||||
|
@ -235,7 +234,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.have = ApiParameters()
|
||||
self.changes = UsableChanges()
|
||||
|
@ -448,16 +447,12 @@ def main():
|
|||
supports_check_mode=spec.supports_check_mode,
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
cleanup_tokens(client)
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
cleanup_tokens(client)
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -24,7 +24,8 @@ options:
|
|||
module:
|
||||
description:
|
||||
- The module to provision in BIG-IP.
|
||||
required: true
|
||||
type: str
|
||||
required: True
|
||||
choices:
|
||||
- am
|
||||
- afm
|
||||
|
@ -52,11 +53,12 @@ options:
|
|||
the module is not activated.
|
||||
- This parameter is not relevant to C(cgnat) and will not be applied to the
|
||||
C(cgnat) module.
|
||||
default: nominal
|
||||
type: str
|
||||
choices:
|
||||
- dedicated
|
||||
- nominal
|
||||
- minimum
|
||||
default: nominal
|
||||
state:
|
||||
description:
|
||||
- The state of the provisioned module on the system. When C(present),
|
||||
|
@ -64,10 +66,11 @@ options:
|
|||
level provided that there are sufficient resources on the device (such
|
||||
as physical RAM) to support the provisioned module. When C(absent),
|
||||
de-provision the module.
|
||||
default: present
|
||||
type: str
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
extends_documentation_fragment: f5
|
||||
author:
|
||||
- Tim Rupp (@caphrim007)
|
||||
|
@ -111,19 +114,13 @@ try:
|
|||
from library.module_utils.network.f5.bigip import F5RestClient
|
||||
from library.module_utils.network.f5.common import F5ModuleError
|
||||
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 exit_json
|
||||
from library.module_utils.network.f5.common import fail_json
|
||||
from library.module_utils.network.f5.icontrol import TransactionContextManager
|
||||
except ImportError:
|
||||
from ansible.module_utils.network.f5.bigip import F5RestClient
|
||||
from ansible.module_utils.network.f5.common import F5ModuleError
|
||||
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 exit_json
|
||||
from ansible.module_utils.network.f5.common import fail_json
|
||||
from ansible.module_utils.network.f5.icontrol import TransactionContextManager
|
||||
|
||||
|
||||
|
@ -205,7 +202,7 @@ class Difference(object):
|
|||
class ModuleManager(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.module = kwargs.get('module', None)
|
||||
self.client = kwargs.get('client', None)
|
||||
self.client = F5RestClient(**self.module.params)
|
||||
self.have = None
|
||||
self.want = ModuleParameters(params=self.module.params)
|
||||
self.changes = UsableChanges()
|
||||
|
@ -883,14 +880,12 @@ def main():
|
|||
mutually_exclusive=spec.mutually_exclusive
|
||||
)
|
||||
|
||||
client = F5RestClient(**module.params)
|
||||
|
||||
try:
|
||||
mm = ModuleManager(module=module, client=client)
|
||||
mm = ModuleManager(module=module)
|
||||
results = mm.exec_module()
|
||||
exit_json(module, results, client)
|
||||
module.exit_json(**results)
|
||||
except F5ModuleError as ex:
|
||||
fail_json(module, ex, client)
|
||||
module.fail_json(msg=str(ex))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -98,14 +98,17 @@ class TestManager(unittest.TestCase):
|
|||
],
|
||||
partition='Common',
|
||||
state='present',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
mutually_exclusive=self.spec.mutually_exclusive
|
||||
)
|
||||
mm = ModuleManager(module=module)
|
||||
|
||||
|
@ -126,16 +129,19 @@ class TestManager(unittest.TestCase):
|
|||
],
|
||||
partition='Common',
|
||||
state='present',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
current = ApiParameters(params=load_fixture('load_ltm_node_3.json'))
|
||||
|
||||
module = AnsibleModule(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
mutually_exclusive=self.spec.mutually_exclusive
|
||||
)
|
||||
mm = ModuleManager(module=module)
|
||||
|
||||
|
@ -156,14 +162,17 @@ class TestManager(unittest.TestCase):
|
|||
],
|
||||
partition='Common',
|
||||
state='present',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
mutually_exclusive=self.spec.mutually_exclusive
|
||||
)
|
||||
mm = ModuleManager(module=module)
|
||||
|
||||
|
@ -185,15 +194,18 @@ class TestManager(unittest.TestCase):
|
|||
],
|
||||
partition='Common',
|
||||
state='present',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
current = ApiParameters(params=load_fixture('load_ltm_node_2.json'))
|
||||
module = AnsibleModule(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
mutually_exclusive=self.spec.mutually_exclusive
|
||||
)
|
||||
mm = ModuleManager(module=module)
|
||||
|
||||
|
@ -217,15 +229,18 @@ class TestManager(unittest.TestCase):
|
|||
],
|
||||
partition='Common',
|
||||
state='present',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
current = ApiParameters(params=load_fixture('load_ltm_node_2.json'))
|
||||
module = AnsibleModule(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
mutually_exclusive=self.spec.mutually_exclusive
|
||||
)
|
||||
mm = ModuleManager(module=module)
|
||||
|
||||
|
|
|
@ -109,9 +109,11 @@ class TestManagerEcho(unittest.TestCase):
|
|||
set_module_args(dict(
|
||||
name='foo',
|
||||
description='my description',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
@ -133,9 +135,11 @@ class TestManagerEcho(unittest.TestCase):
|
|||
set_module_args(dict(
|
||||
name='foo',
|
||||
description='my description',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
current = ApiParameters(params=load_fixture('load_tm_auth_partition.json'))
|
||||
|
@ -158,9 +162,11 @@ class TestManagerEcho(unittest.TestCase):
|
|||
set_module_args(dict(
|
||||
name='foo',
|
||||
description='another description',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
current = ApiParameters(params=load_fixture('load_tm_auth_partition.json'))
|
||||
|
@ -185,9 +191,11 @@ class TestManagerEcho(unittest.TestCase):
|
|||
set_module_args(dict(
|
||||
name='foo',
|
||||
route_domain=1,
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
current = ApiParameters(params=load_fixture('load_tm_auth_partition.json'))
|
||||
|
|
|
@ -128,9 +128,11 @@ class TestManager(unittest.TestCase):
|
|||
required_numeric=0,
|
||||
required_special=0,
|
||||
required_uppercase=0,
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
current = ApiParameters(params=load_fixture('load_tm_auth_password_policy_1.json'))
|
||||
|
|
|
@ -71,9 +71,6 @@ class TestParameters(unittest.TestCase):
|
|||
args = dict(
|
||||
name='foo',
|
||||
description='asdf asdf asdf',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
)
|
||||
p = Parameters(params=args)
|
||||
assert p.name == 'foo'
|
||||
|
@ -84,10 +81,7 @@ class TestParameters(unittest.TestCase):
|
|||
args = dict(
|
||||
name='foo',
|
||||
description='asdf asdf asdf',
|
||||
password='password',
|
||||
server='localhost',
|
||||
strategy='foo',
|
||||
user='admin',
|
||||
partition='Common'
|
||||
)
|
||||
p = Parameters(params=args)
|
||||
|
@ -99,10 +93,7 @@ class TestParameters(unittest.TestCase):
|
|||
args = dict(
|
||||
name='foo',
|
||||
description='asdf asdf asdf',
|
||||
password='password',
|
||||
server='localhost',
|
||||
strategy='/Common/foo',
|
||||
user='admin',
|
||||
partition='Common'
|
||||
)
|
||||
p = Parameters(params=args)
|
||||
|
@ -114,10 +105,7 @@ class TestParameters(unittest.TestCase):
|
|||
args = dict(
|
||||
name='foo',
|
||||
description='asdf asdf asdf',
|
||||
password='password',
|
||||
server='localhost',
|
||||
strategy='/Foo/bar',
|
||||
user='admin',
|
||||
partition='Common'
|
||||
)
|
||||
p = Parameters(params=args)
|
||||
|
@ -147,9 +135,11 @@ class TestSimpleTrafficPolicyManager(unittest.TestCase):
|
|||
name="Policy-Foo",
|
||||
state='present',
|
||||
strategy='best',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -134,9 +134,11 @@ class TestManager(unittest.TestCase):
|
|||
path_begins_with_any=['/ABC']
|
||||
)
|
||||
],
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
@ -173,9 +175,11 @@ class TestManager(unittest.TestCase):
|
|||
path_begins_with_any=['/ABC']
|
||||
)
|
||||
],
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
current = ApiParameters(params=load_fixture('load_ltm_policy_draft_rule_http-uri_forward.json'))
|
||||
|
|
|
@ -101,9 +101,11 @@ class TestManager(unittest.TestCase):
|
|||
description='foo',
|
||||
collect_geo=True,
|
||||
collect_ip=True,
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -109,9 +109,11 @@ class TestManager(unittest.TestCase):
|
|||
chain='bigip_ssl_cert1'
|
||||
)
|
||||
],
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -120,9 +120,11 @@ class TestManager(unittest.TestCase):
|
|||
process_recursion_desired=True,
|
||||
use_local_bind=True,
|
||||
enable_dns_firewall=True,
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -158,9 +158,11 @@ class TestManager(unittest.TestCase):
|
|||
set_module_args(dict(
|
||||
name='foo',
|
||||
parent='bar',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -106,9 +106,11 @@ class TestManager(unittest.TestCase):
|
|||
name='foo',
|
||||
insert_xforwarded_for='yes',
|
||||
parent='bar',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -109,9 +109,11 @@ class TestManager(unittest.TestCase):
|
|||
name='foo',
|
||||
enforce_tls_requirements='yes',
|
||||
parent='bar',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -109,9 +109,11 @@ class TestManager(unittest.TestCase):
|
|||
gzip_memory_level=64,
|
||||
gzip_level=2,
|
||||
gzip_window_size=128,
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -103,9 +103,11 @@ class TestManager(unittest.TestCase):
|
|||
name='foo',
|
||||
parent='bar',
|
||||
maximum_reuse=1000,
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -103,9 +103,11 @@ class TestManager(unittest.TestCase):
|
|||
name='foo',
|
||||
match_across_virtuals='yes',
|
||||
parent='bar',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -107,9 +107,11 @@ class TestManager(unittest.TestCase):
|
|||
name='foo',
|
||||
match_across_virtuals='yes',
|
||||
parent='bar',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -94,14 +94,17 @@ class TestManager(unittest.TestCase):
|
|||
set_module_args(dict(
|
||||
name='foo',
|
||||
server_name='foo.bar.com',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
required_together=self.spec.required_together
|
||||
)
|
||||
mm = ModuleManager(module=module)
|
||||
|
||||
|
|
|
@ -95,9 +95,11 @@ class TestManager(unittest.TestCase):
|
|||
name='foo',
|
||||
parent='bar',
|
||||
idle_timeout=500,
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -98,9 +98,11 @@ class TestManager(unittest.TestCase):
|
|||
parent='bar',
|
||||
idle_timeout=500,
|
||||
datagram_load_balancing=True,
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
module = AnsibleModule(
|
||||
|
|
|
@ -66,9 +66,6 @@ class TestParameters(unittest.TestCase):
|
|||
def test_module_parameters(self):
|
||||
args = dict(
|
||||
module='gtm',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
)
|
||||
p = Parameters(params=args)
|
||||
assert p.module == 'gtm'
|
||||
|
@ -88,9 +85,11 @@ class TestManager(unittest.TestCase):
|
|||
# Configure the arguments that would be sent to the Ansible module
|
||||
set_module_args(dict(
|
||||
module='gtm',
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
# Configure the parameters that would be returned by querying the
|
||||
|
@ -103,7 +102,8 @@ class TestManager(unittest.TestCase):
|
|||
)
|
||||
module = AnsibleModule(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
mutually_exclusive=self.spec.mutually_exclusive
|
||||
)
|
||||
mm = ModuleManager(module=module)
|
||||
|
||||
|
@ -133,14 +133,17 @@ class TestManager(unittest.TestCase):
|
|||
# Configure the arguments that would be sent to the Ansible module
|
||||
set_module_args(dict(
|
||||
module=module,
|
||||
password='password',
|
||||
server='localhost',
|
||||
user='admin'
|
||||
provider=dict(
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin'
|
||||
)
|
||||
))
|
||||
|
||||
with patch('ansible.module_utils.basic.AnsibleModule.fail_json') as mo:
|
||||
AnsibleModule(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
mutually_exclusive=self.spec.mutually_exclusive
|
||||
)
|
||||
mo.assert_not_called()
|
||||
|
|
Loading…
Reference in a new issue