Commit 46523fb0 authored by Christos Tranoris's avatar Christos Tranoris
Browse files

fix for #12

parent b69e909d
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
		<attributes>
			<attribute name="maven.pomderived" value="true"/>
			<attribute name="optional" value="true"/>
		</attributes>
	</classpathentry>
	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
@@ -22,6 +23,7 @@
		<attributes>
			<attribute name="maven.pomderived" value="true"/>
			<attribute name="test" value="true"/>
			<attribute name="optional" value="true"/>
		</attributes>
	</classpathentry>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
+2 −2
Original line number Diff line number Diff line
eclipse.preferences.version=1
encoding//src/main/java=utf-8
encoding//src/main/resources=utf-8
encoding//src/main/resources=UTF-8
encoding//src/test/java=utf-8
encoding//src/test/resources=utf-8
encoding//src/test/resources=UTF-8
encoding/<project>=UTF-8
+2 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationCreate;
import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationRef;
import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationUpdate;
import org.etsi.osl.tmf.ri639.model.ResourceCreate;
import org.etsi.osl.tmf.ri639.model.ResourceAdministrativeStateType;
import org.etsi.osl.tmf.ri639.model.ResourceOperationalStateType;
import org.etsi.osl.tmf.ri639.model.ResourceStatusType;
import org.etsi.osl.tmf.ri639.model.ResourceUpdate;
@@ -185,6 +186,7 @@ public class KubernetesCRDV1 extends DomainModelDefinition
		.description( this.description )
		.resourceStatus( ResourceStatusType.AVAILABLE )
		.operationalState( ResourceOperationalStateType.ENABLE )
		.administrativeState( ResourceAdministrativeStateType.UNLOCKED )
		.resourceSpecification( rSpecRef )
		.resourceVersion( this.version);
		
+53 −1
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationCreate;
import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationRef;
import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationUpdate;
import org.etsi.osl.tmf.ri639.model.ResourceCreate;
import org.etsi.osl.tmf.ri639.model.ResourceAdministrativeStateType;
import org.etsi.osl.tmf.ri639.model.ResourceOperationalStateType;
import org.etsi.osl.tmf.ri639.model.ResourceStatusType;
import org.etsi.osl.tmf.ri639.model.ResourceUpdate;
@@ -28,6 +29,9 @@ public class KubernetesCRV1 extends DomainModelDefinition
		implements ITMFRCM634_ModelTransformer, ITMFRI639_ModelTransformer {

	public static final String OSL_KUBCRV1_RSPEC_NAME = "kubernetes-cr-v1.openslice.io";

	/** Label stamped by the cridge watcher when the CR is deleted from the cluster. */
	public static final String OSL_LABEL_DELETED = "org.etsi.osl.deleted";
	public static final String OSL_KUBCRV1_RSPEC_VERSION = "0.0.4";
	public static final String OSL_KUBCRV1_RSPEC_CATEGORY = "KubernetesCRV1-apiextensions.k8s.io/v1";
	public static final String OSL_KUBCRV1_RSPEC_TYPE = "LogicalResourceSpecification";
@@ -166,7 +170,6 @@ public class KubernetesCRV1 extends DomainModelDefinition
		
		.resourceStatus( ResourceStatusType.RESERVED )
		
		.operationalState( ResourceOperationalStateType.ENABLE )
		.resourceSpecification( rSpecRef )
		.resourceVersion( this.version);
		
@@ -193,6 +196,7 @@ public class KubernetesCRV1 extends DomainModelDefinition
        rs.addResourceCharacteristicItemShort("_CR_CHECKVAL_SUSPENDED", this.statusCheckValueSuspended, EValueType.TEXT.getValue());

        rs.resourceStatus( this.statusValue );        
        applyHealth( rs );
        
		if (this.properties != null)
			this.properties.forEach((kPropName, vProVal) -> {
@@ -211,6 +215,54 @@ public class KubernetesCRV1 extends DomainModelDefinition
		return rs;
	}

	/**
	 * Declares the CR's health with the ITU-T X.731 state attributes, derived from the same status
	 * label the operator already configures through {@code org.etsi.osl.statusCheckValue*}.
	 *
	 * <p>These attributes — not {@code resourceStatus}, which is inventory/pool bookkeeping — are what
	 * {@code Service.findNextStateBasedOnResourceList} folds into the supported service's state. A CR
	 * whose status has not been recognised yet is left with both attributes unset: that reads as
	 * "pending", which neither promotes nor demotes the service.
	 */
	private void applyHealth(ResourceCreate rs) {

		// A CR the watcher saw disappear is gone, whatever its last observed status said.
		if (this.properties != null && this.properties.get(OSL_LABEL_DELETED) != null) {
			rs.operationalState(ResourceOperationalStateType.DISABLE)
					.administrativeState(ResourceAdministrativeStateType.SHUTDOWN);
			return;
		}

		if (this.statusValue == null) {
			return;
		}

		switch (this.statusValue) {
		case AVAILABLE:
			rs.operationalState(ResourceOperationalStateType.ENABLE)
					.administrativeState(ResourceAdministrativeStateType.UNLOCKED);
			break;
		case RESERVED:
		case STANDBY:
			// Not yet released for use by the service that ordered it.
			rs.operationalState(ResourceOperationalStateType.DISABLE)
					.administrativeState(ResourceAdministrativeStateType.LOCKED);
			break;
		case ALARM:
			// In service, but not working.
			rs.operationalState(ResourceOperationalStateType.DISABLE)
					.administrativeState(ResourceAdministrativeStateType.UNLOCKED);
			break;
		case SUSPENDED:
			rs.operationalState(ResourceOperationalStateType.DISABLE)
					.administrativeState(ResourceAdministrativeStateType.SHUTDOWN);
			break;
		default:
			// UNKNOWN, or a status this mapping does not recognise: say nothing about health.
			break;
		}
	}
	
	@Override
	public ResourceUpdate toResourceUpdate() {
	
+2 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationCreate;
import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationRef;
import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationUpdate;
import org.etsi.osl.tmf.ri639.model.ResourceCreate;
import org.etsi.osl.tmf.ri639.model.ResourceAdministrativeStateType;
import org.etsi.osl.tmf.ri639.model.ResourceOperationalStateType;
import org.etsi.osl.tmf.ri639.model.ResourceStatusType;
import org.etsi.osl.tmf.ri639.model.ResourceUpdate;
@@ -166,6 +167,7 @@ public class KubernetesConfigMap extends DomainModelDefinition
		.description( this.description )
		.resourceStatus( ResourceStatusType.AVAILABLE )
		.operationalState( ResourceOperationalStateType.ENABLE )
		.administrativeState( ResourceAdministrativeStateType.UNLOCKED )
		.resourceSpecification( rSpecRef )
		.resourceVersion( this.version);
		
Loading