Add event generation.
This commit is contained in:
parent
41a0ef1adb
commit
245fad39a9
2 changed files with 44 additions and 0 deletions
|
|
@ -30,12 +30,14 @@ import io.kubernetes.client.openapi.models.V1ConfigMap;
|
||||||
import io.kubernetes.client.openapi.models.V1ConfigMapList;
|
import io.kubernetes.client.openapi.models.V1ConfigMapList;
|
||||||
import io.kubernetes.client.openapi.models.V1GroupVersionForDiscovery;
|
import io.kubernetes.client.openapi.models.V1GroupVersionForDiscovery;
|
||||||
import io.kubernetes.client.openapi.models.V1ObjectMeta;
|
import io.kubernetes.client.openapi.models.V1ObjectMeta;
|
||||||
|
import io.kubernetes.client.openapi.models.V1ObjectReference;
|
||||||
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim;
|
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim;
|
||||||
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimList;
|
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimList;
|
||||||
import io.kubernetes.client.openapi.models.V1Pod;
|
import io.kubernetes.client.openapi.models.V1Pod;
|
||||||
import io.kubernetes.client.openapi.models.V1PodList;
|
import io.kubernetes.client.openapi.models.V1PodList;
|
||||||
import io.kubernetes.client.util.generic.GenericKubernetesApi;
|
import io.kubernetes.client.util.generic.GenericKubernetesApi;
|
||||||
import io.kubernetes.client.util.generic.dynamic.DynamicKubernetesApi;
|
import io.kubernetes.client.util.generic.dynamic.DynamicKubernetesApi;
|
||||||
|
import io.kubernetes.client.util.generic.dynamic.DynamicKubernetesObject;
|
||||||
import io.kubernetes.client.util.generic.options.DeleteOptions;
|
import io.kubernetes.client.util.generic.options.DeleteOptions;
|
||||||
import io.kubernetes.client.util.generic.options.PatchOptions;
|
import io.kubernetes.client.util.generic.options.PatchOptions;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
@ -204,4 +206,19 @@ public class K8s {
|
||||||
return response.getObject();
|
return response.getObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an object reference.
|
||||||
|
*
|
||||||
|
* @param object the object
|
||||||
|
* @return the v 1 object reference
|
||||||
|
*/
|
||||||
|
public static V1ObjectReference
|
||||||
|
objectReference(DynamicKubernetesObject object) {
|
||||||
|
return new V1ObjectReference().apiVersion(object.getApiVersion())
|
||||||
|
.kind(object.getKind())
|
||||||
|
.namespace(object.getMetadata().getNamespace())
|
||||||
|
.name(object.getMetadata().getName())
|
||||||
|
.resourceVersion(object.getMetadata().getResourceVersion())
|
||||||
|
.uid(object.getMetadata().getUid());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,11 @@ import io.kubernetes.client.custom.Quantity.Format;
|
||||||
import io.kubernetes.client.openapi.ApiException;
|
import io.kubernetes.client.openapi.ApiException;
|
||||||
import io.kubernetes.client.openapi.apis.ApisApi;
|
import io.kubernetes.client.openapi.apis.ApisApi;
|
||||||
import io.kubernetes.client.openapi.apis.CustomObjectsApi;
|
import io.kubernetes.client.openapi.apis.CustomObjectsApi;
|
||||||
|
import io.kubernetes.client.openapi.apis.EventsV1Api;
|
||||||
|
import io.kubernetes.client.openapi.models.EventsV1Event;
|
||||||
import io.kubernetes.client.openapi.models.V1APIGroup;
|
import io.kubernetes.client.openapi.models.V1APIGroup;
|
||||||
import io.kubernetes.client.openapi.models.V1GroupVersionForDiscovery;
|
import io.kubernetes.client.openapi.models.V1GroupVersionForDiscovery;
|
||||||
|
import io.kubernetes.client.openapi.models.V1ObjectMeta;
|
||||||
import io.kubernetes.client.util.Config;
|
import io.kubernetes.client.util.Config;
|
||||||
import io.kubernetes.client.util.generic.dynamic.DynamicKubernetesApi;
|
import io.kubernetes.client.util.generic.dynamic.DynamicKubernetesApi;
|
||||||
import io.kubernetes.client.util.generic.dynamic.DynamicKubernetesObject;
|
import io.kubernetes.client.util.generic.dynamic.DynamicKubernetesObject;
|
||||||
|
|
@ -34,12 +37,15 @@ import java.math.BigDecimal;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
import static org.jdrupes.vmoperator.common.Constants.APP_NAME;
|
||||||
import static org.jdrupes.vmoperator.common.Constants.VM_OP_GROUP;
|
import static org.jdrupes.vmoperator.common.Constants.VM_OP_GROUP;
|
||||||
import static org.jdrupes.vmoperator.common.Constants.VM_OP_KIND_VM;
|
import static org.jdrupes.vmoperator.common.Constants.VM_OP_KIND_VM;
|
||||||
|
import org.jdrupes.vmoperator.common.K8s;
|
||||||
import org.jdrupes.vmoperator.runner.qemu.events.BalloonChangeEvent;
|
import org.jdrupes.vmoperator.runner.qemu.events.BalloonChangeEvent;
|
||||||
import org.jdrupes.vmoperator.runner.qemu.events.Exit;
|
import org.jdrupes.vmoperator.runner.qemu.events.Exit;
|
||||||
import org.jdrupes.vmoperator.runner.qemu.events.HotpluggableCpuStatus;
|
import org.jdrupes.vmoperator.runner.qemu.events.HotpluggableCpuStatus;
|
||||||
|
|
@ -67,6 +73,7 @@ public class StatusUpdater extends Component {
|
||||||
private String namespace;
|
private String namespace;
|
||||||
private String vmName;
|
private String vmName;
|
||||||
private DynamicKubernetesApi vmCrApi;
|
private DynamicKubernetesApi vmCrApi;
|
||||||
|
private EventsV1Api evtsApi;
|
||||||
private long observedGeneration;
|
private long observedGeneration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -149,6 +156,14 @@ public class StatusUpdater extends Component {
|
||||||
event.cancel(true);
|
event.cancel(true);
|
||||||
fire(new Exit(1));
|
fire(new Exit(1));
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
evtsApi = new EventsV1Api(Config.defaultClient());
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.log(Level.SEVERE, e,
|
||||||
|
() -> "Cannot access events API, terminating.");
|
||||||
|
event.cancel(true);
|
||||||
|
fire(new Exit(1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initVmCrApi(Start event) throws IOException, ApiException {
|
private void initVmCrApi(Start event) throws IOException, ApiException {
|
||||||
|
|
@ -252,6 +267,18 @@ public class StatusUpdater extends Component {
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}).throwsApiException();
|
}).throwsApiException();
|
||||||
|
|
||||||
|
// Log event
|
||||||
|
var evt = new EventsV1Event().kind("Event")
|
||||||
|
.metadata(new V1ObjectMeta().namespace(namespace)
|
||||||
|
.generateName("vmrunner-"))
|
||||||
|
.reportingController(VM_OP_GROUP + "/" + APP_NAME)
|
||||||
|
.reportingInstance(vmCr.getMetadata().getName())
|
||||||
|
.eventTime(OffsetDateTime.now()).type("Normal")
|
||||||
|
.regarding(K8s.objectReference(vmCr))
|
||||||
|
.action("StatusUpdate").reason(event.reason())
|
||||||
|
.note(event.message());
|
||||||
|
evtsApi.createNamespacedEvent(namespace, evt, null, null, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateRunningCondition(RunnerStateChange event,
|
private void updateRunningCondition(RunnerStateChange event,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue