+++ /dev/null
-/*
- * Copyright 2020 Huawei Technologies Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.eliot.eliotbe.eliotk8sclient.deploy.kubernetes;
-
-import com.eliot.eliotbe.eliotk8sclient.deploy.GenericDeploy;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-import io.kubernetes.client.models.*;
-import io.kubernetes.client.util.Yaml;
-import org.jose4j.json.internal.json_simple.JSONObject;
-import org.jose4j.json.internal.json_simple.parser.JSONParser;
-import org.jose4j.json.internal.json_simple.parser.ParseException;
-import com.eliot.eliotbe.eliotk8sclient.common.AppConstants;
-import com.eliot.eliotbe.eliotk8sclient.deploy.GenericDeploy;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.*;
-
-public class KubernetesDeploy extends GenericDeploy {
- private static final Logger logger = LoggerFactory.getLogger(KubernetesDeploy.class);
-
- private static final Map<String,Class<?>> kindClassMap = new HashMap<String, Class<?>>() {
- private static final long serialVersionUID = 3033314593899228898L;
- {
- put("Pod",V1Pod.class);
- put("Deployment",V1Deployment.class);
- put("PersistentVolume",V1PersistentVolume.class);
- put("PersistentVolumeClaim",V1PersistentVolumeClaim.class);
- put("Service",V1Service.class);
- }
- };
- /**
- * deploy.
- * @param packagepath packagepath
- * @return
- */
- public String deploy(String dstYamlFilePath) {
- //String dstYamlFilePath = findDeploymentYamlPath(packagepath);
- if (StringUtils.isEmpty(dstYamlFilePath)) {
- logger.error("not found deploy yaml file.");
- return AppConstants.EMPTY_STRING;
- }
- String yamlContent = readYamlFile(dstYamlFilePath);
- String yamlStr = null;
- try {
- logger.info("before kube config installation ");
- yamlStr = deployByYaml(yamlContent,dstYamlFilePath);
- } catch (IOException e) {
- logger.error("invoke method deployYaml fail : {}",e.getMessage());
- return AppConstants.EMPTY_STRING;
- }
- return yamlStr;
- }
-
- private String findDeploymentYamlPath(String packagepath) {
- List<String> result = new ArrayList<>();
- search(".*\\.yaml", new File(packagepath), result);
- String dstYamlFilePath = null;
- for (String path : result) {
- if (path.contains("Deployment")) {
- dstYamlFilePath = path;
- }
- }
- return dstYamlFilePath;
- }
-
- protected String readYamlFile(String pathname) {
- File file = new File(pathname);
- StringBuilder fileContents = new StringBuilder((int) file.length());
- Scanner scanner;
- try {
- scanner = new Scanner(file, "UTF-8");
- } catch (FileNotFoundException e) {
- logger.error("read yaml file fail : {}",e.getMessage());
- return "";
- }
-
- String lineSeparator = System.getProperty("line.separator");
- try {
- while (scanner.hasNextLine()) {
- fileContents.append(scanner.nextLine() + lineSeparator);
- }
- return fileContents.toString();
- } finally {
- scanner.close();
- }
- }
-
- protected void addModelMap(String apiVersion, String kind) {
- if (kindClassMap.containsKey(kind)) {
- Yaml.addModelMap(apiVersion, kind, kindClassMap.get(kind));
- logger.info("after addModelMap for {}",kindClassMap.get(kind).getName());
- return;
- }
- logger.error("not found kind : {}",kind);
- }
-
- private String deployByYaml(String yamlContent, String dstYamlFilePath) throws IOException {
- logger.info("Inside updateDeploymentYaml to install pod and service");
- ObjectMapper yamlReader = new ObjectMapper(new YAMLFactory());
- for (String ret : yamlContent.split("---")) {
- if (StringUtils.isEmpty(ret)) {
- continue;
- }
- Object obj = yamlReader.readValue(ret, Object.class);
- String data = new ObjectMapper().writeValueAsString(obj);
- try {
- JSONObject json = (JSONObject) new JSONParser().parse(data);
- if (json.get("kind") == null) {
- continue;
- }
- String kind = json.get("kind").toString();
- String apiVersion = json.get("apiVersion").toString();
- addModelMap(apiVersion,kind);
- } catch (ParseException e) {
- logger.error("parse data fail : {}",e.getMessage());
- }
- }
- IDeploy deployment = DeployFactory.create();
- return deployment.deploy(dstYamlFilePath);
- }
-}