73.7. Kubernetes Events 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 という 2 つのメッセージヘッダーが必要です。
一致するイベントが見つからなかった場合は、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");
この操作により、クラスター内に新しいイベントが発行されます。イベントの作成方法は 2 つあり、メッセージヘッダーから作成するか、io.fabric8.kubernetes.api.model.events.v1.EventBuilder から直接作成できます。
イベントの作成方法にかかわらず、以下が適用されます。
-
この操作には、名前空間の名前と生成されるイベントの名前をそれぞれ設定するために、
CamelKubernetesNamespaceNameとCamelKubernetesEventNameという 2 つのメッセージヘッダーが必要です。 -
この操作では、生成されたイベントにラベルを設定するためのメッセージヘッダー
CamelKubernetesEventsLabelsがサポートされています。
イベントの作成に使用できるメッセージヘッダーは、CamelKubernetesEventTime、CamelKubernetesEventAction、CamelKubernetesEventType、CamelKubernetesEventReason、CamelKubernetesEventNote、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");
この操作により、クラスターから既存のイベントが削除されます。操作の成功または失敗を示す boolean が返されます。
この操作には、ターゲット名前空間の名前に設定する必要がある CamelKubernetesNamespaceName と、イベントのターゲット名に設定する必要がある CamelKubernetesEventName という 2 つのメッセージヘッダーが必要です。