diff --git a/src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java b/src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java index dd77567f95e1fc872ef8e28b9cb364cb4bd586a9..d01fdd28e6101c4c48c8f4ec987a790721cbc628 100644 --- a/src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java +++ b/src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java @@ -444,13 +444,20 @@ public class KubernetesClientResource { } } })); + + //we must change and assign a name to the resource if ( headers.get("org.etsi.osl.prefixId") !=null ) { gkr.getMetadata().setName( (String) headers.get("org.etsi.osl.prefixName") ) ; }else { - gkr.getMetadata().setName( "cr" + ((String) headers.get("org.etsi.osl.resourceId")).substring(0, 8) ) ; + //it must start with an alpha character + gkr.getMetadata().setName( "cr" + ((String) headers.get("org.etsi.osl.resourceId")).substring(0, 8) ) ; } + if ( gkr.getMetadata().getNamespace() == null || gkr.getMetadata().getNamespace().equals("") ) { + gkr.getMetadata().setNamespace( (String) headers.get("org.etsi.osl.serviceOrderId") ); //set default namespace the service Order ID if a namespace is not there + } + String nameSpacename = (String) headers.get("org.etsi.osl.namespace"); try { @@ -615,22 +622,70 @@ public class KubernetesClientResource { }catch (Exception e) { e.printStackTrace(); } - - - return "DONE"; } public String patchCR(Map<String, Object> headers, String crspec) { + logger.debug("============ patchCR crspec ============="); - logger.debug("============ PATCH crspec =============" ); - logger.debug("{}", crspec ); - logger.error("NOT IMPLEMENTED" ); + logger.debug("Check if this CRIDGE instance is related to this kubernets cluster context"); + if (!checkCRIDGEClusterContext(headers)) { + return "SEE OTHER"; + } - return "DONE"; + + logger.debug("Patch the following CR:"); + logger.debug("{}", crspec); + try (final KubernetesClient k8s = new KubernetesClientBuilder().build()) { + + GenericKubernetesResource gkr = Serialization.unmarshal( crspec ); + headers.forEach(((hname, hval) ->{ + if (hval instanceof String s) { + if ( hname.contains("org.etsi.osl")) { + logger.debug("Header: {} = {} ", hname, s ); + if ( gkr.getMetadata() == null ) { + gkr.setMetadata( new ObjectMeta()); + gkr.getMetadata().setLabels( new HashMap<String, String>()); + } + gkr.getMetadata().getLabels().put(hname, s); + } + } + })); + gkr.getMetadata().setNamespace( (String) headers.get("org.etsi.osl.namespace") ); //set default namespace the service Order ID if a namespace is not there + gkr.getMetadata().setName( (String) headers.get("org.etsi.osl.prefixName") ) ; + + + logger.debug("{}", gkr.toString() ); + + Resource<GenericKubernetesResource> dummyObject = k8s.resource( gkr ); + dummyObject.patch(); + }catch (Exception e) { + e.printStackTrace(); + return "FAIL " + e.getMessage(); + } + return "OK"; + + + } + + private Boolean checkCRIDGEClusterContext( Map<String, Object> headers) { + if ( (headers.get("currentContextCluster") ==null) || + (headers.get("clusterMasterURL") ==null) || + ( ! headers.get("currentContextCluster").equals( kubernetesContextDefinition.getCurrentContextCluster() )) || + ( ! headers.get("clusterMasterURL").equals( kubernetesContextDefinition.getMasterURL() ))) { + + logger.debug("Will return SEE OTHER header.currentContextCluster={}, this.context= {} header.clusterMasterURLclusterMasterURL={}, this.context= {}", + headers.get("currentContextCluster"), + kubernetesContextDefinition.getCurrentContextCluster(), + headers.get("clusterMasterURL"), + kubernetesContextDefinition.getMasterURL() ); + return false; + } + + return true; } }