From 6f1792b49082335fc0a95866127147bd5ccf280d Mon Sep 17 00:00:00 2001 From: Cong Phuoc Hoang Date: Mon, 2 Oct 2017 17:58:36 +0900 Subject: [PATCH] Implement client to support Kubernetes as VIM This patch will add changes to support Kubernetes as VIM feature in python-tackerclient. After this change, user have to provide VIM type in VIM config file when creating or updating VIM. The default VIM type is openstack. Partially Implements: blueprint kubernetes-as-vim Change-Id: I1b1610cb89a78a2a8fe134265b83dd469d72fdcd --- tackerclient/tacker/v1_0/nfvo/vim.py | 4 +- tackerclient/tacker/v1_0/nfvo/vim_utils.py | 63 +++++-- .../tests/unit/vm/samples/vim_config.yaml | 1 + .../samples/vim_config_without_auth_url.yaml | 1 + .../unit/vm/samples/vim_k8s_bearer_token.yaml | 5 + ...vim_k8s_bearer_token_without_auth_url.yaml | 4 + .../tests/unit/vm/samples/vim_k8s_config.yaml | 6 + .../vim_k8s_config_without_auth_url.yaml | 5 + tackerclient/tests/unit/vm/test_cli10_vim.py | 19 +- .../tests/unit/vm/test_cli10_vim_k8s.py | 172 ++++++++++++++++++ .../test_cli10_vim_k8s_with_bearer_token.py | 170 +++++++++++++++++ tackerclient/tests/unit/vm/test_vim_utils.py | 43 ++++- 12 files changed, 470 insertions(+), 23 deletions(-) create mode 100644 tackerclient/tests/unit/vm/samples/vim_k8s_bearer_token.yaml create mode 100644 tackerclient/tests/unit/vm/samples/vim_k8s_bearer_token_without_auth_url.yaml create mode 100644 tackerclient/tests/unit/vm/samples/vim_k8s_config.yaml create mode 100644 tackerclient/tests/unit/vm/samples/vim_k8s_config_without_auth_url.yaml create mode 100644 tackerclient/tests/unit/vm/test_cli10_vim_k8s.py create mode 100644 tackerclient/tests/unit/vm/test_cli10_vim_k8s_with_bearer_token.py diff --git a/tackerclient/tacker/v1_0/nfvo/vim.py b/tackerclient/tacker/v1_0/nfvo/vim.py index 903dd953..1cb037af 100644 --- a/tackerclient/tacker/v1_0/nfvo/vim.py +++ b/tackerclient/tacker/v1_0/nfvo/vim.py @@ -80,7 +80,6 @@ class CreateVIM(tackerV10.CreateCommand): 'specified', status_code=404) vim_obj['auth_url'] = vim_utils.validate_auth_url(auth_url).geturl() - vim_obj['type'] = config_param.pop('type', 'openstack') vim_utils.args2body_vim(config_param, vim_obj) tackerV10.update_dict(parsed_args, body[self.resource], ['tenant_id', 'name', 'description', @@ -127,6 +126,9 @@ class UpdateVIM(tackerV10.UpdateCommand): tackerV10.update_dict(parsed_args, body[self.resource], ['tenant_id', 'name', 'description', 'is_default']) + # type attribute is read-only, it can't be updated, so remove it + # in update method + body['vim'].pop('type') return body diff --git a/tackerclient/tacker/v1_0/nfvo/vim_utils.py b/tackerclient/tacker/v1_0/nfvo/vim_utils.py index b916dead..61aef1ff 100644 --- a/tackerclient/tacker/v1_0/nfvo/vim_utils.py +++ b/tackerclient/tacker/v1_0/nfvo/vim_utils.py @@ -24,17 +24,58 @@ def args2body_vim(config_param, vim): :param vim: vim request object :return: vim body with args populated """ - vim['vim_project'] = {'name': config_param.pop('project_name', ''), - 'project_domain_name': - config_param.pop('project_domain_name', '')} - if not vim['vim_project']['name']: - raise exceptions.TackerClientException(message='Project name ' - 'must be specified', - status_code=404) - vim['auth_cred'] = {'username': config_param.pop('username', ''), - 'password': config_param.pop('password', ''), - 'user_domain_name': - config_param.pop('user_domain_name', '')} + vim_type = ['openstack', 'kubernetes'] + if 'type' in config_param: + vim['type'] = config_param.pop('type', '') + if not vim['type'] in vim_type: + raise exceptions.TackerClientException( + message='Supported VIM types: openstack, kubernetes', + status_code=400) + else: + vim['type'] = 'openstack' + if vim['type'] == 'openstack': + vim['vim_project'] = { + 'name': config_param.pop('project_name', ''), + 'project_domain_name': + config_param.pop('project_domain_name', '')} + if not vim['vim_project']['name']: + raise exceptions.TackerClientException( + message='Project name must be specified', + status_code=404) + vim['auth_cred'] = {'username': config_param.pop('username', ''), + 'password': config_param.pop('password', ''), + 'user_domain_name': + config_param.pop('user_domain_name', '')} + elif vim['type'] == 'kubernetes': + vim['vim_project'] = { + 'name': config_param.pop('project_name', '')} + if not vim['vim_project']['name']: + raise exceptions.TackerClientException( + message='Project name must be specified in Kubernetes VIM,' + 'it is namespace in Kubernetes environment', + status_code=404) + if ('username' in config_param) and ('password' in config_param): + vim['auth_cred'] = { + 'username': config_param.pop('username', ''), + 'password': config_param.pop('password', '')} + elif 'bearer_token' in config_param: + vim['auth_cred'] = { + 'bearer_token': config_param.pop('bearer_token', '')} + else: + raise exceptions.TackerClientException( + message='username and password or bearer_token must be' + 'provided', + status_code=404) + if 'ssl_ca_cert' in config_param: + ssl_ca_cert = config_param.pop('ssl_ca_cert', '') + if ssl_ca_cert == 'None': + vim['auth_cred']['ssl_ca_cert'] = None + else: + vim['auth_cred']['ssl_ca_cert'] = ssl_ca_cert + else: + raise exceptions.TackerClientException( + message='ssl_ca_cert must be provided or leave it with None', + status_code=404) def validate_auth_url(url): diff --git a/tackerclient/tests/unit/vm/samples/vim_config.yaml b/tackerclient/tests/unit/vm/samples/vim_config.yaml index aa9dbc0b..80e7c3fa 100644 --- a/tackerclient/tests/unit/vm/samples/vim_config.yaml +++ b/tackerclient/tests/unit/vm/samples/vim_config.yaml @@ -4,3 +4,4 @@ password: '12345' project_name: 'abc' project_domain_name: 'prj_domain_name' user_domain_name: 'user_domain_name' +type: 'openstack' \ No newline at end of file diff --git a/tackerclient/tests/unit/vm/samples/vim_config_without_auth_url.yaml b/tackerclient/tests/unit/vm/samples/vim_config_without_auth_url.yaml index db73c40d..24e8aeea 100644 --- a/tackerclient/tests/unit/vm/samples/vim_config_without_auth_url.yaml +++ b/tackerclient/tests/unit/vm/samples/vim_config_without_auth_url.yaml @@ -3,3 +3,4 @@ password: '12345' project_name: 'abc' project_domain_name: 'prj_domain_name' user_domain_name: 'user_domain_name' +type: 'openstack' diff --git a/tackerclient/tests/unit/vm/samples/vim_k8s_bearer_token.yaml b/tackerclient/tests/unit/vm/samples/vim_k8s_bearer_token.yaml new file mode 100644 index 00000000..44b4f6f2 --- /dev/null +++ b/tackerclient/tests/unit/vm/samples/vim_k8s_bearer_token.yaml @@ -0,0 +1,5 @@ +auth_url: 'https://1.2.3.4:6443' +bearer_token: 'xyz' +ssl_ca_cert: None +project_name: 'default' +type: 'kubernetes' \ No newline at end of file diff --git a/tackerclient/tests/unit/vm/samples/vim_k8s_bearer_token_without_auth_url.yaml b/tackerclient/tests/unit/vm/samples/vim_k8s_bearer_token_without_auth_url.yaml new file mode 100644 index 00000000..fba0f996 --- /dev/null +++ b/tackerclient/tests/unit/vm/samples/vim_k8s_bearer_token_without_auth_url.yaml @@ -0,0 +1,4 @@ +bearer_token: 'xyz' +ssl_ca_cert: None +project_name: 'default' +type: 'kubernetes' \ No newline at end of file diff --git a/tackerclient/tests/unit/vm/samples/vim_k8s_config.yaml b/tackerclient/tests/unit/vm/samples/vim_k8s_config.yaml new file mode 100644 index 00000000..d3c59f00 --- /dev/null +++ b/tackerclient/tests/unit/vm/samples/vim_k8s_config.yaml @@ -0,0 +1,6 @@ +auth_url: 'https://1.2.3.4:6443' +username: 'xyz' +password: '12345' +ssl_ca_cert: 'abcxyz' +project_name: 'default' +type: 'kubernetes' \ No newline at end of file diff --git a/tackerclient/tests/unit/vm/samples/vim_k8s_config_without_auth_url.yaml b/tackerclient/tests/unit/vm/samples/vim_k8s_config_without_auth_url.yaml new file mode 100644 index 00000000..4476ebef --- /dev/null +++ b/tackerclient/tests/unit/vm/samples/vim_k8s_config_without_auth_url.yaml @@ -0,0 +1,5 @@ +username: 'xyz' +password: '12345' +ssl_ca_cert: 'abcxyz' +project_name: 'default' +type: 'kubernetes' \ No newline at end of file diff --git a/tackerclient/tests/unit/vm/test_cli10_vim.py b/tackerclient/tests/unit/vm/test_cli10_vim.py index 81c53f13..86fcd594 100644 --- a/tackerclient/tests/unit/vm/test_cli10_vim.py +++ b/tackerclient/tests/unit/vm/test_cli10_vim.py @@ -40,6 +40,7 @@ class CLITestV10VIMJSON(test_cli10.CLITestV10Base): self.auth_cred = {'username': 'xyz', 'password': '12345', 'user_domain_name': 'user_domain_name'} self.auth_url = 'http://1.2.3.4:5000' + self.type = 'openstack' def test_register_vim_all_params(self): cmd = vim.CreateVIM(test_cli10.MyApp(sys.stdout), None) @@ -52,9 +53,9 @@ class CLITestV10VIMJSON(test_cli10.CLITestV10Base): name, '--config-file', vim_config, '--description', description] - position_names = ['auth_cred', 'vim_project', 'auth_url'] + position_names = ['auth_cred', 'vim_project', 'auth_url', 'type'] position_values = [self.auth_cred, self.vim_project, - self.auth_url] + self.auth_url, self.type] extra_body = {'type': 'openstack', 'name': name, 'description': description, 'is_default': False} self._test_create_resource(self._RESOURCE, cmd, None, my_id, @@ -72,9 +73,9 @@ class CLITestV10VIMJSON(test_cli10.CLITestV10Base): name, '--config-file', vim_config, '--description', description] - position_names = ['auth_cred', 'vim_project', 'auth_url'] + position_names = ['auth_cred', 'vim_project', 'auth_url', 'type'] position_values = [self.auth_cred, self.vim_project, - self.auth_url] + self.auth_url, self.type] extra_body = {'type': 'openstack', 'name': name, 'description': description, 'is_default': False} message = 'Auth URL must be specified' @@ -97,11 +98,12 @@ class CLITestV10VIMJSON(test_cli10.CLITestV10Base): name, '--config-file', vim_config, ] - position_names = ['auth_cred', 'vim_project', 'auth_url'] + position_names = ['auth_cred', 'vim_project', 'auth_url', 'type'] position_values = [ self.auth_cred, self.vim_project, - self.auth_url + self.auth_url, + self.type ] extra_body = {'type': 'openstack', 'name': name, 'is_default': False} self._test_create_resource(self._RESOURCE, cmd, name, my_id, args, @@ -138,8 +140,9 @@ class CLITestV10VIMJSON(test_cli10.CLITestV10Base): '--name', name, '--description', description, '--is_default', is_default] - extra_fields = {'vim_project': self.vim_project, 'auth_cred': - self.auth_cred, 'is_default': 'True', + extra_fields = {'vim_project': self.vim_project, + 'auth_cred': self.auth_cred, + 'is_default': 'True', 'name': name, 'description': description} self._test_update_resource(self._RESOURCE, cmd, my_id, args, extra_fields) diff --git a/tackerclient/tests/unit/vm/test_cli10_vim_k8s.py b/tackerclient/tests/unit/vm/test_cli10_vim_k8s.py new file mode 100644 index 00000000..08a89884 --- /dev/null +++ b/tackerclient/tests/unit/vm/test_cli10_vim_k8s.py @@ -0,0 +1,172 @@ +# Copyright 2015-2016 Brocade Communications Systems Inc +# All Rights Reserved. +# +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import sys + +from tackerclient.common import exceptions +from tackerclient.common import utils +from tackerclient.tacker.v1_0.nfvo import vim +from tackerclient.tests.unit import test_cli10 + +API_VERSION = "1.0" +FORMAT = 'json' +TOKEN = 'testtoken' +ENDURL = 'localurl' + + +class CLITestV10VIMJSON(test_cli10.CLITestV10Base): + _RESOURCE = 'vim' + _RESOURCES = 'vims' + + def setUp(self): + plurals = {'vims': 'vim'} + super(CLITestV10VIMJSON, self).setUp(plurals=plurals) + self.vim_project = {'name': 'default'} + self.auth_cred = {'username': 'xyz', 'password': '12345', + 'ssl_ca_cert': 'abcxyz'} + self.auth_url = 'https://1.2.3.4:6443' + self.type = 'kubernetes' + + def test_register_vim_all_params(self): + cmd = vim.CreateVIM(test_cli10.MyApp(sys.stdout), None) + name = 'my-name' + my_id = 'my-id' + description = 'Vim Description' + vim_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_config.yaml') + args = [ + name, + '--config-file', vim_config, + '--description', description] + position_names = ['auth_cred', 'vim_project', 'auth_url', 'type'] + position_values = [self.auth_cred, self.vim_project, + self.auth_url, self.type] + extra_body = {'type': 'kubernetes', 'name': name, + 'description': description, 'is_default': False} + self._test_create_resource(self._RESOURCE, cmd, None, my_id, + args, position_names, position_values, + extra_body=extra_body) + + def test_register_vim_with_no_auth_url(self): + cmd = vim.CreateVIM(test_cli10.MyApp(sys.stdout), None) + my_id = 'my-id' + name = 'test_vim' + description = 'Vim Description' + vim_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_config_without_auth_url.yaml') + args = [ + name, + '--config-file', vim_config, + '--description', description] + position_names = ['auth_cred', 'vim_project', 'auth_url', 'type'] + position_values = [self.auth_cred, self.vim_project, + self.auth_url, self.type] + extra_body = {'type': 'kubernetes', 'name': name, + 'description': description, 'is_default': False} + message = 'Auth URL must be specified' + ex = self.assertRaises(exceptions.TackerClientException, + self._test_create_resource, + self._RESOURCE, cmd, None, my_id, args, + position_names, position_values, + extra_body=extra_body) + self.assertEqual(message, ex.message) + self.assertEqual(404, ex.status_code) + + def test_register_vim_with_mandatory_params(self): + cmd = vim.CreateVIM(test_cli10.MyApp(sys.stdout), None) + name = 'my-name' + my_id = 'my-id' + + vim_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_config.yaml') + args = [ + name, + '--config-file', vim_config, + ] + position_names = ['auth_cred', 'vim_project', 'auth_url', 'type'] + position_values = [ + self.auth_cred, + self.vim_project, + self.auth_url, + self.type + ] + extra_body = {'type': 'kubernetes', 'name': name, 'is_default': False} + self._test_create_resource(self._RESOURCE, cmd, name, my_id, args, + position_names, position_values, + extra_body=extra_body) + + def test_list_vims(self): + cmd = vim.ListVIM(test_cli10.MyApp(sys.stdout), None) + self._test_list_resources(self._RESOURCES, cmd, True) + + def test_show_vim_id(self): + cmd = vim.ShowVIM(test_cli10.MyApp(sys.stdout), None) + args = ['--fields', 'id', self.test_id] + self._test_show_resource(self._RESOURCE, cmd, self.test_id, args, + ['id']) + + def test_show_vim_id_name(self): + cmd = vim.ShowVIM(test_cli10.MyApp(sys.stdout), None) + args = ['--fields', 'id', '--fields', 'name', self.test_id] + self._test_show_resource(self._RESOURCE, cmd, self.test_id, + args, ['id', 'name']) + + def test_update_vim_all_params(self): + cmd = vim.UpdateVIM(test_cli10.MyApp(sys.stdout), None) + update_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_config_without_auth_url.yaml') + my_id = 'my-id' + name = 'new_name' + name = 'new_name' + description = 'new_description' + is_default = 'True' + args = [ + my_id, + '--config-file', str(update_config), + '--name', name, + '--description', description, + '--is_default', is_default] + extra_fields = {'vim_project': self.vim_project, + 'auth_cred': self.auth_cred, + 'is_default': 'True', + 'name': name, 'description': description} + self._test_update_resource(self._RESOURCE, cmd, my_id, args, + extra_fields) + + def test_update_vim_with_mandatory_params(self): + cmd = vim.UpdateVIM(test_cli10.MyApp(sys.stdout), None) + update_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_config_without_auth_url.yaml') + my_id = 'my-id' + args = [ + my_id, + '--config-file', str(update_config)] + extra_fields = {'vim_project': self.vim_project, + 'auth_cred': self.auth_cred} + self._test_update_resource(self._RESOURCE, cmd, my_id, args, + extra_fields) + + def test_delete_vim(self): + cmd = vim.DeleteVIM(test_cli10.MyApp(sys.stdout), None) + my_id = 'my-id' + args = [my_id] + self._test_delete_resource(self._RESOURCE, cmd, my_id, args) + + def test_multi_delete_vim(self): + cmd = vim.DeleteVIM(test_cli10.MyApp(sys.stdout), None) + vim_ids = 'my-id1 my-id2 my-id3' + args = [vim_ids] + self._test_delete_resource(self._RESOURCE, cmd, vim_ids, args) diff --git a/tackerclient/tests/unit/vm/test_cli10_vim_k8s_with_bearer_token.py b/tackerclient/tests/unit/vm/test_cli10_vim_k8s_with_bearer_token.py new file mode 100644 index 00000000..96ac09af --- /dev/null +++ b/tackerclient/tests/unit/vm/test_cli10_vim_k8s_with_bearer_token.py @@ -0,0 +1,170 @@ +# Copyright 2015-2016 Brocade Communications Systems Inc +# All Rights Reserved. +# +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import sys + +from tackerclient.common import exceptions +from tackerclient.common import utils +from tackerclient.tacker.v1_0.nfvo import vim +from tackerclient.tests.unit import test_cli10 + +API_VERSION = "1.0" +FORMAT = 'json' +TOKEN = 'testtoken' +ENDURL = 'localurl' + + +class CLITestV10VIMJSON(test_cli10.CLITestV10Base): + _RESOURCE = 'vim' + _RESOURCES = 'vims' + + def setUp(self): + plurals = {'vims': 'vim'} + super(CLITestV10VIMJSON, self).setUp(plurals=plurals) + self.vim_project = {'name': 'default'} + self.auth_cred = {'bearer_token': 'xyz', 'ssl_ca_cert': None} + self.auth_url = 'https://1.2.3.4:6443' + self.type = 'kubernetes' + + def test_register_vim_all_params(self): + cmd = vim.CreateVIM(test_cli10.MyApp(sys.stdout), None) + name = 'my-name' + my_id = 'my-id' + description = 'Vim Description' + vim_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_bearer_token.yaml') + args = [ + name, + '--config-file', vim_config, + '--description', description] + position_names = ['auth_cred', 'vim_project', 'auth_url', 'type'] + position_values = [self.auth_cred, self.vim_project, + self.auth_url, self.type] + extra_body = {'type': 'kubernetes', 'name': name, + 'description': description, 'is_default': False} + self._test_create_resource(self._RESOURCE, cmd, None, my_id, + args, position_names, position_values, + extra_body=extra_body) + + def test_register_vim_with_no_auth_url(self): + cmd = vim.CreateVIM(test_cli10.MyApp(sys.stdout), None) + my_id = 'my-id' + name = 'test_vim' + description = 'Vim Description' + vim_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_bearer_token_without_auth_url.yaml') + args = [ + name, + '--config-file', vim_config, + '--description', description] + position_names = ['auth_cred', 'vim_project', 'auth_url', 'type'] + position_values = [self.auth_cred, self.vim_project, + self.auth_url, self.type] + extra_body = {'type': 'kubernetes', 'name': name, + 'description': description, 'is_default': False} + message = 'Auth URL must be specified' + ex = self.assertRaises(exceptions.TackerClientException, + self._test_create_resource, + self._RESOURCE, cmd, None, my_id, args, + position_names, position_values, + extra_body=extra_body) + self.assertEqual(message, ex.message) + self.assertEqual(404, ex.status_code) + + def test_register_vim_with_mandatory_params(self): + cmd = vim.CreateVIM(test_cli10.MyApp(sys.stdout), None) + name = 'my-name' + my_id = 'my-id' + + vim_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_bearer_token.yaml') + args = [ + name, + '--config-file', vim_config, + ] + position_names = ['auth_cred', 'vim_project', 'auth_url', 'type'] + position_values = [ + self.auth_cred, + self.vim_project, + self.auth_url, + self.type + ] + extra_body = {'type': 'kubernetes', 'name': name, 'is_default': False} + self._test_create_resource(self._RESOURCE, cmd, name, my_id, args, + position_names, position_values, + extra_body=extra_body) + + def test_list_vims(self): + cmd = vim.ListVIM(test_cli10.MyApp(sys.stdout), None) + self._test_list_resources(self._RESOURCES, cmd, True) + + def test_show_vim_id(self): + cmd = vim.ShowVIM(test_cli10.MyApp(sys.stdout), None) + args = ['--fields', 'id', self.test_id] + self._test_show_resource(self._RESOURCE, cmd, self.test_id, args, + ['id']) + + def test_show_vim_id_name(self): + cmd = vim.ShowVIM(test_cli10.MyApp(sys.stdout), None) + args = ['--fields', 'id', '--fields', 'name', self.test_id] + self._test_show_resource(self._RESOURCE, cmd, self.test_id, + args, ['id', 'name']) + + def test_update_vim_all_params(self): + cmd = vim.UpdateVIM(test_cli10.MyApp(sys.stdout), None) + update_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_bearer_token_without_auth_url.yaml') + my_id = 'my-id' + name = 'new_name' + description = 'new_description' + is_default = 'True' + args = [ + my_id, + '--config-file', str(update_config), + '--name', name, + '--description', description, + '--is_default', is_default] + extra_fields = {'vim_project': self.vim_project, + 'auth_cred': self.auth_cred, + 'is_default': 'True', + 'name': name, 'description': description} + self._test_update_resource(self._RESOURCE, cmd, my_id, args, + extra_fields) + + def test_update_vim_with_mandatory_params(self): + cmd = vim.UpdateVIM(test_cli10.MyApp(sys.stdout), None) + update_config = utils.get_file_path( + 'tests/unit/vm/samples/vim_k8s_bearer_token_without_auth_url.yaml') + my_id = 'my-id' + args = [ + my_id, + '--config-file', str(update_config)] + extra_fields = {'vim_project': self.vim_project, + 'auth_cred': self.auth_cred} + self._test_update_resource(self._RESOURCE, cmd, my_id, args, + extra_fields) + + def test_delete_vim(self): + cmd = vim.DeleteVIM(test_cli10.MyApp(sys.stdout), None) + my_id = 'my-id' + args = [my_id] + self._test_delete_resource(self._RESOURCE, cmd, my_id, args) + + def test_multi_delete_vim(self): + cmd = vim.DeleteVIM(test_cli10.MyApp(sys.stdout), None) + vim_ids = 'my-id1 my-id2 my-id3' + args = [vim_ids] + self._test_delete_resource(self._RESOURCE, cmd, vim_ids, args) diff --git a/tackerclient/tests/unit/vm/test_vim_utils.py b/tackerclient/tests/unit/vm/test_vim_utils.py index 50a53f68..0091370d 100644 --- a/tackerclient/tests/unit/vm/test_vim_utils.py +++ b/tackerclient/tests/unit/vm/test_vim_utils.py @@ -28,22 +28,59 @@ class TestVIMUtils(testtools.TestCase): 'username': sentinel.usrname1, 'password': sentinel.password1, 'project_domain_name': sentinel.prj_domain_name1, - 'user_domain_name': sentinel.user_domain.name, } + 'user_domain_name': sentinel.user_domain.name, + 'type': 'openstack'} vim = {} auth_cred = config_param.copy() auth_cred.pop('project_name') auth_cred.pop('project_domain_name') + auth_cred.pop('type') expected_vim = {'auth_cred': auth_cred, 'vim_project': {'name': sentinel.prj_name, - 'project_domain_name': sentinel.prj_domain_name1}} + 'project_domain_name': sentinel.prj_domain_name1}, + 'type': 'openstack'} + vim_utils.args2body_vim(config_param.copy(), vim) + self.assertEqual(expected_vim, vim) + + def test_args2body_kubernetes_vim(self): + config_param = {'username': sentinel.usrname1, + 'password': sentinel.password1, + 'ssl_ca_cert': 'abcxyz', + 'project_name': sentinel.prj_name, + 'type': 'kubernetes'} + vim = {} + auth_cred = config_param.copy() + auth_cred.pop('project_name') + auth_cred.pop('type') + expected_vim = {'auth_cred': auth_cred, + 'vim_project': + {'name': sentinel.prj_name}, + 'type': 'kubernetes'} + vim_utils.args2body_vim(config_param.copy(), vim) + self.assertEqual(expected_vim, vim) + + def test_args2body_kubernetes_vim_bearer(self): + config_param = {'bearer_token': sentinel.bearer_token, + 'ssl_ca_cert': None, + 'project_name': sentinel.prj_name, + 'type': 'kubernetes'} + vim = {} + auth_cred = config_param.copy() + auth_cred.pop('project_name') + auth_cred.pop('type') + expected_vim = {'auth_cred': auth_cred, + 'vim_project': + {'name': sentinel.prj_name}, + 'type': 'kubernetes'} vim_utils.args2body_vim(config_param.copy(), vim) self.assertEqual(expected_vim, vim) def test_args2body_vim_no_project(self): config_param = {'username': sentinel.usrname1, 'password': sentinel.password1, - 'user_domain_name': sentinel.user_domain.name, } + 'user_domain_name': sentinel.user_domain.name, + 'type': 'openstack'} vim = {} self.assertRaises(exceptions.TackerClientException, vim_utils.args2body_vim,