Commit dc6a7268 authored by Christos Tranoris's avatar Christos Tranoris
Browse files

Implementing CR patch

parent c44d9219
Loading
Loading
Loading
Loading
+63 −8
Original line number Diff line number Diff line
@@ -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 {
        //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 {
@@ -616,21 +623,69 @@ public class KubernetesClientResource {
      e.printStackTrace();
    }
      

    
      
    return "DONE";

  }
  
  public String patchCR(Map<String, Object> headers, String crspec) {
    logger.debug("============ patchCR crspec =============");

    logger.debug("Check if this CRIDGE instance is related to this kubernets cluster context");
    if (!checkCRIDGEClusterContext(headers)) {
      return "SEE OTHER";
    }


    logger.debug("============ PATCH crspec =============" );

    logger.debug("Patch the following CR:");
    logger.debug("{}", crspec);
    logger.error("NOT IMPLEMENTED" );
    try (final KubernetesClient k8s = new KubernetesClientBuilder().build()) {

    return "DONE";
      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;
  }

}