Exemplo n.º 1
0
    def add_vnf(
            self,  # pylint: disable=too-many-arguments
            vnf: "Vnf",
            line_of_business: "LineOfBusiness",
            platform: "Platform",
            vnf_instance_name: str = None) -> "VnfInstantiation":
        """Add vnf into service instance.

        Instantiate VNF.

        Args:
            vnf (Vnf): Vnf from service configuration to instantiate
            line_of_business (LineOfBusiness): LineOfBusiness to use in instantiation request
            platform (Platform): Platform to use in instantiation request
            vnf_instance_name (str, optional): VNF instantion name.
                If no value is provided it's going to be
                "Python_ONAP_SDK_vnf_instance_{str(uuid4())}".
                Defaults to None.

        Raises:
            AttributeError: Service orchestration status is not "Active"
            ValueError: Instantiation request error.

        Returns:
            VnfInstantiation: VnfInstantiation request object

        """
        if self.orchestration_status != "Active":
            raise AttributeError("Service has invalid orchestration status")
        return VnfInstantiation.instantiate_ala_carte(self, vnf,
                                                      line_of_business,
                                                      platform,
                                                      vnf_instance_name)
Exemplo n.º 2
0
    def add_vnf(
            self,  # pylint: disable=too-many-arguments
            vnf: "Vnf",
            line_of_business: "LineOfBusiness",
            platform: "Platform",
            cloud_region: "CloudRegion" = None,
            tenant: "Tenant" = None,
            vnf_instance_name: str = None) -> "VnfInstantiation":
        """Add vnf into service instance.

        Instantiate VNF.

        Args:
            vnf (Vnf): Vnf from service configuration to instantiate
            line_of_business (LineOfBusiness): LineOfBusiness to use in instantiation request
            platform (Platform): Platform to use in instantiation request
            cloud_region (CloudRegion, optional): Cloud region to use in instantiation request.
                Defaults to None.
                THAT PROPERTY WILL BE REQUIRED IN ONE OF THE FUTURE RELEASE. REFACTOR YOUR CODE
                TO USE IT!.
            tenant (Tenant, optional): Tenant to use in instnatiation request.
                Defaults to None.
                THAT PROPERTY WILL BE REQUIRED IN ONE OF THE FUTURE RELEASE. REFACTOR YOUR CODE
                TO USE IT!.
            vnf_instance_name (str, optional): VNF instantion name.
                If no value is provided it's going to be
                "Python_ONAP_SDK_vnf_instance_{str(uuid4())}".
                Defaults to None.

        Raises:
            AttributeError: Service orchestration status is not "Active"
            ValueError: Instantiation request error.

        Returns:
            VnfInstantiation: VnfInstantiation request object

        """
        if self.orchestration_status != "Active":
            raise AttributeError("Service has invalid orchestration status")
        return VnfInstantiation.instantiate_ala_carte(
            self,
            vnf,
            line_of_business,
            platform,
            cloud_region=cloud_region,
            tenant=tenant,
            vnf_instance_name=vnf_instance_name)
Exemplo n.º 3
0
    def _execute_so_action(
        self,
        operation_type: VnfOperation,
        vnf_parameters: Iterable["InstantiationParameter"] = None
    ) -> VnfInstantiation:
        """Execute SO workflow for selected operation.

        Args:
            operation_type (str): Name of the operation to execute.
            vnf_parameters (Iterable["InstantiationParameter"], Optional): list of instantiation
            parameters for update operation.

        Returns:
            VnfInstantiation: VnfInstantiation object.

        """
        if not self.service_instance.active:
            msg = f'Service orchestration status must be "Active"'
            raise StatusError(msg)

        lob = settings.LOB
        platform = settings.PLATFORM

        for relationship in self.relationships:
            if relationship.related_to == "line-of-business":
                lob = relationship.relationship_data.pop().get(
                    "relationship-value")
            if relationship.related_to == "platform":
                platform = relationship.relationship_data.pop().get(
                    "relationship-value")

        so_input = self._build_so_input(vnf_params=vnf_parameters)

        return VnfInstantiation.so_action(
            vnf_instance=self,
            operation_type=operation_type,
            aai_service_instance=self.service_instance,
            line_of_business=lob,
            platform=platform,
            sdc_service=self.service_instance.sdc_service,
            so_service=so_input)
Exemplo n.º 4
0
def test_vnf_instantiation_get_by_vnf_instance_name(mock_sdc_service,
                                                    mock_send_message_json,
                                                    mock_send):
    mock_sdc_service.return_value.vnfs = []
    mock_send_message_json.return_value = {}
    with pytest.raises(ValueError):
        VnfInstantiation.get_by_vnf_instance_name("test_vnf_instance_name")
    mock_send_message_json.return_value = {
        "requestList": [{
            "request": {
                "requestScope": "not_vnf"
            }
        }]
    }
    with pytest.raises(ValueError):
        VnfInstantiation.get_by_vnf_instance_name("test_vnf_instance_name")
    mock_send_message_json.return_value = {
        "requestList": [{
            "request": {
                "requestScope": "vnf",
                "requestType": "updateInstance"
            }
        }]
    }
    with pytest.raises(ValueError):
        VnfInstantiation.get_by_vnf_instance_name("test_vnf_instance_name")
    mock_send_message_json.return_value = {
        "requestList": [{
            "request": {
                "requestScope": "vnf",
                "requestType": "createInstance"
            }
        }]
    }
    with pytest.raises(ValueError):
        VnfInstantiation.get_by_vnf_instance_name("test_vnf_instance_name")
    mock_send_message_json.return_value = {
        "requestList": [{
            "request": {
                "requestScope": "vnf",
                "requestType": "createInstance",
                "requestDetails": {
                    "relatedInstanceList": [{
                        "relatedInstance": {
                            "modelInfo": {
                                "modelType": "service",
                                "modelName": "test_service"
                            }
                        }
                    }]
                }
            }
        }]
    }
    with pytest.raises(ValueError):
        VnfInstantiation.get_by_vnf_instance_name("test_vnf_instance_name")
    mock_vnf = mock.MagicMock()
    mock_vnf.name = "test_vnf_name"
    mock_sdc_service.return_value.vnfs = [mock_vnf]
    mock_send_message_json.return_value = {
        "requestList": [{
            "request": {
                "requestScope": "vnf",
                "requestType": "createInstance",
                "requestDetails": {
                    "modelInfo": {
                        "modelCustomizationName": "test_fail_vnf_name"
                    },
                    "relatedInstanceList": [{
                        "relatedInstance": {
                            "modelInfo": {
                                "modelType": "service",
                                "modelName": "test_service",
                            }
                        }
                    }]
                }
            }
        }]
    }
    with pytest.raises(ValueError):
        VnfInstantiation.get_by_vnf_instance_name("test_vnf_instance_name")
    mock_sdc_service.return_value.vnfs = [mock_vnf]
    mock_send_message_json.return_value = {
        "requestList": [{
            "request": {
                "requestScope": "vnf",
                "requestType": "createInstance",
                "requestDetails": {
                    "modelInfo": {
                        "modelCustomizationName": "test_vnf_name"
                    },
                    "relatedInstanceList": [{
                        "relatedInstance": {
                            "modelInfo": {
                                "modelType": "service",
                                "modelName": "test_service"
                            }
                        }
                    }]
                }
            }
        }]
    }
    assert VnfInstantiation.get_by_vnf_instance_name(
        "test_vnf_instance_name") is not None
Exemplo n.º 5
0
    def add_vnf(
            self,  # pylint: disable=too-many-arguments
            vnf: "Vnf",
            line_of_business: "LineOfBusiness",
            platform: "Platform",
            cloud_region: "CloudRegion" = None,
            tenant: "Tenant" = None,
            vnf_instance_name: str = None,
            vnf_parameters: Iterable["InstantiationParameter"] = None,
            so_vnf: "SoServiceVnf" = None,
            a_la_carte: bool = True) -> "VnfInstantiation":
        """Add vnf into service instance.

        Instantiate VNF.

        Args:
            vnf (Vnf): Vnf from service configuration to instantiate
            line_of_business (LineOfBusiness): LineOfBusiness to use in instantiation request
            platform (Platform): Platform to use in instantiation request
            cloud_region (CloudRegion, optional): Cloud region to use in instantiation request.
                Defaults to None.
                THAT PROPERTY WILL BE REQUIRED IN ONE OF THE FUTURE RELEASE. REFACTOR YOUR CODE
                TO USE IT!.
            tenant (Tenant, optional): Tenant to use in instnatiation request.
                Defaults to None.
                THAT PROPERTY WILL BE REQUIRED IN ONE OF THE FUTURE RELEASE. REFACTOR YOUR CODE
                TO USE IT!.
            vnf_instance_name (str, optional): VNF instantion name.
                If no value is provided it's going to be
                "Python_ONAP_SDK_vnf_instance_{str(uuid4())}".
                Defaults to None.
            vnf_parameters (Iterable[InstantiationParameter], optional): InstantiationParameter to
                be passed as "userParams". Defaults to None.
            so_vnf: (SoServiceVnf, optional): object with vnf instance parameters. Defaults to None.
            a_la_carte (bool): instantiation type for vnf. Defaults to True.

        Raises:
            StatusError: Service orchestration status is not "Active".

        Returns:
            VnfInstantiation: VnfInstantiation request object

        """
        if not self.active:
            msg = f'Service orchestration status must be "Active"'
            raise StatusError(msg)

        if a_la_carte:
            return VnfInstantiation.instantiate_ala_carte(
                self,
                vnf,
                line_of_business,
                platform,
                cloud_region=cloud_region,
                tenant=tenant,
                vnf_instance_name=vnf_instance_name,
                vnf_parameters=vnf_parameters,
                sdc_service=self.sdc_service)

        return VnfInstantiation.instantiate_macro(
            self,
            vnf,
            line_of_business,
            platform,
            cloud_region=cloud_region,
            tenant=tenant,
            vnf_instance_name=vnf_instance_name,
            vnf_parameters=vnf_parameters,
            so_vnf=so_vnf,
            sdc_service=self.sdc_service)