use of org.ballerinax.kubernetes.exceptions.KubernetesPluginException in project kubernetes by ballerinax.
the class KubernetesAnnotationProcessor method createArtifacts.
/**
* Generate kubernetes artifacts.
*
* @param kubernetesDataHolder Kubernetes data holder object
* @param balxFilePath ballerina file path
* @param outputDir output directory to save artifacts
* @throws KubernetesPluginException if an error ocurrs while generating artifacts
*/
void createArtifacts(KubernetesDataHolder kubernetesDataHolder, String balxFilePath, String outputDir) throws KubernetesPluginException {
DeploymentModel deploymentModel = kubernetesDataHolder.getDeploymentModel();
if (deploymentModel == null) {
deploymentModel = getDefaultDeploymentModel(balxFilePath);
}
kubernetesDataHolder.setDeploymentModel(deploymentModel);
deploymentModel.setPorts(kubernetesDataHolder.getPorts());
deploymentModel.setPodAutoscalerModel(kubernetesDataHolder.getPodAutoscalerModel());
deploymentModel.setSecretModels(kubernetesDataHolder.getSecrets());
deploymentModel.setConfigMapModels(kubernetesDataHolder.getConfigMaps());
deploymentModel.setVolumeClaimModels(kubernetesDataHolder.getPersistentVolumeClaims());
// Service
Collection<ServiceModel> serviceModels = kubernetesDataHolder.getEndpointToServiceModelMap().values();
int count = 0;
for (ServiceModel serviceModel : serviceModels) {
count++;
generateService(serviceModel, balxFilePath, outputDir);
out.print("@kubernetes:Service \t\t\t - complete " + count + "/" + serviceModels.size() + "\r");
}
// ingress
count = 0;
Map<IngressModel, Set<String>> ingressModels = kubernetesDataHolder.getIngressToEndpointMap();
if (ingressModels.size() > 0) {
out.println();
}
int size = ingressModels.size();
Map<String, ServiceModel> endpointMap = kubernetesDataHolder.getEndpointToServiceModelMap();
Iterator<Map.Entry<IngressModel, Set<String>>> iterator = ingressModels.entrySet().iterator();
Map<String, Set<SecretModel>> secretModelsMap = kubernetesDataHolder.getSecretModels();
while (iterator.hasNext()) {
Map.Entry<IngressModel, Set<String>> pair = iterator.next();
IngressModel ingressModel = pair.getKey();
Set<String> endpoints = pair.getValue();
for (String endpointName : endpoints) {
ServiceModel serviceModel = endpointMap.get(endpointName);
ingressModel.setServiceName(serviceModel.getName());
ingressModel.setServicePort(serviceModel.getPort());
if (secretModelsMap.get(endpointName) != null && secretModelsMap.get(endpointName).size() != 0) {
ingressModel.setEnableTLS(true);
}
}
generateIngress(ingressModel, balxFilePath, outputDir);
count++;
out.print("@kubernetes:Ingress \t\t\t - complete " + count + "/" + size + "\r");
iterator.remove();
}
// secret
count = 0;
Collection<SecretModel> secretModels = kubernetesDataHolder.getSecrets();
if (secretModels.size() > 0) {
out.println();
}
for (SecretModel secretModel : secretModels) {
count++;
generateSecrets(secretModel, balxFilePath, outputDir);
out.print("@kubernetes:Secret \t\t\t - complete " + count + "/" + secretModels.size() + "\r");
}
// configMap
count = 0;
Collection<ConfigMapModel> configMapModels = kubernetesDataHolder.getConfigMaps();
if (configMapModels.size() > 0) {
out.println();
}
for (ConfigMapModel configMapModel : configMapModels) {
count++;
if (configMapModel.isBallerinaConf()) {
if (configMapModel.getData().size() != 1) {
throw new KubernetesPluginException("There can be only 1 ballerina config file");
}
deploymentModel.setCommandArgs(" --config ${CONFIG_FILE} ");
deploymentModel.addEnv("CONFIG_FILE", configMapModel.getMountPath() + File.separator + configMapModel.getData().keySet().iterator().next());
}
generateConfigMaps(configMapModel, balxFilePath, outputDir);
out.print("@kubernetes:ConfigMap \t\t\t - complete " + count + "/" + configMapModels.size() + "\r");
}
// volume mount
count = 0;
Collection<PersistentVolumeClaimModel> volumeClaims = kubernetesDataHolder.getPersistentVolumeClaims();
if (volumeClaims.size() > 0) {
out.println();
}
for (PersistentVolumeClaimModel claimModel : volumeClaims) {
count++;
generatePersistentVolumeClaim(claimModel, balxFilePath, outputDir);
out.print("@kubernetes:VolumeClaim \t\t - complete " + count + "/" + volumeClaims.size() + "\r");
}
out.println();
generateDeployment(deploymentModel, balxFilePath, outputDir);
out.println();
out.println("@kubernetes:Deployment \t\t\t - complete 1/1");
out.println();
printKubernetesInstructions(outputDir);
}
use of org.ballerinax.kubernetes.exceptions.KubernetesPluginException in project kubernetes by ballerinax.
the class KubernetesAnnotationProcessor method generateConfigMaps.
private void generateConfigMaps(ConfigMapModel configMapModel, String balxFilePath, String outputDir) throws KubernetesPluginException {
String balxFileName = KubernetesUtils.extractBalxName(balxFilePath);
String configMapContent = new ConfigMapHandler(configMapModel).generate();
try {
KubernetesUtils.writeToFile(configMapContent, outputDir + File.separator + balxFileName + CONFIG_MAP_FILE_POSTFIX + YAML);
} catch (IOException e) {
throw new KubernetesPluginException("Error while writing config map content", e);
}
}
use of org.ballerinax.kubernetes.exceptions.KubernetesPluginException in project kubernetes by ballerinax.
the class DeploymentHandler method generate.
/**
* Generate kubernetes deployment definition from annotation.
*
* @return Generated kubernetes @{@link Deployment} definition
* @throws KubernetesPluginException If an error occurs while generating artifact.
*/
public String generate() throws KubernetesPluginException {
List<ContainerPort> containerPorts = null;
if (deploymentModel.getPorts() != null) {
containerPorts = populatePorts(deploymentModel.getPorts());
}
Container container = generateContainer(deploymentModel, containerPorts);
Deployment deployment = new DeploymentBuilder().withNewMetadata().withName(deploymentModel.getName()).withNamespace(deploymentModel.getNamespace()).withLabels(deploymentModel.getLabels()).endMetadata().withNewSpec().withReplicas(deploymentModel.getReplicas()).withNewTemplate().withNewMetadata().addToLabels(deploymentModel.getLabels()).endMetadata().withNewSpec().withContainers(container).withVolumes(populateVolume(deploymentModel)).endSpec().endTemplate().endSpec().build();
try {
return SerializationUtils.dumpWithoutRuntimeStateAsYaml(deployment);
} catch (JsonProcessingException e) {
String errorMessage = "Error while parsing yaml file for deployment: " + deploymentModel.getName();
throw new KubernetesPluginException(errorMessage, e);
}
}
use of org.ballerinax.kubernetes.exceptions.KubernetesPluginException in project kubernetes by ballerinax.
the class KubernetesIngressGeneratorTests method testIngressGenerator.
@Test
public void testIngressGenerator() {
IngressModel ingressModel = new IngressModel();
ingressModel.setName("MyIngress");
ingressModel.setHostname("abc.com");
ingressModel.setPath("/helloworld");
ingressModel.setServicePort(9090);
ingressModel.setIngressClass("nginx");
ingressModel.setServiceName("HelloWorldService");
Map<String, String> labels = new HashMap<>();
labels.put(KubernetesConstants.KUBERNETES_SELECTOR_KEY, "TestAPP");
ingressModel.setLabels(labels);
IngressHandler kubernetesIngressGenerator = new IngressHandler(ingressModel);
try {
String ingressYaml = kubernetesIngressGenerator.generate();
Assert.assertNotNull(ingressYaml);
File artifactLocation = new File("target/kubernetes");
artifactLocation.mkdir();
File tempFile = File.createTempFile("temp", ingressModel.getName() + ".yaml", artifactLocation);
KubernetesUtils.writeToFile(ingressYaml, tempFile.getPath());
log.info("Generated YAML: \n" + ingressYaml);
Assert.assertTrue(tempFile.exists());
// tempFile.deleteOnExit();
} catch (IOException e) {
Assert.fail("Unable to write to file");
} catch (KubernetesPluginException e) {
Assert.fail("Unable to generate yaml from ingress");
}
}
use of org.ballerinax.kubernetes.exceptions.KubernetesPluginException in project kubernetes by ballerinax.
the class KubernetesServiceGeneratorTests method testServiceGenerate.
@Test
public void testServiceGenerate() {
ServiceModel serviceModel = new ServiceModel();
serviceModel.setName("MyService");
serviceModel.setPort(9090);
serviceModel.setServiceType("NodePort");
serviceModel.setSelector("MyAPP");
Map<String, String> labels = new HashMap<>();
labels.put(KubernetesConstants.KUBERNETES_SELECTOR_KEY, "TestAPP");
serviceModel.setLabels(labels);
ServiceHandler kubernetesServiceGenerator = new ServiceHandler(serviceModel);
try {
String serviceYAML = kubernetesServiceGenerator.generate();
Assert.assertNotNull(serviceYAML);
File artifactLocation = new File("target/kubernetes");
artifactLocation.mkdir();
File tempFile = File.createTempFile("temp", serviceModel.getName() + ".yaml", artifactLocation);
KubernetesUtils.writeToFile(serviceYAML, tempFile.getPath());
log.info("Generated YAML: \n" + serviceYAML);
Assert.assertTrue(tempFile.exists());
// tempFile.deleteOnExit();
} catch (IOException e) {
Assert.fail("Unable to write to file");
} catch (KubernetesPluginException e) {
Assert.fail("Unable to generate yaml from service");
}
}
Aggregations