diff options
Diffstat (limited to 'onap_data_provider/resources')
-rw-r--r-- | onap_data_provider/resources/cps_resource.py | 48 | ||||
-rw-r--r-- | onap_data_provider/resources/resource_creator.py | 12 |
2 files changed, 53 insertions, 7 deletions
diff --git a/onap_data_provider/resources/cps_resource.py b/onap_data_provider/resources/cps_resource.py index c8e666f..cf1357a 100644 --- a/onap_data_provider/resources/cps_resource.py +++ b/onap_data_provider/resources/cps_resource.py @@ -14,17 +14,17 @@ See the License for the specific language governing permissions and limitations under the License. """ - import logging from abc import ABC -from typing import Any, Dict +from typing import Any, Dict, Optional from onapsdk.cps import Anchor, Dataspace, SchemaSet # type: ignore from onapsdk.exceptions import APIError, ResourceNotFound # type: ignore - +from yaml import Node from onap_data_provider.resources.resource import Resource + class DataspaceSubresource(Resource, ABC): """Abstract dataspace subresource class.""" @@ -186,3 +186,45 @@ class DataspaceResource(Resource): anchor_data["anchor-name"]) else: logging.warning("Anchor %s already exists", anchor_data["anchor-name"]) + +class AnchorNodeResource(DataspaceSubresource): + """Anchor node resource class + + Creates CPS anchor node + """ + + def __init__(self, data: Dict[str, Any]) -> None: + """Initialize anchor resource""" + super().__init__(data) + + self._anchor: Anchor = None + def create(self) -> None: + """Create anchor node. + + Raises: + ValueError: Anchor doesn't exist + + """ + if not self.anchor: + raise ValueError("Anchor %s does not exist, create it first", self.data["anchor-name"]) + self.anchor.create_node(self.data.get("node-data")) + + @property + def anchor(self) -> Anchor: + """Anchor property. + + Tries to get anchor from dataspace. + + Returns: + Anchor: Anchor object, if anchor already exists. None otherwise. + + """ + if not self._anchor: + try: + self._anchor = self.dataspace.get_anchor(self.data["anchor-name"]) + except APIError as api_error: + if "Anchor not found" in str(api_error): + return None + else: + raise + return self._anchor diff --git a/onap_data_provider/resources/resource_creator.py b/onap_data_provider/resources/resource_creator.py index 35959f1..a8ccfbb 100644 --- a/onap_data_provider/resources/resource_creator.py +++ b/onap_data_provider/resources/resource_creator.py @@ -28,7 +28,7 @@ from .cloud_region_resource import CloudRegionResource from .complex_resource import ComplexResource from .customer_resource import CustomerResource from .data_dictionary_resource import DataDictionarySetResource -from .cps_resource import AnchorResource, DataspaceResource, SchemaSetResource +from .cps_resource import AnchorNodeResource, AnchorResource, DataspaceResource, SchemaSetResource from .line_of_business_resource import LineOfBusinessResource from .msb_k8s_definition import MsbK8SDefinitionResource from .owning_entity_resource import OwningEntityResource @@ -163,15 +163,19 @@ class ResourceCreator(ABC): }, "cps-dataspace": { VersionsEnum.V1_1: DataspaceResource, - VersionsEnum.V2_0: DataspaceResource + VersionsEnum.V2_0: DataspaceResource, }, "cps-schema-set": { VersionsEnum.V1_1: SchemaSetResource, - VersionsEnum.V2_0: SchemaSetResource + VersionsEnum.V2_0: SchemaSetResource, }, "cps-anchor": { VersionsEnum.V1_1: AnchorResource, - VersionsEnum.V2_0: AnchorResource + VersionsEnum.V2_0: AnchorResource, + }, + "cps-anchor-node": { + VersionsEnum.V1_1: AnchorNodeResource, + VersionsEnum.V2_0: AnchorNodeResource } } |