Here is an example Kubernetes controller implemented using this framework:
/* -*- mode: Java; c-basic-offset: 2; indent-tabs-mode: nil; coding: utf-8-unix -*- * * Copyright © 2018 microBean. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. */ package org.microbean.kubernetes.controller.cdi.examples; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Observes; import javax.enterprise.inject.Produces; import javax.inject.Qualifier; import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ConfigMapList; import io.fabric8.kubernetes.api.model.DoneableConfigMap; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.Resource; import io.fabric8.kubernetes.client.internal.PatchUtils; import io.fabric8.zjsonpatch.JsonDiff; import org.microbean.kubernetes.controller.cdi.annotation.Added; import org.microbean.kubernetes.controller.cdi.annotation.Deleted; // for javadoc only import org.microbean.kubernetes.controller.cdi.annotation.KubernetesEventSelector; import org.microbean.kubernetes.controller.cdi.annotation.Modified; import org.microbean.kubernetes.controller.cdi.annotation.Prior; @ApplicationScoped final class AllDefaultConfigMapsController { private static final Logger logger = Logger.getLogger(AllDefaultConfigMapsController.class.getName()); private AllDefaultConfigMapsController() { super(); } @Produces @ApplicationScoped @AllDefaultConfigMaps private static final NonNamespaceOperation<ConfigMap, ConfigMapList, DoneableConfigMap, Resource<ConfigMap, DoneableConfigMap>> produceAllDefaultConfigMaps(final KubernetesClient client) { return client.configMaps().inNamespace("default"); } private final void onConfigMapAddition(@Observes @AllDefaultConfigMaps @Added final ConfigMap newConfigMap) { Objects.requireNonNull(newConfigMap); // TODO: whatever you like } private final void onConfigMapModification(@Observes @AllDefaultConfigMaps @Modified final ConfigMap modifiedConfigMap, @Prior final Optional<ConfigMap> priorConfigMap) { Objects.requireNonNull(modifiedConfigMap); Objects.requireNonNull(priorConfigMap); // TODO: whatever you like } @Produces @ApplicationScoped @AllDefaultConfigMaps private static final Map<Object, ConfigMap> produceKubernetesResourceCache() { return new HashMap<>(); } @Documented @KubernetesEventSelector @Qualifier @Retention(value = RetentionPolicy.RUNTIME) @Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE }) public @interface AllDefaultConfigMaps { } }