Merge "Implement client to support Kubernetes as VIM"
This commit is contained in:
		@@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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):
 | 
			
		||||
 
 | 
			
		||||
@@ -4,3 +4,4 @@ password: '12345'
 | 
			
		||||
project_name: 'abc'
 | 
			
		||||
project_domain_name: 'prj_domain_name'
 | 
			
		||||
user_domain_name: 'user_domain_name'
 | 
			
		||||
type: 'openstack'
 | 
			
		||||
@@ -3,3 +3,4 @@ password: '12345'
 | 
			
		||||
project_name: 'abc'
 | 
			
		||||
project_domain_name: 'prj_domain_name'
 | 
			
		||||
user_domain_name: 'user_domain_name'
 | 
			
		||||
type: 'openstack'
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,5 @@
 | 
			
		||||
auth_url: 'https://1.2.3.4:6443'
 | 
			
		||||
bearer_token: 'xyz'
 | 
			
		||||
ssl_ca_cert: None
 | 
			
		||||
project_name: 'default'
 | 
			
		||||
type: 'kubernetes'
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
bearer_token: 'xyz'
 | 
			
		||||
ssl_ca_cert: None
 | 
			
		||||
project_name: 'default'
 | 
			
		||||
type: 'kubernetes'
 | 
			
		||||
							
								
								
									
										6
									
								
								tackerclient/tests/unit/vm/samples/vim_k8s_config.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tackerclient/tests/unit/vm/samples/vim_k8s_config.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -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'
 | 
			
		||||
@@ -0,0 +1,5 @@
 | 
			
		||||
username: 'xyz'
 | 
			
		||||
password: '12345'
 | 
			
		||||
ssl_ca_cert: 'abcxyz'
 | 
			
		||||
project_name: 'default'
 | 
			
		||||
type: 'kubernetes'
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										172
									
								
								tackerclient/tests/unit/vm/test_cli10_vim_k8s.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								tackerclient/tests/unit/vm/test_cli10_vim_k8s.py
									
									
									
									
									
										Normal file
									
								
							@@ -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)
 | 
			
		||||
@@ -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)
 | 
			
		||||
@@ -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,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user