72.7. Kubernetes 事件生成示例
- 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,CamelKubernetesEventRegarding,CamelKubernetesEventRelated,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,第一个消息标头需要设置为目标命名空间的名称,第二个消息标头需要设置为事件的目标名称。