Merge "Modify Placement Processing to Aspect definition"
This commit is contained in:
commit
2140f344ec
|
@ -6,7 +6,7 @@ parameters:
|
||||||
type: json
|
type: json
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
VDU1:
|
VDU1_scale:
|
||||||
type: OS::Heat::AutoScalingGroup
|
type: OS::Heat::AutoScalingGroup
|
||||||
properties:
|
properties:
|
||||||
min_size: 1
|
min_size: 1
|
||||||
|
@ -24,23 +24,22 @@ resources:
|
||||||
net4: { get_resource: extmanageNW_2 }
|
net4: { get_resource: extmanageNW_2 }
|
||||||
net5: { get_resource: internalNW_1 }
|
net5: { get_resource: internalNW_1 }
|
||||||
subnet: { get_param: [nfv, CP, VDU1_CP2, fixed_ips, 0, subnet]}
|
subnet: { get_param: [nfv, CP, VDU1_CP2, fixed_ips, 0, subnet]}
|
||||||
VDU1_scale_out:
|
VDU1_scale_scale_out:
|
||||||
type: OS::Heat::ScalingPolicy
|
type: OS::Heat::ScalingPolicy
|
||||||
properties:
|
properties:
|
||||||
scaling_adjustment: 1
|
scaling_adjustment: 1
|
||||||
auto_scaling_group_id:
|
auto_scaling_group_id:
|
||||||
get_resource: VDU1
|
get_resource: VDU1_scale
|
||||||
adjustment_type: change_in_capacity
|
adjustment_type: change_in_capacity
|
||||||
VDU1_scale_in:
|
VDU1_scale_scale_in:
|
||||||
type: OS::Heat::ScalingPolicy
|
type: OS::Heat::ScalingPolicy
|
||||||
properties:
|
properties:
|
||||||
scaling_adjustment: -1
|
scaling_adjustment: -1
|
||||||
auto_scaling_group_id:
|
auto_scaling_group_id:
|
||||||
get_resource: VDU1
|
get_resource: VDU1_scale
|
||||||
adjustment_type: change_in_capacity
|
adjustment_type: change_in_capacity
|
||||||
VDU2:
|
VDU2_scale:
|
||||||
type: OS::Heat::AutoScalingGroup
|
type: OS::Heat::AutoScalingGroup
|
||||||
depends_on: VDU1
|
|
||||||
properties:
|
properties:
|
||||||
min_size: 1
|
min_size: 1
|
||||||
max_size: 1
|
max_size: 1
|
||||||
|
@ -57,19 +56,19 @@ resources:
|
||||||
net5: { get_resource: internalNW_1 }
|
net5: { get_resource: internalNW_1 }
|
||||||
ip1: { get_param: [nfv, CP, VDU2_CP2, fixed_ips, 0, ip_address]}
|
ip1: { get_param: [nfv, CP, VDU2_CP2, fixed_ips, 0, ip_address]}
|
||||||
subnet: { get_param: [nfv, CP, VDU2_CP2, fixed_ips, 0, subnet]}
|
subnet: { get_param: [nfv, CP, VDU2_CP2, fixed_ips, 0, subnet]}
|
||||||
VDU2_scale_out:
|
VDU2_scale_scale_out:
|
||||||
type: OS::Heat::ScalingPolicy
|
type: OS::Heat::ScalingPolicy
|
||||||
properties:
|
properties:
|
||||||
scaling_adjustment: 1
|
scaling_adjustment: 1
|
||||||
auto_scaling_group_id:
|
auto_scaling_group_id:
|
||||||
get_resource: VDU2
|
get_resource: VDU2_scale
|
||||||
adjustment_type: change_in_capacity
|
adjustment_type: change_in_capacity
|
||||||
VDU2_scale_in:
|
VDU2_scale_scale_in:
|
||||||
type: OS::Heat::ScalingPolicy
|
type: OS::Heat::ScalingPolicy
|
||||||
properties:
|
properties:
|
||||||
scaling_adjustment: -1
|
scaling_adjustment: -1
|
||||||
auto_scaling_group_id:
|
auto_scaling_group_id:
|
||||||
get_resource: VDU2
|
get_resource: VDU2_scale
|
||||||
adjustment_type: change_in_capacity
|
adjustment_type: change_in_capacity
|
||||||
extmanageNW_1:
|
extmanageNW_1:
|
||||||
type: OS::Neutron::Net
|
type: OS::Neutron::Net
|
||||||
|
|
|
@ -273,9 +273,9 @@ topology_template:
|
||||||
type: tosca.policies.nfv.ScalingAspects
|
type: tosca.policies.nfv.ScalingAspects
|
||||||
properties:
|
properties:
|
||||||
aspects:
|
aspects:
|
||||||
worker_instance:
|
VDU2_scale:
|
||||||
name: worker_instance_aspect
|
name: VDU2_scale
|
||||||
description: worker_instance scaling aspect
|
description: VDU2 scaling aspect
|
||||||
max_scale_level: 2
|
max_scale_level: 2
|
||||||
step_deltas:
|
step_deltas:
|
||||||
- delta_1
|
- delta_1
|
||||||
|
@ -294,14 +294,14 @@ topology_template:
|
||||||
number_of_instances: 1
|
number_of_instances: 1
|
||||||
targets: [ VDU2 ]
|
targets: [ VDU2 ]
|
||||||
|
|
||||||
- VDU1_scaling_aspect_deltas:
|
- VDU2_scaling_aspect_deltas:
|
||||||
type: tosca.policies.nfv.VduScalingAspectDeltas
|
type: tosca.policies.nfv.VduScalingAspectDeltas
|
||||||
properties:
|
properties:
|
||||||
aspect: worker_instance
|
aspect: VDU2_scale
|
||||||
deltas:
|
deltas:
|
||||||
delta_1:
|
delta_1:
|
||||||
number_of_instances: 1
|
number_of_instances: 1
|
||||||
targets: [ VDU1 ]
|
targets: [ VDU2 ]
|
||||||
|
|
||||||
- instantiation_levels:
|
- instantiation_levels:
|
||||||
type: tosca.policies.nfv.InstantiationLevels
|
type: tosca.policies.nfv.InstantiationLevels
|
||||||
|
@ -310,12 +310,12 @@ topology_template:
|
||||||
instantiation_level_1:
|
instantiation_level_1:
|
||||||
description: Smallest size
|
description: Smallest size
|
||||||
scale_info:
|
scale_info:
|
||||||
worker_instance:
|
VDU2_scale:
|
||||||
scale_level: 0
|
scale_level: 0
|
||||||
instantiation_level_2:
|
instantiation_level_2:
|
||||||
description: Largest size
|
description: Largest size
|
||||||
scale_info:
|
scale_info:
|
||||||
worker_instance:
|
VDU2_scale:
|
||||||
scale_level: 2
|
scale_level: 2
|
||||||
default_level: instantiation_level_1
|
default_level: instantiation_level_1
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
parameters:
|
||||||
|
vnf: test
|
||||||
|
zone:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
resources:
|
||||||
|
VDU1:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
availability_zone: { get_param: zone }
|
||||||
|
|
|
@ -185,6 +185,78 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
yaml_file_dict = yaml.safe_load(f)
|
yaml_file_dict = yaml.safe_load(f)
|
||||||
return yaml_file_dict
|
return yaml_file_dict
|
||||||
|
|
||||||
|
def _read_nested_file(self):
|
||||||
|
yaml_file = os.path.abspath(os.path.join(os.path.dirname(__file__),
|
||||||
|
"../../../../etc/samples/",
|
||||||
|
"nested_hot_data.yaml"))
|
||||||
|
with open(yaml_file, 'r') as f:
|
||||||
|
yaml_file_dict = yaml.safe_load(f)
|
||||||
|
return yaml_file_dict
|
||||||
|
|
||||||
|
def _get_grant_obj(self, zoneid=None):
|
||||||
|
vim_assets = {
|
||||||
|
'compute_resource_flavours': [
|
||||||
|
{'vim_connection_id': uuidsentinel.vim_id,
|
||||||
|
'vnfd_virtual_compute_desc_id': 'VDU1',
|
||||||
|
'vim_flavour_id': 'm1.tiny'}],
|
||||||
|
'softwareImages': [
|
||||||
|
{'vim_connection_id': uuidsentinel.vim_id,
|
||||||
|
'vnfd_software_image_id': 'VDU1',
|
||||||
|
'vim_software_image_id': 'cirros'}
|
||||||
|
]}
|
||||||
|
res_add_resource = []
|
||||||
|
resource = {
|
||||||
|
'resource_definition_id': '2c6e5cc7-240d-4458-a683-1fe648351280',
|
||||||
|
'vim_connection_id': uuidsentinel.vim_id,
|
||||||
|
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
||||||
|
res_add_resource.append(resource)
|
||||||
|
resource = {
|
||||||
|
'resource_definition_id': 'faf14707-da7c-4eec-be99-8099fa1e9fa9',
|
||||||
|
'vim_connection_id': uuidsentinel.vim_id,
|
||||||
|
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
||||||
|
res_add_resource.append(resource)
|
||||||
|
resource = {
|
||||||
|
'resource_definition_id': 'faf14707-da7c-4eec-be99-8099fa1e9fa0',
|
||||||
|
'vim_connection_id': uuidsentinel.vim_id,
|
||||||
|
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
||||||
|
res_add_resource.append(resource)
|
||||||
|
resource = {
|
||||||
|
'resource_definition_id': 'faf14707-da7c-4eec-be99-8099fa1e9fa1',
|
||||||
|
'vim_connection_id': uuidsentinel.vim_id,
|
||||||
|
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
||||||
|
res_add_resource.append(resource)
|
||||||
|
vim_obj = {'id': '0b9c66bb-9e1f-4bb2-92c3-913074e52e2b',
|
||||||
|
'vim_id': uuidsentinel.vim_id,
|
||||||
|
'vim_type': 'openstack',
|
||||||
|
'access_info': {
|
||||||
|
'password': 'test_pw',
|
||||||
|
'username': 'test_user',
|
||||||
|
'region': 'test_region',
|
||||||
|
'tenant': uuidsentinel.tenant}}
|
||||||
|
|
||||||
|
if zoneid:
|
||||||
|
zone = {
|
||||||
|
'id': '5e4da3c3-4a55-412a-b624-843921f8b51d',
|
||||||
|
'zone_id': 'nova',
|
||||||
|
'vim_connection_id': uuidsentinel.vim_id}
|
||||||
|
else:
|
||||||
|
zone = {
|
||||||
|
'id': '5e4da3c3-4a55-412a-b624-843921f8b51d',
|
||||||
|
'zone_id': '',
|
||||||
|
'vim_connection_id': uuidsentinel.vim_id}
|
||||||
|
|
||||||
|
grant_dict = {}
|
||||||
|
grant_dict['id'] = 'c213e465-8220-487e-9464-f79104e81e96'
|
||||||
|
grant_dict['vnf_instance_id'] = uuidsentinel.vnf_instance_id
|
||||||
|
grant_dict['vnf_lcm_op_occ_id'] = uuidsentinel.vnf_lcm_op_occ_id
|
||||||
|
grant_dict['add_resources'] = []
|
||||||
|
grant_dict['add_resources'].extend(res_add_resource)
|
||||||
|
grant_dict['vim_assets'] = vim_assets
|
||||||
|
grant_dict['zones'] = [zone]
|
||||||
|
grant_dict['vim_connections'] = [vim_obj]
|
||||||
|
|
||||||
|
return grant_dict
|
||||||
|
|
||||||
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
||||||
'.OpenStack._format_base_hot')
|
'.OpenStack._format_base_hot')
|
||||||
@mock.patch('tacker.vnflcm.utils._get_vnflcm_interface')
|
@mock.patch('tacker.vnflcm.utils._get_vnflcm_interface')
|
||||||
|
@ -299,6 +371,7 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
mock_find_stack.assert_called_once()
|
mock_find_stack.assert_called_once()
|
||||||
mock_update_stack_with_user_data.assert_called_once()
|
mock_update_stack_with_user_data.assert_called_once()
|
||||||
|
|
||||||
|
@mock.patch('tacker.tosca.utils.get_scale_group')
|
||||||
@mock.patch('tacker.vnfm.vim_client.VimClient.get_vim')
|
@mock.patch('tacker.vnfm.vim_client.VimClient.get_vim')
|
||||||
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
||||||
'.OpenStack._format_base_hot')
|
'.OpenStack._format_base_hot')
|
||||||
|
@ -307,7 +380,11 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
def test_create_grant(self, mock_OpenstackClients_heat,
|
def test_create_grant(self, mock_OpenstackClients_heat,
|
||||||
mock_get_base_hot_dict,
|
mock_get_base_hot_dict,
|
||||||
mock_format_base_hot,
|
mock_format_base_hot,
|
||||||
mock_get_vim):
|
mock_get_vim, mock_get_scale_group):
|
||||||
|
mock_get_scale_group.return_value = {
|
||||||
|
'scaleGroupDict': {'VDU1_scale': {'vdu': ['VDU1'],
|
||||||
|
'num': 1, 'maxLevel': 2, 'initialNum': 1,
|
||||||
|
'initialLevel': 0, 'default': 1}}}
|
||||||
mock_get_vim.return_value = {
|
mock_get_vim.return_value = {
|
||||||
'vim_id': uuidsentinel.vnfd_id,
|
'vim_id': uuidsentinel.vnfd_id,
|
||||||
'vim_type': 'test',
|
'vim_type': 'test',
|
||||||
|
@ -331,25 +408,28 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
vnf_resource = type('', (), {})
|
vnf_resource = type('', (), {})
|
||||||
vnf_resource.resource_identifier = constants.INVALID_UUID
|
vnf_resource.resource_identifier = constants.INVALID_UUID
|
||||||
grant_info_test = {'vdu_name': {vnf_resource}}
|
grant_info_test = {'vdu_name': {vnf_resource}}
|
||||||
nested_hot_dict = {
|
nested_hot_dict = {'VDU1.yaml': self._read_nested_file()}
|
||||||
'VDU1.yaml': {'parameters': {'vnf': 'test',
|
|
||||||
'zone': {'type': 'string'}},
|
|
||||||
'resources': {'VDU1': {'properties':
|
|
||||||
{'availability_zone': {'get_param': 'zone'}}}}}}
|
|
||||||
base_hot_dict = self._read_file()
|
base_hot_dict = self._read_file()
|
||||||
base_hot_dict['resources']['VDU1']['properties'].setdefault(
|
base_hot_dict['resources'].setdefault(
|
||||||
'resource', {'properties': {'zone':
|
'VDU1_scale',
|
||||||
{'get_param': ['nfv', 'vdu', 'VDU1', 'zone']}}})
|
{'properties': {'resource':
|
||||||
|
{'properties': {'zone': {
|
||||||
|
'get_param': ['nfv', 'VDU', 'VDU1', 'zone']}},
|
||||||
|
'type': 'VDU1.yaml'}},
|
||||||
|
'type': 'OS::Heat::AutoScalingGroup'})
|
||||||
mock_get_base_hot_dict.return_value = \
|
mock_get_base_hot_dict.return_value = \
|
||||||
base_hot_dict, nested_hot_dict
|
base_hot_dict, nested_hot_dict
|
||||||
vim_assets = {'compute_resource_flavours': [
|
vim_assets = {
|
||||||
{'vim_connection_id': uuidsentinel.vim_id,
|
'compute_resource_flavours': [
|
||||||
'vnfd_virtual_compute_desc_id': 'VDU1',
|
{'vim_connection_id': uuidsentinel.vim_id,
|
||||||
'vim_flavour_id': 'm1.tiny'}],
|
'vnfd_virtual_compute_desc_id': 'VDU1',
|
||||||
|
'vim_flavour_id': 'm1.tiny'}],
|
||||||
'softwareImages': [
|
'softwareImages': [
|
||||||
{'vim_connection_id': uuidsentinel.vim_id,
|
{'vim_connection_id': uuidsentinel.vim_id,
|
||||||
'vnfd_software_image_id': 'VDU1',
|
'vnfd_software_image_id': 'VDU1',
|
||||||
'vim_software_image_id': 'cirros'}]}
|
'vim_software_image_id': 'cirros'
|
||||||
|
}
|
||||||
|
]}
|
||||||
res_add_resource = []
|
res_add_resource = []
|
||||||
resource = {
|
resource = {
|
||||||
'resource_definition_id': '2c6e5cc7-240d-4458-a683-1fe648351280',
|
'resource_definition_id': '2c6e5cc7-240d-4458-a683-1fe648351280',
|
||||||
|
@ -375,14 +455,15 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
'id': '5e4da3c3-4a55-412a-b624-843921f8b51d',
|
'id': '5e4da3c3-4a55-412a-b624-843921f8b51d',
|
||||||
'zone_id': 'nova',
|
'zone_id': 'nova',
|
||||||
'vim_connection_id': uuidsentinel.vim_id}
|
'vim_connection_id': uuidsentinel.vim_id}
|
||||||
vim_obj = {'id': '0b9c66bb-9e1f-4bb2-92c3-913074e52e2b',
|
vim_obj = {
|
||||||
'vim_id': uuidsentinel.vim_id,
|
'id': '0b9c66bb-9e1f-4bb2-92c3-913074e52e2b',
|
||||||
'vim_type': 'openstack',
|
'vim_id': uuidsentinel.vim_id,
|
||||||
'access_info': {
|
'vim_type': 'openstack',
|
||||||
'password': 'test_pw',
|
'access_info': {
|
||||||
'username': 'test_user',
|
'password': 'test_pw',
|
||||||
'region': 'test_region',
|
'username': 'test_user',
|
||||||
'tenant': uuidsentinel.tenant}}
|
'region': 'test_region',
|
||||||
|
'tenant': uuidsentinel.tenant}}
|
||||||
grant_dict = {}
|
grant_dict = {}
|
||||||
grant_dict['id'] = 'c213e465-8220-487e-9464-f79104e81e96'
|
grant_dict['id'] = 'c213e465-8220-487e-9464-f79104e81e96'
|
||||||
grant_dict['vnf_instance_id'] = uuidsentinel.vnf_instance_id
|
grant_dict['vnf_instance_id'] = uuidsentinel.vnf_instance_id
|
||||||
|
@ -400,8 +481,8 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
vnfc_obj = objects.VnfcResourceInfo()
|
vnfc_obj = objects.VnfcResourceInfo()
|
||||||
vnfc_obj.id = '2c6e5cc7-240d-4458-a683-1fe648351280'
|
vnfc_obj.id = '2c6e5cc7-240d-4458-a683-1fe648351280'
|
||||||
vnfc_obj.vdu_id = 'VDU1'
|
vnfc_obj.vdu_id = 'VDU1'
|
||||||
vnfc_obj.storage_resource_ids = \
|
vnfc_obj.storage_resource_ids = (
|
||||||
['faf14707-da7c-4eec-be99-8099fa1e9fa0']
|
['faf14707-da7c-4eec-be99-8099fa1e9fa0'])
|
||||||
compute_resource = objects.ResourceHandle(
|
compute_resource = objects.ResourceHandle(
|
||||||
vim_connection_id=uuidsentinel.vim_id,
|
vim_connection_id=uuidsentinel.vim_id,
|
||||||
resource_id='6e1c286d-c023-4b34-8369-831c6e84cce2')
|
resource_id='6e1c286d-c023-4b34-8369-831c6e84cce2')
|
||||||
|
@ -413,6 +494,216 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
grant_info=grant_info_test,
|
grant_info=grant_info_test,
|
||||||
vnf_instance=vnf_instance)
|
vnf_instance=vnf_instance)
|
||||||
|
|
||||||
|
@mock.patch('tacker.tosca.utils.get_scale_group')
|
||||||
|
@mock.patch('tacker.vnfm.vim_client.VimClient.get_vim')
|
||||||
|
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
||||||
|
'.OpenStack._format_base_hot')
|
||||||
|
@mock.patch('tacker.vnflcm.utils.get_base_nest_hot_dict')
|
||||||
|
@mock.patch('tacker.common.clients.OpenstackClients')
|
||||||
|
def test_create_grant_scale(self, mock_OpenstackClients_heat,
|
||||||
|
mock_get_base_hot_dict,
|
||||||
|
mock_format_base_hot,
|
||||||
|
mock_get_vim, mock_get_scale_group):
|
||||||
|
mock_get_scale_group.return_value = {
|
||||||
|
'scaleGroupDict': {'VDU1_scale': {'vdu': ['VDU1'],
|
||||||
|
'num': 1, 'maxLevel': 2, 'initialNum': 1,
|
||||||
|
'initialLevel': 0, 'default': 1}}}
|
||||||
|
mock_get_vim.return_value = {
|
||||||
|
'vim_id': uuidsentinel.vnfd_id,
|
||||||
|
'vim_type': 'test',
|
||||||
|
'vim_auth': {'username': 'test', 'password': 'test'},
|
||||||
|
'placement_attr': {'region': 'TestRegionOne'},
|
||||||
|
'tenant': 'test'
|
||||||
|
}
|
||||||
|
vnf = utils.get_dummy_vnf_etsi(instance_id=self.instance_uuid,
|
||||||
|
flavour='simple')
|
||||||
|
vnf['placement_attr'] = {'region_name': 'dummy_region'}
|
||||||
|
vnf_package_path_test = os.path.abspath(
|
||||||
|
os.path.join(os.path.dirname(__file__),
|
||||||
|
"../../../../etc/samples/etsi/nfv",
|
||||||
|
"user_data_sample_normal"))
|
||||||
|
inst_req_info_test = type('', (), {})
|
||||||
|
test_json = self._json_load(
|
||||||
|
'instantiate_vnf_request_lcm_userdata.json')
|
||||||
|
inst_req_info_test.additional_params = test_json['additionalParams']
|
||||||
|
inst_req_info_test.ext_virtual_links = None
|
||||||
|
inst_req_info_test.flavour_id = 'simple'
|
||||||
|
vnf_resource = type('', (), {})
|
||||||
|
vnf_resource.resource_identifier = constants.INVALID_UUID
|
||||||
|
grant_info_test = {'vdu_name': {vnf_resource}}
|
||||||
|
nested_hot_dict = {'VDU1.yaml': self._read_nested_file()}
|
||||||
|
del nested_hot_dict['VDU1.yaml']['parameters']['zone']
|
||||||
|
del (nested_hot_dict['VDU1.yaml']['resources']
|
||||||
|
['VDU1']['properties']['availability_zone'])
|
||||||
|
base_hot_dict = self._read_file()
|
||||||
|
base_hot_dict['resources'].setdefault(
|
||||||
|
'VDU1_scale',
|
||||||
|
{'properties': {'resource':
|
||||||
|
{'properties': {},
|
||||||
|
'type': 'VDU1.yaml'}},
|
||||||
|
'type': 'OS::Heat::AutoScalingGroup'})
|
||||||
|
mock_get_base_hot_dict.return_value = \
|
||||||
|
base_hot_dict, nested_hot_dict
|
||||||
|
grant_dict = self._get_grant_obj(zoneid=True)
|
||||||
|
grant_obj = objects.Grant.obj_from_primitive(
|
||||||
|
grant_dict, context=self.context)
|
||||||
|
vnf['grant'] = grant_obj
|
||||||
|
vnf_instance = fd_utils.get_vnf_instance_object()
|
||||||
|
vnf_instance.instantiated_vnf_info.reinitialize()
|
||||||
|
vnfc_obj = objects.VnfcResourceInfo()
|
||||||
|
vnfc_obj.id = '2c6e5cc7-240d-4458-a683-1fe648351280'
|
||||||
|
vnfc_obj.vdu_id = 'VDU1'
|
||||||
|
vnfc_obj.storage_resource_ids = (
|
||||||
|
['faf14707-da7c-4eec-be99-8099fa1e9fa0'])
|
||||||
|
compute_resource = objects.ResourceHandle(
|
||||||
|
vim_connection_id=uuidsentinel.vim_id,
|
||||||
|
resource_id='6e1c286d-c023-4b34-8369-831c6e84cce2')
|
||||||
|
vnfc_obj.compute_resource = compute_resource
|
||||||
|
vnf_instance.instantiated_vnf_info.vnfc_resource_info = [vnfc_obj]
|
||||||
|
self.openstack.create(self.plugin, self.context, vnf,
|
||||||
|
self.auth_attr, inst_req_info=inst_req_info_test,
|
||||||
|
vnf_package_path=vnf_package_path_test,
|
||||||
|
grant_info=grant_info_test,
|
||||||
|
vnf_instance=vnf_instance)
|
||||||
|
|
||||||
|
@mock.patch('tacker.tosca.utils.get_scale_group')
|
||||||
|
@mock.patch('tacker.vnfm.vim_client.VimClient.get_vim')
|
||||||
|
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
||||||
|
'.OpenStack._format_base_hot')
|
||||||
|
@mock.patch('tacker.vnflcm.utils.get_base_nest_hot_dict')
|
||||||
|
@mock.patch('tacker.common.clients.OpenstackClients')
|
||||||
|
def test_create_grant_scale_vdu_nolist(self, mock_OpenstackClients_heat,
|
||||||
|
mock_get_base_hot_dict,
|
||||||
|
mock_format_base_hot,
|
||||||
|
mock_get_vim, mock_get_scale_group):
|
||||||
|
mock_get_scale_group.return_value = {
|
||||||
|
'scaleGroupDict': {'VDU1_scale': {'vdu': ['VDUX'],
|
||||||
|
'num': 1, 'maxLevel': 2, 'initialNum': 1,
|
||||||
|
'initialLevel': 0, 'default': 1}}}
|
||||||
|
mock_get_vim.return_value = {
|
||||||
|
'vim_id': uuidsentinel.vnfd_id,
|
||||||
|
'vim_type': 'test',
|
||||||
|
'vim_auth': {'username': 'test', 'password': 'test'},
|
||||||
|
'placement_attr': {'region': 'TestRegionOne'},
|
||||||
|
'tenant': 'test'
|
||||||
|
}
|
||||||
|
vnf = utils.get_dummy_vnf_etsi(instance_id=self.instance_uuid,
|
||||||
|
flavour='simple')
|
||||||
|
vnf['placement_attr'] = {'region_name': 'dummy_region'}
|
||||||
|
vnf_package_path_test = os.path.abspath(
|
||||||
|
os.path.join(os.path.dirname(__file__),
|
||||||
|
"../../../../etc/samples/etsi/nfv",
|
||||||
|
"user_data_sample_normal"))
|
||||||
|
inst_req_info_test = type('', (), {})
|
||||||
|
test_json = self._json_load(
|
||||||
|
'instantiate_vnf_request_lcm_userdata.json')
|
||||||
|
inst_req_info_test.additional_params = test_json['additionalParams']
|
||||||
|
inst_req_info_test.ext_virtual_links = None
|
||||||
|
inst_req_info_test.flavour_id = 'simple'
|
||||||
|
vnf_resource = type('', (), {})
|
||||||
|
vnf_resource.resource_identifier = constants.INVALID_UUID
|
||||||
|
grant_info_test = {'vdu_name': {vnf_resource}}
|
||||||
|
nested_hot_dict = {'VDU1.yaml': self._read_nested_file()}
|
||||||
|
del nested_hot_dict['VDU1.yaml']['parameters']['zone']
|
||||||
|
del (nested_hot_dict['VDU1.yaml']['resources']
|
||||||
|
['VDU1']['properties']['availability_zone'])
|
||||||
|
base_hot_dict = self._read_file()
|
||||||
|
base_hot_dict['resources'].setdefault(
|
||||||
|
'VDU1_scale',
|
||||||
|
{'properties': {'resource':
|
||||||
|
{'properties': {},
|
||||||
|
'type': 'VDU1.yaml'}},
|
||||||
|
'type': 'OS::Heat::AutoScalingGroup'})
|
||||||
|
mock_get_base_hot_dict.return_value = \
|
||||||
|
base_hot_dict, nested_hot_dict
|
||||||
|
grant_dict = self._get_grant_obj(zoneid=True)
|
||||||
|
grant_obj = objects.Grant.obj_from_primitive(
|
||||||
|
grant_dict, context=self.context)
|
||||||
|
vnf['grant'] = grant_obj
|
||||||
|
vnf_instance = fd_utils.get_vnf_instance_object()
|
||||||
|
vnf_instance.instantiated_vnf_info.reinitialize()
|
||||||
|
vnfc_obj = objects.VnfcResourceInfo()
|
||||||
|
vnfc_obj.id = '2c6e5cc7-240d-4458-a683-1fe648351280'
|
||||||
|
vnfc_obj.vdu_id = 'VDU1'
|
||||||
|
vnfc_obj.storage_resource_ids = (
|
||||||
|
['faf14707-da7c-4eec-be99-8099fa1e9fa0'])
|
||||||
|
compute_resource = objects.ResourceHandle(
|
||||||
|
vim_connection_id=uuidsentinel.vim_id,
|
||||||
|
resource_id='6e1c286d-c023-4b34-8369-831c6e84cce2')
|
||||||
|
vnfc_obj.compute_resource = compute_resource
|
||||||
|
vnf_instance.instantiated_vnf_info.vnfc_resource_info = [vnfc_obj]
|
||||||
|
self.openstack.create(self.plugin, self.context, vnf,
|
||||||
|
self.auth_attr, inst_req_info=inst_req_info_test,
|
||||||
|
vnf_package_path=vnf_package_path_test,
|
||||||
|
grant_info=grant_info_test,
|
||||||
|
vnf_instance=vnf_instance)
|
||||||
|
|
||||||
|
@mock.patch('tacker.vnfm.vim_client.VimClient.get_vim')
|
||||||
|
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
||||||
|
'.OpenStack._format_base_hot')
|
||||||
|
@mock.patch('tacker.vnflcm.utils.get_base_nest_hot_dict')
|
||||||
|
@mock.patch('tacker.common.clients.OpenstackClients')
|
||||||
|
def test_create_grant_scale_none(self, mock_OpenstackClients_heat,
|
||||||
|
mock_get_base_hot_dict,
|
||||||
|
mock_format_base_hot,
|
||||||
|
mock_get_vim):
|
||||||
|
mock_get_vim.return_value = {
|
||||||
|
'vim_id': uuidsentinel.vnfd_id,
|
||||||
|
'vim_type': 'test',
|
||||||
|
'vim_auth': {'username': 'test', 'password': 'test'},
|
||||||
|
'placement_attr': {'region': 'TestRegionOne'},
|
||||||
|
'tenant': 'test'
|
||||||
|
}
|
||||||
|
vnf = utils.get_dummy_vnf_etsi(instance_id=self.instance_uuid,
|
||||||
|
flavour='simple')
|
||||||
|
vnf['placement_attr'] = {'region_name': 'dummy_region'}
|
||||||
|
vnf_package_path_test = os.path.abspath(
|
||||||
|
os.path.join(os.path.dirname(__file__),
|
||||||
|
"../../../../etc/samples/etsi/nfv",
|
||||||
|
"user_data_sample_normal"))
|
||||||
|
inst_req_info_test = type('', (), {})
|
||||||
|
test_json = self._json_load(
|
||||||
|
'instantiate_vnf_request_lcm_userdata.json')
|
||||||
|
inst_req_info_test.additional_params = test_json['additionalParams']
|
||||||
|
inst_req_info_test.ext_virtual_links = None
|
||||||
|
inst_req_info_test.flavour_id = 'simple'
|
||||||
|
vnf_resource = type('', (), {})
|
||||||
|
vnf_resource.resource_identifier = constants.INVALID_UUID
|
||||||
|
grant_info_test = {'vdu_name': {vnf_resource}}
|
||||||
|
nested_hot_dict = {'VDU1.yaml': self._read_nested_file()}
|
||||||
|
base_hot_dict = self._read_file()
|
||||||
|
base_hot_dict['resources'].setdefault(
|
||||||
|
'VDU1',
|
||||||
|
{'properties': {'resource':
|
||||||
|
{'properties': {'zone': {
|
||||||
|
'get_param': ['nfv', 'VDU', 'VDU1', 'zone']}},
|
||||||
|
'type': 'VDU1.yaml'}},
|
||||||
|
'type': 'OS::Heat::AutoScalingGroup'})
|
||||||
|
mock_get_base_hot_dict.return_value = \
|
||||||
|
base_hot_dict, nested_hot_dict
|
||||||
|
grant_dict = self._get_grant_obj(zoneid=True)
|
||||||
|
grant_obj = objects.Grant.obj_from_primitive(
|
||||||
|
grant_dict, context=self.context)
|
||||||
|
vnf['grant'] = grant_obj
|
||||||
|
vnf_instance = fd_utils.get_vnf_instance_object()
|
||||||
|
vnf_instance.instantiated_vnf_info.reinitialize()
|
||||||
|
vnfc_obj = objects.VnfcResourceInfo()
|
||||||
|
vnfc_obj.id = '2c6e5cc7-240d-4458-a683-1fe648351280'
|
||||||
|
vnfc_obj.vdu_id = 'VDU1'
|
||||||
|
vnfc_obj.storage_resource_ids = (
|
||||||
|
['faf14707-da7c-4eec-be99-8099fa1e9fa0'])
|
||||||
|
compute_resource = objects.ResourceHandle(
|
||||||
|
vim_connection_id=uuidsentinel.vim_id,
|
||||||
|
resource_id='6e1c286d-c023-4b34-8369-831c6e84cce2')
|
||||||
|
vnfc_obj.compute_resource = compute_resource
|
||||||
|
vnf_instance.instantiated_vnf_info.vnfc_resource_info = [vnfc_obj]
|
||||||
|
self.openstack.create(self.plugin, self.context, vnf,
|
||||||
|
self.auth_attr, inst_req_info=inst_req_info_test,
|
||||||
|
vnf_package_path=vnf_package_path_test,
|
||||||
|
grant_info=grant_info_test,
|
||||||
|
vnf_instance=vnf_instance)
|
||||||
|
|
||||||
|
@mock.patch('tacker.tosca.utils.get_scale_group')
|
||||||
@mock.patch('tacker.vnfm.vim_client.VimClient.get_vim')
|
@mock.patch('tacker.vnfm.vim_client.VimClient.get_vim')
|
||||||
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
||||||
'.OpenStack._format_base_hot')
|
'.OpenStack._format_base_hot')
|
||||||
|
@ -421,7 +712,11 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
def test_create_grant_zone_add(self, mock_OpenstackClients_heat,
|
def test_create_grant_zone_add(self, mock_OpenstackClients_heat,
|
||||||
mock_get_base_hot_dict,
|
mock_get_base_hot_dict,
|
||||||
mock_format_base_hot,
|
mock_format_base_hot,
|
||||||
mock_get_vim):
|
mock_get_vim, mock_get_scale_group):
|
||||||
|
mock_get_scale_group.return_value = {
|
||||||
|
'scaleGroupDict': {'VDU1_scale': {'vdu': ['VDU1'],
|
||||||
|
'num': 1, 'maxLevel': 2, 'initialNum': 1,
|
||||||
|
'initialLevel': 0, 'default': 1}}}
|
||||||
mock_get_vim.return_value = {
|
mock_get_vim.return_value = {
|
||||||
'vim_id': uuidsentinel.vnfd_id,
|
'vim_id': uuidsentinel.vnfd_id,
|
||||||
'vim_type': 'test',
|
'vim_type': 'test',
|
||||||
|
@ -445,61 +740,20 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
vnf_resource = type('', (), {})
|
vnf_resource = type('', (), {})
|
||||||
vnf_resource.resource_identifier = constants.INVALID_UUID
|
vnf_resource.resource_identifier = constants.INVALID_UUID
|
||||||
grant_info_test = {'vdu_name': {vnf_resource}}
|
grant_info_test = {'vdu_name': {vnf_resource}}
|
||||||
nested_hot_dict = {
|
nested_hot_dict = {'VDU1.yaml': self._read_nested_file()}
|
||||||
'VDU1.yaml': {'parameters': {'vnf': 'test'},
|
del nested_hot_dict['VDU1.yaml']['parameters']['zone']
|
||||||
'resources': {'VDU1': {'properties': {}}}}}
|
del (nested_hot_dict['VDU1.yaml']['resources']['VDU1']
|
||||||
|
['properties']['availability_zone'])
|
||||||
|
base_hot_dict = self._read_file()
|
||||||
|
base_hot_dict['resources'].setdefault(
|
||||||
|
'VDU1_scale',
|
||||||
|
{'properties': {'resource':
|
||||||
|
{'properties': {},
|
||||||
|
'type': 'VDU1.yaml'}},
|
||||||
|
'type': 'OS::Heat::AutoScalingGroup'})
|
||||||
mock_get_base_hot_dict.return_value = \
|
mock_get_base_hot_dict.return_value = \
|
||||||
self._read_file(), nested_hot_dict
|
base_hot_dict, nested_hot_dict
|
||||||
vim_assets = {'compute_resource_flavours': [
|
grant_dict = self._get_grant_obj(zoneid=True)
|
||||||
{'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'vnfd_virtual_compute_desc_id': 'VDU1',
|
|
||||||
'vim_flavour_id': 'm1.tiny'}],
|
|
||||||
'softwareImages': [
|
|
||||||
{'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'vnfd_software_image_id': 'VDU1',
|
|
||||||
'vim_software_image_id': 'cirros'}]}
|
|
||||||
res_add_resource = []
|
|
||||||
resource = {
|
|
||||||
'resource_definition_id': '2c6e5cc7-240d-4458-a683-1fe648351280',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
|
||||||
res_add_resource.append(resource)
|
|
||||||
resource = {
|
|
||||||
'resource_definition_id': 'faf14707-da7c-4eec-be99-8099fa1e9fa9',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
|
||||||
res_add_resource.append(resource)
|
|
||||||
resource = {
|
|
||||||
'resource_definition_id': 'faf14707-da7c-4eec-be99-8099fa1e9fa0',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
|
||||||
res_add_resource.append(resource)
|
|
||||||
resource = {
|
|
||||||
'resource_definition_id': 'faf14707-da7c-4eec-be99-8099fa1e9fa1',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
|
||||||
res_add_resource.append(resource)
|
|
||||||
zone = {
|
|
||||||
'id': '5e4da3c3-4a55-412a-b624-843921f8b51d',
|
|
||||||
'zone_id': 'nova',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id}
|
|
||||||
vim_obj = {'id': '0b9c66bb-9e1f-4bb2-92c3-913074e52e2b',
|
|
||||||
'vim_id': uuidsentinel.vim_id,
|
|
||||||
'vim_type': 'openstack',
|
|
||||||
'access_info': {
|
|
||||||
'password': 'test_pw',
|
|
||||||
'username': 'test_user',
|
|
||||||
'region': 'test_region',
|
|
||||||
'tenant': uuidsentinel.tenant}}
|
|
||||||
grant_dict = {}
|
|
||||||
grant_dict['id'] = 'c213e465-8220-487e-9464-f79104e81e96'
|
|
||||||
grant_dict['vnf_instance_id'] = uuidsentinel.vnf_instance_id
|
|
||||||
grant_dict['vnf_lcm_op_occ_id'] = uuidsentinel.vnf_lcm_op_occ_id
|
|
||||||
grant_dict['add_resources'] = []
|
|
||||||
grant_dict['add_resources'].extend(res_add_resource)
|
|
||||||
grant_dict['vim_assets'] = vim_assets
|
|
||||||
grant_dict['zones'] = [zone]
|
|
||||||
grant_dict['vim_connections'] = [vim_obj]
|
|
||||||
grant_obj = objects.Grant.obj_from_primitive(
|
grant_obj = objects.Grant.obj_from_primitive(
|
||||||
grant_dict, context=self.context)
|
grant_dict, context=self.context)
|
||||||
vnf['grant'] = grant_obj
|
vnf['grant'] = grant_obj
|
||||||
|
@ -508,8 +762,8 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
vnfc_obj = objects.VnfcResourceInfo()
|
vnfc_obj = objects.VnfcResourceInfo()
|
||||||
vnfc_obj.id = '2c6e5cc7-240d-4458-a683-1fe648351280'
|
vnfc_obj.id = '2c6e5cc7-240d-4458-a683-1fe648351280'
|
||||||
vnfc_obj.vdu_id = 'VDU1'
|
vnfc_obj.vdu_id = 'VDU1'
|
||||||
vnfc_obj.storage_resource_ids = \
|
vnfc_obj.storage_resource_ids = (
|
||||||
['faf14707-da7c-4eec-be99-8099fa1e9fa0']
|
['faf14707-da7c-4eec-be99-8099fa1e9fa0'])
|
||||||
compute_resource = objects.ResourceHandle(
|
compute_resource = objects.ResourceHandle(
|
||||||
vim_connection_id=uuidsentinel.vim_id,
|
vim_connection_id=uuidsentinel.vim_id,
|
||||||
resource_id='6e1c286d-c023-4b34-8369-831c6e84cce2')
|
resource_id='6e1c286d-c023-4b34-8369-831c6e84cce2')
|
||||||
|
@ -521,6 +775,7 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
grant_info=grant_info_test,
|
grant_info=grant_info_test,
|
||||||
vnf_instance=vnf_instance)
|
vnf_instance=vnf_instance)
|
||||||
|
|
||||||
|
@mock.patch('tacker.tosca.utils.get_scale_group')
|
||||||
@mock.patch('tacker.vnfm.vim_client.VimClient.get_vim')
|
@mock.patch('tacker.vnfm.vim_client.VimClient.get_vim')
|
||||||
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
@mock.patch('tacker.vnfm.infra_drivers.openstack.openstack'
|
||||||
'.OpenStack._format_base_hot')
|
'.OpenStack._format_base_hot')
|
||||||
|
@ -529,7 +784,11 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
def test_create_grant_zone_id_none(self, mock_OpenstackClients_heat,
|
def test_create_grant_zone_id_none(self, mock_OpenstackClients_heat,
|
||||||
mock_get_base_hot_dict,
|
mock_get_base_hot_dict,
|
||||||
mock_format_base_hot,
|
mock_format_base_hot,
|
||||||
mock_get_vim):
|
mock_get_vim, mock_get_scale_group):
|
||||||
|
mock_get_scale_group.return_value = {
|
||||||
|
'scaleGroupDict': {'VDU1_scale': {'vdu': ['VDU1'],
|
||||||
|
'num': 1, 'maxLevel': 2, 'initialNum': 1,
|
||||||
|
'initialLevel': 0, 'default': 1}}}
|
||||||
mock_get_vim.return_value = {
|
mock_get_vim.return_value = {
|
||||||
'vim_id': uuidsentinel.vnfd_id,
|
'vim_id': uuidsentinel.vnfd_id,
|
||||||
'vim_type': 'test',
|
'vim_type': 'test',
|
||||||
|
@ -553,61 +812,21 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
vnf_resource = type('', (), {})
|
vnf_resource = type('', (), {})
|
||||||
vnf_resource.resource_identifier = constants.INVALID_UUID
|
vnf_resource.resource_identifier = constants.INVALID_UUID
|
||||||
grant_info_test = {'vdu_name': {vnf_resource}}
|
grant_info_test = {'vdu_name': {vnf_resource}}
|
||||||
nested_hot_dict = {
|
nested_hot_dict = {'VDU1.yaml': self._read_nested_file()}
|
||||||
'VDU1.yaml': {'parameters': {'vnf': 'test'},
|
del nested_hot_dict['VDU1.yaml']['parameters']['zone']
|
||||||
'resources': {'VDU1': {'properties': {}}}}}
|
del (nested_hot_dict['VDU1.yaml']['resources']['VDU1']
|
||||||
|
['properties']['availability_zone'])
|
||||||
|
base_hot_dict = self._read_file()
|
||||||
|
base_hot_dict['resources'].setdefault(
|
||||||
|
'VDU1_scale',
|
||||||
|
{'properties':
|
||||||
|
{'resource':
|
||||||
|
{'properties': {},
|
||||||
|
'type': 'VDU1.yaml'}},
|
||||||
|
'type': 'OS::Heat::AutoScali:ngGroup'})
|
||||||
mock_get_base_hot_dict.return_value = \
|
mock_get_base_hot_dict.return_value = \
|
||||||
self._read_file(), nested_hot_dict
|
base_hot_dict, nested_hot_dict
|
||||||
vim_assets = {'compute_resource_flavours': [
|
grant_dict = self._get_grant_obj()
|
||||||
{'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'vnfd_virtual_compute_desc_id': 'VDU1',
|
|
||||||
'vim_flavour_id': 'm1.tiny'}],
|
|
||||||
'softwareImages': [
|
|
||||||
{'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'vnfd_software_image_id': 'VDU1',
|
|
||||||
'vim_software_image_id': 'cirros'}]}
|
|
||||||
res_add_resource = []
|
|
||||||
resource = {
|
|
||||||
'resource_definition_id': '2c6e5cc7-240d-4458-a683-1fe648351280',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
|
||||||
res_add_resource.append(resource)
|
|
||||||
resource = {
|
|
||||||
'resource_definition_id': 'faf14707-da7c-4eec-be99-8099fa1e9fa9',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
|
||||||
res_add_resource.append(resource)
|
|
||||||
resource = {
|
|
||||||
'resource_definition_id': 'faf14707-da7c-4eec-be99-8099fa1e9fa0',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
|
||||||
res_add_resource.append(resource)
|
|
||||||
resource = {
|
|
||||||
'resource_definition_id': 'faf14707-da7c-4eec-be99-8099fa1e9fa1',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id,
|
|
||||||
'zone_id': '5e4da3c3-4a55-412a-b624-843921f8b51d'}
|
|
||||||
res_add_resource.append(resource)
|
|
||||||
zone = {
|
|
||||||
'id': '5e4da3c3-4a55-412a-b624-843921f8b51d',
|
|
||||||
'zone_id': '',
|
|
||||||
'vim_connection_id': uuidsentinel.vim_id}
|
|
||||||
vim_obj = {'id': '0b9c66bb-9e1f-4bb2-92c3-913074e52e2b',
|
|
||||||
'vim_id': uuidsentinel.vim_id,
|
|
||||||
'vim_type': 'openstack',
|
|
||||||
'access_info': {
|
|
||||||
'password': 'test_pw',
|
|
||||||
'username': 'test_user',
|
|
||||||
'region': 'test_region',
|
|
||||||
'tenant': uuidsentinel.tenant}}
|
|
||||||
grant_dict = {}
|
|
||||||
grant_dict['id'] = 'c213e465-8220-487e-9464-f79104e81e96'
|
|
||||||
grant_dict['vnf_instance_id'] = uuidsentinel.vnf_instance_id
|
|
||||||
grant_dict['vnf_lcm_op_occ_id'] = uuidsentinel.vnf_lcm_op_occ_id
|
|
||||||
grant_dict['add_resources'] = []
|
|
||||||
grant_dict['add_resources'].extend(res_add_resource)
|
|
||||||
grant_dict['vim_assets'] = vim_assets
|
|
||||||
grant_dict['zones'] = [zone]
|
|
||||||
grant_dict['vim_connections'] = [vim_obj]
|
|
||||||
grant_obj = objects.Grant.obj_from_primitive(
|
grant_obj = objects.Grant.obj_from_primitive(
|
||||||
grant_dict, context=self.context)
|
grant_dict, context=self.context)
|
||||||
vnf['grant'] = grant_obj
|
vnf['grant'] = grant_obj
|
||||||
|
@ -616,8 +835,8 @@ class TestOpenStack(base.FixturedTestCase):
|
||||||
vnfc_obj = objects.VnfcResourceInfo()
|
vnfc_obj = objects.VnfcResourceInfo()
|
||||||
vnfc_obj.id = '2c6e5cc7-240d-4458-a683-1fe648351280'
|
vnfc_obj.id = '2c6e5cc7-240d-4458-a683-1fe648351280'
|
||||||
vnfc_obj.vdu_id = 'VDU1'
|
vnfc_obj.vdu_id = 'VDU1'
|
||||||
vnfc_obj.storage_resource_ids = \
|
vnfc_obj.storage_resource_ids = (
|
||||||
['faf14707-da7c-4eec-be99-8099fa1e9fa0']
|
['faf14707-da7c-4eec-be99-8099fa1e9fa0'])
|
||||||
compute_resource = objects.ResourceHandle(
|
compute_resource = objects.ResourceHandle(
|
||||||
vim_connection_id=uuidsentinel.vim_id,
|
vim_connection_id=uuidsentinel.vim_id,
|
||||||
resource_id='6e1c286d-c023-4b34-8369-831c6e84cce2')
|
resource_id='6e1c286d-c023-4b34-8369-831c6e84cce2')
|
||||||
|
|
|
@ -185,13 +185,14 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
vnfd_dict = yaml.safe_load(vnfd_str)
|
vnfd_dict = yaml.safe_load(vnfd_str)
|
||||||
LOG.debug('VNFD: %s', vnfd_dict)
|
LOG.debug('VNFD: %s', vnfd_dict)
|
||||||
LOG.debug('VNF package path: %s', vnf_package_path)
|
LOG.debug('VNF package path: %s', vnf_package_path)
|
||||||
scaling_group_dict = {}
|
scale_dict = {}
|
||||||
|
scale_group_dict = {}
|
||||||
for name, rsc in base_hot_dict.get('resources').items():
|
for name, rsc in base_hot_dict.get('resources').items():
|
||||||
if rsc['type'] == 'OS::Heat::AutoScalingGroup':
|
if rsc['type'] == SCALING_GROUP_RESOURCE:
|
||||||
scaling_group_dict[name] = name
|
scale_dict[name] = name
|
||||||
if scaling_group_dict:
|
if scale_dict:
|
||||||
vnf['attributes']['scaling_group_names'] = \
|
vnf['attributes']['scaling_group_names'] = \
|
||||||
jsonutils.dump_as_bytes(scaling_group_dict)
|
jsonutils.dump_as_bytes(scale_dict)
|
||||||
scale_group_dict = \
|
scale_group_dict = \
|
||||||
tosca_utils.get_scale_group(vnf, vnfd_dict, inst_req_info)
|
tosca_utils.get_scale_group(vnf, vnfd_dict, inst_req_info)
|
||||||
vnf['attributes']['scale_group'] = \
|
vnf['attributes']['scale_group'] = \
|
||||||
|
@ -249,7 +250,7 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
"is not in dict format.")
|
"is not in dict format.")
|
||||||
raise vnfm.LCMUserDataFailed(reason=error_reason)
|
raise vnfm.LCMUserDataFailed(reason=error_reason)
|
||||||
|
|
||||||
if scaling_group_dict:
|
if scale_dict:
|
||||||
scale_status_list = []
|
scale_status_list = []
|
||||||
for name, value in scale_group_dict['scaleGroupDict'].items():
|
for name, value in scale_group_dict['scaleGroupDict'].items():
|
||||||
key_name = name + '_desired_capacity'
|
key_name = name + '_desired_capacity'
|
||||||
|
@ -264,7 +265,8 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
if vnf.get('grant'):
|
if vnf.get('grant'):
|
||||||
base_hot_dict, nested_hot_dict, hot_param_dict = \
|
base_hot_dict, nested_hot_dict, hot_param_dict = \
|
||||||
self._setup_hot_for_grant_resources(vnf, vnf_instance,
|
self._setup_hot_for_grant_resources(vnf, vnf_instance,
|
||||||
base_hot_dict, nested_hot_dict, hot_param_dict)
|
base_hot_dict, nested_hot_dict, hot_param_dict,
|
||||||
|
scale_group_dict)
|
||||||
|
|
||||||
# Add stack param to vnf_attributes
|
# Add stack param to vnf_attributes
|
||||||
vnf['attributes'].update({'stack_param': str(hot_param_dict)})
|
vnf['attributes'].update({'stack_param': str(hot_param_dict)})
|
||||||
|
@ -346,7 +348,8 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
|
|
||||||
@log.log
|
@log.log
|
||||||
def _setup_hot_for_grant_resources(self, vnf, vnf_instance,
|
def _setup_hot_for_grant_resources(self, vnf, vnf_instance,
|
||||||
base_hot_dict, nested_hot_dict, hot_param_dict):
|
base_hot_dict, nested_hot_dict, hot_param_dict,
|
||||||
|
scale_group_dict=None):
|
||||||
"""Setup HOT related params for grant resources
|
"""Setup HOT related params for grant resources
|
||||||
|
|
||||||
Update base_hot_dict, nested_hot_dict and hot_param_dict as HOT related
|
Update base_hot_dict, nested_hot_dict and hot_param_dict as HOT related
|
||||||
|
@ -369,42 +372,10 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
ins_inf = vnf_instance.instantiated_vnf_info.vnfc_resource_info
|
ins_inf = vnf_instance.instantiated_vnf_info.vnfc_resource_info
|
||||||
for addrsc in grant.add_resources:
|
for addrsc in grant.add_resources:
|
||||||
for zone in grant.zones:
|
for zone in grant.zones:
|
||||||
if zone.id == addrsc.zone_id:
|
vdu_name = None
|
||||||
vdu_name = None
|
bh, nh, hparam = self._setup_hot_for_zone(
|
||||||
for rsc in ins_inf:
|
ins_inf, addrsc, bh, nh, hparam,
|
||||||
if addrsc.resource_definition_id == rsc.id:
|
scale_group_dict, vdu_name, zone)
|
||||||
vdu_name = rsc.vdu_id
|
|
||||||
break
|
|
||||||
if not vdu_name:
|
|
||||||
continue
|
|
||||||
|
|
||||||
vdu_prop = bh['resources'][vdu_name]['properties']
|
|
||||||
if not vdu_prop.get('resource'):
|
|
||||||
vdu_prop['resource'] = {'properties': {}}
|
|
||||||
|
|
||||||
vdu_rsrc_prop = vdu_prop['resource']['properties']
|
|
||||||
if not vdu_rsrc_prop.get('zone'):
|
|
||||||
vdu_rsrc_prop['zone'] = {'get_param':
|
|
||||||
['nfv', 'vdu', vdu_name, 'zone']}
|
|
||||||
|
|
||||||
if nh:
|
|
||||||
for yaml_name in nh:
|
|
||||||
if not (vdu_name in yaml_name):
|
|
||||||
continue
|
|
||||||
if not nh[yaml_name]['parameters'].get('zone'):
|
|
||||||
nh[yaml_name]['parameters']['zone'] = {
|
|
||||||
'type': 'string'}
|
|
||||||
vdu_props = nh[yaml_name]['resources'][vdu_name][
|
|
||||||
'properties']
|
|
||||||
if not (vdu_props.get('availability_zone')):
|
|
||||||
vdu_props['availability_zone'] = {
|
|
||||||
'get_param': 'zone'}
|
|
||||||
|
|
||||||
h_vdu = hparam['nfv']['VDU'][vdu_name]
|
|
||||||
if not h_vdu.get('zone') and zone.zone_id:
|
|
||||||
hparam['nfv']['VDU'][vdu_name]['zone'] = zone.zone_id
|
|
||||||
if h_vdu.get('zone') and not zone.zone_id:
|
|
||||||
del hparam['nfv']['VDU'][vdu_name]['zone']
|
|
||||||
|
|
||||||
if 'vim_assets' in grant and grant.vim_assets:
|
if 'vim_assets' in grant and grant.vim_assets:
|
||||||
h_vdus = hparam['nfv']['VDU']
|
h_vdus = hparam['nfv']['VDU']
|
||||||
|
@ -417,6 +388,98 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
|
|
||||||
return bh, nh, hparam
|
return bh, nh, hparam
|
||||||
|
|
||||||
|
@log.log
|
||||||
|
def _setup_hot_for_zone(self, ins_inf, addrsc,
|
||||||
|
base_hot_dict, nested_hot_dict, hot_param_dict,
|
||||||
|
scale_group_dict, vdu_name, zone):
|
||||||
|
|
||||||
|
if zone.id == addrsc.zone_id:
|
||||||
|
vdu_name = None
|
||||||
|
for rsc in ins_inf:
|
||||||
|
if addrsc.resource_definition_id == rsc.id:
|
||||||
|
vdu_name = rsc.vdu_id
|
||||||
|
if not vdu_name:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if scale_group_dict:
|
||||||
|
base_hot_dict, nested_hot_dict, vdu_none_flg = \
|
||||||
|
self._update_hot_available_scale(
|
||||||
|
base_hot_dict, nested_hot_dict,
|
||||||
|
scale_group_dict, vdu_name)
|
||||||
|
|
||||||
|
if vdu_none_flg:
|
||||||
|
base_hot_dict = self._update_hot_not_available_scale(
|
||||||
|
base_hot_dict, vdu_name)
|
||||||
|
else:
|
||||||
|
base_hot_dict = self._update_hot_not_available_scale(
|
||||||
|
base_hot_dict, vdu_name)
|
||||||
|
|
||||||
|
h_vdu = hot_param_dict['nfv']['VDU'][vdu_name]
|
||||||
|
if not h_vdu.get('zone') and zone.zone_id:
|
||||||
|
(hot_param_dict['nfv']['VDU']
|
||||||
|
[vdu_name]['zone']) = zone.zone_id
|
||||||
|
if h_vdu.get('zone') and not zone.zone_id:
|
||||||
|
del hot_param_dict['nfv']['VDU'][vdu_name]['zone']
|
||||||
|
|
||||||
|
return base_hot_dict, nested_hot_dict, hot_param_dict
|
||||||
|
|
||||||
|
@log.log
|
||||||
|
def _update_hot_available_scale(self, base_hot_dict,
|
||||||
|
nested_hot_dict, scale_group_dict, vdu_name):
|
||||||
|
vdu_none_flg = True
|
||||||
|
for aspect in scale_group_dict['scaleGroupDict']:
|
||||||
|
aspect_id = aspect
|
||||||
|
|
||||||
|
# vdu_list check
|
||||||
|
if vdu_name not in (scale_group_dict['scaleGroupDict']
|
||||||
|
[aspect]['vdu']):
|
||||||
|
continue
|
||||||
|
|
||||||
|
vdu_none_flg = False
|
||||||
|
if base_hot_dict['resources'].get(aspect_id):
|
||||||
|
# base_hot add
|
||||||
|
vdu_prop = base_hot_dict['resources'][aspect_id]['properties']
|
||||||
|
if not vdu_prop.get('resource'):
|
||||||
|
vdu_prop['resource'] = {'properties': {}}
|
||||||
|
|
||||||
|
vdu_rsrc_prop = vdu_prop['resource']['properties']
|
||||||
|
if not vdu_rsrc_prop.get('zone'):
|
||||||
|
vdu_rsrc_prop['zone'] = {'get_param':
|
||||||
|
['nfv', 'vdu', vdu_name, 'zone']}
|
||||||
|
# nested_hot add
|
||||||
|
yaml_name = vdu_prop['resource']['type']
|
||||||
|
if not nested_hot_dict[yaml_name]['parameters'].get('zone'):
|
||||||
|
nested_hot_dict[yaml_name]['parameters']['zone'] = {
|
||||||
|
'type': 'string'}
|
||||||
|
vdu_props = nested_hot_dict[yaml_name]['resources'][vdu_name][
|
||||||
|
'properties']
|
||||||
|
if not (vdu_props.get('availability_zone')):
|
||||||
|
vdu_props['availability_zone'] = {
|
||||||
|
'get_param': 'zone'}
|
||||||
|
|
||||||
|
return base_hot_dict, nested_hot_dict, vdu_none_flg
|
||||||
|
|
||||||
|
@log.log
|
||||||
|
def _update_hot_not_available_scale(self, base_hot_dict, vdu_name):
|
||||||
|
# base_hot add
|
||||||
|
if base_hot_dict['resources'].get(vdu_name):
|
||||||
|
vdu_prop = (base_hot_dict['resources'][vdu_name]
|
||||||
|
['properties'])
|
||||||
|
if base_hot_dict['resources'][vdu_name]['type'] == \
|
||||||
|
SCALING_GROUP_RESOURCE:
|
||||||
|
if not vdu_prop.get('resource'):
|
||||||
|
vdu_prop['resource'] = {'properties': {}}
|
||||||
|
vdu_rsrc_prop = vdu_prop['resource']['properties']
|
||||||
|
if not vdu_rsrc_prop.get('zone'):
|
||||||
|
vdu_rsrc_prop['zone'] = {'get_param':
|
||||||
|
['nfv', 'vdu', vdu_name, 'zone']}
|
||||||
|
if base_hot_dict['resources'][vdu_name]['type'] == \
|
||||||
|
NOVA_SERVER_RESOURCE:
|
||||||
|
if not vdu_prop.get('availability_zone'):
|
||||||
|
vdu_prop['availability_zone'] = {'get_param':
|
||||||
|
'zone'}
|
||||||
|
return base_hot_dict
|
||||||
|
|
||||||
@log.log
|
@log.log
|
||||||
def _delete_user_data_module(self, user_data_module):
|
def _delete_user_data_module(self, user_data_module):
|
||||||
# Delete module recursively.
|
# Delete module recursively.
|
||||||
|
@ -1542,7 +1605,7 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
scale_resurce_list = heatclient.resource_get_list(
|
scale_resurce_list = heatclient.resource_get_list(
|
||||||
scale_rsc.physical_resource_id)
|
scale_rsc.physical_resource_id)
|
||||||
for rsc in scale_resurce_list:
|
for rsc in scale_resurce_list:
|
||||||
if rsc.resource_type == 'OS::Nova::Server':
|
if rsc.resource_type == NOVA_SERVER_RESOURCE:
|
||||||
if rsc.physical_resource_id not in vnfc_rsc_list:
|
if rsc.physical_resource_id not in vnfc_rsc_list:
|
||||||
rsc_info = heatclient.resource_get(
|
rsc_info = heatclient.resource_get(
|
||||||
scale_rsc.physical_resource_id,
|
scale_rsc.physical_resource_id,
|
||||||
|
@ -1683,7 +1746,7 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
after_st_list = []
|
after_st_list = []
|
||||||
after_port_list = []
|
after_port_list = []
|
||||||
for rsc in resurce_list:
|
for rsc in resurce_list:
|
||||||
if rsc.resource_type == 'OS::Nova::Server':
|
if rsc.resource_type == NOVA_SERVER_RESOURCE:
|
||||||
after_vnfcs_list.append(rsc.physical_resource_id)
|
after_vnfcs_list.append(rsc.physical_resource_id)
|
||||||
if rsc.resource_type == 'OS::Cinder::Volume':
|
if rsc.resource_type == 'OS::Cinder::Volume':
|
||||||
after_st_list.append(rsc.physical_resource_id)
|
after_st_list.append(rsc.physical_resource_id)
|
||||||
|
@ -1878,7 +1941,7 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
nested_hot = yaml.safe_load(
|
nested_hot = yaml.safe_load(
|
||||||
vnf_info['attributes'][yaml_name])
|
vnf_info['attributes'][yaml_name])
|
||||||
for resource_name, resource in nested_hot['resources'].items():
|
for resource_name, resource in nested_hot['resources'].items():
|
||||||
if resource['type'] == 'OS::Nova::Server':
|
if resource['type'] == NOVA_SERVER_RESOURCE:
|
||||||
for i in range(size):
|
for i in range(size):
|
||||||
add_uuid = uuidutils.generate_uuid()
|
add_uuid = uuidutils.generate_uuid()
|
||||||
rsc = objects.ResourceDefinition(
|
rsc = objects.ResourceDefinition(
|
||||||
|
@ -1978,7 +2041,7 @@ class OpenStack(abstract_driver.VnfAbstractDriver,
|
||||||
for del_rsc in del_list:
|
for del_rsc in del_list:
|
||||||
scale_resurce_list = heatclient.resource_get_list(del_rsc)
|
scale_resurce_list = heatclient.resource_get_list(del_rsc)
|
||||||
for rsc in scale_resurce_list:
|
for rsc in scale_resurce_list:
|
||||||
if rsc.resource_type == 'OS::Nova::Server':
|
if rsc.resource_type == NOVA_SERVER_RESOURCE:
|
||||||
for vnfc_resource in inst_info.vnfc_resource_info:
|
for vnfc_resource in inst_info.vnfc_resource_info:
|
||||||
if vnfc_resource.\
|
if vnfc_resource.\
|
||||||
compute_resource.resource_id == \
|
compute_resource.resource_id == \
|
||||||
|
|
Loading…
Reference in New Issue