Check node init status when probing node health through REST API
Support to inject controller IP address to API config.
Change-Id: Iece8a84b698ef0da9803f11d473257c84e5adc4d
(cherry picked from commit 6a08072a2c1c3094818268ebf22ffa82f9713125)
diff --git a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/cli/KubevirtListApiConfigsCommand.java b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/cli/KubevirtListApiConfigsCommand.java
index d01c33a..5b9c268 100644
--- a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/cli/KubevirtListApiConfigsCommand.java
+++ b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/cli/KubevirtListApiConfigsCommand.java
@@ -33,7 +33,7 @@
description = "Lists all KubeVirt API server configs registered to the service")
public class KubevirtListApiConfigsCommand extends AbstractShellCommand {
- private static final String FORMAT = "%-10s%-25s%-10s%-10s";
+ private static final String FORMAT = "%-10s%-20s%-10s%-25s%-10s";
@Override
protected void doExecute() throws Exception {
@@ -43,10 +43,14 @@
if (outputJson()) {
print("%s", json(config));
} else {
- print(FORMAT, "Scheme", "IpAddress", "Port", "State");
+ print(FORMAT, "Scheme", "Server IP", "Port", "Controller IP", "State");
+ String controllerIp = "N/A";
if (config != null) {
+ if (config.controllerIp() != null) {
+ controllerIp = config.controllerIp().toString();
+ }
print(FORMAT, config.scheme().name(), config.ipAddress().toString(),
- config.port(), config.state().name());
+ config.port(), controllerIp, config.state().name());
} else {
print("Kubevirt config not found!");
}
diff --git a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/codec/KubevirtApiConfigCodec.java b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/codec/KubevirtApiConfigCodec.java
index aa2bfa1..9fc2099 100644
--- a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/codec/KubevirtApiConfigCodec.java
+++ b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/codec/KubevirtApiConfigCodec.java
@@ -43,6 +43,7 @@
private static final String CLIENT_KEY_DATA = "clientKeyData";
private static final String SERVICE_FQDN = "serviceFqdn";
private static final String API_SERVER_FQDN = "apiServerFqdn";
+ private static final String CONTROLLER_IP = "controllerIp";
private static final String MISSING_MESSAGE = " is required in KubevirtApiConfig";
@@ -89,6 +90,10 @@
node.put(API_SERVER_FQDN, entity.apiServerFqdn());
}
+ if (entity.controllerIp() != null) {
+ node.put(CONTROLLER_IP, entity.controllerIp().toString());
+ }
+
return node;
}
@@ -116,6 +121,7 @@
JsonNode clientKeyDataJson = json.get(CLIENT_KEY_DATA);
JsonNode serviceFqdn = json.get(SERVICE_FQDN);
JsonNode apiServerFqdn = json.get(API_SERVER_FQDN);
+ JsonNode controllerIp = json.get(CONTROLLER_IP);
String token = "";
String caCertData = "";
@@ -176,6 +182,10 @@
builder.apiServerFqdn(apiServerFqdn.asText());
}
+ if (controllerIp != null) {
+ builder.controllerIp(IpAddress.valueOf(controllerIp.asText()));
+ }
+
return builder.build();
}
}
diff --git a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/DefaultKubevirtNodeHandler.java b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/DefaultKubevirtNodeHandler.java
index de45151..3408ed1 100644
--- a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/DefaultKubevirtNodeHandler.java
+++ b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/DefaultKubevirtNodeHandler.java
@@ -303,21 +303,23 @@
private void createBridge(KubevirtNode node, String bridgeName, DeviceId devId) {
Device device = deviceService.getDevice(node.ovsdb());
- IpAddress serverIp;
+ IpAddress controllerIp = apiConfigService.apiConfig().controllerIp();
String serviceFqdn = apiConfigService.apiConfig().serviceFqdn();
IpAddress serviceIp = null;
- if (serviceFqdn != null) {
- serviceIp = resolveHostname(serviceFqdn);
+ if (controllerIp == null) {
+ if (serviceFqdn != null) {
+ serviceIp = resolveHostname(serviceFqdn);
+ }
+
+ if (serviceIp != null) {
+ controllerIp = serviceIp;
+ } else {
+ controllerIp = apiConfigService.apiConfig().ipAddress();
+ }
}
- if (serviceIp != null) {
- serverIp = serviceIp;
- } else {
- serverIp = apiConfigService.apiConfig().ipAddress();
- }
-
- ControllerInfo controlInfo = new ControllerInfo(serverIp, DEFAULT_OFPORT, DEFAULT_OF_PROTO);
+ ControllerInfo controlInfo = new ControllerInfo(controllerIp, DEFAULT_OFPORT, DEFAULT_OF_PROTO);
List<ControllerInfo> controllers = Lists.newArrayList(controlInfo);
String dpid = devId.toString().substring(DPID_BEGIN);
diff --git a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/web/KubevirtNodeWebResource.java b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/web/KubevirtNodeWebResource.java
index c3861f7..b659ec6 100644
--- a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/web/KubevirtNodeWebResource.java
+++ b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/web/KubevirtNodeWebResource.java
@@ -23,6 +23,7 @@
import org.onosproject.kubevirtnode.api.KubevirtApiConfigService;
import org.onosproject.kubevirtnode.api.KubevirtNode;
import org.onosproject.kubevirtnode.api.KubevirtNodeAdminService;
+import org.onosproject.kubevirtnode.api.KubevirtNodeService;
import org.onosproject.kubevirtnode.api.KubevirtNodeState;
import org.onosproject.rest.AbstractWebResource;
import org.slf4j.Logger;
@@ -281,11 +282,28 @@
@Path("healthz")
public Response healthz() {
KubevirtApiConfigService configService = get(KubevirtApiConfigService.class);
- KubevirtApiConfig config = configService.apiConfig();
+ KubevirtNodeService nodeService = get(KubevirtNodeService.class);
// TODO: we need to add more health check items
+ boolean allInit = true;
+ KubevirtApiConfig config = configService.apiConfig();
+
+ if (nodeService.nodes().size() == 0) {
+ allInit = false;
+ } else {
+ for (KubevirtNode node : nodeService.nodes()) {
+ if (node.state() != INIT) {
+ allInit = false;
+ }
+ }
+ }
+
+ String result = ERROR;
+ if (config != null && !allInit) {
+ result = OK;
+ }
+
ObjectNode jsonResult = mapper().createObjectNode();
- String result = config != null ? OK : ERROR;
jsonResult.put(API_CONFIG, result);
return ok(jsonResult).build();
}