Loading src/main/java/org/etsi/osl/cridge/CRRouteBuilder.java +16 −6 Original line number Diff line number Diff line package org.etsi.osl.cridge; import java.util.Date; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.slf4j.Logger; Loading Loading @@ -57,8 +59,8 @@ public class CRRouteBuilder extends RouteBuilder{ .bean( kubernetesClientResource, "patchCR(${headers}, ${body})") .convertBodyTo( String.class ); from( "timer://processUpdateResources?period=60000" ) // every 3600000 ms (60 minutes) from( "timer://processUpdateResources?period=3600000" ) .log(LoggingLevel.INFO, log, " process nameSpacesTobeDeleted!") .to("log:DEBUG?showBody=true&showHeaders=true") .bean( CRRouteBuilder.class , "processNameSpacesTobeDeleted()"); Loading @@ -67,7 +69,15 @@ public class CRRouteBuilder extends RouteBuilder{ public void processNameSpacesTobeDeleted() { kubernetesClientResource.getNameSpacesTobeDeleted().forEach( (nameSpaceName, nameSpaceId) -> { kubernetesClientResource.getNameSpacesTobeDeleted().forEach( (nameSpaceName, datetime) -> { Date currentTime = new Date(); //get current time long diffInMillies = Math.abs(currentTime .getTime() - datetime.getTime()); long diff = TimeUnit.HOURS.convert(diffInMillies, TimeUnit.MILLISECONDS); if (diff<=2) { //after 2 hours this namespace will be deleted return; } try (final KubernetesClient k8s = new KubernetesClientBuilder().build()) { logger.info("Trying to delete namespace {}", nameSpaceName); Loading src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java +15 −7 Original line number Diff line number Diff line package org.etsi.osl.cridge; import java.sql.Date; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; Loading Loading @@ -71,8 +71,9 @@ public class KubernetesClientResource { /** * Garbage collect namespaces to be deleted * Key is the name of the namespace and value the datetime requested. We need this to properly expire this */ private ConcurrentHashMap<String, String> nameSpacesTobeDeleted = new ConcurrentHashMap<>(); private ConcurrentHashMap<String, Date> nameSpacesTobeDeleted = new ConcurrentHashMap<>(); private Map<String, Object> watchersForNamespaces = new HashMap<>(); Loading Loading @@ -295,7 +296,7 @@ public class KubernetesClientResource { kcrv.setYaml( Serialization.asYaml( gkr ) ); kcrv.setJson( Serialization.asJson( gkr ) ); kcrv.setCr_spec( Serialization.asJson( gkr ) ); kcrv.setCr_spec_applied( Serialization.asJson( gkr ) ); return kcrv; Loading Loading @@ -427,11 +428,15 @@ public class KubernetesClientResource { } logger.debug("Deploy the following CR:" ); logger.debug("{}", crspec ); // crspec = """ // %s // """.formatted( crspec ); // // logger.debug("Deploy the following CR NORMALIZED:" ); // logger.debug("{}", crspec ); try (final KubernetesClient k8s = new KubernetesClientBuilder().build()) { Loading Loading @@ -487,6 +492,8 @@ public class KubernetesClientResource { } logger.debug("{}", gkr.toString() ); Resource<GenericKubernetesResource> dummyObject = k8s.resource( gkr ); dummyObject.create(); }catch (Exception e) { Loading Loading @@ -610,7 +617,8 @@ public class KubernetesClientResource { logger.debug("============ DELETE crspec: result {} =============", result.toString() ); String nameSpacename = (String) headers.get("org.etsi.osl.namespace"); this.nameSpacesTobeDeleted.put(nameSpacename, nameSpacename); this.nameSpacesTobeDeleted.put(nameSpacename, new Date() ); this.watchersForNamespaces.remove(nameSpacename); }catch (Exception e) { Loading src/main/java/org/etsi/osl/cridge/WatcherService.java +13 −0 Original line number Diff line number Diff line Loading @@ -232,15 +232,27 @@ public class WatcherService { public void eventReceived(Action action, GenericKubernetesResource genericKubernetesResource) { watcherResourcesName = genericKubernetesResource.getKind(); /** * Ignore the following kinds! */ if ( genericKubernetesResource.getKind() .startsWith("IPAM") ) { return; } logger.debug("{} Resource Kind:{} Name:{} UID:{} Namespace:{}", action.name(), genericKubernetesResource.getKind(), genericKubernetesResource.getMetadata().getName(), genericKubernetesResource.getMetadata().getUid(), genericKubernetesResource.getMetadata().getNamespace()); genericKubernetesResource.getAdditionalProperties().forEach((pk, pv) -> { logger.debug("\t {} {} ", pk, pv); Map<String, Object> values = (Map<String, Object>) pv; values.forEach((speck, specv) -> logger.debug("\t {}={} ", speck, specv)); }); //ADDED, DELETED, MODIFIED, BOOKMARK, ERROR if ( action.name().equals( "ADDED" ) ) { updateGenericKubernetesResourceInOSLCatalog( genericKubernetesResource ); Loading @@ -248,6 +260,7 @@ public class WatcherService { } else if ( action.name().equals( "MODIFIED" ) ) { updateGenericKubernetesResourceInOSLCatalog( genericKubernetesResource ); } else if ( action.name().equals( "DELETED" ) ) { genericKubernetesResource.getMetadata().getLabels().put("org.etsi.osl.deleted", "DELETED"); updateGenericKubernetesResourceInOSLCatalog( genericKubernetesResource ); } else { Loading Loading
src/main/java/org/etsi/osl/cridge/CRRouteBuilder.java +16 −6 Original line number Diff line number Diff line package org.etsi.osl.cridge; import java.util.Date; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.slf4j.Logger; Loading Loading @@ -57,8 +59,8 @@ public class CRRouteBuilder extends RouteBuilder{ .bean( kubernetesClientResource, "patchCR(${headers}, ${body})") .convertBodyTo( String.class ); from( "timer://processUpdateResources?period=60000" ) // every 3600000 ms (60 minutes) from( "timer://processUpdateResources?period=3600000" ) .log(LoggingLevel.INFO, log, " process nameSpacesTobeDeleted!") .to("log:DEBUG?showBody=true&showHeaders=true") .bean( CRRouteBuilder.class , "processNameSpacesTobeDeleted()"); Loading @@ -67,7 +69,15 @@ public class CRRouteBuilder extends RouteBuilder{ public void processNameSpacesTobeDeleted() { kubernetesClientResource.getNameSpacesTobeDeleted().forEach( (nameSpaceName, nameSpaceId) -> { kubernetesClientResource.getNameSpacesTobeDeleted().forEach( (nameSpaceName, datetime) -> { Date currentTime = new Date(); //get current time long diffInMillies = Math.abs(currentTime .getTime() - datetime.getTime()); long diff = TimeUnit.HOURS.convert(diffInMillies, TimeUnit.MILLISECONDS); if (diff<=2) { //after 2 hours this namespace will be deleted return; } try (final KubernetesClient k8s = new KubernetesClientBuilder().build()) { logger.info("Trying to delete namespace {}", nameSpaceName); Loading
src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java +15 −7 Original line number Diff line number Diff line package org.etsi.osl.cridge; import java.sql.Date; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; Loading Loading @@ -71,8 +71,9 @@ public class KubernetesClientResource { /** * Garbage collect namespaces to be deleted * Key is the name of the namespace and value the datetime requested. We need this to properly expire this */ private ConcurrentHashMap<String, String> nameSpacesTobeDeleted = new ConcurrentHashMap<>(); private ConcurrentHashMap<String, Date> nameSpacesTobeDeleted = new ConcurrentHashMap<>(); private Map<String, Object> watchersForNamespaces = new HashMap<>(); Loading Loading @@ -295,7 +296,7 @@ public class KubernetesClientResource { kcrv.setYaml( Serialization.asYaml( gkr ) ); kcrv.setJson( Serialization.asJson( gkr ) ); kcrv.setCr_spec( Serialization.asJson( gkr ) ); kcrv.setCr_spec_applied( Serialization.asJson( gkr ) ); return kcrv; Loading Loading @@ -427,11 +428,15 @@ public class KubernetesClientResource { } logger.debug("Deploy the following CR:" ); logger.debug("{}", crspec ); // crspec = """ // %s // """.formatted( crspec ); // // logger.debug("Deploy the following CR NORMALIZED:" ); // logger.debug("{}", crspec ); try (final KubernetesClient k8s = new KubernetesClientBuilder().build()) { Loading Loading @@ -487,6 +492,8 @@ public class KubernetesClientResource { } logger.debug("{}", gkr.toString() ); Resource<GenericKubernetesResource> dummyObject = k8s.resource( gkr ); dummyObject.create(); }catch (Exception e) { Loading Loading @@ -610,7 +617,8 @@ public class KubernetesClientResource { logger.debug("============ DELETE crspec: result {} =============", result.toString() ); String nameSpacename = (String) headers.get("org.etsi.osl.namespace"); this.nameSpacesTobeDeleted.put(nameSpacename, nameSpacename); this.nameSpacesTobeDeleted.put(nameSpacename, new Date() ); this.watchersForNamespaces.remove(nameSpacename); }catch (Exception e) { Loading
src/main/java/org/etsi/osl/cridge/WatcherService.java +13 −0 Original line number Diff line number Diff line Loading @@ -232,15 +232,27 @@ public class WatcherService { public void eventReceived(Action action, GenericKubernetesResource genericKubernetesResource) { watcherResourcesName = genericKubernetesResource.getKind(); /** * Ignore the following kinds! */ if ( genericKubernetesResource.getKind() .startsWith("IPAM") ) { return; } logger.debug("{} Resource Kind:{} Name:{} UID:{} Namespace:{}", action.name(), genericKubernetesResource.getKind(), genericKubernetesResource.getMetadata().getName(), genericKubernetesResource.getMetadata().getUid(), genericKubernetesResource.getMetadata().getNamespace()); genericKubernetesResource.getAdditionalProperties().forEach((pk, pv) -> { logger.debug("\t {} {} ", pk, pv); Map<String, Object> values = (Map<String, Object>) pv; values.forEach((speck, specv) -> logger.debug("\t {}={} ", speck, specv)); }); //ADDED, DELETED, MODIFIED, BOOKMARK, ERROR if ( action.name().equals( "ADDED" ) ) { updateGenericKubernetesResourceInOSLCatalog( genericKubernetesResource ); Loading @@ -248,6 +260,7 @@ public class WatcherService { } else if ( action.name().equals( "MODIFIED" ) ) { updateGenericKubernetesResourceInOSLCatalog( genericKubernetesResource ); } else if ( action.name().equals( "DELETED" ) ) { genericKubernetesResource.getMetadata().getLabels().put("org.etsi.osl.deleted", "DELETED"); updateGenericKubernetesResourceInOSLCatalog( genericKubernetesResource ); } else { Loading