use of io.stackgres.common.crd.sgbackupconfig.StackGresBaseBackupConfig in project stackgres by ongres.
the class BackupCronJob method createCronJob.
private CronJob createCronJob(StackGresClusterContext context, StackGresBackupConfig backupConfig) {
String namespace = context.getSource().getMetadata().getNamespace();
String name = context.getSource().getMetadata().getName();
final StackGresCluster cluster = context.getSource();
Map<String, String> labels = labelFactory.scheduledBackupPodLabels(cluster);
return new CronJobBuilder().withNewMetadata().withNamespace(namespace).withName(backupName(context)).withLabels(labels).endMetadata().withNewSpec().withConcurrencyPolicy("Allow").withFailedJobsHistoryLimit(10).withStartingDeadlineSeconds(5 * 60L).withSchedule(Optional.of(backupConfig).map(StackGresBackupConfig::getSpec).map(StackGresBackupConfigSpec::getBaseBackups).map(StackGresBaseBackupConfig::getCronSchedule).orElse("0 5 * * *")).withJobTemplate(new JobTemplateSpecBuilder().withNewMetadata().withNamespace(namespace).withName(backupName(context)).withLabels(labels).endMetadata().withNewSpec().withBackoffLimit(3).withCompletions(1).withParallelism(1).withNewTemplate().withNewMetadata().withNamespace(namespace).withName(backupName(context)).withLabels(labels).endMetadata().withNewSpec().withSecurityContext(podSecurityFactory.createResource(context)).withRestartPolicy("OnFailure").withServiceAccountName(PatroniRoleGenerator.roleName(context)).withContainers(new ContainerBuilder().withName("create-backup").withImage(StackGresComponent.KUBECTL.findLatestImageName()).withImagePullPolicy("IfNotPresent").withEnv(ImmutableList.<EnvVar>builder().addAll(getClusterEnvVars(context)).add(new EnvVarBuilder().withName("CLUSTER_NAMESPACE").withValue(namespace).build(), new EnvVarBuilder().withName("CLUSTER_NAME").withValue(name).build(), new EnvVarBuilder().withName("CRONJOB_NAME").withValue(backupName(context)).build(), new EnvVarBuilder().withName("BACKUP_CONFIG_CRD_NAME").withValue(CustomResource.getCRDName(StackGresBackupConfig.class)).build(), new EnvVarBuilder().withName("BACKUP_CONFIG").withValue(backupConfig.getMetadata().getName()).build(), new EnvVarBuilder().withName("BACKUP_CRD_KIND").withValue(HasMetadata.getKind(StackGresBackup.class)).build(), new EnvVarBuilder().withName("BACKUP_CRD_NAME").withValue(CustomResource.getCRDName(StackGresBackup.class)).build(), new EnvVarBuilder().withName("BACKUP_CRD_APIVERSION").withValue(HasMetadata.getApiVersion(StackGresBackup.class)).build(), new EnvVarBuilder().withName("BACKUP_PHASE_RUNNING").withValue(BackupPhase.RUNNING.label()).build(), new EnvVarBuilder().withName("BACKUP_PHASE_COMPLETED").withValue(BackupPhase.COMPLETED.label()).build(), new EnvVarBuilder().withName("BACKUP_PHASE_FAILED").withValue(BackupPhase.FAILED.label()).build(), new EnvVarBuilder().withName("PATRONI_ROLE_KEY").withValue(StackGresContext.ROLE_KEY).build(), new EnvVarBuilder().withName("PATRONI_PRIMARY_ROLE").withValue(StackGresContext.PRIMARY_ROLE).build(), new EnvVarBuilder().withName("PATRONI_REPLICA_ROLE").withValue(StackGresContext.REPLICA_ROLE).build(), new EnvVarBuilder().withName("SCHEDULED_BACKUP_KEY").withValue(StackGresContext.SCHEDULED_BACKUP_KEY).build(), new EnvVarBuilder().withName("RIGHT_VALUE").withValue(StackGresContext.RIGHT_VALUE).build(), new EnvVarBuilder().withName("PATRONI_CLUSTER_LABELS").withValue(labelFactory.patroniClusterLabels(cluster).entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining(","))).build(), new EnvVarBuilder().withName("PATRONI_CONTAINER_NAME").withValue(StackgresClusterContainers.PATRONI).build(), new EnvVarBuilder().withName("SERVICE_ACCOUNT").withValueFrom(new EnvVarSourceBuilder().withFieldRef(new ObjectFieldSelectorBuilder().withFieldPath("spec.serviceAccountName").build()).build()).build(), new EnvVarBuilder().withName("POD_NAME").withValueFrom(new EnvVarSourceBuilder().withFieldRef(new ObjectFieldSelectorBuilder().withFieldPath("metadata.name").build()).build()).build(), new EnvVarBuilder().withName("RETAIN").withValue(Optional.of(backupConfig).map(StackGresBackupConfig::getSpec).map(StackGresBackupConfigSpec::getBaseBackups).map(StackGresBaseBackupConfig::getRetention).map(String::valueOf).orElse("5")).build(), new EnvVarBuilder().withName("WINDOW").withValue("3600").build()).build()).withCommand("/bin/bash", "-e" + (BACKUP_LOGGER.isTraceEnabled() ? "x" : ""), ClusterStatefulSetPath.LOCAL_BIN_CREATE_BACKUP_SH_PATH.path()).withVolumeMounts(ClusterStatefulSetVolumeConfig.TEMPLATES.volumeMount(context, volumeMountBuilder -> volumeMountBuilder.withSubPath(ClusterStatefulSetPath.LOCAL_BIN_CREATE_BACKUP_SH_PATH.filename()).withMountPath(ClusterStatefulSetPath.LOCAL_BIN_CREATE_BACKUP_SH_PATH.path()).withReadOnly(true)), ClusterStatefulSetVolumeConfig.TEMPLATES.volumeMount(context, volumeMountBuilder -> volumeMountBuilder.withSubPath(ClusterStatefulSetPath.LOCAL_BIN_SHELL_UTILS_PATH.filename()).withMountPath(ClusterStatefulSetPath.LOCAL_BIN_SHELL_UTILS_PATH.path()).withReadOnly(true))).build()).withVolumes(new VolumeBuilder(ClusterStatefulSetVolumeConfig.TEMPLATES.volume(context)).editConfigMap().withDefaultMode(// NOPMD
0555).endConfigMap().build()).endSpec().endTemplate().endSpec().build()).endSpec().build();
}
use of io.stackgres.common.crd.sgbackupconfig.StackGresBaseBackupConfig in project stackgres by ongres.
the class BackupConfigTransformer method getResourceSpec.
public BackupConfigSpec getResourceSpec(StackGresBackupConfigSpec source) {
if (source == null) {
return null;
}
BackupConfigSpec transformation = new BackupConfigSpec();
Optional.ofNullable(source.getBaseBackups()).ifPresent(sourceBaseBackup -> {
final BaseBackupConfig baseBackup = new BaseBackupConfig();
baseBackup.setCompressionMethod(sourceBaseBackup.getCompression());
baseBackup.setCronSchedule(sourceBaseBackup.getCronSchedule());
baseBackup.setRetention(sourceBaseBackup.getRetention());
transformation.setBaseBackup(baseBackup);
});
Optional.ofNullable(source.getBaseBackups()).map(StackGresBaseBackupConfig::getPerformance).ifPresent(sourcePerformance -> {
final BaseBackupPerformance performance = new BaseBackupPerformance();
performance.setMaxDiskBandwitdh(sourcePerformance.getMaxDiskBandwitdh());
performance.setMaxNetworkBandwitdh(sourcePerformance.getMaxNetworkBandwitdh());
performance.setUploadDiskConcurrency(sourcePerformance.getUploadDiskConcurrency());
transformation.getBaseBackups().setPerformance(performance);
});
transformation.setStorage(getResourceStorage(source.getStorage()));
return transformation;
}
use of io.stackgres.common.crd.sgbackupconfig.StackGresBaseBackupConfig in project stackgres by ongres.
the class BackupConfigTransformer method getCustomResourceSpec.
public StackGresBackupConfigSpec getCustomResourceSpec(BackupConfigSpec source) {
if (source == null) {
return null;
}
StackGresBackupConfigSpec transformation = new StackGresBackupConfigSpec();
Optional.ofNullable(source.getBaseBackups()).ifPresent(sourceBaseBackup -> {
final StackGresBaseBackupConfig baseBackup = new StackGresBaseBackupConfig();
transformation.setBaseBackups(baseBackup);
baseBackup.setCompression(source.getBaseBackups().getCompressionMethod());
baseBackup.setCronSchedule(sourceBaseBackup.getCronSchedule());
baseBackup.setRetention(sourceBaseBackup.getRetention());
});
Optional.ofNullable(source.getBaseBackups()).map(BaseBackupConfig::getPerformance).ifPresent(sourcePerformance -> {
final StackGresBaseBackupPerformance performance = new StackGresBaseBackupPerformance();
transformation.getBaseBackups().setPerformance(performance);
performance.setMaxDiskBandwitdh(sourcePerformance.getMaxDiskBandwitdh());
performance.setMaxNetworkBandwitdh(sourcePerformance.getMaxNetworkBandwitdh());
performance.setUploadDiskConcurrency(sourcePerformance.getUploadDiskConcurrency());
});
transformation.setStorage(getCustomResourceStorage(source.getStorage()));
return transformation;
}
use of io.stackgres.common.crd.sgbackupconfig.StackGresBaseBackupConfig in project stackgres by ongres.
the class BackupJob method createBackupJob.
private HasMetadata createBackupJob(StackGresBackupContext context) {
StackGresBackup backup = context.getSource();
StackGresBackupConfig backupConfig = context.getBackupConfig();
String namespace = backup.getMetadata().getNamespace();
String name = backup.getMetadata().getName();
String cluster = backup.getSpec().getSgCluster();
Map<String, String> labels = labelFactory.backupPodLabels(context.getSource());
final VolumeMount utilsVolumeMount = ClusterStatefulSetVolumeConfig.TEMPLATES.volumeMount(context, volumeMountBuilder -> volumeMountBuilder.withSubPath(ClusterStatefulSetPath.LOCAL_BIN_SHELL_UTILS_PATH.filename()).withMountPath(ClusterStatefulSetPath.LOCAL_BIN_SHELL_UTILS_PATH.path()).withReadOnly(true));
final VolumeMount backupVolumeMount = ClusterStatefulSetVolumeConfig.TEMPLATES.volumeMount(context, volumeMountBuilder -> volumeMountBuilder.withSubPath(ClusterStatefulSetPath.LOCAL_BIN_CREATE_BACKUP_SH_PATH.filename()).withMountPath(ClusterStatefulSetPath.LOCAL_BIN_CREATE_BACKUP_SH_PATH.path()).withReadOnly(true));
return new JobBuilder().withNewMetadata().withNamespace(namespace).withName(backupJobName(backup)).withLabels(labels).endMetadata().withNewSpec().withBackoffLimit(3).withCompletions(1).withParallelism(1).withNewTemplate().withNewMetadata().withNamespace(namespace).withName(backupJobName(backup)).withLabels(labels).endMetadata().withNewSpec().withSecurityContext(podSecurityFactory.createResource(context)).withRestartPolicy("OnFailure").withServiceAccountName(PatroniRoleGenerator.roleName(context)).withContainers(new ContainerBuilder().withName("create-backup").withImage(StackGresComponent.KUBECTL.findLatestImageName()).withImagePullPolicy("IfNotPresent").withEnv(ImmutableList.<EnvVar>builder().addAll(getClusterEnvVars(context)).add(new EnvVarBuilder().withName("CLUSTER_NAMESPACE").withValue(namespace).build(), new EnvVarBuilder().withName("BACKUP_NAME").withValue(name).build(), new EnvVarBuilder().withName("CLUSTER_NAME").withValue(cluster).build(), new EnvVarBuilder().withName("CRONJOB_NAME").withValue(cluster + StackGresUtil.BACKUP_SUFFIX).build(), new EnvVarBuilder().withName("BACKUP_IS_PERMANENT").withValue(Optional.ofNullable(backup.getSpec().getManagedLifecycle()).map(managedLifecycle -> !managedLifecycle).map(String::valueOf).orElse("true")).build(), new EnvVarBuilder().withName("BACKUP_CONFIG_CRD_NAME").withValue(CustomResource.getCRDName(StackGresBackupConfig.class)).build(), new EnvVarBuilder().withName("BACKUP_CONFIG").withValue(backupConfig.getMetadata().getName()).build(), new EnvVarBuilder().withName("BACKUP_CRD_KIND").withValue(HasMetadata.getKind(StackGresBackup.class)).build(), new EnvVarBuilder().withName("BACKUP_CRD_NAME").withValue(CustomResource.getCRDName(StackGresBackup.class)).build(), new EnvVarBuilder().withName("BACKUP_CRD_APIVERSION").withValue(HasMetadata.getApiVersion(StackGresBackup.class)).build(), new EnvVarBuilder().withName("BACKUP_PHASE_RUNNING").withValue(BackupPhase.RUNNING.label()).build(), new EnvVarBuilder().withName("BACKUP_PHASE_COMPLETED").withValue(BackupPhase.COMPLETED.label()).build(), new EnvVarBuilder().withName("BACKUP_PHASE_FAILED").withValue(BackupPhase.FAILED.label()).build(), new EnvVarBuilder().withName("PATRONI_ROLE_KEY").withValue(StackGresContext.ROLE_KEY).build(), new EnvVarBuilder().withName("PATRONI_PRIMARY_ROLE").withValue(StackGresContext.PRIMARY_ROLE).build(), new EnvVarBuilder().withName("PATRONI_REPLICA_ROLE").withValue(StackGresContext.REPLICA_ROLE).build(), new EnvVarBuilder().withName("PATRONI_CLUSTER_LABELS").withValue(labelFactoryForCluster.patroniClusterLabels(context.getCluster()).entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining(","))).build(), new EnvVarBuilder().withName("PATRONI_CONTAINER_NAME").withValue(StackgresClusterContainers.PATRONI).build(), new EnvVarBuilder().withName("SERVICE_ACCOUNT").withValueFrom(new EnvVarSourceBuilder().withFieldRef(new ObjectFieldSelectorBuilder().withFieldPath("spec.serviceAccountName").build()).build()).build(), new EnvVarBuilder().withName("POD_NAME").withValueFrom(new EnvVarSourceBuilder().withFieldRef(new ObjectFieldSelectorBuilder().withFieldPath("metadata.name").build()).build()).build(), new EnvVarBuilder().withName("RETAIN").withValue(Optional.of(backupConfig.getSpec()).map(StackGresBackupConfigSpec::getBaseBackups).map(StackGresBaseBackupConfig::getRetention).map(String::valueOf).orElse("5")).build(), new EnvVarBuilder().withName("WINDOW").withValue("3600").build()).build()).withCommand("/bin/bash", "-e" + (LOGGER.isTraceEnabled() ? "x" : ""), ClusterStatefulSetPath.LOCAL_BIN_CREATE_BACKUP_SH_PATH.path()).withVolumeMounts(backupVolumeMount, utilsVolumeMount).build()).withVolumes(new VolumeBuilder(ClusterStatefulSetVolumeConfig.TEMPLATES.volume(context)).editConfigMap().withDefaultMode(// NOPMD
0555).endConfigMap().build()).endSpec().endTemplate().endSpec().build();
}
Aggregations