From bcda0db7db743de58e0a6fbf2f0f93e58a049722 Mon Sep 17 00:00:00 2001 From: Tim Rupp Date: Sat, 2 Dec 2017 20:35:06 -0800 Subject: [PATCH] Fixes tcp monitors (#33494) * Fixes tcp monitors Formatting fixes and a missing default parent. This patch fixes that. * Fixes upstream errors --- .../modules/network/f5/bigip_monitor_tcp.py | 117 ++++++++++-------- .../network/f5/bigip_monitor_tcp_echo.py | 91 ++++++++------ .../network/f5/bigip_monitor_tcp_half_open.py | 107 ++++++++++------ .../network/f5/test_bigip_monitor_tcp.py | 24 +--- .../network/f5/test_bigip_monitor_tcp_echo.py | 27 ++-- .../f5/test_bigip_monitor_tcp_half_open.py | 27 ++-- 6 files changed, 203 insertions(+), 190 deletions(-) mode change 100755 => 100644 lib/ansible/modules/network/f5/bigip_monitor_tcp_half_open.py diff --git a/lib/ansible/modules/network/f5/bigip_monitor_tcp.py b/lib/ansible/modules/network/f5/bigip_monitor_tcp.py index b5f3791bd0..2923c53428 100644 --- a/lib/ansible/modules/network/f5/bigip_monitor_tcp.py +++ b/lib/ansible/modules/network/f5/bigip_monitor_tcp.py @@ -4,14 +4,18 @@ # Copyright (c) 2017 F5 Networks Inc. # GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} -DOCUMENTATION = ''' +DOCUMENTATION = r''' --- module: bigip_monitor_tcp -short_description: Manages F5 BIG-IP LTM tcp monitors. +short_description: Manages F5 BIG-IP LTM tcp monitors description: Manages F5 BIG-IP LTM tcp monitors via iControl SOAP API. version_added: "1.4" options: @@ -26,7 +30,7 @@ options: - The parent template of this monitor template. Once this value has been set, it cannot be changed. By default, this value is the C(tcp) parent on the C(Common) partition. - default: "/Common/tcp" + default: /Common/tcp send: description: - The send string for the monitor call. @@ -45,7 +49,7 @@ options: - The template type of this monitor template. - Deprecated in 2.4. Use one of the C(bigip_monitor_tcp_echo) or C(bigip_monitor_tcp_half_open) modules instead. - default: 'tcp' + default: tcp choices: - tcp - tcp_echo @@ -82,6 +86,11 @@ options: node to be marked up immediately after a valid response is received from the node. If this parameter is not provided when creating a new monitor, then the default value will be 0. + partition: + description: + - Device partition to manage resources on. + default: Common + version_added: 2.5 notes: - Requires the f5-sdk Python package on the host. This is as easy as pip install f5-sdk. @@ -93,70 +102,70 @@ author: - Tim Rupp (@caphrim007) ''' -EXAMPLES = ''' +EXAMPLES = r''' - name: Create TCP Monitor bigip_monitor_tcp: - state: "present" - server: "lb.mydomain.com" - user: "admin" - password: "secret" - name: "my_tcp_monitor" - type: "tcp" - send: "tcp string to send" - receive: "tcp string to receive" + state: present + server: lb.mydomain.com + user: admin + password: secret + name: my_tcp_monitor + type: tcp + send: tcp string to send + receive: tcp string to receive delegate_to: localhost - name: Remove TCP Monitor bigip_monitor_tcp: - state: "absent" - server: "lb.mydomain.com" - user: "admin" - password: "secret" - name: "my_tcp_monitor" + state: absent + server: lb.mydomain.com + user: admin + password: secret + name: my_tcp_monitor delegate_to: localhost ''' -RETURN = ''' +RETURN = r''' parent: - description: New parent template of the monitor. - returned: changed - type: string - sample: "tcp" + description: New parent template of the monitor. + returned: changed + type: string + sample: tcp send: - description: The new send string for this monitor. - returned: changed - type: string - sample: "tcp string to send" + description: The new send string for this monitor. + returned: changed + type: string + sample: tcp string to send receive: - description: The new receive string for this monitor. - returned: changed - type: string - sample: "tcp string to receive" + description: The new receive string for this monitor. + returned: changed + type: string + sample: tcp string to receive ip: - description: The new IP of IP/port definition. - returned: changed - type: string - sample: "10.12.13.14" + description: The new IP of IP/port definition. + returned: changed + type: string + sample: 10.12.13.14 port: - description: The new port of IP/port definition. - returned: changed - type: string - sample: "admin@root.local" + description: The new port of IP/port definition. + returned: changed + type: string + sample: admin@root.local interval: - description: The new interval in which to run the monitor check. - returned: changed - type: int - sample: 2 + description: The new interval in which to run the monitor check. + returned: changed + type: int + sample: 2 timeout: - description: The new timeout in which the remote system must respond to the monitor. - returned: changed - type: int - sample: 10 + description: The new timeout in which the remote system must respond to the monitor. + returned: changed + type: int + sample: 10 time_until_up: - description: The new time in which to mark a system as up after first successful response. - returned: changed - type: int - sample: 2 + description: The new time in which to mark a system as up after first successful response. + returned: changed + type: int + sample: 2 ''' import os @@ -171,8 +180,8 @@ from ansible.module_utils.f5_utils import AnsibleF5Client from ansible.module_utils.f5_utils import AnsibleF5Parameters from ansible.module_utils.f5_utils import HAS_F5SDK from ansible.module_utils.f5_utils import F5ModuleError -from ansible.module_utils.f5_utils import iteritems -from ansible.module_utils.f5_utils import defaultdict +from ansible.module_utils.six import iteritems +from collections import defaultdict try: from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError @@ -909,7 +918,7 @@ class ArgumentSpec(object): # Make this assume "tcp" in the partition specified. The user # is required to specify the full path if they want to use a different # partition. - parent=dict(), + parent=dict(default='tcp'), send=dict(), receive=dict(), diff --git a/lib/ansible/modules/network/f5/bigip_monitor_tcp_echo.py b/lib/ansible/modules/network/f5/bigip_monitor_tcp_echo.py index 62fd838479..0d5cb0e86a 100644 --- a/lib/ansible/modules/network/f5/bigip_monitor_tcp_echo.py +++ b/lib/ansible/modules/network/f5/bigip_monitor_tcp_echo.py @@ -4,15 +4,19 @@ # Copyright (c) 2017 F5 Networks Inc. # GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} -DOCUMENTATION = ''' +DOCUMENTATION = r''' --- module: bigip_monitor_tcp_echo -short_description: Manages F5 BIG-IP LTM tcp monitors. -description: Manages F5 BIG-IP LTM tcp monitors via iControl SOAP API. +short_description: Manages F5 BIG-IP LTM tcp echo monitors +description: Manages F5 BIG-IP LTM tcp echo monitors. version_added: "2.4" options: name: @@ -24,9 +28,9 @@ options: 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(tcp) + been set, it cannot be changed. By default, this value is the C(tcp_echo) parent on the C(Common) partition. - default: "/Common/tcp" + default: /Common/tcp_echo ip: description: - IP address part of the IP/port definition. If this parameter is not @@ -56,6 +60,11 @@ options: node to be marked up immediately after a valid response is received from the node. If this parameter is not provided when creating a new monitor, then the default value will be 0. + partition: + description: + - Device partition to manage resources on. + default: Common + version_added: 2.5 notes: - Requires the f5-sdk Python package on the host. This is as easy as pip install f5-sdk. @@ -67,53 +76,53 @@ author: - Tim Rupp (@caphrim007) ''' -EXAMPLES = ''' +EXAMPLES = r''' - name: Create TCP Echo Monitor bigip_monitor_tcp_echo: - state: "present" - server: "lb.mydomain.com" - user: "admin" - ip: 10.10.10.10 - password: "secret" - name: "my_tcp_monitor" + state: present + server: lb.mydomain.com + user: admin + ip: 10.10.10.10 + password: secret + name: my_tcp_monitor delegate_to: localhost - name: Remove TCP Echo Monitor bigip_monitor_tcp_echo: - state: "absent" - server: "lb.mydomain.com" - user: "admin" - password: "secret" - name: "my_tcp_monitor" + state: absent + server: lb.mydomain.com + user: admin + password: secret + name: my_tcp_monitor delegate_to: localhost ''' -RETURN = ''' +RETURN = r''' parent: - description: New parent template of the monitor. - returned: changed - type: string - sample: "tcp" + description: New parent template of the monitor. + returned: changed + type: string + sample: tcp ip: - description: The new IP of IP/port definition. - returned: changed - type: string - sample: "10.12.13.14" + description: The new IP of IP/port definition. + returned: changed + type: string + sample: 10.12.13.14 interval: - description: The new interval in which to run the monitor check. - returned: changed - type: int - sample: 2 + description: The new interval in which to run the monitor check. + returned: changed + type: int + sample: 2 timeout: - description: The new timeout in which the remote system must respond to the monitor. - returned: changed - type: int - sample: 10 + description: The new timeout in which the remote system must respond to the monitor. + returned: changed + type: int + sample: 10 time_until_up: - description: The new time in which to mark a system as up after first successful response. - returned: changed - type: int - sample: 2 + description: The new time in which to mark a system as up after first successful response. + returned: changed + type: int + sample: 2 ''' import os @@ -128,8 +137,8 @@ from ansible.module_utils.f5_utils import AnsibleF5Client from ansible.module_utils.f5_utils import AnsibleF5Parameters from ansible.module_utils.f5_utils import HAS_F5SDK from ansible.module_utils.f5_utils import F5ModuleError -from ansible.module_utils.f5_utils import iteritems -from ansible.module_utils.f5_utils import defaultdict +from ansible.module_utils.six import iteritems +from collections import defaultdict try: from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError @@ -477,7 +486,7 @@ class ArgumentSpec(object): self.supports_check_mode = True self.argument_spec = dict( name=dict(required=True), - parent=dict(), + parent=dict(default='tcp_echo'), ip=dict(), interval=dict(type='int'), timeout=dict(type='int'), diff --git a/lib/ansible/modules/network/f5/bigip_monitor_tcp_half_open.py b/lib/ansible/modules/network/f5/bigip_monitor_tcp_half_open.py old mode 100755 new mode 100644 index 8bc85485a7..f78282914e --- a/lib/ansible/modules/network/f5/bigip_monitor_tcp_half_open.py +++ b/lib/ansible/modules/network/f5/bigip_monitor_tcp_half_open.py @@ -4,15 +4,19 @@ # Copyright (c) 2017 F5 Networks Inc. # GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} -DOCUMENTATION = ''' +DOCUMENTATION = r''' --- module: bigip_monitor_tcp_half_open -short_description: Manages F5 BIG-IP LTM tcp monitors. -description: Manages F5 BIG-IP LTM tcp monitors via iControl SOAP API. +short_description: Manages F5 BIG-IP LTM tcp half-open monitors +description: Manages F5 BIG-IP LTM tcp half-open monitors. version_added: "2.4" options: name: @@ -24,9 +28,9 @@ options: 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(tcp) + been set, it cannot be changed. By default, this value is the C(tcp_half_open) parent on the C(Common) partition. - default: "/Common/tcp" + default: "/Common/tcp_half_open" ip: description: - IP address part of the IP/port definition. If this parameter is not @@ -34,6 +38,13 @@ options: '*'. - If this value is an IP address, and the C(type) is C(tcp) (the default), then a C(port) number must be specified. + port: + description: + - Port address part of the IP/port definition. If this parameter is not + provided when creating a new monitor, then the default value will be + '*'. Note that if specifying an IP address, a value between 1 and 65535 + must be specified + version_added: 2.5 interval: description: - The interval specifying how frequently the monitor instance of this @@ -56,6 +67,11 @@ options: node to be marked up immediately after a valid response is received from the node. If this parameter is not provided when creating a new monitor, then the default value will be 0. + partition: + description: + - Device partition to manage resources on. + default: Common + version_added: 2.5 notes: - Requires the f5-sdk Python package on the host. This is as easy as pip install f5-sdk. @@ -67,53 +83,62 @@ author: - Tim Rupp (@caphrim007) ''' -EXAMPLES = ''' +EXAMPLES = r''' - name: Create TCP Monitor bigip_monitor_tcp_half_open: - state: "present" - ip: "10.10.10.10" - server: "lb.mydomain.com" - user: "admin" - password: "secret" - name: "my_tcp_monitor" + state: present + ip: 10.10.10.10 + server: lb.mydomain.com + user: admin + password: secret + name: my_tcp_monitor delegate_to: localhost - name: Remove TCP Monitor bigip_monitor_tcp_half_open: - state: "absent" - server: "lb.mydomain.com" - user: "admin" - password: "secret" - name: "my_tcp_monitor" + state: absent + server: lb.mydomain.com + user: admin + password: secret + name: my_tcp_monitor + delegate_to: localhost + +- name: Add half-open monitor for all addresses, port 514 + bigip_monitor_tcp_half_open: + server: lb.mydomain.com + user: admin + port: 514 + password: secret + name: my_tcp_monitor delegate_to: localhost ''' -RETURN = ''' +RETURN = r''' parent: - description: New parent template of the monitor. - returned: changed - type: string - sample: "tcp" + description: New parent template of the monitor. + returned: changed + type: string + sample: tcp ip: - description: The new IP of IP/port definition. - returned: changed - type: string - sample: "10.12.13.14" + description: The new IP of IP/port definition. + returned: changed + type: string + sample: 10.12.13.14 interval: - description: The new interval in which to run the monitor check. - returned: changed - type: int - sample: 2 + description: The new interval in which to run the monitor check. + returned: changed + type: int + sample: 2 timeout: - description: The new timeout in which the remote system must respond to the monitor. - returned: changed - type: int - sample: 10 + description: The new timeout in which the remote system must respond to the monitor. + returned: changed + type: int + sample: 10 time_until_up: - description: The new time in which to mark a system as up after first successful response. - returned: changed - type: int - sample: 2 + description: The new time in which to mark a system as up after first successful response. + returned: changed + type: int + sample: 2 ''' import os @@ -128,8 +153,8 @@ from ansible.module_utils.f5_utils import AnsibleF5Client from ansible.module_utils.f5_utils import AnsibleF5Parameters from ansible.module_utils.f5_utils import HAS_F5SDK from ansible.module_utils.f5_utils import F5ModuleError -from ansible.module_utils.f5_utils import iteritems -from ansible.module_utils.f5_utils import defaultdict +from ansible.module_utils.six import iteritems +from collections import defaultdict try: from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError @@ -508,7 +533,7 @@ class ArgumentSpec(object): self.supports_check_mode = True self.argument_spec = dict( name=dict(required=True), - parent=dict(), + parent=dict(default='tcp_half_open'), ip=dict(), port=dict(type='int'), interval=dict(type='int'), diff --git a/test/units/modules/network/f5/test_bigip_monitor_tcp.py b/test/units/modules/network/f5/test_bigip_monitor_tcp.py index eeac55ea56..f314e8d0b9 100644 --- a/test/units/modules/network/f5/test_bigip_monitor_tcp.py +++ b/test/units/modules/network/f5/test_bigip_monitor_tcp.py @@ -1,21 +1,7 @@ # -*- coding: utf-8 -*- # -# Copyright 2017 F5 Networks Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public Liccense for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . +# Copyright (c) 2017 F5 Networks Inc. +# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type @@ -30,10 +16,10 @@ if sys.version_info < (2, 7): raise SkipTest("F5 Ansible modules require Python >= 2.7") from ansible.compat.tests import unittest -from ansible.compat.tests.mock import patch, Mock +from ansible.compat.tests.mock import Mock +from ansible.compat.tests.mock import patch from ansible.module_utils.f5_utils import AnsibleF5Client from ansible.module_utils.f5_utils import F5ModuleError -from units.modules.utils import set_module_args try: from library.bigip_monitor_tcp import ParametersTcp @@ -45,6 +31,7 @@ try: from library.bigip_monitor_tcp import TcpEchoManager from library.bigip_monitor_tcp import TcpHalfOpenManager from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError + from test.unit.modules.utils import set_module_args except ImportError: try: from ansible.modules.network.f5.bigip_monitor_tcp import ParametersTcp @@ -56,6 +43,7 @@ except ImportError: from ansible.modules.network.f5.bigip_monitor_tcp import TcpEchoManager from ansible.modules.network.f5.bigip_monitor_tcp import TcpHalfOpenManager from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError + from units.modules.utils import set_module_args except ImportError: raise SkipTest("F5 Ansible modules require the f5-sdk Python library") diff --git a/test/units/modules/network/f5/test_bigip_monitor_tcp_echo.py b/test/units/modules/network/f5/test_bigip_monitor_tcp_echo.py index b3633c9a61..c7e10076e3 100644 --- a/test/units/modules/network/f5/test_bigip_monitor_tcp_echo.py +++ b/test/units/modules/network/f5/test_bigip_monitor_tcp_echo.py @@ -1,21 +1,7 @@ # -*- coding: utf-8 -*- # -# Copyright 2017 F5 Networks Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public Liccense for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . +# Copyright (c) 2017 F5 Networks Inc. +# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type @@ -30,21 +16,26 @@ if sys.version_info < (2, 7): raise SkipTest("F5 Ansible modules require Python >= 2.7") from ansible.compat.tests import unittest -from ansible.compat.tests.mock import patch, Mock +from ansible.compat.tests.mock import Mock +from ansible.compat.tests.mock import patch from ansible.module_utils.f5_utils import AnsibleF5Client from ansible.module_utils.f5_utils import F5ModuleError -from units.modules.utils import set_module_args try: from library.bigip_monitor_tcp_echo import Parameters from library.bigip_monitor_tcp_echo import ModuleManager from library.bigip_monitor_tcp_echo import ArgumentSpec + from library.bigip_monitor_tcp_echo import HAS_F5SDK + from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError + from test.unit.modules.utils import set_module_args except ImportError: try: from ansible.modules.network.f5.bigip_monitor_tcp_echo import Parameters from ansible.modules.network.f5.bigip_monitor_tcp_echo import ModuleManager from ansible.modules.network.f5.bigip_monitor_tcp_echo import ArgumentSpec + from ansible.modules.network.f5.bigip_monitor_tcp_echo import HAS_F5SDK from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError + from units.modules.utils import set_module_args except ImportError: raise SkipTest("F5 Ansible modules require the f5-sdk Python library") diff --git a/test/units/modules/network/f5/test_bigip_monitor_tcp_half_open.py b/test/units/modules/network/f5/test_bigip_monitor_tcp_half_open.py index 6f67ddfdc2..51db8bf7fd 100644 --- a/test/units/modules/network/f5/test_bigip_monitor_tcp_half_open.py +++ b/test/units/modules/network/f5/test_bigip_monitor_tcp_half_open.py @@ -1,21 +1,7 @@ # -*- coding: utf-8 -*- # -# Copyright 2017 F5 Networks Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public Liccense for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . +# Copyright (c) 2017 F5 Networks Inc. +# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type @@ -30,21 +16,26 @@ if sys.version_info < (2, 7): raise SkipTest("F5 Ansible modules require Python >= 2.7") from ansible.compat.tests import unittest -from ansible.compat.tests.mock import patch, Mock +from ansible.compat.tests.mock import Mock +from ansible.compat.tests.mock import patch from ansible.module_utils.f5_utils import AnsibleF5Client from ansible.module_utils.f5_utils import F5ModuleError -from units.modules.utils import set_module_args try: from library.bigip_monitor_tcp_half_open import Parameters from library.bigip_monitor_tcp_half_open import ModuleManager from library.bigip_monitor_tcp_half_open import ArgumentSpec + from library.bigip_monitor_tcp_half_open import HAS_F5SDK + from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError + from test.unit.modules.utils import set_module_args except ImportError: try: from ansible.modules.network.f5.bigip_monitor_tcp_half_open import Parameters from ansible.modules.network.f5.bigip_monitor_tcp_half_open import ModuleManager from ansible.modules.network.f5.bigip_monitor_tcp_half_open import ArgumentSpec + from ansible.modules.network.f5.bigip_monitor_tcp_half_open import HAS_F5SDK from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError + from units.modules.utils import set_module_args except ImportError: raise SkipTest("F5 Ansible modules require the f5-sdk Python library")