Merge "Avoid use of zip files in unit tests"
This commit is contained in:
commit
1ceed50d36
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,5 @@
|
||||
The subdirectories in this path are used to create csar zip files to cover
|
||||
different test scenarios in test_csar_utils.py module.
|
||||
|
||||
* While execution of test cases it creates csar zip file with the use of
|
||||
'test_csar_utils_common' and '../common' directory.
|
@ -0,0 +1,27 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Sample VNF.
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
- tosca_with_vdus.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
selected_flavour:
|
||||
type: string
|
||||
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
@ -0,0 +1,122 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
flavour_id: simple
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
||||
|
||||
policies:
|
||||
- scaling_aspects:
|
||||
type: tosca.policies.nfv.ScalingAspects
|
||||
properties:
|
||||
aspects:
|
||||
worker_instance:
|
||||
name: worker_instance_aspect
|
||||
description: worker_instance scaling aspect
|
||||
max_scale_level: 2
|
||||
step_deltas:
|
||||
- delta_1
|
||||
|
||||
- instantiation_levels:
|
||||
type: tosca.policies.nfv.InstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
description: Smallest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 0
|
||||
instantiation_level_2:
|
||||
description: Largest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 2
|
||||
default_level: instantiation_level_1
|
||||
|
||||
- VDU1_instantiation_levels:
|
||||
type: tosca.policies.nfv.VduInstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
number_of_instances: 1
|
||||
instantiation_level_3:
|
||||
number_of_instances: 3
|
||||
targets: [ VDU1 ]
|
@ -0,0 +1,27 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Sample VNF.
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
- tosca_with_vdus.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
selected_flavour:
|
||||
type: string
|
||||
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
@ -0,0 +1,113 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
flavour_id: simple
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
||||
|
||||
policies:
|
||||
- scaling_aspects:
|
||||
type: tosca.policies.nfv.ScalingAspects
|
||||
properties:
|
||||
aspects:
|
||||
worker_instance:
|
||||
name: worker_instance_aspect
|
||||
description: worker_instance scaling aspect
|
||||
max_scale_level: 2
|
||||
step_deltas:
|
||||
- delta_1
|
||||
|
||||
- instantiation_levels:
|
||||
type: tosca.policies.nfv.InstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
description: Smallest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 0
|
||||
instantiation_level_2:
|
||||
description: Largest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 2
|
||||
default_level: instantiation_level_3
|
@ -0,0 +1,119 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
flavour_id: simple
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
flavour_id: simple
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
||||
|
||||
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
|
||||
artifacts:
|
||||
sw_image:
|
||||
type: tosca.artifacts.nfv.SwImage
|
||||
file: ../Files/images/cirros-0.4.0-x86_64-disk.img
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
||||
|
||||
policies:
|
||||
- instantiation_levels:
|
||||
type: tosca.policies.nfv.InstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
description: Smallest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 0
|
||||
instantiation_level_2:
|
||||
description: Largest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 2
|
||||
default_level: instantiation_level_1
|
@ -0,0 +1,28 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Sample VNF.
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
- tosca_with_vdus.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
selected_flavour:
|
||||
type: string
|
||||
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
flavour_id: { get_input: selected_flavour }
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
@ -0,0 +1,132 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
flavour_id: simple
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
flavour_id: simple
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
||||
|
||||
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
sw_image_data:
|
||||
name: Software of VDU1
|
||||
version: '0.4.0'
|
||||
checksum:
|
||||
algorithm: sha-256
|
||||
hash: b9c3036539fd7a5f87a1bf38eb05fdde8b556a1a7e664dbeda90ed3cd74b4f9d
|
||||
container_format: bare
|
||||
disk_format: qcow2
|
||||
min_disk: 1 GB
|
||||
size: 1 GB
|
||||
|
||||
artifacts:
|
||||
sw_image:
|
||||
type: tosca.artifacts.nfv.SwImage
|
||||
file: ../Files/images/cirros-0.4.0-x86_64-disk.img
|
||||
sw_image1:
|
||||
type: tosca.artifacts.nfv.SwImage
|
||||
file: ../Files/images/cirros-0.4.0-x86_64-disk.img
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
||||
|
||||
policies:
|
||||
- instantiation_levels:
|
||||
type: tosca.policies.nfv.InstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
description: Smallest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 0
|
||||
instantiation_level_2:
|
||||
description: Largest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 2
|
||||
default_level: instantiation_level_1
|
@ -0,0 +1,22 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Sample VNF.
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
- tosca_with_vdus.yaml
|
||||
|
||||
topology_template:
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
@ -0,0 +1,93 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
provider: Company
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
provider: Company
|
||||
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
||||
|
||||
policies:
|
||||
- instantiation_levels:
|
||||
type: tosca.policies.nfv.InstantiationLevels
|
@ -0,0 +1,95 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
provider: Company
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
||||
|
||||
policies:
|
||||
- instantiation_levels:
|
||||
type: tosca.policies.nfv.InstantiationLevels
|
||||
properties:
|
@ -0,0 +1,27 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Sample VNF.
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
- tosca_with_vdus.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
selected_flavour:
|
||||
type: string
|
||||
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
@ -0,0 +1,95 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
flavour_id: simple
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
||||
|
||||
policies:
|
||||
- VDU1_instantiation_levels:
|
||||
type: tosca.policies.nfv.VduInstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
number_of_instances: 1
|
||||
instantiation_level_2:
|
||||
number_of_instances: 3
|
||||
targets: [ VDU1 ]
|
@ -0,0 +1,116 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
flavour_id: simple
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
flavour_description: A simple flavour
|
||||
interfaces:
|
||||
Vnflcm:
|
||||
instantiate: []
|
||||
instantiate_start: []
|
||||
instantiate_end: []
|
||||
terminate: []
|
||||
terminate_start: []
|
||||
terminate_end: []
|
||||
modify_information: []
|
||||
modify_information_start: []
|
||||
modify_information_end: []
|
||||
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
sw_image_data:
|
||||
name: Software of VDU1
|
||||
version: '0.4.0'
|
||||
checksum:
|
||||
algorithm: sha-256
|
||||
hash: b9c3036539fd7a5f87a1bf38eb05fdde8b556a1a7e664dbeda90ed3cd74b4f9d
|
||||
container_format: bare
|
||||
disk_format: qcow2
|
||||
min_disk: 1 GB
|
||||
size: 1 GB
|
||||
|
||||
artifacts:
|
||||
sw_image:
|
||||
file: ../Files/images/cirros-0.4.0-x86_64-disk.img
|
||||
type: tosca.artifacts.nfv.SwImage
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
- virtual_link: internalVL2
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
@ -0,0 +1,31 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
- helloworld3_df_simple.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
selected_flavour:
|
||||
type: string
|
||||
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
flavour_id: { get_input: selected_flavour }
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
||||
requirements:
|
||||
#- virtual_link_external # mapped in lower-level templates
|
||||
#- virtual_link_internal # mapped in lower-level templates
|
@ -0,0 +1,28 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Sample VNF.
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
- tosca_with_vdus.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
selected_flavour:
|
||||
type: string
|
||||
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
flavour_id: { get_input: selected_flavour }
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
@ -0,0 +1,119 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
flavour_id: simple
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
provider: Company
|
||||
flavour_id: simple
|
||||
product_name: Sample VNF
|
||||
software_version: '1.0'
|
||||
descriptor_version: '1.0'
|
||||
vnfm_info:
|
||||
- Tacker
|
||||
|
||||
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
|
||||
artifacts:
|
||||
sw_image:
|
||||
type: tosca.artifacts.nfv.SwImage
|
||||
file: ../Files/images/cirros-0.4.0-x86_64-disk.img
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
||||
|
||||
policies:
|
||||
- instantiation_levels:
|
||||
type: tosca.policies.nfv.InstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
description: Smallest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 0
|
||||
instantiation_level_2:
|
||||
description: Largest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 2
|
||||
default_level: instantiation_level_1
|
@ -0,0 +1,20 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Sample VNF.
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
- tosca_with_vdus.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
selected_flavour:
|
||||
type: string
|
||||
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties: {}
|
@ -0,0 +1,239 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: Simple deployment flavour for Sample VNF
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
- helloworld3_types.yaml
|
||||
|
||||
topology_template:
|
||||
inputs:
|
||||
descriptor_id:
|
||||
type: string
|
||||
descriptor_version:
|
||||
type: string
|
||||
provider:
|
||||
type: string
|
||||
product_name:
|
||||
type: string
|
||||
software_version:
|
||||
type: string
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
flavour_id:
|
||||
type: string
|
||||
flavour_description:
|
||||
type: string
|
||||
|
||||
substitution_mappings:
|
||||
node_type: company.provider.VNF
|
||||
properties:
|
||||
flavour_id: simple
|
||||
requirements:
|
||||
virtual_link_external: [ CP1, virtual_link ]
|
||||
|
||||
node_templates:
|
||||
VDU1:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU1
|
||||
description: VDU1 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 1
|
||||
sw_image_data:
|
||||
name: Software of VDU1
|
||||
version: '0.4.0'
|
||||
checksum:
|
||||
algorithm: sha-256
|
||||
hash: b9c3036539fd7a5f87a1bf38eb05fdde8b556a1a7e664dbeda90ed3cd74b4f9d
|
||||
container_format: bare
|
||||
disk_format: qcow2
|
||||
min_disk: 1 GB
|
||||
size: 1 GB
|
||||
|
||||
artifacts:
|
||||
sw_image:
|
||||
type: tosca.artifacts.nfv.SwImage
|
||||
file: ../Files/images/cirros-0.4.0-x86_64-disk.img
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
|
||||
VDU2:
|
||||
type: tosca.nodes.nfv.Vdu.Compute
|
||||
properties:
|
||||
name: VDU2
|
||||
description: VDU2 compute node
|
||||
vdu_profile:
|
||||
min_number_of_instances: 1
|
||||
max_number_of_instances: 3
|
||||
|
||||
capabilities:
|
||||
virtual_compute:
|
||||
properties:
|
||||
virtual_memory:
|
||||
virtual_mem_size: 512 MB
|
||||
virtual_cpu:
|
||||
num_virtual_cpu: 1
|
||||
virtual_local_storage:
|
||||
- size_of_storage: 1 GB
|
||||
requirements:
|
||||
- virtual_storage: VirtualStorage
|
||||
|
||||
VirtualStorage:
|
||||
type: tosca.nodes.nfv.Vdu.VirtualBlockStorage
|
||||
properties:
|
||||
virtual_block_storage_data:
|
||||
size_of_storage: 30 GB
|
||||
rdma_enabled: true
|
||||
sw_image_data:
|
||||
name: VrtualStorage
|
||||
version: '0.4.0'
|
||||
checksum:
|
||||
algorithm: sha-256
|
||||
hash: b9c3036539fd7a5f87a1bf38eb05fdde8b556a1a7e664dbeda90ed3cd74b4f9d
|
||||
container_format: bare
|
||||
disk_format: qcow2
|
||||
min_disk: 2 GB
|
||||
min_ram: 8192 MB
|
||||
size: 2 GB
|
||||
artifacts:
|
||||
sw_image:
|
||||
type: tosca.artifacts.nfv.SwImage
|
||||
file: ../Files/images/cirros-0.4.0-x86_64-disk.img
|
||||
|
||||
CP1:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 0
|
||||
vnic_type: direct-physical
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
#- virtual_link: # the target node is determined in the NSD
|
||||
|
||||
CP2:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 1
|
||||
requirements:
|
||||
- virtual_binding: VDU1
|
||||
- virtual_link: internalVL2
|
||||
|
||||
CP3:
|
||||
type: tosca.nodes.nfv.VduCp
|
||||
properties:
|
||||
layer_protocols: [ ipv4 ]
|
||||
order: 2
|
||||
requirements:
|
||||
- virtual_binding: VDU2
|
||||
- virtual_link: internalVL2
|
||||
|
||||
internalVL2:
|
||||
type: tosca.nodes.nfv.VnfVirtualLink
|
||||
properties:
|
||||
connectivity_type:
|
||||
layer_protocols: [ ipv4 ]
|
||||
description: Internal Virtual link in the VNF
|
||||
vl_profile:
|
||||
max_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
min_bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
virtual_link_protocol_data:
|
||||
- associated_layer_protocol: ipv4
|
||||
l3_protocol_data:
|
||||
ip_version: ipv4
|
||||
cidr: 11.11.0.0/24
|
||||
|
||||
policies:
|
||||
- scaling_aspects:
|
||||
type: tosca.policies.nfv.ScalingAspects
|
||||
properties:
|
||||
aspects:
|
||||
worker_instance:
|
||||
name: worker_instance_aspect
|
||||
description: worker_instance scaling aspect
|
||||
max_scale_level: 2
|
||||
step_deltas:
|
||||
- delta_1
|
||||
|
||||
- VDU2_initial_delta:
|
||||
type: tosca.policies.nfv.VduInitialDelta
|
||||
properties:
|
||||
initial_delta:
|
||||
number_of_instances: 1
|
||||
targets: [ VDU2 ]
|
||||
|
||||
- VDU2_scaling_aspect_deltas:
|
||||
type: tosca.policies.nfv.VduScalingAspectDeltas
|
||||
properties:
|
||||
aspect: worker_instance
|
||||
deltas:
|
||||
delta_2:
|
||||
number_of_instances: 1
|
||||
targets: [ VDU2 ]
|
||||
|
||||
- instantiation_levels:
|
||||
type: tosca.policies.nfv.InstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
description: Smallest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 0
|
||||
instantiation_level_2:
|
||||
description: Largest size
|
||||
scale_info:
|
||||
worker_instance:
|
||||
scale_level: 2
|
||||
default_level: instantiation_level_1
|
||||
|
||||
- VDU1_instantiation_levels:
|
||||
type: tosca.policies.nfv.VduInstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
number_of_instances: 1
|
||||
instantiation_level_2:
|
||||
number_of_instances: 3
|
||||
targets: [ VDU1 ]
|
||||
|
||||
- VDU2_instantiation_levels:
|
||||
type: tosca.policies.nfv.VduInstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
number_of_instances: 1
|
||||
instantiation_level_2:
|
||||
number_of_instances: 1
|
||||
targets: [ VDU2 ]
|
||||
|
||||
- internalVL2_instantiation_levels:
|
||||
type: tosca.policies.nfv.VirtualLinkInstantiationLevels
|
||||
properties:
|
||||
levels:
|
||||
instantiation_level_1:
|
||||
bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
instantiation_level_2:
|
||||
bitrate_requirements:
|
||||
root: 1048576
|
||||
leaf: 1048576
|
||||
targets: [ internalVL2 ]
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,53 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||
|
||||
description: VNF type definition
|
||||
|
||||
imports:
|
||||
- etsi_nfv_sol001_common_types.yaml
|
||||
- etsi_nfv_sol001_vnfd_types.yaml
|
||||
|
||||
node_types:
|
||||
company.provider.VNF:
|
||||
derived_from: tosca.nodes.nfv.VNF
|
||||
properties:
|
||||
descriptor_id:
|
||||
type: string
|
||||
constraints: [ valid_values: [ b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 ] ]
|
||||
default: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
descriptor_version:
|
||||
type: string
|
||||
constraints: [ valid_values: [ '1.0' ] ]
|
||||
default: '1.0'
|
||||
provider:
|
||||
type: string
|
||||
constraints: [ valid_values: [ 'Company' ] ]
|
||||
default: 'Company'
|
||||
product_name:
|
||||
type: string
|
||||
constraints: [ valid_values: [ 'Sample VNF' ] ]
|
||||
default: 'Sample VNF'
|
||||
software_version:
|
||||
type: string
|
||||
constraints: [ valid_values: [ '1.0' ] ]
|
||||
default: '1.0'
|
||||
vnfm_info:
|
||||
type: list
|
||||
entry_schema:
|
||||
type: string
|
||||
constraints: [ valid_values: [ Tacker ] ]
|
||||
default: [ Tacker ]
|
||||
flavour_id:
|
||||
type: string
|
||||
constraints: [ valid_values: [ simple ] ]
|
||||
default: simple
|
||||
flavour_description:
|
||||
type: string
|
||||
default: ""
|
||||
requirements:
|
||||
- virtual_link_external:
|
||||
capability: tosca.capabilities.nfv.VirtualLinkable
|
||||
- virtual_link_internal:
|
||||
capability: tosca.capabilities.nfv.VirtualLinkable
|
||||
interfaces:
|
||||
Vnflcm:
|
||||
type: tosca.interfaces.nfv.Vnflcm
|
@ -0,0 +1,7 @@
|
||||
TOSCA-Meta-File-Version: 1.0
|
||||
Created-by: Hiroyuki JO
|
||||
CSAR-Version: 1.1
|
||||
Entry-Definitions: Definitions/main_tosca.yaml
|
||||
|
||||
Name: Files/images/cirros-0.4.0-x86_64-disk.img
|
||||
Content-type: application/x-iso9066-image
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -14,8 +14,11 @@
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
import testtools
|
||||
from unittest import mock
|
||||
import uuid
|
||||
import zipfile
|
||||
|
||||
from tacker.common import csar_utils
|
||||
from tacker.common import exceptions
|
||||
@ -29,15 +32,12 @@ class TestCSARUtils(testtools.TestCase):
|
||||
def setUp(self):
|
||||
super(TestCSARUtils, self).setUp()
|
||||
self.context = context.get_admin_context()
|
||||
self.base_path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
def _get_csar_file_path(self, file_name):
|
||||
return os.path.join(
|
||||
self.base_path, "../../etc/samples", file_name)
|
||||
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data(self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path("sample_vnf_package_csar.zip")
|
||||
file_path, _ = utils.create_csar_with_unique_vnfd_id(
|
||||
'./tacker/tests/etc/samples/etsi/nfv/vnfpkgm1')
|
||||
self.addCleanup(os.remove, file_path)
|
||||
vnf_data, flavours = csar_utils.load_csar_data(
|
||||
self.context, constants.UUID, file_path)
|
||||
self.assertEqual(vnf_data['descriptor_version'], '1.0')
|
||||
@ -48,8 +48,10 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_with_single_yaml(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path(
|
||||
"sample_vnfpkg_no_meta_single_vnfd.zip")
|
||||
file_path, _ = utils.create_csar_with_unique_vnfd_id(
|
||||
'./tacker/tests/etc/samples/etsi/nfv/'
|
||||
'sample_vnfpkg_no_meta_single_vnfd')
|
||||
self.addCleanup(os.remove, file_path)
|
||||
vnf_data, flavours = csar_utils.load_csar_data(
|
||||
self.context, constants.UUID, file_path)
|
||||
self.assertEqual(vnf_data['descriptor_version'], '1.0')
|
||||
@ -57,11 +59,41 @@ class TestCSARUtils(testtools.TestCase):
|
||||
self.assertEqual(flavours[0]['flavour_id'], 'simple')
|
||||
self.assertIsNotNone(flavours[0]['sw_images'])
|
||||
|
||||
def _get_csar_zip_from_dir(self, dir_name):
|
||||
csar_dir_path = os.path.join('test_csar_utils_data', dir_name)
|
||||
unique_name = str(uuid.uuid4())
|
||||
csar_temp_dir = os.path.join('/tmp', unique_name)
|
||||
self.addCleanup(shutil.rmtree, csar_temp_dir)
|
||||
utils.copy_csar_files(csar_temp_dir, csar_dir_path)
|
||||
# Copy contents from 'test_csar_utils_common' to 'csar_temp_dir'.
|
||||
common_dir_path = ('./tacker/tests/etc/samples/etsi/nfv/'
|
||||
'test_csar_utils_data/test_csar_utils_common')
|
||||
common_yaml_file = os.path.join(common_dir_path,
|
||||
'Definitions/helloworld3_types.yaml')
|
||||
shutil.copy(common_yaml_file,
|
||||
os.path.join(csar_temp_dir, 'Definitions/'))
|
||||
|
||||
shutil.copytree(os.path.join(common_dir_path, "TOSCA-Metadata/"),
|
||||
os.path.join(csar_temp_dir, "TOSCA-Metadata/"))
|
||||
# Create temporary zip file from 'csar_temp_dir'
|
||||
tempfd, tempname = tempfile.mkstemp(suffix=".zip", dir=csar_temp_dir)
|
||||
os.close(tempfd)
|
||||
zcsar = zipfile.ZipFile(tempname, 'w')
|
||||
|
||||
for (dpath, _, fnames) in os.walk(csar_temp_dir):
|
||||
for fname in fnames:
|
||||
src_file = os.path.join(dpath, fname)
|
||||
dst_file = os.path.relpath(os.path.join(dpath, fname),
|
||||
csar_temp_dir)
|
||||
zcsar.write(src_file, dst_file)
|
||||
zcsar.close()
|
||||
return tempname
|
||||
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_without_instantiation_level(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path(
|
||||
"csar_without_instantiation_level.zip")
|
||||
file_path = self._get_csar_zip_from_dir(
|
||||
'csar_without_instantiation_level')
|
||||
exc = self.assertRaises(exceptions.InvalidCSAR,
|
||||
csar_utils.load_csar_data,
|
||||
self.context, constants.UUID, file_path)
|
||||
@ -72,8 +104,8 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_with_invalid_instantiation_level(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path(
|
||||
"csar_invalid_instantiation_level.zip")
|
||||
file_path = self._get_csar_zip_from_dir(
|
||||
'csar_invalid_instantiation_level')
|
||||
exc = self.assertRaises(exceptions.InvalidCSAR,
|
||||
csar_utils.load_csar_data,
|
||||
self.context, constants.UUID, file_path)
|
||||
@ -85,8 +117,8 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_with_invalid_default_instantiation_level(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path(
|
||||
"csar_with_invalid_default_instantiation_level.zip")
|
||||
file_path = self._get_csar_zip_from_dir(
|
||||
'csar_with_invalid_default_instantiation_level')
|
||||
exc = self.assertRaises(exceptions.InvalidCSAR,
|
||||
csar_utils.load_csar_data,
|
||||
self.context, constants.UUID, file_path)
|
||||
@ -98,8 +130,8 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_without_vnfd_info(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path(
|
||||
"csar_without_vnfd_info.zip")
|
||||
file_path = self._get_csar_zip_from_dir(
|
||||
'csar_without_vnfd_info')
|
||||
exc = self.assertRaises(exceptions.InvalidCSAR,
|
||||
csar_utils.load_csar_data,
|
||||
self.context, constants.UUID, file_path)
|
||||
@ -108,8 +140,8 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_with_artifacts_and_without_sw_image_data(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path(
|
||||
"csar_without_sw_image_data.zip")
|
||||
file_path = self._get_csar_zip_from_dir(
|
||||
'csar_without_sw_image_data')
|
||||
exc = self.assertRaises(exceptions.InvalidCSAR,
|
||||
csar_utils.load_csar_data,
|
||||
self.context, constants.UUID, file_path)
|
||||
@ -120,8 +152,8 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_with_multiple_sw_image_data(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path(
|
||||
"csar_with_multiple_sw_image_data.zip")
|
||||
file_path = self._get_csar_zip_from_dir(
|
||||
'csar_with_multiple_sw_image_data')
|
||||
exc = self.assertRaises(exceptions.InvalidCSAR,
|
||||
csar_utils.load_csar_data,
|
||||
self.context, constants.UUID, file_path)
|
||||
@ -132,8 +164,8 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_csar_with_missing_sw_image_data_in_main_template(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path(
|
||||
"csar_with_missing_sw_image_data_in_main_template.zip")
|
||||
file_path = self._get_csar_zip_from_dir(
|
||||
'csar_with_missing_sw_image_data_in_main_template')
|
||||
exc = self.assertRaises(exceptions.InvalidCSAR,
|
||||
csar_utils.load_csar_data,
|
||||
self.context, constants.UUID, file_path)
|
||||
@ -144,7 +176,7 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_without_flavour_info(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path("csar_without_flavour_info.zip")
|
||||
file_path = self._get_csar_zip_from_dir('csar_without_flavour_info')
|
||||
exc = self.assertRaises(exceptions.InvalidCSAR,
|
||||
csar_utils.load_csar_data,
|
||||
self.context, constants.UUID, file_path)
|
||||
@ -153,8 +185,8 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_without_flavour_info_in_main_template(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path(
|
||||
"csar_without_flavour_info_in_main_template.zip")
|
||||
file_path = self._get_csar_zip_from_dir(
|
||||
'csar_without_flavour_info_in_main_template')
|
||||
exc = self.assertRaises(exceptions.InvalidCSAR,
|
||||
csar_utils.load_csar_data,
|
||||
self.context, constants.UUID, file_path)
|
||||
@ -171,7 +203,8 @@ class TestCSARUtils(testtools.TestCase):
|
||||
@mock.patch('tacker.common.csar_utils.extract_csar_zip_file')
|
||||
def test_load_csar_data_without_policies(
|
||||
self, mock_extract_csar_zip_file):
|
||||
file_path = self._get_csar_file_path("csar_without_policies.zip")
|
||||
file_path = self._get_csar_zip_from_dir(
|
||||
'csar_without_policies')
|
||||
vnf_data, flavours = csar_utils.load_csar_data(
|
||||
self.context, constants.UUID, file_path)
|
||||
self.assertIsNone(flavours[0].get('instantiation_levels'))
|
||||
|
@ -18,9 +18,11 @@ import os
|
||||
from oslo_config import cfg
|
||||
import shutil
|
||||
import tempfile
|
||||
import uuid
|
||||
import yaml
|
||||
import zipfile
|
||||
|
||||
from tacker.tests import utils
|
||||
from tacker.tests import uuidsentinel
|
||||
|
||||
|
||||
@ -73,32 +75,27 @@ def make_vnfd_files_list(csar_path):
|
||||
return files_list
|
||||
|
||||
|
||||
def create_fake_csar_dir(vnf_package_id, single_yaml_csar=False):
|
||||
base_path = os.path.dirname(os.path.abspath(__file__))
|
||||
csar_file = ('sample_vnfpkg_no_meta_single_vnfd.zip' if single_yaml_csar
|
||||
else 'sample_vnf_package_csar.zip')
|
||||
sample_vnf_package_zip = os.path.join(base_path, "../../etc/samples",
|
||||
csar_file)
|
||||
tmpdir = tempfile.mkdtemp()
|
||||
fake_csar = os.path.join('/tmp/', vnf_package_id)
|
||||
os.rename(tmpdir, fake_csar)
|
||||
|
||||
with zipfile.ZipFile(sample_vnf_package_zip, 'r') as zf:
|
||||
zf.extractall(fake_csar)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', '/tmp',
|
||||
def create_fake_csar_dir(vnf_package_id, temp_dir,
|
||||
csar_without_tosca_meta=False):
|
||||
csar_dir = ('sample_vnfpkg_no_meta_single_vnfd' if csar_without_tosca_meta
|
||||
else 'vnfpkgm1')
|
||||
fake_csar = os.path.join(temp_dir, vnf_package_id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', temp_dir,
|
||||
group='vnf_package')
|
||||
utils.copy_csar_files(fake_csar, csar_dir, csar_without_tosca_meta)
|
||||
|
||||
return fake_csar
|
||||
|
||||
|
||||
def get_expected_vnfd_data():
|
||||
base_path = os.path.dirname(os.path.abspath(__file__))
|
||||
sample_vnf_package_zip = os.path.join(
|
||||
base_path, "../../etc/samples/sample_vnf_package_csar.zip")
|
||||
|
||||
csar_temp_dir = tempfile.mkdtemp()
|
||||
|
||||
with zipfile.ZipFile(sample_vnf_package_zip, 'r') as zf:
|
||||
zf.extractall(csar_temp_dir)
|
||||
def get_expected_vnfd_data(zip_file=None):
|
||||
if zip_file:
|
||||
csar_temp_dir = tempfile.mkdtemp()
|
||||
with zipfile.ZipFile(zip_file, 'r') as zf:
|
||||
zf.extractall(csar_temp_dir)
|
||||
else:
|
||||
unique_name = str(uuid.uuid4())
|
||||
csar_temp_dir = os.path.join('/tmp', unique_name)
|
||||
utils.copy_csar_files(csar_temp_dir, 'vnfpkgm1', read_vnfd_only=True)
|
||||
|
||||
file_names = ['TOSCA-Metadata/TOSCA.meta',
|
||||
'Definitions/etsi_nfv_sol001_vnfd_types.yaml',
|
||||
@ -108,8 +105,9 @@ def get_expected_vnfd_data():
|
||||
'Definitions/etsi_nfv_sol001_common_types.yaml']
|
||||
file_path_and_data = {}
|
||||
for file_name in file_names:
|
||||
file_path_and_data.update({file_name: yaml.dump(yaml.safe_load(
|
||||
io.open(os.path.join(csar_temp_dir, file_name))))})
|
||||
with io.open(os.path.join(csar_temp_dir, file_name)) as f:
|
||||
file_path_and_data.update({file_name: yaml.dump(yaml.safe_load(
|
||||
f))})
|
||||
|
||||
shutil.rmtree(csar_temp_dir)
|
||||
return file_path_and_data
|
||||
|
@ -18,6 +18,7 @@ import shutil
|
||||
import sys
|
||||
from unittest import mock
|
||||
|
||||
import fixtures
|
||||
from glance_store import exceptions as store_exceptions
|
||||
from oslo_config import cfg
|
||||
from six.moves import urllib
|
||||
@ -37,6 +38,7 @@ from tacker.tests.unit.conductor import fakes
|
||||
from tacker.tests.unit.db.base import SqlTestCase
|
||||
from tacker.tests.unit.objects import fakes as fake_obj
|
||||
from tacker.tests.unit.vnflcm import fakes as vnflcm_fakes
|
||||
from tacker.tests import utils
|
||||
from tacker.tests import uuidsentinel
|
||||
|
||||
CONF = tacker.conf.CONF
|
||||
@ -60,6 +62,7 @@ class TestConductor(SqlTestCase):
|
||||
self._mock_vnfm_plugin()
|
||||
self.conductor = conductor_server.Conductor('host')
|
||||
self.vnf_package = self._create_vnf_package()
|
||||
self.temp_dir = self.useFixture(fixtures.TempDir()).path
|
||||
|
||||
def _mock_vnfm_plugin(self):
|
||||
self.vnfm_plugin = mock.Mock(wraps=FakeVNFMPlugin())
|
||||
@ -131,16 +134,17 @@ class TestConductor(SqlTestCase):
|
||||
mock_delete_csar.assert_called()
|
||||
|
||||
def test_get_vnf_package_vnfd_with_tosca_meta_file_in_csar(self):
|
||||
fake_csar = fakes.create_fake_csar_dir(self.vnf_package.id)
|
||||
expected_data = fakes.get_expected_vnfd_data()
|
||||
fake_csar = fakes.create_fake_csar_dir(self.vnf_package.id,
|
||||
self.temp_dir)
|
||||
result = self.conductor.get_vnf_package_vnfd(self.context,
|
||||
self.vnf_package)
|
||||
expected_data = fakes.get_expected_vnfd_data()
|
||||
self.assertEqual(expected_data, result)
|
||||
shutil.rmtree(fake_csar)
|
||||
|
||||
def test_get_vnf_package_vnfd_with_single_yaml_csar(self):
|
||||
fake_csar = fakes.create_fake_csar_dir(self.vnf_package.id,
|
||||
single_yaml_csar=True)
|
||||
fake_csar = fakes.create_fake_csar_dir(
|
||||
self.vnf_package.id, self.temp_dir, csar_without_tosca_meta=True)
|
||||
result = self.conductor.get_vnf_package_vnfd(self.context,
|
||||
self.vnf_package)
|
||||
# only one key present in the result shows that it contains only one
|
||||
@ -151,19 +155,18 @@ class TestConductor(SqlTestCase):
|
||||
@mock.patch.object(glance_store, 'load_csar')
|
||||
def test_get_vnf_package_vnfd_download_from_glance_store(self,
|
||||
mock_load_csar):
|
||||
fake_csar = os.path.join('/tmp/', self.vnf_package.id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', '/tmp',
|
||||
fake_csar = os.path.join(self.temp_dir, self.vnf_package.id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
|
||||
group='vnf_package')
|
||||
# Scenario in which csar path is not present in the local storage.
|
||||
base_path = os.path.dirname(os.path.abspath(__file__))
|
||||
sample_vnf_package = os.path.join(
|
||||
base_path, "../../etc/samples/sample_vnf_package_csar.zip")
|
||||
mock_load_csar.return_value = sample_vnf_package
|
||||
expected_data = fakes.get_expected_vnfd_data()
|
||||
fake_csar_zip, _ = utils.create_csar_with_unique_vnfd_id(
|
||||
'./tacker/tests/etc/samples/etsi/nfv/vnfpkgm1')
|
||||
mock_load_csar.return_value = fake_csar_zip
|
||||
expected_data = fakes.get_expected_vnfd_data(zip_file=fake_csar_zip)
|
||||
result = self.conductor.get_vnf_package_vnfd(self.context,
|
||||
self.vnf_package)
|
||||
self.assertEqual(expected_data, result)
|
||||
shutil.rmtree(fake_csar)
|
||||
os.remove(fake_csar_zip)
|
||||
|
||||
@mock.patch.object(glance_store, 'load_csar')
|
||||
def test_get_vnf_package_vnfd_exception_from_glance_store(self,
|
||||
@ -176,7 +179,8 @@ class TestConductor(SqlTestCase):
|
||||
@mock.patch.object(conductor_server.Conductor, '_read_vnfd_files')
|
||||
def test_get_vnf_package_vnfd_exception_from_read_vnfd_files(
|
||||
self, mock_read_vnfd_files):
|
||||
fake_csar = fakes.create_fake_csar_dir(self.vnf_package.id)
|
||||
fake_csar = fakes.create_fake_csar_dir(self.vnf_package.id,
|
||||
self.temp_dir)
|
||||
mock_read_vnfd_files.side_effect = yaml.YAMLError
|
||||
self.assertRaises(exceptions.FailedToGetVnfdData,
|
||||
self.conductor.get_vnf_package_vnfd, self.context,
|
||||
|
@ -26,6 +26,7 @@ from tacker import objects
|
||||
from tacker.objects import fields
|
||||
from tacker.tests.unit.db import base as db_base
|
||||
from tacker.tests.unit.vnflcm import fakes
|
||||
from tacker.tests import utils as test_utils
|
||||
from tacker.tests import uuidsentinel
|
||||
from tacker.vnflcm import vnflcm_driver
|
||||
from tacker.vnfm import vim_client
|
||||
@ -127,24 +128,6 @@ class TestVnflcmDriver(db_base.SqlTestCase):
|
||||
'test_project'}, 'vim_type': 'openstack'}
|
||||
self.vim_client.get_vim.return_value = vim_obj
|
||||
|
||||
def _copy_csar_files(self, fake_csar_path, csar_file_name):
|
||||
sample_vnf_package = os.path.join(
|
||||
"./tacker/tests/etc/samples/etsi/nfv", csar_file_name)
|
||||
shutil.copytree(sample_vnf_package, fake_csar_path)
|
||||
common_files_path = os.path.join(
|
||||
"./tacker/tests/etc/samples/etsi/nfv/common/")
|
||||
tosca_definition_file_path = os.path.join(common_files_path,
|
||||
"Definitions/")
|
||||
for (dpath, _, fnames) in os.walk(tosca_definition_file_path):
|
||||
if not fnames:
|
||||
continue
|
||||
for fname in fnames:
|
||||
src_file = os.path.join(dpath, fname)
|
||||
shutil.copy(src_file, os.path.join(fake_csar_path,
|
||||
"Definitions"))
|
||||
shutil.copytree(os.path.join(common_files_path, "Files/"),
|
||||
os.path.join(fake_csar_path, "Files/"))
|
||||
|
||||
@mock.patch.object(objects.VnfResource, 'create')
|
||||
@mock.patch.object(objects.VnfPackageVnfd, 'get_by_id')
|
||||
@mock.patch.object(objects.VnfInstance, "save")
|
||||
@ -162,7 +145,7 @@ class TestVnflcmDriver(db_base.SqlTestCase):
|
||||
fake_csar = os.path.join(self.temp_dir, vnf_package_id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
|
||||
group='vnf_package')
|
||||
self._copy_csar_files(fake_csar, "vnflcm4")
|
||||
test_utils.copy_csar_files(fake_csar, "vnflcm4")
|
||||
self._mock_vnf_manager()
|
||||
driver = vnflcm_driver.VnfLcmDriver()
|
||||
driver.instantiate_vnf(self.context, vnf_instance_obj,
|
||||
@ -192,7 +175,7 @@ class TestVnflcmDriver(db_base.SqlTestCase):
|
||||
fake_csar = os.path.join(self.temp_dir, vnf_package_id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
|
||||
group='vnf_package')
|
||||
self._copy_csar_files(fake_csar, "vnflcm4")
|
||||
test_utils.copy_csar_files(fake_csar, "vnflcm4")
|
||||
self._mock_vnf_manager()
|
||||
driver = vnflcm_driver.VnfLcmDriver()
|
||||
driver.instantiate_vnf(self.context, vnf_instance_obj,
|
||||
@ -222,7 +205,7 @@ class TestVnflcmDriver(db_base.SqlTestCase):
|
||||
fake_csar = os.path.join(self.temp_dir, vnf_package_id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
|
||||
group='vnf_package')
|
||||
self._copy_csar_files(fake_csar, "vnflcm4")
|
||||
test_utils.copy_csar_files(fake_csar, "vnflcm4")
|
||||
self._mock_vnf_manager()
|
||||
driver = vnflcm_driver.VnfLcmDriver()
|
||||
driver.instantiate_vnf(self.context, vnf_instance_obj,
|
||||
@ -252,7 +235,7 @@ class TestVnflcmDriver(db_base.SqlTestCase):
|
||||
fake_csar = os.path.join(self.temp_dir, vnf_package_id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
|
||||
group='vnf_package')
|
||||
self._copy_csar_files(fake_csar, "vnflcm4")
|
||||
test_utils.copy_csar_files(fake_csar, "vnflcm4")
|
||||
self._mock_vnf_manager(fail_method_name="instantiate_vnf")
|
||||
driver = vnflcm_driver.VnfLcmDriver()
|
||||
error = self.assertRaises(exceptions.VnfInstantiationFailed,
|
||||
@ -288,7 +271,7 @@ class TestVnflcmDriver(db_base.SqlTestCase):
|
||||
fake_csar = os.path.join(self.temp_dir, vnf_package_id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
|
||||
group='vnf_package')
|
||||
self._copy_csar_files(fake_csar, "vnflcm4")
|
||||
test_utils.copy_csar_files(fake_csar, "vnflcm4")
|
||||
self._mock_vnf_manager(fail_method_name='create_wait')
|
||||
driver = vnflcm_driver.VnfLcmDriver()
|
||||
error = self.assertRaises(exceptions.VnfInstantiationWaitFailed,
|
||||
@ -322,7 +305,7 @@ class TestVnflcmDriver(db_base.SqlTestCase):
|
||||
fake_csar = os.path.join(self.temp_dir, vnf_package_id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
|
||||
group='vnf_package')
|
||||
self._copy_csar_files(
|
||||
test_utils.copy_csar_files(
|
||||
fake_csar, "sample_vnf_package_csar_with_short_notation")
|
||||
self._mock_vnf_manager(vnf_resource_count=2)
|
||||
driver = vnflcm_driver.VnfLcmDriver()
|
||||
@ -452,7 +435,7 @@ class TestVnflcmDriver(db_base.SqlTestCase):
|
||||
fake_csar = os.path.join(self.temp_dir, vnf_package_id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
|
||||
group='vnf_package')
|
||||
self._copy_csar_files(fake_csar, "vnflcm4")
|
||||
test_utils.copy_csar_files(fake_csar, "vnflcm4")
|
||||
mock_vnf_resource_list.return_value = [fakes.return_vnf_resource()]
|
||||
# Heal as per SOL003 i.e. without vnfcInstanceId
|
||||
heal_vnf_req = objects.HealVnfRequest()
|
||||
@ -536,7 +519,7 @@ class TestVnflcmDriver(db_base.SqlTestCase):
|
||||
fake_csar = os.path.join(self.temp_dir, vnf_package_id)
|
||||
cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
|
||||
group='vnf_package')
|
||||
self._copy_csar_files(fake_csar, "vnflcm4")
|
||||
test_utils.copy_csar_files(fake_csar, "vnflcm4")
|
||||
mock_vnf_resource_list.return_value = [fakes.return_vnf_resource()]
|
||||
# Heal as per SOL003 i.e. without vnfcInstanceId
|
||||
heal_vnf_req = objects.HealVnfRequest()
|
||||
|
@ -20,10 +20,9 @@ import io
|
||||
import iso8601
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
import uuid
|
||||
import webob
|
||||
import yaml
|
||||
import zipfile
|
||||
|
||||
from tacker.api.vnfpkgm.v1.router import VnfpkgmAPIRouter
|
||||
from tacker import context
|
||||
@ -32,6 +31,7 @@ from tacker.objects import vnf_package as vnf_package_obj
|
||||
from tacker.objects import vnf_package_vnfd as vnf_package_vnfd_obj
|
||||
from tacker.objects import vnf_software_image as vnf_software_image_obj
|
||||
from tacker.tests import constants
|
||||
from tacker.tests import utils
|
||||
from tacker.tests import uuidsentinel
|
||||
from tacker import wsgi
|
||||
|
||||
@ -231,27 +231,27 @@ def wsgi_app_v1(fake_auth_context=None):
|
||||
return api_v1
|
||||
|
||||
|
||||
def return_vnfd_data(multiple_yaml_files=True):
|
||||
base_path = os.path.dirname(os.path.abspath(__file__))
|
||||
sample_vnf_package_zip = os.path.join(
|
||||
base_path, "../../etc/samples/sample_vnf_package_csar.zip")
|
||||
|
||||
csar_temp_dir = tempfile.mkdtemp()
|
||||
|
||||
with zipfile.ZipFile(sample_vnf_package_zip, 'r') as zf:
|
||||
zf.extractall(csar_temp_dir)
|
||||
|
||||
file_names = ['Definitions/etsi_nfv_sol001_vnfd_types.yaml']
|
||||
if multiple_yaml_files:
|
||||
file_names.extend(['TOSCA-Metadata/TOSCA.meta',
|
||||
'Definitions/helloworld3_types.yaml',
|
||||
'Definitions/helloworld3_df_simple.yaml',
|
||||
'Definitions/helloworld3_top.vnfd.yaml',
|
||||
'Definitions/etsi_nfv_sol001_common_types.yaml'])
|
||||
def return_vnfd_data(csar_without_tosca_meta=False):
|
||||
csar_dir = ('sample_vnfpkg_no_meta_single_vnfd'
|
||||
if csar_without_tosca_meta else 'vnfpkgm1')
|
||||
unique_name = str(uuid.uuid4())
|
||||
csar_temp_dir = os.path.join('/tmp', unique_name)
|
||||
utils.copy_csar_files(csar_temp_dir, csar_dir, csar_without_tosca_meta,
|
||||
read_vnfd_only=True)
|
||||
if csar_without_tosca_meta:
|
||||
file_names = ['vnfd_helloworld_single.yaml']
|
||||
else:
|
||||
file_names = ['TOSCA-Metadata/TOSCA.meta',
|
||||
'Definitions/helloworld3_types.yaml',
|
||||
'Definitions/helloworld3_df_simple.yaml',
|
||||
'Definitions/helloworld3_top.vnfd.yaml',
|
||||
'Definitions/etsi_nfv_sol001_common_types.yaml',
|
||||
'Definitions/etsi_nfv_sol001_vnfd_types.yaml']
|
||||
file_path_and_data = {}
|
||||
for file_name in file_names:
|
||||
file_path_and_data.update({file_name: yaml.dump(yaml.safe_load(
|
||||
io.open(os.path.join(csar_temp_dir, file_name))))})
|
||||
with io.open(os.path.join(csar_temp_dir, file_name)) as f:
|
||||
file_path_and_data.update({file_name: yaml.dump(yaml.safe_load(
|
||||
f))})
|
||||
|
||||
shutil.rmtree(csar_temp_dir)
|
||||
return file_path_and_data
|
||||
|
@ -519,8 +519,6 @@ class TestController(base.TestCase):
|
||||
mock_vnf_by_id,
|
||||
mock_upload_vnf_package_content,
|
||||
mock_glance_store):
|
||||
file_path = "tacker/tests/etc/samples/test_data.zip"
|
||||
file_obj = open(file_path, "rb")
|
||||
updates = {'onboarding_state': 'CREATED',
|
||||
'operational_state': 'DISABLED'}
|
||||
vnf_package_dict = fakes.fake_vnf_package(updates)
|
||||
@ -534,20 +532,19 @@ class TestController(base.TestCase):
|
||||
% constants.UUID)
|
||||
req.headers['Content-Type'] = 'application/zip'
|
||||
req.method = 'PUT'
|
||||
req.body = jsonutils.dump_as_bytes(file_obj)
|
||||
req.body = jsonutils.dump_as_bytes(mock.mock_open())
|
||||
resp = req.get_response(self.app)
|
||||
mock_glance_store.assert_called()
|
||||
self.assertEqual(http_client.ACCEPTED, resp.status_code)
|
||||
|
||||
def test_upload_vnf_package_content_with_invalid_uuid(self):
|
||||
file_path = "tacker/tests/etc/samples/test_data.zip"
|
||||
file_obj = open(file_path, "rb")
|
||||
req = fake_request.HTTPRequest.blank(
|
||||
'/vnf_packages/%s/package_content'
|
||||
% constants.INVALID_UUID)
|
||||
exception = self.assertRaises(exc.HTTPNotFound,
|
||||
self.controller.upload_vnf_package_content,
|
||||
req, constants.INVALID_UUID, body=file_obj)
|
||||
req, constants.INVALID_UUID,
|
||||
body=mock.mock_open())
|
||||
self.assertEqual(
|
||||
"Can not find requested vnf package: %s" % constants.INVALID_UUID,
|
||||
exception.explanation)
|
||||
@ -555,15 +552,13 @@ class TestController(base.TestCase):
|
||||
@mock.patch.object(vnf_package.VnfPackage, "get_by_id")
|
||||
def test_upload_vnf_package_content_without_vnf_pack(self,
|
||||
mock_vnf_by_id):
|
||||
file_path = "tacker/tests/etc/samples/test_data.zip"
|
||||
file_obj = open(file_path, "rb")
|
||||
msg = _("Can not find requested vnf package: %s") % constants.UUID
|
||||
mock_vnf_by_id.side_effect = exc.HTTPNotFound(explanation=msg)
|
||||
req = fake_request.HTTPRequest.blank(
|
||||
'/vnf_packages/%s/package_content' % constants.UUID)
|
||||
exception = self.assertRaises(
|
||||
exc.HTTPNotFound, self.controller.upload_vnf_package_content,
|
||||
req, constants.UUID, body=file_obj)
|
||||
req, constants.UUID, body=mock.mock_open())
|
||||
self.assertEqual(
|
||||
"Can not find requested vnf package: %s" % constants.UUID,
|
||||
exception.explanation)
|
||||
@ -571,8 +566,6 @@ class TestController(base.TestCase):
|
||||
@mock.patch.object(vnf_package.VnfPackage, "get_by_id")
|
||||
def test_upload_vnf_package_content_with_invalid_status(self,
|
||||
mock_vnf_by_id):
|
||||
file_path = "tacker/tests/etc/samples/test_data.zip"
|
||||
file_obj = open(file_path, "rb")
|
||||
vnf_obj = fakes.return_vnfpkg_obj()
|
||||
vnf_obj.__setattr__('onboarding_state', 'ONBOARDED')
|
||||
mock_vnf_by_id.return_value = vnf_obj
|
||||
@ -580,7 +573,7 @@ class TestController(base.TestCase):
|
||||
'/vnf_packages/%s/package_content' % constants.UUID)
|
||||
self.assertRaises(exc.HTTPConflict,
|
||||
self.controller.upload_vnf_package_content,
|
||||
req, constants.UUID, body=file_obj)
|
||||
req, constants.UUID, body=mock.mock_open())
|
||||
|
||||
@mock.patch.object(urllib.request, 'urlopen')
|
||||
@mock.patch.object(VNFPackageRPCAPI, "upload_vnf_package_from_uri")
|
||||
@ -847,7 +840,7 @@ class TestController(base.TestCase):
|
||||
mock_vnf_by_id,
|
||||
mock_get_vnf_package_vnfd):
|
||||
mock_vnf_by_id.return_value = fakes.return_vnfpkg_obj()
|
||||
fake_vnfd_data = fakes.return_vnfd_data(multiple_yaml_files=False)
|
||||
fake_vnfd_data = fakes.return_vnfd_data(csar_without_tosca_meta=True)
|
||||
mock_get_vnf_package_vnfd.return_value = fake_vnfd_data
|
||||
req = fake_request.HTTPRequest.blank(
|
||||
'/vnf_packages/%s/vnfd'
|
||||
|
@ -15,6 +15,7 @@
|
||||
import base64
|
||||
import http.server
|
||||
import os
|
||||
import shutil
|
||||
import threading
|
||||
|
||||
from oslo_utils import uuidutils
|
||||
@ -105,6 +106,46 @@ def create_csar_with_unique_vnfd_id(csar_dir):
|
||||
return tempname, unique_id
|
||||
|
||||
|
||||
def copy_csar_files(fake_csar_path, csar_dir_name,
|
||||
csar_without_tosca_meta=False, read_vnfd_only=False):
|
||||
"""Copy csar directory to temporary directory
|
||||
|
||||
:param fake_csar_path: a temporary directory in which csar data will be
|
||||
copied.
|
||||
:param csar_dir_name: the relative path of csar directory with respect to
|
||||
'./tacker/tests/etc/samples/etsi/nfv' directory.
|
||||
for ex. 'vnfpkgm1'.
|
||||
:param csar_without_tosca_meta: when set to 'True', it will only copy root
|
||||
level yaml file and image file.
|
||||
:param read_vnfd_only: when set to 'True', it won't copy the image file
|
||||
from source directory.
|
||||
"""
|
||||
sample_vnf_package = os.path.join(
|
||||
"./tacker/tests/etc/samples/etsi/nfv", csar_dir_name)
|
||||
shutil.copytree(sample_vnf_package, fake_csar_path)
|
||||
common_files_path = os.path.join(
|
||||
"./tacker/tests/etc/samples/etsi/nfv/common/")
|
||||
|
||||
if not read_vnfd_only:
|
||||
# Copying image file.
|
||||
shutil.copytree(os.path.join(common_files_path, "Files/"),
|
||||
os.path.join(fake_csar_path, "Files/"))
|
||||
|
||||
if csar_without_tosca_meta:
|
||||
return
|
||||
|
||||
# Copying common vnfd files.
|
||||
tosca_definition_file_path = os.path.join(common_files_path,
|
||||
"Definitions/")
|
||||
for (dpath, _, fnames) in os.walk(tosca_definition_file_path):
|
||||
if not fnames:
|
||||
continue
|
||||
for fname in fnames:
|
||||
src_file = os.path.join(dpath, fname)
|
||||
shutil.copy(src_file, os.path.join(fake_csar_path,
|
||||
"Definitions"))
|
||||
|
||||
|
||||
class AuthHandler(http.server.SimpleHTTPRequestHandler):
|
||||
'''Main class to present webpages and authentication.'''
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user