61.7. Kubernetes 事件 Producer 示例
- listEvents :此操作列出了事件。
from("direct:list").
to("kubernetes-events:///?kubernetesClient=#kubernetesClient&operation=listEvents").
to("mock:result");
此操作会返回集群中的事件列表。事件的类型是 io.fabric8.kubernetes.api.model.events.v1.Event。
要指示事件来自哪个命名空间,可以设置消息标头 CamelKubernetesNamespaceName。默认情况下,返回所有命名空间的事件。
- listEventsByLabels:此操作列出了标签选择的事件。
from("direct:listByLabels").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Map<String, String> labels = new HashMap<>();
labels.put("key1", "value1");
labels.put("key2", "value2");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENTS_LABELS, labels);
}
});
to("kubernetes-events:///?kubernetesClient=#kubernetesClient&operation=listEventsByLabels").
to("mock:result");
此操作会返回集群中发生的事件列表,使用标签选择器(上例中仅预期标签 "key1" 设置为 "value1" 的事件),标签 "key2" 设置为 "value2")。事件的类型是 io.fabric8.kubernetes.api.model.events.v1.Event。
此操作需要消息标头 CamelKubernetesEventsLabels 设置为 Map<String, String >,其中键值对代表预期的标签名称和值。
- getEvent :此操作提供特定事件。
from("direct:get").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_NAME, "event1");
}
});
to("kubernetes-events:///?kubernetesClient=#kubernetesClient&operation=getEvent").
to("mock:result");
此操作返回与集群中条件匹配的事件。事件的类型是 io.fabric8.kubernetes.api.model.events.v1.Event。
此操作需要两个消息标头(即 CamelKubernetesNamespaceName 和 CamelKubernetesEventName ),第一个标头需要设置为目标命名空间的名称,需要设置为事件的目标名称。
如果无法找到匹配的事件,则返回 null。
- createEvent :此操作会创建一个新事件。
from("direct:get").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_NAME, "test1");
Map<String, String> labels = new HashMap<>();
labels.put("this", "rocks");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENTS_LABELS, labels);
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION_PRODUCER, "Some Action");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_TYPE, "Normal");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_REASON, "Some Reason");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_REPORTING_CONTROLLER, "Some-Reporting-Controller");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_REPORTING_INSTANCE, "Some-Reporting-Instance");
}
});
to("kubernetes-events:///?kubernetesClient=#kubernetesClient&operation=createEvent").
to("mock:result");
此操作会在集群中发布新事件。可以通过两种方法从消息标头创建事件,或者从 io.fabric8.kubernetes.api.model.events.v1.EventBuilder 处创建。
创建事件的任何方法:
-
该操作需要两个消息标头,它们是
CamelKubernetesNamespaceName和CamelKubernetesEventName,以分别设置命名空间的名称以及生成的事件的名称。 -
该操作支持消息标头
CamelKubernetesEventsLabels,将标签设置为生成的事件。
用于创建事件的消息标头是 CamelKubernetesEventTime,CamelKubernetesEventAction,CamelKubernetesEventType, CamelKubernetesEventReason ,CamelKubernetesEventReason,,CamelKubernetesEvent RegardingCamelKubernetesEventRelated,CamelKubernetesEventReportingController 和 CamelKubernetesEventReportingInstance。
如果支持的消息标头不足以用于特定的用例,仍然可以使用类型为 io.fabric8.kubernetes.api.model.events.v1.EventBuilder 的对象来设置消息正文,以便在创建事件时使用。请注意,标签、事件名称和命名空间名称始终从消息标头设置,即使提供了构建器。
- updateEvent :此操作更新现有事件。
该行为与 createEvent 完全相同,只有操作的名称有所不同。
- DeleteEvent :此操作会删除现有事件。
from("direct:get").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default");
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_EVENT_NAME, "test1");
}
});
to("kubernetes-events:///?kubernetesClient=#kubernetesClient&operation=deleteEvent").
to("mock:result");
此操作会从集群中移除现有事件。它返回一个 布尔值,以指示操作是否成功。
此操作需要两个消息标头(即 CamelKubernetesNamespaceName 和 CamelKubernetesEventName ),第一个标头需要设置为目标命名空间的名称,需要设置为事件的目标名称。