mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-04 07:30:20 -07:00
New module: manage 1&1 monitoring policy (cloud/oneandone/oneandone_monitoring_policy) (#35068)
* Added server_type parameter - defaults to K8S * Changed server_type default value to cloud. * Added server_type entry to documentation and updated server_type choice K8S to k8s_node * Added support for overriding the default ONEANDONE_API_URL, and custom wait_timeout period for wait_for methods. * Added firewall_policy, load_balancer, and monitoring_policy cloud modules for oneandone provider. * Updated OneAndOneResources class and argument specs for monitoring policy and load balancer. * Addressed ansible-test sanity pep8 and validate-modules errors. * Removed extra modules to adhere to one module per PR. * Fixed a typo
This commit is contained in:
parent
f46f6c8dec
commit
238760045e
3 changed files with 1093 additions and 20 deletions
|
@ -27,7 +27,15 @@ import time
|
||||||
|
|
||||||
|
|
||||||
class OneAndOneResources:
|
class OneAndOneResources:
|
||||||
firewall_policy, load_balancer, monitoring_policy, private_network, public_ip, role, server, user, vpn = range(9)
|
firewall_policy = 'firewall_policy'
|
||||||
|
load_balancer = 'load_balancer'
|
||||||
|
monitoring_policy = 'monitoring_policy'
|
||||||
|
private_network = 'private_network'
|
||||||
|
public_ip = 'public_ip'
|
||||||
|
role = 'role'
|
||||||
|
server = 'server'
|
||||||
|
user = 'user'
|
||||||
|
vpn = 'vpn'
|
||||||
|
|
||||||
|
|
||||||
def get_resource(oneandone_conn, resource_type, resource_id):
|
def get_resource(oneandone_conn, resource_type, resource_id):
|
||||||
|
@ -43,7 +51,7 @@ def get_resource(oneandone_conn, resource_type, resource_id):
|
||||||
'vpn': oneandone_conn.get_vpn,
|
'vpn': oneandone_conn.get_vpn,
|
||||||
}
|
}
|
||||||
|
|
||||||
return switcher.get(resource_type.name, None)(resource_id)
|
return switcher.get(resource_type, None)(resource_id)
|
||||||
|
|
||||||
|
|
||||||
def get_datacenter(oneandone_conn, datacenter, full_object=False):
|
def get_datacenter(oneandone_conn, datacenter, full_object=False):
|
||||||
|
@ -187,13 +195,14 @@ def get_vpn(oneandone_conn, vpn, full_object=False):
|
||||||
def wait_for_resource_creation_completion(oneandone_conn,
|
def wait_for_resource_creation_completion(oneandone_conn,
|
||||||
resource_type,
|
resource_type,
|
||||||
resource_id,
|
resource_id,
|
||||||
wait_timeout):
|
wait_timeout,
|
||||||
|
wait_interval):
|
||||||
"""
|
"""
|
||||||
Waits for the resource create operation to complete based on the timeout period.
|
Waits for the resource create operation to complete based on the timeout period.
|
||||||
"""
|
"""
|
||||||
wait_timeout = time.time() + wait_timeout
|
wait_timeout = time.time() + wait_timeout
|
||||||
while wait_timeout > time.time():
|
while wait_timeout > time.time():
|
||||||
time.sleep(5)
|
time.sleep(wait_interval)
|
||||||
|
|
||||||
# Refresh the resource info
|
# Refresh the resource info
|
||||||
resource = get_resource(oneandone_conn, resource_type, resource_id)
|
resource = get_resource(oneandone_conn, resource_type, resource_id)
|
||||||
|
@ -215,22 +224,23 @@ def wait_for_resource_creation_completion(oneandone_conn,
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
'Unknown %s state %s' % (resource_type.name, resource_state))
|
'Unknown %s state %s' % (resource_type, resource_state))
|
||||||
|
|
||||||
raise Exception(
|
raise Exception(
|
||||||
'Timed out waiting for %s completion for %s' % (resource_type.name, resource_id))
|
'Timed out waiting for %s completion for %s' % (resource_type, resource_id))
|
||||||
|
|
||||||
|
|
||||||
def wait_for_resource_deletion_completion(oneandone_conn,
|
def wait_for_resource_deletion_completion(oneandone_conn,
|
||||||
resource_type,
|
resource_type,
|
||||||
resource_id,
|
resource_id,
|
||||||
wait_timeout):
|
wait_timeout,
|
||||||
|
wait_interval):
|
||||||
"""
|
"""
|
||||||
Waits for the resource delete operation to complete based on the timeout period.
|
Waits for the resource delete operation to complete based on the timeout period.
|
||||||
"""
|
"""
|
||||||
wait_timeout = time.time() + wait_timeout
|
wait_timeout = time.time() + wait_timeout
|
||||||
while wait_timeout > time.time():
|
while wait_timeout > time.time():
|
||||||
time.sleep(5)
|
time.sleep(wait_interval)
|
||||||
|
|
||||||
# Refresh the operation info
|
# Refresh the operation info
|
||||||
logs = oneandone_conn.list_logs(q='DELETE',
|
logs = oneandone_conn.list_logs(q='DELETE',
|
||||||
|
@ -243,7 +253,7 @@ def wait_for_resource_deletion_completion(oneandone_conn,
|
||||||
_type = 'PRIVATENETWORK'
|
_type = 'PRIVATENETWORK'
|
||||||
else:
|
else:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
'Unsupported wait_for delete operation for %s resource' % resource_type.name)
|
'Unsupported wait_for delete operation for %s resource' % resource_type)
|
||||||
|
|
||||||
for log in logs:
|
for log in logs:
|
||||||
if (log['resource']['id'] == resource_id and
|
if (log['resource']['id'] == resource_id and
|
||||||
|
@ -252,4 +262,4 @@ def wait_for_resource_deletion_completion(oneandone_conn,
|
||||||
log['status']['state'] == 'OK'):
|
log['status']['state'] == 'OK'):
|
||||||
return
|
return
|
||||||
raise Exception(
|
raise Exception(
|
||||||
'Timed out waiting for %s deletion for %s' % (resource_type.name, resource_id))
|
'Timed out waiting for %s deletion for %s' % (resource_type, resource_id))
|
||||||
|
|
1028
lib/ansible/modules/cloud/oneandone/oneandone_monitoring_policy.py
Normal file
1028
lib/ansible/modules/cloud/oneandone/oneandone_monitoring_policy.py
Normal file
File diff suppressed because it is too large
Load diff
|
@ -42,6 +42,11 @@ options:
|
||||||
- Authenticating API token provided by 1&1. Overrides the
|
- Authenticating API token provided by 1&1. Overrides the
|
||||||
ONEANDONE_AUTH_TOKEN environement variable.
|
ONEANDONE_AUTH_TOKEN environement variable.
|
||||||
required: true
|
required: true
|
||||||
|
api_url:
|
||||||
|
description:
|
||||||
|
- Custom API URL. Overrides the
|
||||||
|
ONEANDONE_API_URL environement variable.
|
||||||
|
required: false
|
||||||
datacenter:
|
datacenter:
|
||||||
description:
|
description:
|
||||||
- The datacenter location.
|
- The datacenter location.
|
||||||
|
@ -118,6 +123,12 @@ options:
|
||||||
- User's public SSH key (contents, not path).
|
- User's public SSH key (contents, not path).
|
||||||
required: false
|
required: false
|
||||||
default: None
|
default: None
|
||||||
|
server_type:
|
||||||
|
description:
|
||||||
|
- The type of server to be built.
|
||||||
|
required: false
|
||||||
|
default: "cloud"
|
||||||
|
choices: [ "cloud", "baremetal", "k8s_node" ]
|
||||||
wait:
|
wait:
|
||||||
description:
|
description:
|
||||||
- Wait for the server to be in state 'running' before returning.
|
- Wait for the server to be in state 'running' before returning.
|
||||||
|
@ -131,6 +142,10 @@ options:
|
||||||
description:
|
description:
|
||||||
- how long before wait gives up, in seconds
|
- how long before wait gives up, in seconds
|
||||||
default: 600
|
default: 600
|
||||||
|
wait_interval:
|
||||||
|
description:
|
||||||
|
- Defines the number of seconds to wait when using the wait_for methods
|
||||||
|
default: 5
|
||||||
auto_increment:
|
auto_increment:
|
||||||
description:
|
description:
|
||||||
- When creating multiple servers at once, whether to differentiate
|
- When creating multiple servers at once, whether to differentiate
|
||||||
|
@ -178,6 +193,7 @@ EXAMPLES = '''
|
||||||
count: 3
|
count: 3
|
||||||
wait: yes
|
wait: yes
|
||||||
wait_timeout: 600
|
wait_timeout: 600
|
||||||
|
wait_interval: 10
|
||||||
ssh_key: SSH_PUBLIC_KEY
|
ssh_key: SSH_PUBLIC_KEY
|
||||||
|
|
||||||
# Removing server
|
# Removing server
|
||||||
|
@ -203,8 +219,8 @@ EXAMPLES = '''
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = '''
|
RETURN = '''
|
||||||
machines:
|
servers:
|
||||||
description: Information about each machine that was processed
|
description: Information about each server that was processed
|
||||||
type: list
|
type: list
|
||||||
sample: '[{"hostname": "my-server", "id": "server-id"}]'
|
sample: '[{"hostname": "my-server", "id": "server-id"}]'
|
||||||
returned: always
|
returned: always
|
||||||
|
@ -257,7 +273,8 @@ def _create_server(module, oneandone_conn, hostname, description,
|
||||||
fixed_instance_size_id, vcore, cores_per_processor, ram,
|
fixed_instance_size_id, vcore, cores_per_processor, ram,
|
||||||
hdds, datacenter_id, appliance_id, ssh_key,
|
hdds, datacenter_id, appliance_id, ssh_key,
|
||||||
private_network_id, firewall_policy_id, load_balancer_id,
|
private_network_id, firewall_policy_id, load_balancer_id,
|
||||||
monitoring_policy_id, wait, wait_timeout):
|
monitoring_policy_id, server_type, wait, wait_timeout,
|
||||||
|
wait_interval):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
existing_server = get_server(oneandone_conn, hostname)
|
existing_server = get_server(oneandone_conn, hostname)
|
||||||
|
@ -284,14 +301,16 @@ def _create_server(module, oneandone_conn, hostname, description,
|
||||||
private_network_id=private_network_id,
|
private_network_id=private_network_id,
|
||||||
firewall_policy_id=firewall_policy_id,
|
firewall_policy_id=firewall_policy_id,
|
||||||
load_balancer_id=load_balancer_id,
|
load_balancer_id=load_balancer_id,
|
||||||
monitoring_policy_id=monitoring_policy_id,), hdds)
|
monitoring_policy_id=monitoring_policy_id,
|
||||||
|
server_type=server_type,), hdds)
|
||||||
|
|
||||||
if wait:
|
if wait:
|
||||||
wait_for_resource_creation_completion(
|
wait_for_resource_creation_completion(
|
||||||
oneandone_conn,
|
oneandone_conn,
|
||||||
OneAndOneResources.server,
|
OneAndOneResources.server,
|
||||||
server['id'],
|
server['id'],
|
||||||
wait_timeout)
|
wait_timeout,
|
||||||
|
wait_interval)
|
||||||
server = oneandone_conn.get_server(server['id']) # refresh
|
server = oneandone_conn.get_server(server['id']) # refresh
|
||||||
|
|
||||||
return server
|
return server
|
||||||
|
@ -335,8 +354,10 @@ def create_server(module, oneandone_conn):
|
||||||
monitoring_policy = module.params.get('monitoring_policy')
|
monitoring_policy = module.params.get('monitoring_policy')
|
||||||
firewall_policy = module.params.get('firewall_policy')
|
firewall_policy = module.params.get('firewall_policy')
|
||||||
load_balancer = module.params.get('load_balancer')
|
load_balancer = module.params.get('load_balancer')
|
||||||
|
server_type = module.params.get('server_type')
|
||||||
wait = module.params.get('wait')
|
wait = module.params.get('wait')
|
||||||
wait_timeout = module.params.get('wait_timeout')
|
wait_timeout = module.params.get('wait_timeout')
|
||||||
|
wait_interval = module.params.get('wait_interval')
|
||||||
|
|
||||||
datacenter_id = get_datacenter(oneandone_conn, datacenter)
|
datacenter_id = get_datacenter(oneandone_conn, datacenter)
|
||||||
if datacenter_id is None:
|
if datacenter_id is None:
|
||||||
|
@ -434,8 +455,10 @@ def create_server(module, oneandone_conn):
|
||||||
monitoring_policy_id=monitoring_policy_id,
|
monitoring_policy_id=monitoring_policy_id,
|
||||||
firewall_policy_id=firewall_policy_id,
|
firewall_policy_id=firewall_policy_id,
|
||||||
load_balancer_id=load_balancer_id,
|
load_balancer_id=load_balancer_id,
|
||||||
|
server_type=server_type,
|
||||||
wait=wait,
|
wait=wait,
|
||||||
wait_timeout=wait_timeout)
|
wait_timeout=wait_timeout,
|
||||||
|
wait_interval=wait_interval)
|
||||||
if server:
|
if server:
|
||||||
servers.append(server)
|
servers.append(server)
|
||||||
|
|
||||||
|
@ -468,6 +491,7 @@ def remove_server(module, oneandone_conn):
|
||||||
server_id = module.params.get('server')
|
server_id = module.params.get('server')
|
||||||
wait = module.params.get('wait')
|
wait = module.params.get('wait')
|
||||||
wait_timeout = module.params.get('wait_timeout')
|
wait_timeout = module.params.get('wait_timeout')
|
||||||
|
wait_interval = module.params.get('wait_interval')
|
||||||
|
|
||||||
changed = False
|
changed = False
|
||||||
removed_server = None
|
removed_server = None
|
||||||
|
@ -481,7 +505,8 @@ def remove_server(module, oneandone_conn):
|
||||||
wait_for_resource_deletion_completion(oneandone_conn,
|
wait_for_resource_deletion_completion(oneandone_conn,
|
||||||
OneAndOneResources.server,
|
OneAndOneResources.server,
|
||||||
server['id'],
|
server['id'],
|
||||||
wait_timeout)
|
wait_timeout,
|
||||||
|
wait_interval)
|
||||||
changed = True
|
changed = True
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
module.fail_json(
|
module.fail_json(
|
||||||
|
@ -512,6 +537,7 @@ def startstop_server(module, oneandone_conn):
|
||||||
server_id = module.params.get('server')
|
server_id = module.params.get('server')
|
||||||
wait = module.params.get('wait')
|
wait = module.params.get('wait')
|
||||||
wait_timeout = module.params.get('wait_timeout')
|
wait_timeout = module.params.get('wait_timeout')
|
||||||
|
wait_interval = module.params.get('wait_interval')
|
||||||
|
|
||||||
changed = False
|
changed = False
|
||||||
|
|
||||||
|
@ -545,7 +571,7 @@ def startstop_server(module, oneandone_conn):
|
||||||
operation_completed = False
|
operation_completed = False
|
||||||
wait_timeout = time.time() + wait_timeout
|
wait_timeout = time.time() + wait_timeout
|
||||||
while wait_timeout > time.time():
|
while wait_timeout > time.time():
|
||||||
time.sleep(5)
|
time.sleep(wait_interval)
|
||||||
server = oneandone_conn.get_server(server['id']) # refresh
|
server = oneandone_conn.get_server(server['id']) # refresh
|
||||||
server_state = server['status']['state']
|
server_state = server['status']['state']
|
||||||
if state == 'stopped' and server_state == 'POWERED_OFF':
|
if state == 'stopped' and server_state == 'POWERED_OFF':
|
||||||
|
@ -603,6 +629,9 @@ def main():
|
||||||
type='str',
|
type='str',
|
||||||
default=os.environ.get('ONEANDONE_AUTH_TOKEN'),
|
default=os.environ.get('ONEANDONE_AUTH_TOKEN'),
|
||||||
no_log=True),
|
no_log=True),
|
||||||
|
api_url=dict(
|
||||||
|
type='str',
|
||||||
|
default=os.environ.get('ONEANDONE_API_URL')),
|
||||||
hostname=dict(type='str'),
|
hostname=dict(type='str'),
|
||||||
description=dict(type='str'),
|
description=dict(type='str'),
|
||||||
appliance=dict(type='str'),
|
appliance=dict(type='str'),
|
||||||
|
@ -622,8 +651,10 @@ def main():
|
||||||
firewall_policy=dict(type='str'),
|
firewall_policy=dict(type='str'),
|
||||||
load_balancer=dict(type='str'),
|
load_balancer=dict(type='str'),
|
||||||
monitoring_policy=dict(type='str'),
|
monitoring_policy=dict(type='str'),
|
||||||
|
server_type=dict(type='str', default='cloud', choices=['cloud', 'baremetal', 'k8s_node']),
|
||||||
wait=dict(type='bool', default=True),
|
wait=dict(type='bool', default=True),
|
||||||
wait_timeout=dict(type='int', default=600),
|
wait_timeout=dict(type='int', default=600),
|
||||||
|
wait_interval=dict(type='int', default=5),
|
||||||
state=dict(type='str', default='present', choices=['present', 'absent', 'running', 'stopped']),
|
state=dict(type='str', default='present', choices=['present', 'absent', 'running', 'stopped']),
|
||||||
),
|
),
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
|
@ -640,8 +671,12 @@ def main():
|
||||||
msg='The "auth_token" parameter or ' +
|
msg='The "auth_token" parameter or ' +
|
||||||
'ONEANDONE_AUTH_TOKEN environment variable is required.')
|
'ONEANDONE_AUTH_TOKEN environment variable is required.')
|
||||||
|
|
||||||
oneandone_conn = oneandone.client.OneAndOneService(
|
if not module.params.get('api_url'):
|
||||||
api_token=module.params.get('auth_token'))
|
oneandone_conn = oneandone.client.OneAndOneService(
|
||||||
|
api_token=module.params.get('auth_token'))
|
||||||
|
else:
|
||||||
|
oneandone_conn = oneandone.client.OneAndOneService(
|
||||||
|
api_token=module.params.get('auth_token'), api_url=module.params.get('api_url'))
|
||||||
|
|
||||||
state = module.params.get('state')
|
state = module.params.get('state')
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue