From d175d333075b1fae88c046a20617da484353758c Mon Sep 17 00:00:00 2001 From: Chris Archibald Date: Wed, 2 Dec 2020 12:56:06 -0500 Subject: [PATCH] Sync bitbucket and GitHub --- .../netapp/azure/netapp-azure-20.8.0.tar.gz | Bin 19303 -> 19330 bytes ansible_collections/netapp/ontap/README.md | 2 + .../changelogs/fragments/DEVOPS-3386.yaml | 2 + .../changelogs/fragments/DEVOPS-3454.yaml | 2 + .../ontap/plugins/modules/na_ontap_user.py | 39 ++++++++++++++++-- .../ontap/plugins/modules/na_ontap_volume.py | 38 ++++++++++++++++- .../plugins/modules/test_na_ontap_volume.py | 27 ++++++++---- .../modules/test_na_ontap_volume_rest.py | 24 ++++++++++- 8 files changed, 119 insertions(+), 15 deletions(-) create mode 100644 ansible_collections/netapp/ontap/changelogs/fragments/DEVOPS-3386.yaml create mode 100644 ansible_collections/netapp/ontap/changelogs/fragments/DEVOPS-3454.yaml diff --git a/ansible_collections/netapp/azure/netapp-azure-20.8.0.tar.gz b/ansible_collections/netapp/azure/netapp-azure-20.8.0.tar.gz index 9355bf0998ce9d68f682fa0d204be0b44be0f3b4..769b03dbbb08feb5f32d737f354c799785bb29ab 100644 GIT binary patch literal 19330 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 ar}|W%>QjBHPxV>*^Zx-FMZjhNr~&{pn6+L2 diff --git a/ansible_collections/netapp/ontap/README.md b/ansible_collections/netapp/ontap/README.md index 04bdeb52..c196ace0 100644 --- a/ansible_collections/netapp/ontap/README.md +++ b/ansible_collections/netapp/ontap/README.md @@ -46,10 +46,12 @@ Join our Slack Channel at [Netapp.io](http://netapp.io/slack) - na_ontap_volume - `inline-compression` to enable inline compression on a volume. - na_ontap_volume - `nas_application_template` to create a volume using nas application REST API. - na_ontap_volume - `size_change_threshold` to ignore small changes in volume size. + - na_ontap_volume - `sizing_method` to resize a FlexGroup using REST. ### Bug fixes - na_ontap_broadcast_domain_ports - properly report check_mode `changed`. - na_ontap_cifs - fix for AttributeError - 'NoneType' object has no attribute 'get' on line 300 + - na_ontap_user - application parameter expects only ``service_processor`` but module supports ``service-processor``. - na_ontap_volume - change in volume type was ignored and now reporting an error. - na_ontap_volume - checking for success before failure lead to 'NoneType' object has no attribute 'get_child_by_name' when modifying a Flexcache volume. diff --git a/ansible_collections/netapp/ontap/changelogs/fragments/DEVOPS-3386.yaml b/ansible_collections/netapp/ontap/changelogs/fragments/DEVOPS-3386.yaml new file mode 100644 index 00000000..999c5c74 --- /dev/null +++ b/ansible_collections/netapp/ontap/changelogs/fragments/DEVOPS-3386.yaml @@ -0,0 +1,2 @@ +bugfixes: + - na_ontap_user - application expects only ``service_processor`` but module supports ``service-processor``. diff --git a/ansible_collections/netapp/ontap/changelogs/fragments/DEVOPS-3454.yaml b/ansible_collections/netapp/ontap/changelogs/fragments/DEVOPS-3454.yaml new file mode 100644 index 00000000..babca44d --- /dev/null +++ b/ansible_collections/netapp/ontap/changelogs/fragments/DEVOPS-3454.yaml @@ -0,0 +1,2 @@ +minor_changes: + - na_ontap_volume - ``sizing_method`` to resize a FlexGroup using REST. diff --git a/ansible_collections/netapp/ontap/plugins/modules/na_ontap_user.py b/ansible_collections/netapp/ontap/plugins/modules/na_ontap_user.py index 2d244a3f..26690f0a 100644 --- a/ansible_collections/netapp/ontap/plugins/modules/na_ontap_user.py +++ b/ansible_collections/netapp/ontap/plugins/modules/na_ontap_user.py @@ -45,11 +45,13 @@ description: - List of application to grant access to. - Creating a login with application console, telnet, rsh, and service-processor for a data Vserver is not supported. + - Module supports both service-processor and service_processor choices. + - ZAPI requires service-processor, while REST requires service_processor, except for an issue with ONTAP 9.6 and 9.7. - snmp is not supported in REST. required: true type: list elements: str - choices: ['console', 'http','ontapi','rsh','snmp','service-processor','sp','ssh','telnet'] + choices: ['console', 'http','ontapi','rsh','snmp','service_processor','service-processor','sp','ssh','telnet'] aliases: - application authentication_method: @@ -219,7 +221,7 @@ def __init__(self): applications=dict(required=True, type='list', elements='str', aliases=['application'], choices=['console', 'http', 'ontapi', 'rsh', 'snmp', - 'sp', 'service-processor', 'ssh', 'telnet'],), + 'sp', 'service-processor', 'service_processor', 'ssh', 'telnet'],), authentication_method=dict(required=True, type='str', choices=['community', 'password', 'publickey', 'domain', 'nsswitch', 'usm', 'cert']), set_password=dict(required=False, type='str', no_log=True), @@ -366,6 +368,26 @@ def create_user_rest(self, apps=None): if 'lock_user' in self.parameters: params['locked'] = self.parameters['lock_user'] dummy, error = self.rest_api.post(api, params) + error_sp = None + if error: + if 'invalid value' in error['message']: + if 'service-processor' in error['message'] or 'service_processor' in error['message']: + # find if there is error for service processor application value + # update value as per ONTAP version support + app_list_sp = params['applications'] + for app_item in app_list_sp: + if 'service-processor' == app_item['application']: + app_item['application'] = 'service_processor' + elif 'service_processor' == app_item['application']: + app_item['application'] = 'service-processor' + params['applications'] = app_list_sp + # post again and throw first error in case of an error + dummy, error_sp = self.rest_api.post(api, params) + if error_sp: + self.module.fail_json(msg='Error while creating user: %s' % error) + return True + + # non-sp errors thrown if error: self.module.fail_json(msg='Error while creating user: %s' % error) @@ -581,12 +603,23 @@ def modify_user(self, application): self.module.fail_json(msg='Error modifying user %s: %s' % (self.parameters['name'], to_native(error)), exception=traceback.format_exc()) + def change_sp_application(self, current_app): + if 'service-processor' or 'service_processor' in self.parameters['applications']: + if 'service-processor' in current_app: + if 'service_processor' in self.parameters['applications']: + index = self.parameters['applications'].index('service_processor') + self.parameters['applications'][index] = 'service-processor' + if 'service_processor' in current_app: + if 'service-processor' in self.parameters['applications']: + index = self.parameters['applications'].index('service-processor') + self.parameters['applications'][index] = 'service_processor' + def apply_for_rest(self): current = self.get_user_rest() - if current is not None: uuid, name = current current = self.get_user_details_rest(name, uuid) + self.change_sp_application(current['applications']) cd_action = self.na_helper.get_cd_action(current, self.parameters) modify_decision = self.na_helper.get_modified_attributes(current, self.parameters) diff --git a/ansible_collections/netapp/ontap/plugins/modules/na_ontap_volume.py b/ansible_collections/netapp/ontap/plugins/modules/na_ontap_volume.py index 66b6c7c6..94df84bd 100644 --- a/ansible_collections/netapp/ontap/plugins/modules/na_ontap_volume.py +++ b/ansible_collections/netapp/ontap/plugins/modules/na_ontap_volume.py @@ -176,6 +176,16 @@ default: 10 version_added: 20.12.0 + sizing_method: + description: + - Represents the method to modify the size of a FlexGroup. + - use_existing_resources - Increases or decreases the size of the FlexGroup by increasing or decreasing the size of the current FlexGroup resources. + - add_new_resources - Increases the size of the FlexGroup by adding new resources. This is limited to two new resources per available aggregate. + - This is only supported if REST is enabled (ONTAP 9.6 or later) and only for FlexGroups. ONTAP defaults to use_existing_resources. + type: str + choices: ['add_new_resources', 'use_existing_resources'] + version_added: 20.12.0 + type: description: - The volume type, either read-write (RW) or data-protection (DP). @@ -755,6 +765,7 @@ def __init__(self): is_online=dict(required=False, type='bool', default=True), size=dict(type='int', default=None), size_unit=dict(default='gb', choices=['bytes', 'b', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb'], type='str'), + sizing_method=dict(choices=['add_new_resources', 'use_existing_resources'], type='str'), aggregate_name=dict(type='str', default=None), type=dict(type='str', default=None), export_policy=dict(type='str', default=None, aliases=['policy']), @@ -988,6 +999,7 @@ def get_volume(self, vol_name=None): return_value['comment'] = volume_id_attributes['comment'] else: return_value['comment'] = None + return_value['uuid'] = self.na_helper.safe_get(volume_id_attributes, ['instance-uuid']) if volume_attributes['volume-security-attributes'].get_child_by_name('style'): # style is not present if the volume is still offline or of type: dp return_value['volume_security_style'] = volume_attributes['volume-security-attributes']['style'] @@ -1072,9 +1084,11 @@ def get_volume(self, vol_name=None): return return_value - def fail_on_error(self, error, stack=False): + def fail_on_error(self, error, api=None, stack=False): if error is None: return + if api is not None: + error = 'calling api: %s: %s' % (api, error) results = dict(msg="Error: %s" % error) if stack: results['stack'] = traceback.format_stack() @@ -1390,13 +1404,31 @@ def rename_volume(self): % (self.parameters['name'], to_native(error)), exception=traceback.format_exc()) + def rest_resize_volume(self): + """ + Re-size the volume using REST PATCH method. + """ + uuid = self.parameters['uuid'] + if uuid is None: + self.module.fail_json(msg='Could not read UUID for volume %s' % self.parameters['name']) + api = '/storage/volumes/%s' % uuid + body = dict(size=self.parameters['size']) + query = dict(sizing_method=self.parameters['sizing_method']) + rest_api = netapp_utils.OntapRestAPI(self.module) + response, error = rest_api.patch(api, body, query) + self.fail_on_error(error, api) + return response + def resize_volume(self): """ Re-size the volume. - Note: 'is_infinite' needs to be set to True in order to rename an + Note: 'is_infinite' needs to be set to True in order to resize an Infinite Volume. """ + if self.parameters.get('sizing_method') is not None: + return self.rest_resize_volume() + vol_size_zapi, vol_name_zapi = ['volume-size-async', 'volume-name']\ if (self.parameters['is_infinite'] or self.volume_style == 'flexGroup')\ else ['volume-size', 'volume'] @@ -1412,6 +1444,7 @@ def resize_volume(self): self.module.fail_json(msg='Error re-sizing volume %s: %s' % (self.parameters['name'], to_native(error)), exception=traceback.format_exc()) + return None def change_volume_state(self, call_from_delete_vol=False): """ @@ -2015,6 +2048,7 @@ def apply(self): elif cd_action == 'delete': self.delete_volume(current) elif modify: + self.parameters['uuid'] = current['uuid'] self.take_modify_actions(modify) result = dict( diff --git a/ansible_collections/netapp/ontap/tests/unit/plugins/modules/test_na_ontap_volume.py b/ansible_collections/netapp/ontap/tests/unit/plugins/modules/test_na_ontap_volume.py index 4ffb4746..48c34856 100644 --- a/ansible_collections/netapp/ontap/tests/unit/plugins/modules/test_na_ontap_volume.py +++ b/ansible_collections/netapp/ontap/tests/unit/plugins/modules/test_na_ontap_volume.py @@ -796,7 +796,8 @@ def test_successful_resize_flex_group(self, get_volume): 'vserver': self.mock_vol['vserver'], 'style_extended': 'flexgroup', 'size': 20971520, - 'unix_permissions': '755' + 'unix_permissions': '755', + 'uuid': '1234' } get_volume.side_effect = [ current @@ -821,7 +822,8 @@ def test_successful_modify_unix_permissions_flex_group(self, get_volume, check_j 'name': self.mock_vol['name'], 'vserver': self.mock_vol['vserver'], 'style_extended': 'flexgroup', - 'unix_permissions': '777' + 'unix_permissions': '777', + 'uuid': '1234' } get_volume.side_effect = [ current @@ -849,7 +851,8 @@ def test_successful_modify_unix_permissions_flex_group_0_time_out(self, get_volu 'name': self.mock_vol['name'], 'vserver': self.mock_vol['vserver'], 'style_extended': 'flexgroup', - 'unix_permissions': '777' + 'unix_permissions': '777', + 'uuid': '1234' } get_volume.side_effect = [ current @@ -873,7 +876,8 @@ def test_successful_modify_unix_permissions_flex_group_0_missing_result(self, ge 'name': self.mock_vol['name'], 'vserver': self.mock_vol['vserver'], 'style_extended': 'flexgroup', - 'unix_permissions': '777' + 'unix_permissions': '777', + 'uuid': '1234' } get_volume.side_effect = [ current @@ -899,7 +903,8 @@ def test_error_modify_unix_permissions_flex_group(self, get_volume, check_job_st 'name': self.mock_vol['name'], 'vserver': self.mock_vol['vserver'], 'style_extended': 'flexgroup', - 'unix_permissions': '777' + 'unix_permissions': '777', + 'uuid': '1234' } get_volume.side_effect = [ current @@ -924,7 +929,8 @@ def test_failure_modify_unix_permissions_flex_group(self, get_volume): 'name': self.mock_vol['name'], 'vserver': self.mock_vol['vserver'], 'style_extended': 'flexvol', - 'unix_permissions': '777' + 'unix_permissions': '777', + 'uuid': '1234' } get_volume.side_effect = [ current @@ -949,7 +955,8 @@ def test_successful_offline_state_flex_group(self, get_volume): 'style_extended': 'flexgroup', 'is_online': True, 'junction_path': 'anything', - 'unix_permissions': '755' + 'unix_permissions': '755', + 'uuid': '1234' } get_volume.side_effect = [ current @@ -973,7 +980,8 @@ def test_successful_online_state_flex_group(self, get_volume): 'style_extended': 'flexgroup', 'is_online': False, 'junction_path': 'anything', - 'unix_permissions': '755' + 'unix_permissions': '755', + 'uuid': '1234' } get_volume.side_effect = [ current @@ -1090,7 +1098,8 @@ def test_successful_modify_snapshot_auto_delete(self, get_volume): 'vserver': self.mock_vol['vserver'], 'snapshot_auto_delete': {'delete_order': 'newest_first', 'destroy_list': 'lun_clone,vol_clone', 'target_free_space': 30, 'prefix': 'test', 'commitment': 'try', - 'state': 'on', 'trigger': 'snap_reserve', 'defer_delete': 'scheduled'} + 'state': 'on', 'trigger': 'snap_reserve', 'defer_delete': 'scheduled'}, + 'uuid': '1234' } get_volume.side_effect = [ current diff --git a/ansible_collections/netapp/ontap/tests/unit/plugins/modules/test_na_ontap_volume_rest.py b/ansible_collections/netapp/ontap/tests/unit/plugins/modules/test_na_ontap_volume_rest.py index 30238e9b..fe5016e3 100644 --- a/ansible_collections/netapp/ontap/tests/unit/plugins/modules/test_na_ontap_volume_rest.py +++ b/ansible_collections/netapp/ontap/tests/unit/plugins/modules/test_na_ontap_volume_rest.py @@ -132,7 +132,8 @@ def build_get_response(self, name): 'attributes-list': [{ 'volume-attributes': { 'volume-id-attributes': { - 'name': name + 'name': name, + 'instance-uuid': '123' }, 'volume-performance-attributes': { 'is-atime-update-enabled': 'true' @@ -309,3 +310,24 @@ def test_rest_successfully_created_with_modify(self, mock_request): assert 'unix_permissions' in exc.value.args[0]['modify_after_create'] assert 'language' not in exc.value.args[0]['modify_after_create'] # eh! assert 'volume-modify-iter' in my_volume.server.zapis + + @patch('ansible_collections.netapp.ontap.plugins.module_utils.netapp.OntapRestAPI.send_request') + def test_rest_successfully_resized(self, mock_request): + ''' make sure resize if using RESP API if sizing_method is present + ''' + data = dict(self.mock_args()) + data['sizing_method'] = 'add_new_resources' + data['size'] = 20737418240 + set_module_args(data) + mock_request.side_effect = [ + SRR['empty_good'], # PATCH application/applications + SRR['end_of_sequence'] + ] + my_volume = self.get_volume_mock_object(get_volume=['test']) + with pytest.raises(AnsibleExitJson) as exc: + my_volume.apply() + assert exc.value.args[0]['changed'] + print(exc.value.args[0]) + assert 'volume-size' not in my_volume.server.zapis + print(mock_request.call_args) + mock_request.assert_called_with('PATCH', '/storage/volumes/123', {'sizing_method': 'add_new_resources'}, json={'size': 22266633286068469760})