Generate kubevirt network from NetworkAttachmentDefinition CRD
Change-Id: Id16d2a8471b75500e968a96b5597a22a9972e0b0
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
index c7051bb..cef1f95 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
@@ -16,10 +16,15 @@
package org.onosproject.kubevirtnetworking.util;
import com.fasterxml.jackson.databind.ObjectMapper;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.DefaultKubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClient;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.util.SubnetUtils;
import org.onlab.packet.IpAddress;
import org.onosproject.cfg.ConfigProperty;
+import org.onosproject.kubevirtnode.api.KubevirtApiConfig;
+import org.onosproject.kubevirtnode.api.KubevirtApiConfigService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,6 +44,8 @@
private static final Logger log = LoggerFactory.getLogger(KubevirtNetworkingUtil.class);
private static final int PORT_NAME_MAX_LENGTH = 15;
+ private static final String COLON_SLASH = "://";
+ private static final String COLON = ":";
/**
* Prevents object installation from external.
@@ -145,4 +152,84 @@
SubnetUtils utils = new SubnetUtils(subnet);
return utils.getInfo().getBroadcastAddress();
}
+ /**
+ * Generates endpoint URL by referring to scheme, ipAddress and port.
+ *
+ * @param scheme scheme
+ * @param ipAddress IP address
+ * @param port port number
+ * @return generated endpoint URL
+ */
+ public static String endpoint(KubevirtApiConfig.Scheme scheme, IpAddress ipAddress, int port) {
+ StringBuilder endpoint = new StringBuilder();
+ String protocol = org.apache.commons.lang3.StringUtils.lowerCase(scheme.name());
+
+ endpoint.append(protocol);
+ endpoint.append(COLON_SLASH);
+ endpoint.append(ipAddress.toString());
+ endpoint.append(COLON);
+ endpoint.append(port);
+
+ return endpoint.toString();
+ }
+
+ /**
+ * Generates endpoint URL by referring to scheme, ipAddress and port.
+ *
+ * @param apiConfig kubernetes API config
+ * @return generated endpoint URL
+ */
+ public static String endpoint(KubevirtApiConfig apiConfig) {
+ return endpoint(apiConfig.scheme(), apiConfig.ipAddress(), apiConfig.port());
+ }
+
+ /**
+ * Obtains workable kubernetes client.
+ *
+ * @param config kubernetes API config
+ * @return kubernetes client
+ */
+ public static KubernetesClient k8sClient(KubevirtApiConfig config) {
+ if (config == null) {
+ log.warn("Kubernetes API server config is empty.");
+ return null;
+ }
+
+ String endpoint = endpoint(config);
+
+ ConfigBuilder configBuilder = new ConfigBuilder().withMasterUrl(endpoint);
+
+ if (config.scheme() == KubevirtApiConfig.Scheme.HTTPS) {
+ configBuilder.withTrustCerts(true)
+ .withOauthToken(config.token())
+ .withCaCertData(config.caCertData())
+ .withClientCertData(config.clientCertData())
+ .withClientKeyData(config.clientKeyData());
+ }
+
+ return new DefaultKubernetesClient(configBuilder.build());
+ }
+
+ /**
+ * Obtains workable kubernetes client.
+ *
+ * @param service kubernetes API service
+ * @return kubernetes client
+ */
+ public static KubernetesClient k8sClient(KubevirtApiConfigService service) {
+ KubevirtApiConfig config = service.apiConfig();
+ if (config == null) {
+ log.error("Failed to find valid kubernetes API configuration.");
+ return null;
+ }
+
+ KubernetesClient client = k8sClient(config);
+
+ if (client == null) {
+ log.error("Failed to connect to kubernetes API server.");
+ return null;
+ }
+
+ return client;
+ }
}