6.1.0
This commit is contained in:
@@ -1,239 +1,10 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# Digital Enegry Cloud Orchestration Technology (DECORT) modules for Ansible
|
||||
# Copyright: (c) 2018-2021 Digital Energy Cloud Solutions LLC
|
||||
#
|
||||
# Apache License 2.0 (see http://www.apache.org/licenses/LICENSE-2.0.txt)
|
||||
#
|
||||
|
||||
|
||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
||||
'status': ['preview'],
|
||||
'supported_by': 'community'}
|
||||
|
||||
DOCUMENTATION = '''
|
||||
DOCUMENTATION = r'''
|
||||
---
|
||||
module: decort_vins
|
||||
short_description: Manage Virtual Network Segments (ViNS) in DECORT cloud
|
||||
description: >
|
||||
This module can be used to create new ViNS in DECORT cloud platform, obtain or
|
||||
modify its characteristics, and delete it.
|
||||
version_added: "2.2"
|
||||
author:
|
||||
requirements:
|
||||
- python >= 3.8
|
||||
- PyJWT Python module
|
||||
- requests Python module
|
||||
- netaddr Python module
|
||||
- decort_utils utility library (module)
|
||||
- DECORT cloud platform version 3.8.6 or higher
|
||||
notes:
|
||||
- Environment variables can be used to pass selected parameters to the module, see details below.
|
||||
- Specified Oauth2 provider must be trusted by the DECORT cloud controller on which JWT will be used.
|
||||
- 'Similarly, JWT supplied in I(authenticator=jwt) mode should be received from Oauth2 provider trusted by
|
||||
the DECORT cloud controller on which this JWT will be used.'
|
||||
options:
|
||||
account_id:
|
||||
description:
|
||||
- 'ID of the account under which this ViNS will be created (for new ViNS) or is located (for already
|
||||
existing ViNS). This is the alternative to I(account_name) option.'
|
||||
- If both I(account_id) and I(account_name) specified, then I(account_name) is ignored.
|
||||
required: no
|
||||
account_name:
|
||||
description:
|
||||
- 'Name of the account under which this ViNS will be created (for new RGs) or is located (for already
|
||||
existing ViNS).'
|
||||
- 'This parameter is ignored if I(account_id) is specified.'
|
||||
required: no
|
||||
annotation:
|
||||
description:
|
||||
- Optional text description of this virtual network segment.
|
||||
default: empty string
|
||||
required: no
|
||||
app_id:
|
||||
description:
|
||||
- 'Application ID for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
||||
- 'Required if I(authenticator=oauth2).'
|
||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_ID
|
||||
environment variable.'
|
||||
required: no
|
||||
app_secret:
|
||||
description:
|
||||
- 'Application API secret used for authenticating to the DECORT controller when I(authenticator=oauth2).'
|
||||
- This parameter is required when I(authenticator=oauth2) and ignored in other modes.
|
||||
- 'If not found in the playbook or command line arguments, the value will be taken from DECORT_APP_SECRET
|
||||
environment variable.'
|
||||
required: no
|
||||
authenticator:
|
||||
description:
|
||||
- Authentication mechanism to be used when accessing DECORT controller and authorizing API call.
|
||||
default: jwt
|
||||
choices: [ jwt, oauth2, legacy ]
|
||||
required: yes
|
||||
controller_url:
|
||||
description:
|
||||
- URL of the DECORT controller that will be contacted to manage the RG according to the specification.
|
||||
- 'This parameter is always required regardless of the specified I(authenticator) type.'
|
||||
required: yes
|
||||
ext_net_id:
|
||||
description:
|
||||
- 'Controls ViNS connection to an external network. This argument is optional with default value of -1,
|
||||
which means no external connection.'
|
||||
- Specify 0 to connect ViNS to external network and let platform select external network Id automatically.
|
||||
- Specify positive value to request ViNS connection to the external network with corresponding ID.
|
||||
- You may also control external IP address selection with I(ext_ip_addr) argument.
|
||||
default: -1
|
||||
required: no
|
||||
ext_ip_addr:
|
||||
description:
|
||||
- IP address to assign to the external interface of this ViNS when connecting to the external net.
|
||||
- If empty string is passed, the platform will assign free IP address automatically.
|
||||
- 'Note that if invalid IP address or an address already occupied by another client is specified,
|
||||
the module will abort with an error.'
|
||||
- 'This argument is used only for new connection to the specified network. You cannot select another
|
||||
external IP address without changing external network ID.'
|
||||
- ViNS connection to the external network is controlled by I(ext_net_id) argument.
|
||||
default: empty string
|
||||
required: no
|
||||
ipcidr:
|
||||
description:
|
||||
- Internal ViNS network address in a format XXX.XXX.XXX.XXX/XX (includes address and netmask).
|
||||
- If empty string is passed, the platform will assign network address automatically.
|
||||
- 'When selecting this address manually, note that this address must be unique amomng all ViNSes in
|
||||
the target account.'
|
||||
default: empty string
|
||||
required: no
|
||||
jwt:
|
||||
description:
|
||||
- 'JWT (access token) for authenticating to the DECORT controller when I(authenticator=jwt).'
|
||||
- 'This parameter is required if I(authenticator=jwt) and ignored for other authentication modes.'
|
||||
- If not specified in the playbook, the value will be taken from DECORT_JWT environment variable.
|
||||
required: no
|
||||
oauth2_url:
|
||||
description:
|
||||
- 'URL of the oauth2 authentication provider to use when I(authenticator=oauth2).'
|
||||
- 'This parameter is required when when I(authenticator=oauth2).'
|
||||
- 'If not specified in the playbook, the value will be taken from DECORT_OAUTH2_URL environment variable.'
|
||||
password:
|
||||
description:
|
||||
- 'Password for authenticating to the DECORT controller when I(authenticator=legacy).'
|
||||
- 'This parameter is required if I(authenticator=legacy) and ignored in other authentication modes.'
|
||||
- If not specified in the playbook, the value will be taken from DECORT_PASSWORD environment variable.
|
||||
required: no
|
||||
rg_id:
|
||||
description:
|
||||
- 'ID of the resource group (RG), where this ViNS will be created (for a new ViNS) or located
|
||||
(for already existing ViNS).'
|
||||
- If ViNS is created at the account level, I(rg_id) should be omitted or set to 0.
|
||||
- If both I(rg_id) and I(rg_name) are specified, then I(rg_name) is ignored.
|
||||
default: 0
|
||||
required: no
|
||||
rg_name:
|
||||
description:
|
||||
- 'Name of the resource group (RG), where this ViNS will be created (for new ViNS) or
|
||||
located (for already existing ViNS).'
|
||||
- If ViNS is created at the account level, I(rg_name) should be omitted or set to emtpy string.
|
||||
- If both I(rg_name) and I(rg_id) are specified, then I(rg_name) is ignored.
|
||||
default: empty string
|
||||
required: no
|
||||
state:
|
||||
description:
|
||||
- Specify the desired state of the ViNS at the exit of the module.
|
||||
- 'Regardless of I(state), if ViNS exists and is in one of [DEPLOYING, DESTROYING, MIGRATING] states,
|
||||
do nothing.'
|
||||
- 'If desired I(state=present):'
|
||||
- ' - ViNS does not exist or is in DESTROYED state, create new ViNS according to the specifications.'
|
||||
- ' - ViNS is in DELETED state, restore it and change quotas if necessary. Note that on successful
|
||||
restore ViNS will be left in DISABLED state.'
|
||||
- ' - ViNS is in one of [CREATED, ENABLED, DISABLED] states, do nothing.'
|
||||
- ' - ViNS in any other state, abort with an error.'
|
||||
- 'If desired I(state=enabled):'
|
||||
- ' - ViNS does not exist or is in DESTROYED state, create new ViNS according to the specifications.'
|
||||
- ' - ViNS is in DELETED state, restore and enable it.'
|
||||
- ' - ViNS is in one of [CREATED, ENABLED] states, do nothing.'
|
||||
- ' - viNS is in any other state, abort with an error.'
|
||||
- 'If desired I(state=absent):'
|
||||
- ' - ViNS is in one of [CREATED, ENABLED, DISABLED, DELETED] states, destroy it.'
|
||||
- ' - ViNS in DESTROYED state, do nothing.'
|
||||
- ' - ViNS in any other state, abort with an error.'
|
||||
- 'If desired I(state=disabled):'
|
||||
- ' - ViNS is in one of [CREATED, ENABLED] states, disable it.'
|
||||
- ' - ViNS is DISABLED state, do nothing.'
|
||||
- ' - ViNS does not exist or is in one of [ENABLING, DISABLING, DELETING, DELETED, DESTROYING, DESTROYED]
|
||||
states, abort with an error.'
|
||||
default: present
|
||||
choices: [ absent, disabled, enabled, present ]
|
||||
user:
|
||||
description:
|
||||
- 'Name of the legacy user for authenticating to the DECORT controller when I(authenticator=legacy).'
|
||||
- 'This parameter is required when I(authenticator=legacy) and ignored for other authentication modes.'
|
||||
- If not specified in the playbook, the value will be taken from DECORT_USER environment variable.
|
||||
required: no
|
||||
verify_ssl:
|
||||
description:
|
||||
- 'Controls SSL verification mode when making API calls to DECORT controller. Set it to False if you
|
||||
want to disable SSL certificate verification. Intended use case is when you run module in a trusted
|
||||
environment that uses self-signed certificates. Note that disabling SSL verification in any other
|
||||
scenario can lead to security issues, so please know what you are doing.'
|
||||
default: True
|
||||
required: no
|
||||
vins_id:
|
||||
description:
|
||||
- ID of the ViNs to manage. If ViNS is identified by ID it must be present.
|
||||
- If ViNS ID is specified, I(account_id), I(account_name), I(rg_id) and I(rg_name) are ignored.
|
||||
vins_name:
|
||||
description:
|
||||
- Name of the ViNS.
|
||||
- ViNS can exist at either account or resource group level.
|
||||
- ViNS name is unique only within its parent (i.e. account or resource group).
|
||||
- 'To create ViNS at account level omit both I(rg_id) and I(rg_name), or set them to 0 and empty
|
||||
string respectively.'
|
||||
required: yes
|
||||
workflow_callback:
|
||||
description:
|
||||
- 'Callback URL that represents an application, which invokes this module (e.g. up-level orchestrator or
|
||||
end-user portal) and may except out-of-band updates on progress / exit status of the module run.'
|
||||
- API call at this URL will be used to relay such information to the application.
|
||||
- 'API call payload will include module-specific details about this module run and I(workflow_context).'
|
||||
required: no
|
||||
workflow_context:
|
||||
description:
|
||||
- 'Context data that will be included into the payload of the API call directed at I(workflow_callback) URL.'
|
||||
- 'This context data is expected to uniquely identify the task carried out by this module invocation so
|
||||
that up-level orchestrator could match returned information to the its internal entities.'
|
||||
required: no
|
||||
'''
|
||||
|
||||
EXAMPLES = '''
|
||||
- name: create a new ViNS named "MyViNS" if it does not exist yet under RG "MyRG" in the account "MyAccount".
|
||||
decort_vins:
|
||||
authenticator: oauth2
|
||||
app_id: "{{ MY_APP_ID }}"
|
||||
app_secret: "{{ MY_APP_SECRET }}"
|
||||
controller_url: "https://cloud.digitalenergy.online"
|
||||
vins_name: "MyViNS"
|
||||
rg_name: "MyRG"
|
||||
account_name: "MyAccount"
|
||||
state: present
|
||||
delegate_to: localhost
|
||||
register: my_vins
|
||||
'''
|
||||
|
||||
RETURN = '''
|
||||
facts:
|
||||
description: facts about the virtual network segment
|
||||
returned: always
|
||||
type: dict
|
||||
sample:
|
||||
facts:
|
||||
id: 5
|
||||
name: MyViNS
|
||||
int_net_addr: 192.168.1.0
|
||||
ext_net_addr: 10.50.11.118
|
||||
state: CREATED
|
||||
account_id: 7
|
||||
rg_id: 19
|
||||
gid: 1001
|
||||
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
|
||||
'''
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
@@ -241,6 +12,7 @@ from ansible.module_utils.basic import env_fallback
|
||||
|
||||
from ansible.module_utils.decort_utils import *
|
||||
|
||||
|
||||
class decort_vins(DecortController):
|
||||
def __init__(self,arg_amodule):
|
||||
super(decort_vins, self).__init__(arg_amodule)
|
||||
@@ -337,7 +109,7 @@ class decort_vins(DecortController):
|
||||
self.acc_id, self.rg_id,
|
||||
self.amodule.params['ipcidr'],
|
||||
self.amodule.params['ext_net_id'], self.amodule.params['ext_ip_addr'],
|
||||
self.amodule.params['annotation'])
|
||||
self.amodule.params['description'])
|
||||
|
||||
if self.amodule.params['mgmtaddr'] or self.amodule.params['connect_to']:
|
||||
_, self.vins_facts = self.vins_find(self.vins_id)
|
||||
@@ -473,7 +245,7 @@ class decort_vins(DecortController):
|
||||
return dict(
|
||||
account_id=dict(type='int', required=False,default=0),
|
||||
account_name=dict(type='str', required=False, default=''),
|
||||
annotation=dict(type='str', required=False, default=''),
|
||||
description=dict(type='str', required=False, default=''),
|
||||
app_id=dict(type='str',
|
||||
required=False,
|
||||
fallback=(env_fallback, ['DECORT_APP_ID'])),
|
||||
|
||||
Reference in New Issue
Block a user