use of org.ballerinax.kubernetes.models.ConfigMapModel 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.models.ConfigMapModel in project kubernetes by ballerinax.
the class KubernetesAnnotationProcessor method processConfigMap.
/**
* Process ConfigMap annotations.
*
* @param attachmentNode Attachment Node
* @return Set of @{@link ConfigMapModel} objects
*/
Set<ConfigMapModel> processConfigMap(AnnotationAttachmentNode attachmentNode) throws KubernetesPluginException {
Set<ConfigMapModel> configMapModels = new HashSet<>();
List<BLangRecordLiteral.BLangRecordKeyValue> keyValues = ((BLangRecordLiteral) ((BLangAnnotationAttachment) attachmentNode).expr).getKeyValuePairs();
for (BLangRecordLiteral.BLangRecordKeyValue keyValue : keyValues) {
List<BLangExpression> configAnnotation = ((BLangArrayLiteral) keyValue.valueExpr).exprs;
for (BLangExpression bLangExpression : configAnnotation) {
ConfigMapModel configMapModel = new ConfigMapModel();
List<BLangRecordLiteral.BLangRecordKeyValue> annotationValues = ((BLangRecordLiteral) bLangExpression).getKeyValuePairs();
for (BLangRecordLiteral.BLangRecordKeyValue annotation : annotationValues) {
VolumeMountConfig volumeMountConfig = VolumeMountConfig.valueOf(annotation.getKey().toString());
String annotationValue = resolveValue(annotation.getValue().toString());
switch(volumeMountConfig) {
case name:
configMapModel.setName(getValidName(annotationValue));
break;
case mountPath:
configMapModel.setMountPath(annotationValue);
break;
case isBallerinaConf:
configMapModel.setBallerinaConf(Boolean.parseBoolean(annotationValue));
break;
case data:
List<BLangExpression> data = ((BLangArrayLiteral) annotation.valueExpr).exprs;
configMapModel.setData(getDataForConfigMap(data));
break;
case readOnly:
configMapModel.setReadOnly(Boolean.parseBoolean(annotationValue));
break;
default:
break;
}
}
configMapModels.add(configMapModel);
}
}
return configMapModels;
}
use of org.ballerinax.kubernetes.models.ConfigMapModel in project kubernetes by ballerinax.
the class DeploymentHandler method populateVolumeMounts.
private List<VolumeMount> populateVolumeMounts(DeploymentModel deploymentModel) {
List<VolumeMount> volumeMounts = new ArrayList<>();
for (SecretModel secretModel : deploymentModel.getSecretModels()) {
VolumeMount volumeMount = new VolumeMountBuilder().withMountPath(secretModel.getMountPath()).withName(secretModel.getName() + "-volume").withReadOnly(secretModel.isReadOnly()).build();
volumeMounts.add(volumeMount);
}
for (ConfigMapModel configMapModel : deploymentModel.getConfigMapModels()) {
VolumeMount volumeMount = new VolumeMountBuilder().withMountPath(configMapModel.getMountPath()).withName(configMapModel.getName() + "-volume").withReadOnly(configMapModel.isReadOnly()).build();
volumeMounts.add(volumeMount);
}
for (PersistentVolumeClaimModel volumeClaimModel : deploymentModel.getVolumeClaimModels()) {
VolumeMount volumeMount = new VolumeMountBuilder().withMountPath(volumeClaimModel.getMountPath()).withName(volumeClaimModel.getName() + "-volume").withReadOnly(volumeClaimModel.isReadOnly()).build();
volumeMounts.add(volumeMount);
}
return volumeMounts;
}
use of org.ballerinax.kubernetes.models.ConfigMapModel in project kubernetes by ballerinax.
the class DeploymentHandler method populateVolume.
private List<Volume> populateVolume(DeploymentModel deploymentModel) {
List<Volume> volumes = new ArrayList<>();
for (SecretModel secretModel : deploymentModel.getSecretModels()) {
Volume volume = new VolumeBuilder().withName(secretModel.getName() + "-volume").withNewSecret().withSecretName(secretModel.getName()).endSecret().build();
volumes.add(volume);
}
for (ConfigMapModel configMapModel : deploymentModel.getConfigMapModels()) {
Volume volume = new VolumeBuilder().withName(configMapModel.getName() + "-volume").withNewConfigMap().withName(configMapModel.getName()).endConfigMap().build();
volumes.add(volume);
}
for (PersistentVolumeClaimModel volumeClaimModel : deploymentModel.getVolumeClaimModels()) {
Volume volume = new VolumeBuilder().withName(volumeClaimModel.getName() + "-volume").withNewPersistentVolumeClaim().withClaimName(volumeClaimModel.getName()).endPersistentVolumeClaim().build();
volumes.add(volume);
}
return volumes;
}
Aggregations