You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2017/05/29 07:34:50 UTC
[08/10] camel git commit: CAMEL-11243 Split camel-kubernates
component into 13 (build-configs, builds, configmaps, namespaces, nodes,
persistent-volumes, persistent-volumes-claims, pods, replication-controllers,
resources-quota, secrets, service-accounts
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
new file mode 100644
index 0000000..6f5bb38
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
@@ -0,0 +1,104 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes;
+
+public interface KubernetesOperations {
+
+ // Namespaces
+ String LIST_NAMESPACE_OPERATION = "listNamespaces";
+ String LIST_NAMESPACE_BY_LABELS_OPERATION = "listNamespacesByLabels";
+ String GET_NAMESPACE_OPERATION = "getNamespace";
+ String CREATE_NAMESPACE_OPERATION = "createNamespace";
+ String DELETE_NAMESPACE_OPERATION = "deleteNamespace";
+
+ // Services
+ String LIST_SERVICES_OPERATION = "listServices";
+ String LIST_SERVICES_BY_LABELS_OPERATION = "listServicesByLabels";
+ String GET_SERVICE_OPERATION = "getService";
+ String CREATE_SERVICE_OPERATION = "createService";
+ String DELETE_SERVICE_OPERATION = "deleteService";
+
+ // Replication Controllers
+ String LIST_REPLICATION_CONTROLLERS_OPERATION = "listReplicationControllers";
+ String LIST_REPLICATION_CONTROLLERS_BY_LABELS_OPERATION = "listReplicationControllersByLabels";
+ String GET_REPLICATION_CONTROLLER_OPERATION = "getReplicationController";
+ String CREATE_REPLICATION_CONTROLLER_OPERATION = "createReplicationController";
+ String DELETE_REPLICATION_CONTROLLER_OPERATION = "deleteReplicationController";
+ String SCALE_REPLICATION_CONTROLLER_OPERATION = "scaleReplicationController";
+
+ // Pods
+ String LIST_PODS_OPERATION = "listPods";
+ String LIST_PODS_BY_LABELS_OPERATION = "listPodsByLabels";
+ String GET_POD_OPERATION = "getPod";
+ String CREATE_POD_OPERATION = "createPod";
+ String DELETE_POD_OPERATION = "deletePod";
+
+ // Persistent Volumes
+ String LIST_PERSISTENT_VOLUMES = "listPersistentVolumes";
+ String LIST_PERSISTENT_VOLUMES_BY_LABELS_OPERATION = "listPersistentVolumesByLabels";
+ String GET_PERSISTENT_VOLUME_OPERATION = "getPersistentVolume";
+
+ // Persistent Volumes Claims
+ String LIST_PERSISTENT_VOLUMES_CLAIMS = "listPersistentVolumesClaims";
+ String LIST_PERSISTENT_VOLUMES_CLAIMS_BY_LABELS_OPERATION = "listPersistentVolumesClaimsByLabels";
+ String GET_PERSISTENT_VOLUME_CLAIM_OPERATION = "getPersistentVolumeClaim";
+ String CREATE_PERSISTENT_VOLUME_CLAIM_OPERATION = "createPersistentVolumeClaim";
+ String DELETE_PERSISTENT_VOLUME_CLAIM_OPERATION = "deletePersistentVolumeClaim";
+
+ // Secrets
+ String LIST_SECRETS = "listSecrets";
+ String LIST_SECRETS_BY_LABELS_OPERATION = "listSecretsByLabels";
+ String GET_SECRET_OPERATION = "getSecret";
+ String CREATE_SECRET_OPERATION = "createSecret";
+ String DELETE_SECRET_OPERATION = "deleteSecret";
+
+ // Resources quota
+ String LIST_RESOURCES_QUOTA = "listResourcesQuota";
+ String LIST_RESOURCES_QUOTA_BY_LABELS_OPERATION = "listResourcesQuotaByLabels";
+ String GET_RESOURCE_QUOTA_OPERATION = "getResourceQuota";
+ String CREATE_RESOURCE_QUOTA_OPERATION = "createResourceQuota";
+ String DELETE_RESOURCE_QUOTA_OPERATION = "deleteResourceQuota";
+
+ // Service Accounts
+ String LIST_SERVICE_ACCOUNTS = "listServiceAccounts";
+ String LIST_SERVICE_ACCOUNTS_BY_LABELS_OPERATION = "listServiceAccountsByLabels";
+ String GET_SERVICE_ACCOUNT_OPERATION = "getServiceAccount";
+ String CREATE_SERVICE_ACCOUNT_OPERATION = "createServiceAccount";
+ String DELETE_SERVICE_ACCOUNT_OPERATION = "deleteServiceAccount";
+
+ // Nodes
+ String LIST_NODES = "listNodes";
+ String LIST_NODES_BY_LABELS_OPERATION = "listNodesByLabels";
+ String GET_NODE_OPERATION = "getNode";
+
+ // Config Maps
+ String LIST_CONFIGMAPS = "listConfigMaps";
+ String LIST_CONFIGMAPS_BY_LABELS_OPERATION = "listConfigMapsByLabels";
+ String GET_CONFIGMAP_OPERATION = "getConfigMap";
+ String CREATE_CONFIGMAP_OPERATION = "createConfigMap";
+ String DELETE_CONFIGMAP_OPERATION = "deleteConfigMap";
+
+ // Builds
+ String LIST_BUILD = "listBuilds";
+ String LIST_BUILD_BY_LABELS_OPERATION = "listBuildsByLabels";
+ String GET_BUILD_OPERATION = "getBuild";
+
+ // Build Configs
+ String LIST_BUILD_CONFIGS = "listBuildConfigs";
+ String LIST_BUILD_CONFIGS_BY_LABELS_OPERATION = "listBuildConfigsByLabels";
+ String GET_BUILD_CONFIG_OPERATION = "getBuildConfig";
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsComponent.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsComponent.java
new file mode 100644
index 0000000..db20439
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsComponent.java
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.build_configs;
+
+import org.apache.camel.component.kubernetes.AbstractKubernetesComponent;
+import org.apache.camel.component.kubernetes.KubernetesConfiguration;
+
+public class KubernetesBuildConfigsComponent extends AbstractKubernetesComponent {
+
+ protected KubernetesBuildConfigsEndpoint doCreateEndpoint(String uri, String remaining, KubernetesConfiguration config) throws Exception {
+ KubernetesBuildConfigsEndpoint endpoint = new KubernetesBuildConfigsEndpoint(uri, this, config);
+ return endpoint;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsEndpoint.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsEndpoint.java
new file mode 100644
index 0000000..155d5d7
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsEndpoint.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.build_configs;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConfiguration;
+import org.apache.camel.spi.UriEndpoint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Kubernetes Build Config component provides a producer to execute kubernetes build config operations.
+ */
+@UriEndpoint(firstVersion = "2.17.0", scheme = "kubernetes-build-configs", title = "Kubernetes Build Config",
+ syntax = "kubernetes-build-configs:masterUrl", producerOnly = true, label = "container,cloud,paas")
+public class KubernetesBuildConfigsEndpoint extends AbstractKubernetesEndpoint {
+
+ private static final Logger LOG = LoggerFactory.getLogger(KubernetesBuildConfigsEndpoint.class);
+
+ public KubernetesBuildConfigsEndpoint(String uri, KubernetesBuildConfigsComponent component, KubernetesConfiguration config) {
+ super(uri, component, config);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new KubernetesBuildConfigsProducer(this);
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ throw new IllegalArgumentException("The kubernetes-build-configs doesn't support consumer");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsProducer.java
new file mode 100644
index 0000000..0679224
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/build_configs/KubernetesBuildConfigsProducer.java
@@ -0,0 +1,134 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.build_configs;
+
+import java.util.Map;
+
+import io.fabric8.kubernetes.client.dsl.MixedOperation;
+import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
+import io.fabric8.openshift.api.model.Build;
+import io.fabric8.openshift.api.model.BuildConfig;
+import io.fabric8.openshift.api.model.BuildConfigList;
+import io.fabric8.openshift.api.model.DoneableBuildConfig;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.fabric8.openshift.client.dsl.BuildConfigResource;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConstants;
+import org.apache.camel.component.kubernetes.KubernetesOperations;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.MessageHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class KubernetesBuildConfigsProducer extends DefaultProducer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(KubernetesBuildConfigsProducer.class);
+
+ public KubernetesBuildConfigsProducer(AbstractKubernetesEndpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ public AbstractKubernetesEndpoint getEndpoint() {
+ return (AbstractKubernetesEndpoint) super.getEndpoint();
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ String operation;
+
+ if (ObjectHelper.isEmpty(getEndpoint().getKubernetesConfiguration().getOperation())) {
+ operation = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_OPERATION, String.class);
+ } else {
+ operation = getEndpoint().getKubernetesConfiguration().getOperation();
+ }
+
+ switch (operation) {
+
+ case KubernetesOperations.LIST_BUILD_CONFIGS:
+ doList(exchange, operation);
+ break;
+
+ case KubernetesOperations.LIST_BUILD_CONFIGS_BY_LABELS_OPERATION:
+ doListBuildConfigsByLabels(exchange, operation);
+ break;
+
+ case KubernetesOperations.GET_BUILD_CONFIG_OPERATION:
+ doGetBuildConfig(exchange, operation);
+ break;
+
+ default:
+ throw new IllegalArgumentException("Unsupported operation " + operation);
+ }
+ }
+
+ protected void doList(Exchange exchange, String operation) throws Exception {
+ BuildConfigList buildConfigsList = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class)
+ .buildConfigs().list();
+ exchange.getOut().setBody(buildConfigsList.getItems());
+ }
+
+ protected void doListBuildConfigsByLabels(Exchange exchange, String operation) throws Exception {
+ BuildConfigList buildConfigsList = null;
+ Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_BUILD_CONFIGS_LABELS,
+ Map.class);
+ String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+ if (!ObjectHelper.isEmpty(namespaceName)) {
+ NonNamespaceOperation<BuildConfig, BuildConfigList, DoneableBuildConfig,
+ BuildConfigResource<BuildConfig, DoneableBuildConfig, Void, Build>> buildConfigs;
+ buildConfigs = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).buildConfigs()
+ .inNamespace(namespaceName);
+ for (Map.Entry<String, String> entry : labels.entrySet()) {
+ buildConfigs.withLabel(entry.getKey(), entry.getValue());
+ }
+ buildConfigsList = buildConfigs.list();
+ } else {
+ MixedOperation<BuildConfig, BuildConfigList, DoneableBuildConfig,
+ BuildConfigResource<BuildConfig, DoneableBuildConfig, Void, Build>> buildConfigs;
+ buildConfigs = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).buildConfigs();
+ for (Map.Entry<String, String> entry : labels.entrySet()) {
+ buildConfigs.withLabel(entry.getKey(), entry.getValue());
+ }
+ buildConfigsList = buildConfigs.list();
+ }
+ MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+ exchange.getOut().setBody(buildConfigsList.getItems());
+ }
+
+ protected void doGetBuildConfig(Exchange exchange, String operation) throws Exception {
+ BuildConfig buildConfig = null;
+ String buildConfigName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_BUILD_CONFIG_NAME,
+ String.class);
+ String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+ if (ObjectHelper.isEmpty(buildConfigName)) {
+ LOG.error("Get a specific Build Config require specify a Build Config name");
+ throw new IllegalArgumentException("Get a specific Build Config require specify a Build Config name");
+ }
+ if (ObjectHelper.isEmpty(namespaceName)) {
+ LOG.error("Get a specific Build Config require specify a namespace name");
+ throw new IllegalArgumentException("Get a specific Build Config require specify a namespace name");
+ }
+ buildConfig = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).buildConfigs()
+ .inNamespace(namespaceName).withName(buildConfigName).get();
+
+ MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+ exchange.getOut().setBody(buildConfig);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsComponent.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsComponent.java
new file mode 100644
index 0000000..1927bdb
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsComponent.java
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.builds;
+
+import org.apache.camel.component.kubernetes.AbstractKubernetesComponent;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConfiguration;
+
+public class KubernetesBuildsComponent extends AbstractKubernetesComponent {
+
+ protected AbstractKubernetesEndpoint doCreateEndpoint(String uri, String remaining, KubernetesConfiguration config) throws Exception {
+ KubernetesBuildsEndpoint endpoint = new KubernetesBuildsEndpoint(uri, this, config);
+ return endpoint;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsEndpoint.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsEndpoint.java
new file mode 100644
index 0000000..03a7eb1
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsEndpoint.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.builds;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConfiguration;
+import org.apache.camel.spi.UriEndpoint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Kubernetes Builds component provides a producer to execute kubernetes build operations.
+ */
+@UriEndpoint(firstVersion = "2.17.0", scheme = "kubernetes-builds", title = "Kubernetes Builds", syntax = "kubernetes-builds:masterUrl", producerOnly = true, label = "container,cloud,paas")
+public class KubernetesBuildsEndpoint extends AbstractKubernetesEndpoint {
+
+ private static final Logger LOG = LoggerFactory.getLogger(KubernetesBuildsEndpoint.class);
+
+ public KubernetesBuildsEndpoint(String uri, KubernetesBuildsComponent component, KubernetesConfiguration config) {
+ super(uri, component, config);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new KubernetesBuildsProducer(this);
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ throw new IllegalArgumentException("The kubernetes-builds doesn't support consumer");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsProducer.java
new file mode 100644
index 0000000..e44b6f2
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/builds/KubernetesBuildsProducer.java
@@ -0,0 +1,131 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.builds;
+
+import java.util.Map;
+
+import io.fabric8.kubernetes.client.dsl.LogWatch;
+import io.fabric8.kubernetes.client.dsl.MixedOperation;
+import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
+import io.fabric8.openshift.api.model.Build;
+import io.fabric8.openshift.api.model.BuildList;
+import io.fabric8.openshift.api.model.DoneableBuild;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.fabric8.openshift.client.dsl.BuildResource;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConstants;
+import org.apache.camel.component.kubernetes.KubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesOperations;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.MessageHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class KubernetesBuildsProducer extends DefaultProducer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(KubernetesBuildsProducer.class);
+
+ public KubernetesBuildsProducer(AbstractKubernetesEndpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ public AbstractKubernetesEndpoint getEndpoint() {
+ return (AbstractKubernetesEndpoint) super.getEndpoint();
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ String operation;
+
+ if (ObjectHelper.isEmpty(getEndpoint().getKubernetesConfiguration().getOperation())) {
+ operation = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_OPERATION, String.class);
+ } else {
+ operation = getEndpoint().getKubernetesConfiguration().getOperation();
+ }
+
+ switch (operation) {
+
+ case KubernetesOperations.LIST_BUILD:
+ doList(exchange, operation);
+ break;
+
+ case KubernetesOperations.LIST_BUILD_BY_LABELS_OPERATION:
+ doListBuildByLabels(exchange, operation);
+ break;
+
+ case KubernetesOperations.GET_BUILD_OPERATION:
+ doGetBuild(exchange, operation);
+ break;
+
+ default:
+ throw new IllegalArgumentException("Unsupported operation " + operation);
+ }
+ }
+
+ protected void doList(Exchange exchange, String operation) throws Exception {
+ BuildList buildList = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).builds().list();
+ exchange.getOut().setBody(buildList.getItems());
+ }
+
+ protected void doListBuildByLabels(Exchange exchange, String operation) throws Exception {
+ BuildList buildList = null;
+ Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_BUILDS_LABELS,
+ Map.class);
+ String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+ if (!ObjectHelper.isEmpty(namespaceName)) {
+ NonNamespaceOperation<Build, BuildList, DoneableBuild, BuildResource<Build, DoneableBuild, String, LogWatch>> builds = getEndpoint().getKubernetesClient().
+ adapt(OpenShiftClient.class).builds()
+ .inNamespace(namespaceName);
+ for (Map.Entry<String, String> entry : labels.entrySet()) {
+ builds.withLabel(entry.getKey(), entry.getValue());
+ }
+ buildList = builds.list();
+ } else {
+ MixedOperation<Build, BuildList, DoneableBuild, BuildResource<Build, DoneableBuild, String, LogWatch>> builds = getEndpoint().getKubernetesClient().
+ adapt(OpenShiftClient.class).builds();
+ for (Map.Entry<String, String> entry : labels.entrySet()) {
+ builds.withLabel(entry.getKey(), entry.getValue());
+ }
+ buildList = builds.list();
+ }
+ MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+ exchange.getOut().setBody(buildList.getItems());
+ }
+
+ protected void doGetBuild(Exchange exchange, String operation) throws Exception {
+ Build build = null;
+ String buildName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_BUILD_NAME, String.class);
+ String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+ if (ObjectHelper.isEmpty(buildName)) {
+ LOG.error("Get a specific Build require specify a Build name");
+ throw new IllegalArgumentException("Get a specific Build require specify a Build name");
+ }
+ if (ObjectHelper.isEmpty(namespaceName)) {
+ LOG.error("Get a specific Build require specify a namespace name");
+ throw new IllegalArgumentException("Get a specific Build require specify a namespace name");
+ }
+ build = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).builds().inNamespace(namespaceName)
+ .withName(buildName).get();
+
+ MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+ exchange.getOut().setBody(build);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsComponent.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsComponent.java
new file mode 100644
index 0000000..a543358
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsComponent.java
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.config_maps;
+
+import org.apache.camel.component.kubernetes.AbstractKubernetesComponent;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConfiguration;
+
+public class KubernetesConfigMapsComponent extends AbstractKubernetesComponent {
+
+ protected KubernetesConfigMapsEndpoint doCreateEndpoint(String uri, String remaining, KubernetesConfiguration config) throws Exception {
+ KubernetesConfigMapsEndpoint endpoint = new KubernetesConfigMapsEndpoint(uri, this, config);
+ return endpoint;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsEndpoint.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsEndpoint.java
new file mode 100644
index 0000000..88c3a98
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsEndpoint.java
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.config_maps;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConfiguration;
+import org.apache.camel.component.kubernetes.build_configs.KubernetesBuildConfigsProducer;
+import org.apache.camel.component.kubernetes.builds.KubernetesBuildsProducer;
+import org.apache.camel.component.kubernetes.namespaces.KubernetesNamespacesConsumer;
+import org.apache.camel.component.kubernetes.namespaces.KubernetesNamespacesProducer;
+import org.apache.camel.component.kubernetes.nodes.KubernetesNodesConsumer;
+import org.apache.camel.component.kubernetes.nodes.KubernetesNodesProducer;
+import org.apache.camel.component.kubernetes.persistent_volumes.KubernetesPersistentVolumesProducer;
+import org.apache.camel.component.kubernetes.persistent_volumes_claims.KubernetesPersistentVolumesClaimsProducer;
+import org.apache.camel.component.kubernetes.pods.KubernetesPodsConsumer;
+import org.apache.camel.component.kubernetes.pods.KubernetesPodsProducer;
+import org.apache.camel.component.kubernetes.replication_controllers.KubernetesReplicationControllersConsumer;
+import org.apache.camel.component.kubernetes.replication_controllers.KubernetesReplicationControllersProducer;
+import org.apache.camel.component.kubernetes.resources_quota.KubernetesResourcesQuotaProducer;
+import org.apache.camel.component.kubernetes.secrets.KubernetesSecretsProducer;
+import org.apache.camel.component.kubernetes.service_accounts.KubernetesServiceAccountsProducer;
+import org.apache.camel.component.kubernetes.services.KubernetesServicesConsumer;
+import org.apache.camel.component.kubernetes.services.KubernetesServicesProducer;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Kubernetes Configmaps component provides a producer to execute kubernetes configmap operations.
+ */
+@UriEndpoint(firstVersion = "2.17.0", scheme = "kubernetes-config-maps", title = "Kubernetes ConfigMap",
+ syntax = "kubernetes-config-maps:masterUrl", producerOnly = true, label = "container,cloud,paas")
+public class KubernetesConfigMapsEndpoint extends AbstractKubernetesEndpoint {
+
+ private static final Logger LOG = LoggerFactory.getLogger(KubernetesConfigMapsEndpoint.class);
+
+ public KubernetesConfigMapsEndpoint(String uri, KubernetesConfigMapsComponent component, KubernetesConfiguration config) {
+ super(uri, component, config);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new KubernetesConfigMapsProducer(this);
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ throw new IllegalArgumentException("The kubernetes-configmaps doesn't support consumer");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
new file mode 100644
index 0000000..560d32d
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
@@ -0,0 +1,176 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.config_maps;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import io.fabric8.kubernetes.api.model.ConfigMap;
+import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
+import io.fabric8.kubernetes.api.model.ConfigMapList;
+import io.fabric8.kubernetes.api.model.DoneableConfigMap;
+import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
+import io.fabric8.kubernetes.client.dsl.Resource;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConstants;
+import org.apache.camel.component.kubernetes.KubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesOperations;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.MessageHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class KubernetesConfigMapsProducer extends DefaultProducer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(KubernetesConfigMapsProducer.class);
+
+ public KubernetesConfigMapsProducer(AbstractKubernetesEndpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ public AbstractKubernetesEndpoint getEndpoint() {
+ return (AbstractKubernetesEndpoint) super.getEndpoint();
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ String operation;
+
+ if (ObjectHelper.isEmpty(getEndpoint().getKubernetesConfiguration().getOperation())) {
+ operation = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_OPERATION, String.class);
+ } else {
+ operation = getEndpoint().getKubernetesConfiguration().getOperation();
+ }
+
+ switch (operation) {
+
+ case KubernetesOperations.LIST_CONFIGMAPS:
+ doList(exchange, operation);
+ break;
+
+ case KubernetesOperations.LIST_CONFIGMAPS_BY_LABELS_OPERATION:
+ doListConfigMapsByLabels(exchange, operation);
+ break;
+
+ case KubernetesOperations.GET_CONFIGMAP_OPERATION:
+ doGetConfigMap(exchange, operation);
+ break;
+
+ case KubernetesOperations.CREATE_CONFIGMAP_OPERATION:
+ doCreateConfigMap(exchange, operation);
+ break;
+
+ case KubernetesOperations.DELETE_CONFIGMAP_OPERATION:
+ doDeleteConfigMap(exchange, operation);
+ break;
+
+ default:
+ throw new IllegalArgumentException("Unsupported operation " + operation);
+ }
+ }
+
+ protected void doList(Exchange exchange, String operation) throws Exception {
+ ConfigMapList configMapsList = getEndpoint().getKubernetesClient().configMaps().list();
+ exchange.getOut().setBody(configMapsList.getItems());
+ }
+
+ protected void doListConfigMapsByLabels(Exchange exchange, String operation) throws Exception {
+ ConfigMapList configMapsList = null;
+ Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS, Map.class);
+ NonNamespaceOperation<ConfigMap, ConfigMapList, DoneableConfigMap, Resource<ConfigMap, DoneableConfigMap>> configMaps = getEndpoint().getKubernetesClient().configMaps();
+ for (Map.Entry<String, String> entry : labels.entrySet()) {
+ configMaps.withLabel(entry.getKey(), entry.getValue());
+ }
+ configMapsList = configMaps.list();
+
+ MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+ exchange.getOut().setBody(configMapsList.getItems());
+ }
+
+ protected void doGetConfigMap(Exchange exchange, String operation) throws Exception {
+ ConfigMap configMap = null;
+ String cfMapName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, String.class);
+ if (ObjectHelper.isEmpty(cfMapName)) {
+ LOG.error("Get a specific ConfigMap require specify a ConfigMap name");
+ throw new IllegalArgumentException("Get a specific ConfigMap require specify a ConfigMap name");
+ }
+ configMap = getEndpoint().getKubernetesClient().configMaps().withName(cfMapName).get();
+
+ MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+ exchange.getOut().setBody(configMap);
+ }
+
+ protected void doCreateConfigMap(Exchange exchange, String operation) throws Exception {
+ ConfigMap configMap = null;
+ String cfMapName = exchange.getIn().getHeader(
+ KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, String.class);
+ String namespaceName = exchange.getIn().getHeader(
+ KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+ HashMap<String, String> configMapData = exchange.getIn().getHeader(
+ KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, HashMap.class);
+ if (ObjectHelper.isEmpty(cfMapName)) {
+ LOG.error("Create a specific configMap require specify a configMap name");
+ throw new IllegalArgumentException(
+ "Create a specific configMap require specify a configMap name");
+ }
+ if (ObjectHelper.isEmpty(namespaceName)) {
+ LOG.error("Create a specific configMap require specify a namespace name");
+ throw new IllegalArgumentException(
+ "Create a specific configMap require specify a namespace name");
+ }
+ if (ObjectHelper.isEmpty(configMapData)) {
+ LOG.error("Create a specific configMap require specify a data map");
+ throw new IllegalArgumentException(
+ "Create a specific configMap require specify a data map");
+ }
+ Map<String, String> labels = exchange.getIn().getHeader(
+ KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS, Map.class);
+ ConfigMap cfMapCreating = new ConfigMapBuilder().withNewMetadata().withName(cfMapName)
+ .withLabels(labels).endMetadata().withData(configMapData).build();
+ configMap = getEndpoint().getKubernetesClient().configMaps()
+ .inNamespace(namespaceName).create(cfMapCreating);
+
+ MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+ exchange.getOut().setBody(configMap);
+ }
+
+ protected void doDeleteConfigMap(Exchange exchange, String operation) throws Exception {
+ String configMapName = exchange.getIn().getHeader(
+ KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, String.class);
+ String namespaceName = exchange.getIn().getHeader(
+ KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+ if (ObjectHelper.isEmpty(configMapName)) {
+ LOG.error("Delete a specific config map require specify a config map name");
+ throw new IllegalArgumentException(
+ "Delete a specific config map require specify a config map name");
+ }
+ if (ObjectHelper.isEmpty(namespaceName)) {
+ LOG.error("Delete a specific config map require specify a namespace name");
+ throw new IllegalArgumentException(
+ "Delete a specific config map require specify a namespace name");
+ }
+ boolean cfMapDeleted = getEndpoint().getKubernetesClient().configMaps()
+ .inNamespace(namespaceName).withName(configMapName).delete();
+
+ MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), true);
+ exchange.getOut().setBody(cfMapDeleted);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumer.java
deleted file mode 100644
index 901be16..0000000
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumer.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.camel.component.kubernetes.consumer;
-
-import java.util.concurrent.ExecutorService;
-
-import io.fabric8.kubernetes.api.model.DoneableNamespace;
-import io.fabric8.kubernetes.api.model.Namespace;
-import io.fabric8.kubernetes.api.model.NamespaceList;
-import io.fabric8.kubernetes.client.KubernetesClientException;
-import io.fabric8.kubernetes.client.Watch;
-import io.fabric8.kubernetes.client.Watcher;
-import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
-import io.fabric8.kubernetes.client.dsl.Resource;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.component.kubernetes.KubernetesConstants;
-import org.apache.camel.component.kubernetes.KubernetesEndpoint;
-import org.apache.camel.component.kubernetes.consumer.common.NamespaceEvent;
-import org.apache.camel.impl.DefaultConsumer;
-import org.apache.camel.util.ObjectHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class KubernetesNamespacesConsumer extends DefaultConsumer {
-
- private static final Logger LOG = LoggerFactory.getLogger(KubernetesNamespacesConsumer.class);
-
- private final Processor processor;
- private ExecutorService executor;
- private NamespacesConsumerTask nsWatcher;
-
- public KubernetesNamespacesConsumer(KubernetesEndpoint endpoint, Processor processor) {
- super(endpoint, processor);
- this.processor = processor;
- }
-
- @Override
- public KubernetesEndpoint getEndpoint() {
- return (KubernetesEndpoint) super.getEndpoint();
- }
-
- @Override
- protected void doStart() throws Exception {
- super.doStart();
- executor = getEndpoint().createExecutor();
-
- nsWatcher = new NamespacesConsumerTask();
- executor.submit(nsWatcher);
- }
-
- @Override
- protected void doStop() throws Exception {
- super.doStop();
-
- LOG.debug("Stopping Kubernetes Namespace Consumer");
- if (executor != null) {
- if (getEndpoint() != null && getEndpoint().getCamelContext() != null) {
- if (nsWatcher != null) {
- nsWatcher.getWatch().close();
- }
- getEndpoint().getCamelContext().getExecutorServiceManager().shutdownNow(executor);
- } else {
- if (nsWatcher != null) {
- nsWatcher.getWatch().close();
- }
- executor.shutdownNow();
- }
- }
- executor = null;
- }
-
- class NamespacesConsumerTask implements Runnable {
-
- private Watch watch;
-
- @Override
- public void run() {
- NonNamespaceOperation<Namespace, NamespaceList, DoneableNamespace, Resource<Namespace, DoneableNamespace>> w = getEndpoint().getKubernetesClient().namespaces();
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getNamespace())) {
- w.withName(getEndpoint().getKubernetesConfiguration().getNamespace());
- }
- watch = w.watch(new Watcher<Namespace>() {
-
- @Override
- public void eventReceived(io.fabric8.kubernetes.client.Watcher.Action action,
- Namespace resource) {
- NamespaceEvent ne = new NamespaceEvent(action, resource);
- Exchange exchange = getEndpoint().createExchange();
- exchange.getIn().setBody(ne.getNamespace());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION, ne.getAction());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_TIMESTAMP, System.currentTimeMillis());
- try {
- processor.process(exchange);
- } catch (Exception e) {
- getExceptionHandler().handleException("Error during processing", exchange, e);
- }
- }
-
- @Override
- public void onClose(KubernetesClientException cause) {
- if (cause != null) {
- LOG.error(cause.getMessage(), cause);
- }
- }
- });
- }
-
- public Watch getWatch() {
- return watch;
- }
-
- public void setWatch(Watch watch) {
- this.watch = watch;
- }
- }
-}
-
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumer.java
deleted file mode 100644
index 4aa18c2..0000000
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumer.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.camel.component.kubernetes.consumer;
-
-import java.util.concurrent.ExecutorService;
-
-import io.fabric8.kubernetes.api.model.DoneableNode;
-import io.fabric8.kubernetes.api.model.Node;
-import io.fabric8.kubernetes.api.model.NodeList;
-import io.fabric8.kubernetes.client.KubernetesClientException;
-import io.fabric8.kubernetes.client.Watch;
-import io.fabric8.kubernetes.client.Watcher;
-import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
-import io.fabric8.kubernetes.client.dsl.Resource;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.component.kubernetes.KubernetesConstants;
-import org.apache.camel.component.kubernetes.KubernetesEndpoint;
-import org.apache.camel.component.kubernetes.consumer.common.NodeEvent;
-import org.apache.camel.impl.DefaultConsumer;
-import org.apache.camel.util.ObjectHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class KubernetesNodesConsumer extends DefaultConsumer {
-
- private static final Logger LOG = LoggerFactory.getLogger(KubernetesNodesConsumer.class);
-
- private final Processor processor;
- private ExecutorService executor;
- private NodesConsumerTask nodesWatcher;
-
- public KubernetesNodesConsumer(KubernetesEndpoint endpoint, Processor processor) {
- super(endpoint, processor);
- this.processor = processor;
- }
-
- @Override
- public KubernetesEndpoint getEndpoint() {
- return (KubernetesEndpoint) super.getEndpoint();
- }
-
- @Override
- protected void doStart() throws Exception {
- super.doStart();
- executor = getEndpoint().createExecutor();
-
- nodesWatcher = new NodesConsumerTask();
- executor.submit(nodesWatcher);
- }
-
- @Override
- protected void doStop() throws Exception {
- super.doStop();
-
- LOG.debug("Stopping Kubernetes Nodes Consumer");
- if (executor != null) {
- if (getEndpoint() != null && getEndpoint().getCamelContext() != null) {
- if (nodesWatcher != null) {
- nodesWatcher.getWatch().close();
- }
- getEndpoint().getCamelContext().getExecutorServiceManager().shutdownNow(executor);
- } else {
- if (nodesWatcher != null) {
- nodesWatcher.getWatch().close();
- }
- executor.shutdownNow();
- }
- }
- executor = null;
- }
-
- class NodesConsumerTask implements Runnable {
-
- private Watch watch;
-
- @Override
- public void run() {
- NonNamespaceOperation<Node, NodeList, DoneableNode, Resource<Node, DoneableNode>> w = getEndpoint().getKubernetesClient().nodes();
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getLabelKey())
- && ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getLabelValue())) {
- w.withLabel(getEndpoint().getKubernetesConfiguration().getLabelKey(), getEndpoint().getKubernetesConfiguration().getLabelValue());
- }
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getResourceName())) {
- w.withName(getEndpoint().getKubernetesConfiguration().getResourceName());
- }
- watch = w.watch(new Watcher<Node>() {
-
- @Override
- public void eventReceived(io.fabric8.kubernetes.client.Watcher.Action action,
- Node resource) {
- NodeEvent ne = new NodeEvent(action, resource);
- Exchange exchange = getEndpoint().createExchange();
- exchange.getIn().setBody(ne.getNode());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION, ne.getAction());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_TIMESTAMP, System.currentTimeMillis());
- try {
- processor.process(exchange);
- } catch (Exception e) {
- getExceptionHandler().handleException("Error during processing", exchange, e);
- }
- }
-
- @Override
- public void onClose(KubernetesClientException cause) {
- if (cause != null) {
- LOG.error(cause.getMessage(), cause);
- }
-
- }
- });
- }
-
- public Watch getWatch() {
- return watch;
- }
-
- public void setWatch(Watch watch) {
- this.watch = watch;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumer.java
deleted file mode 100644
index 76222c0..0000000
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumer.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.camel.component.kubernetes.consumer;
-
-import java.util.concurrent.ExecutorService;
-
-import io.fabric8.kubernetes.api.model.DoneablePod;
-import io.fabric8.kubernetes.api.model.Pod;
-import io.fabric8.kubernetes.api.model.PodList;
-import io.fabric8.kubernetes.client.KubernetesClientException;
-import io.fabric8.kubernetes.client.Watch;
-import io.fabric8.kubernetes.client.Watcher;
-import io.fabric8.kubernetes.client.dsl.MixedOperation;
-import io.fabric8.kubernetes.client.dsl.PodResource;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.component.kubernetes.KubernetesConstants;
-import org.apache.camel.component.kubernetes.KubernetesEndpoint;
-import org.apache.camel.component.kubernetes.consumer.common.PodEvent;
-import org.apache.camel.impl.DefaultConsumer;
-import org.apache.camel.util.ObjectHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class KubernetesPodsConsumer extends DefaultConsumer {
-
- private static final Logger LOG = LoggerFactory.getLogger(KubernetesPodsConsumer.class);
-
- private final Processor processor;
- private ExecutorService executor;
- private PodsConsumerTask podsWatcher;
-
- public KubernetesPodsConsumer(KubernetesEndpoint endpoint, Processor processor) {
- super(endpoint, processor);
- this.processor = processor;
- }
-
- @Override
- public KubernetesEndpoint getEndpoint() {
- return (KubernetesEndpoint) super.getEndpoint();
- }
-
- @Override
- protected void doStart() throws Exception {
- super.doStart();
- executor = getEndpoint().createExecutor();
-
- podsWatcher = new PodsConsumerTask();
- executor.submit(podsWatcher);
- }
-
- @Override
- protected void doStop() throws Exception {
- super.doStop();
-
- LOG.debug("Stopping Kubernetes Pods Consumer");
- if (executor != null) {
- if (getEndpoint() != null && getEndpoint().getCamelContext() != null) {
- if (podsWatcher != null) {
- podsWatcher.getWatch().close();
- }
- getEndpoint().getCamelContext().getExecutorServiceManager().shutdownNow(executor);
- } else {
- if (podsWatcher != null) {
- podsWatcher.getWatch().close();
- }
- executor.shutdownNow();
- }
- }
- executor = null;
- }
-
- class PodsConsumerTask implements Runnable {
-
- private Watch watch;
-
- @Override
- public void run() {
- MixedOperation<Pod, PodList, DoneablePod, PodResource<Pod, DoneablePod>> w = getEndpoint().getKubernetesClient().pods();
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getNamespace())) {
- w.inNamespace(getEndpoint().getKubernetesConfiguration().getNamespace());
- }
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getLabelKey())
- && ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getLabelValue())) {
- w.withLabel(getEndpoint().getKubernetesConfiguration().getLabelKey(), getEndpoint().getKubernetesConfiguration().getLabelValue());
- }
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getResourceName())) {
- w.withName(getEndpoint().getKubernetesConfiguration().getResourceName());
- }
- watch = w.watch(new Watcher<Pod>() {
-
- @Override
- public void eventReceived(io.fabric8.kubernetes.client.Watcher.Action action,
- Pod resource) {
- PodEvent pe = new PodEvent(action, resource);
- Exchange exchange = getEndpoint().createExchange();
- exchange.getIn().setBody(pe.getPod());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION, pe.getAction());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_TIMESTAMP, System.currentTimeMillis());
- try {
- processor.process(exchange);
- } catch (Exception e) {
- getExceptionHandler().handleException("Error during processing", exchange, e);
- }
- }
-
- @Override
- public void onClose(KubernetesClientException cause) {
- if (cause != null) {
- LOG.error(cause.getMessage(), cause);
- }
-
- }
- });
- }
-
- public Watch getWatch() {
- return watch;
- }
-
- public void setWatch(Watch watch) {
- this.watch = watch;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumer.java
deleted file mode 100644
index cacc8a4..0000000
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumer.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.camel.component.kubernetes.consumer;
-
-import java.util.concurrent.ExecutorService;
-
-import io.fabric8.kubernetes.api.model.DoneableReplicationController;
-import io.fabric8.kubernetes.api.model.ReplicationController;
-import io.fabric8.kubernetes.api.model.ReplicationControllerList;
-import io.fabric8.kubernetes.client.KubernetesClientException;
-import io.fabric8.kubernetes.client.Watch;
-import io.fabric8.kubernetes.client.Watcher;
-import io.fabric8.kubernetes.client.dsl.MixedOperation;
-import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.component.kubernetes.KubernetesConstants;
-import org.apache.camel.component.kubernetes.KubernetesEndpoint;
-import org.apache.camel.component.kubernetes.consumer.common.ReplicationControllerEvent;
-import org.apache.camel.impl.DefaultConsumer;
-import org.apache.camel.util.ObjectHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class KubernetesReplicationControllersConsumer extends DefaultConsumer {
-
- private static final Logger LOG = LoggerFactory.getLogger(KubernetesReplicationControllersConsumer.class);
-
- private final Processor processor;
- private ExecutorService executor;
- private ReplicationControllersConsumerTask rcWatcher;
-
- public KubernetesReplicationControllersConsumer(KubernetesEndpoint endpoint, Processor processor) {
- super(endpoint, processor);
- this.processor = processor;
- }
-
- @Override
- public KubernetesEndpoint getEndpoint() {
- return (KubernetesEndpoint) super.getEndpoint();
- }
-
- @Override
- protected void doStart() throws Exception {
- super.doStart();
-
- executor = getEndpoint().createExecutor();
- rcWatcher = new ReplicationControllersConsumerTask();
- executor.submit(rcWatcher);
- }
-
- @Override
- protected void doStop() throws Exception {
- super.doStop();
-
- LOG.debug("Stopping Kubernetes Replication Controllers Consumer");
- if (executor != null) {
- if (getEndpoint() != null && getEndpoint().getCamelContext() != null) {
- if (rcWatcher != null) {
- rcWatcher.getWatch().close();
- }
- getEndpoint().getCamelContext().getExecutorServiceManager().shutdownNow(executor);
- } else {
- if (rcWatcher != null) {
- rcWatcher.getWatch().close();
- }
- executor.shutdownNow();
- }
- }
- executor = null;
- }
-
- class ReplicationControllersConsumerTask implements Runnable {
-
- private Watch watch;
-
- @Override
- public void run() {
- MixedOperation<ReplicationController, ReplicationControllerList,
- DoneableReplicationController, RollableScalableResource<ReplicationController, DoneableReplicationController>> w = getEndpoint().getKubernetesClient().replicationControllers();
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getNamespace())) {
- w.inNamespace(getEndpoint().getKubernetesConfiguration().getNamespace());
- }
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getLabelKey())
- && ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getLabelValue())) {
- w.withLabel(getEndpoint().getKubernetesConfiguration().getLabelKey(), getEndpoint().getKubernetesConfiguration().getLabelValue());
- }
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getResourceName())) {
- w.withName(getEndpoint().getKubernetesConfiguration().getResourceName());
- }
- watch = w.watch(new Watcher<ReplicationController>() {
-
- @Override
- public void eventReceived(io.fabric8.kubernetes.client.Watcher.Action action,
- ReplicationController resource) {
- ReplicationControllerEvent rce = new ReplicationControllerEvent(action, resource);
- Exchange exchange = getEndpoint().createExchange();
- exchange.getIn().setBody(rce.getReplicationController());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION, rce.getAction());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_TIMESTAMP, System.currentTimeMillis());
- try {
- processor.process(exchange);
- } catch (Exception e) {
- getExceptionHandler().handleException("Error during processing", exchange, e);
- }
-
- }
-
- @Override
- public void onClose(KubernetesClientException cause) {
- if (cause != null) {
- LOG.error(cause.getMessage(), cause);
- }
- }
-
- });
- }
-
- public Watch getWatch() {
- return watch;
- }
-
- public void setWatch(Watch watch) {
- this.watch = watch;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumer.java
deleted file mode 100644
index 5353f76..0000000
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumer.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.camel.component.kubernetes.consumer;
-
-import java.util.concurrent.ExecutorService;
-
-import io.fabric8.kubernetes.api.model.DoneableService;
-import io.fabric8.kubernetes.api.model.Service;
-import io.fabric8.kubernetes.api.model.ServiceList;
-import io.fabric8.kubernetes.client.KubernetesClientException;
-import io.fabric8.kubernetes.client.Watch;
-import io.fabric8.kubernetes.client.Watcher;
-import io.fabric8.kubernetes.client.dsl.MixedOperation;
-import io.fabric8.kubernetes.client.dsl.Resource;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.component.kubernetes.KubernetesConstants;
-import org.apache.camel.component.kubernetes.KubernetesEndpoint;
-import org.apache.camel.component.kubernetes.consumer.common.ServiceEvent;
-import org.apache.camel.impl.DefaultConsumer;
-import org.apache.camel.util.ObjectHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class KubernetesServicesConsumer extends DefaultConsumer {
-
- private static final Logger LOG = LoggerFactory.getLogger(KubernetesServicesConsumer.class);
-
- private final Processor processor;
- private ExecutorService executor;
- private ServicesConsumerTask servicesWatcher;
-
- public KubernetesServicesConsumer(KubernetesEndpoint endpoint, Processor processor) {
- super(endpoint, processor);
- this.processor = processor;
- }
-
- @Override
- public KubernetesEndpoint getEndpoint() {
- return (KubernetesEndpoint) super.getEndpoint();
- }
-
- @Override
- protected void doStart() throws Exception {
- super.doStart();
- executor = getEndpoint().createExecutor();
-
- servicesWatcher = new ServicesConsumerTask();
- executor.submit(servicesWatcher);
-
- }
-
- @Override
- protected void doStop() throws Exception {
- super.doStop();
- LOG.debug("Stopping Kubernetes Services Consumer");
- if (executor != null) {
- if (getEndpoint() != null && getEndpoint().getCamelContext() != null) {
- if (servicesWatcher != null) {
- servicesWatcher.getWatch().close();
- }
- getEndpoint().getCamelContext().getExecutorServiceManager().shutdownNow(executor);
- } else {
- if (servicesWatcher != null) {
- servicesWatcher.getWatch().close();
- }
- executor.shutdownNow();
- }
- }
- executor = null;
- }
-
- class ServicesConsumerTask implements Runnable {
-
- private Watch watch;
-
- @Override
- public void run() {
- MixedOperation<Service, ServiceList, DoneableService, Resource<Service, DoneableService>> w = getEndpoint().getKubernetesClient().services();
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getNamespace())) {
- w.inNamespace(getEndpoint().getKubernetesConfiguration().getNamespace());
- }
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getLabelKey())
- && ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getLabelValue())) {
- w.withLabel(getEndpoint().getKubernetesConfiguration().getLabelKey(), getEndpoint().getKubernetesConfiguration().getLabelValue());
- }
- if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getResourceName())) {
- w.withName(getEndpoint().getKubernetesConfiguration().getResourceName());
- }
- watch = w.watch(new Watcher<Service>() {
-
- @Override
- public void eventReceived(io.fabric8.kubernetes.client.Watcher.Action action,
- Service resource) {
- ServiceEvent se = new ServiceEvent(action, resource);
- Exchange exchange = getEndpoint().createExchange();
- exchange.getIn().setBody(se.getService());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION, se.getAction());
- exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_TIMESTAMP, System.currentTimeMillis());
- try {
- processor.process(exchange);
- } catch (Exception e) {
- getExceptionHandler().handleException("Error during processing", exchange, e);
- }
-
- }
-
- @Override
- public void onClose(KubernetesClientException cause) {
- if (cause != null) {
- LOG.error(cause.getMessage(), cause);
- }
- }
-
- });
- }
-
- public Watch getWatch() {
- return watch;
- }
-
- public void setWatch(Watch watch) {
- this.watch = watch;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesComponent.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesComponent.java
new file mode 100644
index 0000000..5dd9904
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesComponent.java
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.namespaces;
+
+import org.apache.camel.component.kubernetes.AbstractKubernetesComponent;
+import org.apache.camel.component.kubernetes.KubernetesConfiguration;
+
+public class KubernetesNamespacesComponent extends AbstractKubernetesComponent {
+
+ protected KubernetesNamespacesEndpoint doCreateEndpoint(String uri, String remaining, KubernetesConfiguration config) throws Exception {
+ KubernetesNamespacesEndpoint endpoint = new KubernetesNamespacesEndpoint(uri, this, config);
+ return endpoint;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesConsumer.java
new file mode 100644
index 0000000..b9326c8
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesConsumer.java
@@ -0,0 +1,133 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.namespaces;
+
+import java.util.concurrent.ExecutorService;
+
+import io.fabric8.kubernetes.api.model.DoneableNamespace;
+import io.fabric8.kubernetes.api.model.Namespace;
+import io.fabric8.kubernetes.api.model.NamespaceList;
+import io.fabric8.kubernetes.client.KubernetesClientException;
+import io.fabric8.kubernetes.client.Watch;
+import io.fabric8.kubernetes.client.Watcher;
+import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
+import io.fabric8.kubernetes.client.dsl.Resource;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConstants;
+import org.apache.camel.component.kubernetes.consumer.common.NamespaceEvent;
+import org.apache.camel.impl.DefaultConsumer;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class KubernetesNamespacesConsumer extends DefaultConsumer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(KubernetesNamespacesConsumer.class);
+
+ private final Processor processor;
+ private ExecutorService executor;
+ private NamespacesConsumerTask nsWatcher;
+
+ public KubernetesNamespacesConsumer(AbstractKubernetesEndpoint endpoint, Processor processor) {
+ super(endpoint, processor);
+ this.processor = processor;
+ }
+
+ @Override
+ public AbstractKubernetesEndpoint getEndpoint() {
+ return (AbstractKubernetesEndpoint) super.getEndpoint();
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ executor = getEndpoint().createExecutor();
+
+ nsWatcher = new NamespacesConsumerTask();
+ executor.submit(nsWatcher);
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ super.doStop();
+
+ LOG.debug("Stopping Kubernetes Namespace Consumer");
+ if (executor != null) {
+ if (getEndpoint() != null && getEndpoint().getCamelContext() != null) {
+ if (nsWatcher != null) {
+ nsWatcher.getWatch().close();
+ }
+ getEndpoint().getCamelContext().getExecutorServiceManager().shutdownNow(executor);
+ } else {
+ if (nsWatcher != null) {
+ nsWatcher.getWatch().close();
+ }
+ executor.shutdownNow();
+ }
+ }
+ executor = null;
+ }
+
+ class NamespacesConsumerTask implements Runnable {
+
+ private Watch watch;
+
+ @Override
+ public void run() {
+ NonNamespaceOperation<Namespace, NamespaceList, DoneableNamespace, Resource<Namespace, DoneableNamespace>> w = getEndpoint().getKubernetesClient().namespaces();
+ if (ObjectHelper.isNotEmpty(getEndpoint().getKubernetesConfiguration().getNamespace())) {
+ w.withName(getEndpoint().getKubernetesConfiguration().getNamespace());
+ }
+ watch = w.watch(new Watcher<Namespace>() {
+
+ @Override
+ public void eventReceived(io.fabric8.kubernetes.client.Watcher.Action action,
+ Namespace resource) {
+ NamespaceEvent ne = new NamespaceEvent(action, resource);
+ Exchange exchange = getEndpoint().createExchange();
+ exchange.getIn().setBody(ne.getNamespace());
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION, ne.getAction());
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_TIMESTAMP, System.currentTimeMillis());
+ try {
+ processor.process(exchange);
+ } catch (Exception e) {
+ getExceptionHandler().handleException("Error during processing", exchange, e);
+ }
+ }
+
+ @Override
+ public void onClose(KubernetesClientException cause) {
+ if (cause != null) {
+ LOG.error(cause.getMessage(), cause);
+ }
+ }
+ });
+ }
+
+ public Watch getWatch() {
+ return watch;
+ }
+
+ public void setWatch(Watch watch) {
+ this.watch = watch;
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/camel/blob/89eee3b9/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesEndpoint.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesEndpoint.java
new file mode 100644
index 0000000..5c74332
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesEndpoint.java
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.kubernetes.namespaces;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
+import org.apache.camel.component.kubernetes.KubernetesConfiguration;
+import org.apache.camel.spi.UriEndpoint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Kubernetes Namespaces component provides a producer to execute kubernetes namespace operations
+ * and a consumer to consume namespace events.
+ */
+@UriEndpoint(firstVersion = "2.17.0", scheme = "kubernetes-namespaces", title = "Kubernetes Namespaces",
+ syntax = "kubernetes-namespaces:masterUrl", consumerClass = KubernetesNamespacesConsumer.class, label = "container,cloud,paas")
+public class KubernetesNamespacesEndpoint extends AbstractKubernetesEndpoint {
+
+ private static final Logger LOG = LoggerFactory.getLogger(KubernetesNamespacesEndpoint.class);
+
+ public KubernetesNamespacesEndpoint(String uri, KubernetesNamespacesComponent component, KubernetesConfiguration config) {
+ super(uri, component, config);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new KubernetesNamespacesProducer(this);
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ return new KubernetesNamespacesConsumer(this, processor);
+ }
+
+}