1 import {getTestBed, TestBed} from '@angular/core/testing';
2 import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
3 import {AvailableModelsTreeService} from './available-models-tree.service';
4 import {ServiceNodeTypes} from "../../../shared/models/ServiceNodeTypes";
5 import {DefaultDataGeneratorService} from "../../../shared/services/defaultDataServiceGenerator/default.data.generator.service";
6 import {MessageBoxService} from "../../../shared/components/messageBox/messageBox.service";
7 import {MessageBoxData} from "../../../shared/components/messageBox/messageBox.data";
8 import {SdcUiCommon} from "onap-ui-angular";
9 import {MockNgRedux, NgReduxTestingModule} from "@angular-redux/store/testing";
10 import {SharedTreeService} from "../objectsToTree/shared.tree.service";
12 describe('Available Models Tree Service', () => {
15 let service: AvailableModelsTreeService;
16 let httpMock: HttpTestingController;
18 beforeAll(done => (async () => {
19 TestBed.configureTestingModule({
20 imports: [HttpClientTestingModule, NgReduxTestingModule],
21 providers: [AvailableModelsTreeService,
22 DefaultDataGeneratorService,
26 await TestBed.compileComponents();
27 injector = getTestBed();
28 service = injector.get(AvailableModelsTreeService);
29 httpMock = injector.get(HttpTestingController);
30 })().then(done).catch(done.fail));
33 test('addingAlertAddingNewVfModuleModal should open message modal', () => {
34 jest.spyOn(MessageBoxService.openModal, 'next');
35 service.addingAlertAddingNewVfModuleModal();
37 expect(MessageBoxService.openModal.next).toHaveBeenCalledWith(new MessageBoxData(
38 "Select a parent", // modal title
39 "There are multiple instances on the right side that can contain this vf-module Please select the VNF instance, to add this vf-module to, on the right side and then click the + sign",
40 SdcUiCommon.ModalType.warning,
41 SdcUiCommon.ModalSize.medium,
43 {text: "Close", size: "medium", closeModal: true}
49 describe('#shouldOpenModalDialogOnAddInstance', () => {
50 let serviceHierarchy = getServiceServiceHierarchy();
52 test('should open popup on add instance', () => {
53 // add vnf should return true
54 let result = service.shouldOpenDialog(ServiceNodeTypes.VF, [], true);
55 expect(result).toBeTruthy();
57 // add vfModule with user provided naming should return true
58 result = service.shouldOpenDialog(ServiceNodeTypes.VFmodule, [], false);
59 expect(result).toBeTruthy();
61 // add vfModule with dynamicInputs without defaultValues should return true
62 result = service.shouldOpenDialog(ServiceNodeTypes.VFmodule, [{
63 id: '2017488_pasqualevpe0_vnf_config_template_version',
65 name: '2017488_pasqualevpe0_vnf_config_template_version',
67 description: 'VPE Software Version'
69 expect(result).toBeTruthy();
71 // add vfModule with dynamicInputs with defaultValues should return false
72 result = service.shouldOpenDialog(ServiceNodeTypes.VFmodule, [{
73 id: '2017488_pasqualevpe0_vnf_config_template_version',
75 name: '2017488_pasqualevpe0_vnf_config_template_version',
78 description: 'VPE Software Version'
80 expect(result).toBeFalsy();
85 test('shouldOpenVRFModal', () => {
87 "id": "dd024d73-9bd1-425d-9db5-476338d53433",
88 "modelCustomizationId": "dd024d73-9bd1-425d-9db5-476338d53433",
89 "modelVersionId": "9cac02be-2489-4374-888d-2863b4511a59",
90 "modelUniqueId": "dd024d73-9bd1-425d-9db5-476338d53433",
91 "name": "VRF Entry Configuration 0",
99 "isEcompGeneratedNaming": false,
101 "componentInfoType": "VRF",
110 const serviceStore = {
112 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc": {
117 "VRF Entry Configuration": {
119 "uuid": "9cac02be-2489-4374-888d-2863b4511a59",
121 "type": "Configuration",
122 "trackById": "s0z58emiprq",
124 "modelInvariantId": "b67a289b-1688-496d-86e8-1583c828be0a",
125 "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
126 "modelName": "VRF Entry Configuration",
127 "modelVersion": "5.0",
128 "modelCustomizationId": "dd024d73-9bd1-425d-9db5-476338d53433",
129 "modelUniqueId": "dd024d73-9bd1-425d-9db5-476338d53433",
130 "modelCustomizationName": "VRF Entry Configuration",
131 "uuid": "9cac02be-2489-4374-888d-2863b4511a59"
134 "VRF Entry Configuration vpns 1": {
136 "instanceId": "46fcb25a-e7ba-4d96-99ba-3bb6eae6aba7",
137 "instanceName": "LPPVPN",
138 "platformName": "AVPN",
139 "instanceType": "SERVICE-INFRASTRUCTURE",
140 "region": "USA,EMEA",
141 "customerId": "VPN1271",
143 "modelCustomizationId": null,
144 "modelInvariantId": null,
145 "modelVersionId": null
147 "routeTargets": null,
152 "VRF Entry Configuration networks 1": {
154 "instanceName": "AUK51a_oam_calea_net_0",
155 "instanceType": "SR-IOV-PROVIDER2-0",
157 "orchStatus": "Active",
158 "physicalName": "sriovnet0",
159 "instanceId": "46fcb25a-e7ba-4d96-99ba-3bb6eae6aba7",
160 "serviceName": "LPPVPN",
161 "serv§iceUUID": "VPN1271",
162 "tenantName": "ecomp_ispt",
163 "lcpCloudRegionId": "USA,EMEA",
165 "modelCustomizationId": "46fcb25a-e7ba-4d96-99ba-3bb6eae6aba7",
166 "modelInvariantId": "46fcb25a-e7ba-4d96-99ba-3bb6eae6aba7",
167 "modelVersionId": "7010093-df36-4dcb-8428-c3d02bf3f88d",
174 "instanceParams": [],
175 "validationCounter": 0,
177 "existingVNFCounterMap": {},
178 "existingVRFCounterMap": {},
179 "existingVnfGroupCounterMap": {},
180 "existingNetworksCounterMap": {},
181 "optionalGroupMembersMap": {},
187 "instantiationUI": "serviceWithVRF",
188 "modelCategory": "other",
189 "viewEditUI": "serviceWithVRF",
190 "instantiationType": "ALaCarte"
192 "uuid": "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc",
193 "invariantUuid": "7ee41ce4-4827-44b0-a48e-2707a59905d2",
194 "name": "VRF Service for Test",
196 "toscaModelURL": null,
197 "category": "Network L4+",
198 "serviceType": "INFRASTRUCTURE",
199 "serviceRole": "Configuration",
200 "description": "xxx",
201 "serviceEcompNaming": "true",
202 "instantiationType": "A-La-Carte",
205 "collectionResources": {},
206 "configurations": {},
207 "fabricConfigurations": {},
208 "serviceProxies": {},
213 "testApi": "VNF_API",
215 "instantiationUI": "serviceWithVVRF",
216 "modelCategory": "other",
217 "viewEditUI": "serviceWithVRF",
218 "instantiationType": "ALaCarte"
224 const serviceModelId :string = '4117a0b6-e234-467d-b5b9-fe2f68c8b0fc';
226 let result: boolean = service.shouldOpenVRFModal(nodes, serviceModelId, serviceStore);
227 expect(result).not.toBeNull();
229 serviceStore.serviceInstance[serviceModelId].existingVRFCounterMap = {
230 "dd024d73-9bd1-425d-9db5-476338d53433" : 1
233 result = service.shouldOpenVRFModal(nodes, serviceModelId, serviceStore);
234 expect(result).toBeNull();
238 function getServiceServiceHierarchy() {
239 return JSON.parse(JSON.stringify(
241 '6e59c5de-f052-46fa-aa7e-2fca9d674c44': {
243 'uuid': '6e59c5de-f052-46fa-aa7e-2fca9d674c44',
244 'invariantUuid': 'e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0',
245 'name': 'ComplexService',
247 'toscaModelURL': null,
248 'category': 'Emanuel',
251 'description': 'ComplexService',
252 'serviceEcompNaming': 'true',
253 'instantiationType': 'Macro',
258 'uuid': 'd6557200-ecf2-4641-8094-5393ae3aae60',
259 'invariantUuid': '4160458e-f648-4b30-a176-43881ffffe9e',
260 'description': 'VSP_vGeraldine',
261 'name': 'VF_vGeraldine',
263 'customizationUuid': '91415b44-753d-494c-926a-456a9172bbb9',
267 'max_instances': '3',
268 'min_instances': '1',
269 'gpb2_Internal2_mac': '00:11:22:EF:AC:DF',
270 'sctp-b-ipv6-egress_src_start_port': '0',
271 'sctp-a-ipv6-egress_rule_application': 'any',
272 'Internal2_allow_transit': 'true',
273 'sctp-b-IPv6_ethertype': 'IPv6',
274 'sctp-a-egress_rule_application': 'any',
275 'sctp-b-ingress_action': 'pass',
276 'sctp-b-ingress_rule_protocol': 'icmp',
277 'ncb2_Internal1_mac': '00:11:22:EF:AC:DF',
278 'sctp-b-ipv6-ingress-src_start_port': '0.0',
279 'ncb1_Internal2_mac': '00:11:22:EF:AC:DF',
280 'fsb_volume_size_0': '320.0',
281 'sctp-b-egress_src_addresses': 'local',
282 'sctp-a-ipv6-ingress_ethertype': 'IPv4',
283 'sctp-a-ipv6-ingress-dst_start_port': '0',
284 'sctp-b-ipv6-ingress_rule_application': 'any',
285 'domain_name': 'default-domain',
286 'sctp-a-ingress_rule_protocol': 'icmp',
287 'sctp-b-egress-src_start_port': '0.0',
288 'sctp-a-egress_src_addresses': 'local',
289 'sctp-b-display_name': 'epc-sctp-b-ipv4v6-sec-group',
290 'sctp-a-egress-src_start_port': '0.0',
291 'sctp-a-ingress_ethertype': 'IPv4',
292 'sctp-b-ipv6-ingress-dst_end_port': '65535',
293 'sctp-b-dst_subnet_prefix_v6': '::',
294 'nf_naming': '{ecomp_generated_naming=true}',
295 'sctp-a-ipv6-ingress_src_subnet_prefix': '0.0.0.0',
296 'sctp-b-egress-dst_start_port': '0.0',
297 'ncb_flavor_name': 'nv.c20r64d1',
298 'gpb1_Internal1_mac': '00:11:22:EF:AC:DF',
299 'sctp-b-egress_dst_subnet_prefix_len': '0.0',
300 'Internal2_net_cidr': '10.0.0.10',
301 'sctp-a-ingress-dst_start_port': '0.0',
302 'sctp-a-egress-dst_start_port': '0.0',
303 'fsb1_Internal2_mac': '00:11:22:EF:AC:DF',
304 'sctp-a-egress_ethertype': 'IPv4',
305 'vlc_st_service_mode': 'in-network-nat',
306 'sctp-a-ipv6-egress_ethertype': 'IPv4',
307 'sctp-a-egress-src_end_port': '65535.0',
308 'sctp-b-ipv6-egress_rule_application': 'any',
309 'sctp-b-egress_action': 'pass',
310 'sctp-a-ingress-src_subnet_prefix_len': '0.0',
311 'sctp-b-ipv6-ingress-src_end_port': '65535.0',
312 'sctp-b-name': 'epc-sctp-b-ipv4v6-sec-group',
313 'fsb2_Internal1_mac': '00:11:22:EF:AC:DF',
314 'sctp-a-ipv6-ingress-src_start_port': '0.0',
315 'sctp-b-ipv6-egress_ethertype': 'IPv4',
316 'Internal1_net_cidr': '10.0.0.10',
317 'sctp-a-egress_dst_subnet_prefix': '0.0.0.0',
318 'fsb_flavor_name': 'nv.c20r64d1',
319 'sctp_rule_protocol': '132',
320 'sctp-b-ipv6-ingress_src_subnet_prefix_len': '0',
321 'sctp-a-ipv6-ingress_rule_application': 'any',
322 'sctp-a-IPv6_ethertype': 'IPv6',
323 'vlc2_Internal1_mac': '00:11:22:EF:AC:DF',
324 'vlc_st_virtualization_type': 'virtual-machine',
325 'sctp-b-ingress-dst_start_port': '0.0',
326 'sctp-b-ingress-dst_end_port': '65535.0',
327 'sctp-a-ipv6-ingress-src_end_port': '65535.0',
328 'sctp-a-display_name': 'epc-sctp-a-ipv4v6-sec-group',
329 'sctp-b-ingress_rule_application': 'any',
330 'int2_sec_group_name': 'int2-sec-group',
331 'vlc_flavor_name': 'nd.c16r64d1',
332 'sctp-b-ipv6-egress_src_addresses': 'local',
333 'vlc_st_interface_type_int1': 'other1',
334 'sctp-b-egress-src_end_port': '65535.0',
335 'sctp-a-ipv6-egress-dst_start_port': '0',
336 'vlc_st_interface_type_int2': 'other2',
337 'sctp-a-ipv6-egress_rule_protocol': 'any',
338 'Internal2_shared': 'false',
339 'sctp-a-ipv6-egress_dst_subnet_prefix_len': '0',
340 'Internal2_rpf': 'disable',
341 'vlc1_Internal1_mac': '00:11:22:EF:AC:DF',
342 'sctp-b-ipv6-egress_src_end_port': '65535',
343 'sctp-a-ipv6-egress_src_addresses': 'local',
344 'sctp-a-ingress-dst_end_port': '65535.0',
345 'sctp-a-ipv6-egress_src_end_port': '65535',
346 'Internal1_forwarding_mode': 'l2',
347 'Internal2_dhcp': 'false',
348 'sctp-a-dst_subnet_prefix_v6': '::',
349 'pxe_image_name': 'MME_PXE-Boot_16ACP04_GA.qcow2',
350 'vlc_st_interface_type_gtp': 'other0',
351 'ncb1_Internal1_mac': '00:11:22:EF:AC:DF',
352 'sctp-b-src_subnet_prefix_v6': '::',
353 'sctp-a-egress_dst_subnet_prefix_len': '0.0',
354 'int1_sec_group_name': 'int1-sec-group',
355 'Internal1_dhcp': 'false',
356 'sctp-a-ipv6-egress_dst_end_port': '65535',
357 'Internal2_forwarding_mode': 'l2',
358 'fsb2_Internal2_mac': '00:11:22:EF:AC:DF',
359 'sctp-b-egress_dst_subnet_prefix': '0.0.0.0',
360 'Internal1_net_cidr_len': '17',
361 'gpb2_Internal1_mac': '00:11:22:EF:AC:DF',
362 'sctp-b-ingress-src_subnet_prefix_len': '0.0',
363 'sctp-a-ingress_dst_addresses': 'local',
364 'sctp-a-egress_action': 'pass',
365 'fsb_volume_type_0': 'SF-Default-SSD',
366 'ncb2_Internal2_mac': '00:11:22:EF:AC:DF',
367 'vlc_st_interface_type_sctp_a': 'left',
368 'vlc_st_interface_type_sctp_b': 'right',
369 'sctp-a-src_subnet_prefix_v6': '::',
370 'vlc_st_version': '2',
371 'sctp-b-egress_ethertype': 'IPv4',
372 'sctp-a-ingress_rule_application': 'any',
373 'gpb1_Internal2_mac': '00:11:22:EF:AC:DF',
374 'instance_ip_family_v6': 'v6',
375 'sctp-a-ipv6-egress_src_start_port': '0',
376 'sctp-b-ingress-src_start_port': '0.0',
377 'sctp-b-ingress_dst_addresses': 'local',
378 'fsb1_Internal1_mac': '00:11:22:EF:AC:DF',
379 'vlc_st_interface_type_oam': 'management',
380 'multi_stage_design': 'false',
381 'oam_sec_group_name': 'oam-sec-group',
382 'Internal2_net_gateway': '10.0.0.10',
383 'sctp-a-ipv6-ingress-dst_end_port': '65535',
384 'sctp-b-ipv6-egress-dst_start_port': '0',
385 'Internal1_net_gateway': '10.0.0.10',
386 'sctp-b-ipv6-egress_rule_protocol': 'any',
387 'gtp_sec_group_name': 'gtp-sec-group',
388 'sctp-a-ipv6-egress_dst_subnet_prefix': '0.0.0.0',
389 'sctp-b-ipv6-egress_dst_subnet_prefix_len': '0',
390 'sctp-a-ipv6-ingress_dst_addresses': 'local',
391 'sctp-a-egress_rule_protocol': 'icmp',
392 'sctp-b-ipv6-egress_action': 'pass',
393 'sctp-a-ipv6-egress_action': 'pass',
394 'Internal1_shared': 'false',
395 'sctp-b-ipv6-ingress_rule_protocol': 'any',
396 'Internal2_net_cidr_len': '17',
397 'sctp-a-name': 'epc-sctp-a-ipv4v6-sec-group',
398 'sctp-a-ingress-src_end_port': '65535.0',
399 'sctp-b-ipv6-ingress_src_subnet_prefix': '0.0.0.0',
400 'sctp-a-egress-dst_end_port': '65535.0',
401 'sctp-a-ingress_action': 'pass',
402 'sctp-b-egress_rule_protocol': 'icmp',
403 'sctp-b-ipv6-ingress_action': 'pass',
404 'vlc_st_service_type': 'firewall',
405 'sctp-b-ipv6-egress_dst_end_port': '65535',
406 'sctp-b-ipv6-ingress-dst_start_port': '0',
407 'vlc2_Internal2_mac': '00:11:22:EF:AC:DF',
408 'vlc_st_availability_zone': 'true',
409 'fsb_volume_image_name_1': 'MME_FSB2_16ACP04_GA.qcow2',
410 'sctp-b-ingress-src_subnet_prefix': '0.0.0.0',
411 'sctp-a-ipv6-ingress_src_subnet_prefix_len': '0',
412 'Internal1_allow_transit': 'true',
413 'gpb_flavor_name': 'nv.c20r64d1',
414 'availability_zone_max_count': '1',
415 'fsb_volume_image_name_0': 'MME_FSB1_16ACP04_GA.qcow2',
416 'sctp-b-ipv6-ingress_dst_addresses': 'local',
417 'sctp-b-ipv6-egress_dst_subnet_prefix': '0.0.0.0',
418 'sctp-b-ipv6-ingress_ethertype': 'IPv4',
419 'vlc1_Internal2_mac': '00:11:22:EF:AC:DF',
420 'sctp-a-ingress-src_subnet_prefix': '0.0.0.0',
421 'sctp-a-ipv6-ingress_action': 'pass',
422 'Internal1_rpf': 'disable',
423 'sctp-b-ingress_ethertype': 'IPv4',
424 'sctp-b-egress_rule_application': 'any',
425 'sctp-b-ingress-src_end_port': '65535.0',
426 'sctp-a-ipv6-ingress_rule_protocol': 'any',
427 'sctp-a-ingress-src_start_port': '0.0',
428 'sctp-b-egress-dst_end_port': '65535.0'
431 'modelCustomizationName': 'VF_vGeraldine 0',
433 'vf_vgeraldine0..VfVgeraldine..vflorence_vlc..module-1': {
434 'uuid': '522159d5-d6e0-4c2a-aa44-5a542a12a830',
435 'invariantUuid': '98a7c88b-b577-476a-90e4-e25a5871e02b',
436 'customizationUuid': '55b1be94-671a-403e-a26c-667e9c47d091',
438 'name': 'VfVgeraldine..vflorence_vlc..module-1',
440 'modelCustomizationName': 'VfVgeraldine..vflorence_vlc..module-1',
441 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
443 'volumeGroupAllowed': false
445 'vf_vgeraldine0..VfVgeraldine..vflorence_gpb..module-2': {
446 'uuid': '41708296-e443-4c71-953f-d9a010f059e1',
447 'invariantUuid': '1cca90b8-3490-495e-87da-3f3e4c57d5b9',
448 'customizationUuid': '6add59e0-7fe1-4bc4-af48-f8812422ae7c',
450 'name': 'VfVgeraldine..vflorence_gpb..module-2',
452 'modelCustomizationName': 'VfVgeraldine..vflorence_gpb..module-2',
453 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
455 'volumeGroupAllowed': false
457 'vf_vgeraldine0..VfVgeraldine..base_vflorence..module-0': {
458 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
459 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
460 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
462 'name': 'VfVgeraldine..base_vflorence..module-0',
464 'modelCustomizationName': 'VfVgeraldine..base_vflorence..module-0',
465 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
467 'volumeGroupAllowed': true
471 'vf_vgeraldine0..VfVgeraldine..base_vflorence..module-0': {
472 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
473 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
474 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
476 'name': 'VfVgeraldine..base_vflorence..module-0',
478 'modelCustomizationName': 'VfVgeraldine..base_vflorence..module-0',
479 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}
486 'uuid': 'ddc3f20c-08b5-40fd-af72-c6d14636b986',
487 'invariantUuid': '379f816b-a7aa-422f-be30-17114ff50b7c',
488 'description': 'ECOMP generic virtual link (network) base type for all other service-level and global networks',
491 'customizationUuid': '94fdd893-4a36-4d70-b16a-ec29c54c184f',
495 'network_assignments': '{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}',
496 'exVL_naming': '{ecomp_generated_naming=true}',
497 'network_flows': '{is_network_policy=false, is_bound_to_vpn=false}',
498 'network_homing': '{ecomp_selected_instance_node_target=false}'
501 'modelCustomizationName': 'ExtVL 0'
505 'Port Mirroring Configuration By Policy 0': {
506 'uuid': 'b4398538-e89d-4f13-b33d-ca323434ba50',
507 'invariantUuid': '6ef0ca40-f366-4897-951f-abd65d25f6f7',
508 'description': 'A port mirroring configuration by policy object',
509 'name': 'Port Mirroring Configuration By Policy',
511 'customizationUuid': '3c3b7b8d-8669-4b3b-8664-61970041fad2',
515 'type': 'Configuration',
516 'modelCustomizationName': 'Port Mirroring Configuration By Policy 0',
518 'collectorNodes': null,
519 'configurationByPolicy': false
522 'serviceProxies': {},
524 'vf_vgeraldine0..VfVgeraldine..vflorence_vlc..module-1': {
525 'uuid': '522159d5-d6e0-4c2a-aa44-5a542a12a830',
526 'invariantUuid': '98a7c88b-b577-476a-90e4-e25a5871e02b',
527 'customizationUuid': '55b1be94-671a-403e-a26c-667e9c47d091',
529 'name': 'VfVgeraldine..vflorence_vlc..module-1',
531 'modelCustomizationName': 'VfVgeraldine..vflorence_vlc..module-1',
532 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
534 'volumeGroupAllowed': false
536 'vf_vgeraldine0..VfVgeraldine..vflorence_gpb..module-2': {
537 'uuid': '41708296-e443-4c71-953f-d9a010f059e1',
538 'invariantUuid': '1cca90b8-3490-495e-87da-3f3e4c57d5b9',
539 'customizationUuid': '6add59e0-7fe1-4bc4-af48-f8812422ae7c',
541 'name': 'VfVgeraldine..vflorence_gpb..module-2',
543 'modelCustomizationName': 'VfVgeraldine..vflorence_gpb..module-2',
544 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
546 'volumeGroupAllowed': false
548 'vf_vgeraldine0..VfVgeraldine..base_vflorence..module-0': {
549 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
550 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
551 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
553 'name': 'VfVgeraldine..base_vflorence..module-0',
555 'modelCustomizationName': 'VfVgeraldine..base_vflorence..module-0',
556 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
558 'volumeGroupAllowed': true
562 'vf_vgeraldine0..VfVgeraldine..base_vflorence..module-0': {
563 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
564 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
565 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
567 'name': 'VfVgeraldine..base_vflorence..module-0',
569 'modelCustomizationName': 'VfVgeraldine..base_vflorence..module-0',
570 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}