Search in sources :

Example 1 with StackGresBackupConfigSpec

use of io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec in project stackgres by ongres.

the class RestoreSecret method buildSource.

@NotNull
public Optional<HasMetadata> buildSource(StackGresClusterContext context) {
    return context.getRestoreBackup().map(restoreBackup -> {
        Map<String, String> data = new HashMap<>();
        data.put("BACKUP_RESOURCE_VERSION", restoreBackup.getMetadata().getResourceVersion());
        String backupNamespace = restoreBackup.getMetadata().getNamespace();
        final StackGresBackupConfigSpec backupConfig = restoreBackup.getStatus().getBackupConfig();
        data.putAll(envVarFactory.getSecretEnvVar(backupNamespace, backupConfig));
        final StackGresCluster cluster = context.getSource();
        return new SecretBuilder().withNewMetadata().withNamespace(cluster.getMetadata().getNamespace()).withName(name(context)).withLabels(labelFactory.clusterLabels(cluster)).endMetadata().withType("Opaque").withStringData(StackGresUtil.addMd5Sum(data)).build();
    });
}
Also used : SecretBuilder(io.fabric8.kubernetes.api.model.SecretBuilder) StackGresCluster(io.stackgres.common.crd.sgcluster.StackGresCluster) StackGresBackupConfigSpec(io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec) HashMap(java.util.HashMap) NotNull(org.jetbrains.annotations.NotNull)

Example 2 with StackGresBackupConfigSpec

use of io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec 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();
}
Also used : StackGresContext(io.stackgres.common.StackGresContext) PodSecurityContext(io.fabric8.kubernetes.api.model.PodSecurityContext) EnvVar(io.fabric8.kubernetes.api.model.EnvVar) StackGresBackupConfigSpec(io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec) StackGresBackup(io.stackgres.common.crd.sgbackup.StackGresBackup) StackGresCluster(io.stackgres.common.crd.sgcluster.StackGresCluster) StackGresVersion(io.stackgres.operator.common.StackGresVersion) LoggerFactory(org.slf4j.LoggerFactory) Singleton(javax.inject.Singleton) StackgresClusterContainers(io.stackgres.common.StackgresClusterContainers) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) ImmutableList(com.google.common.collect.ImmutableList) ClusterStatefulSetPath(io.stackgres.common.ClusterStatefulSetPath) ResourceGenerator(io.stackgres.operator.conciliation.ResourceGenerator) Map(java.util.Map) EnvVarSourceBuilder(io.fabric8.kubernetes.api.model.EnvVarSourceBuilder) ObjectFieldSelectorBuilder(io.fabric8.kubernetes.api.model.ObjectFieldSelectorBuilder) CronJob(io.fabric8.kubernetes.api.model.batch.v1beta1.CronJob) JobTemplateSpecBuilder(io.fabric8.kubernetes.api.model.batch.v1beta1.JobTemplateSpecBuilder) ContainerBuilder(io.fabric8.kubernetes.api.model.ContainerBuilder) StackGresBaseBackupConfig(io.stackgres.common.crd.sgbackupconfig.StackGresBaseBackupConfig) ResourceFactory(io.stackgres.operator.conciliation.factory.ResourceFactory) ClusterContext(io.stackgres.common.ClusterContext) StackGresBackupConfig(io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfig) Logger(org.slf4j.Logger) PatroniRoleGenerator(io.stackgres.operator.conciliation.factory.cluster.patroni.PatroniRoleGenerator) StackGresClusterContext(io.stackgres.operator.conciliation.cluster.StackGresClusterContext) LabelFactoryForCluster(io.stackgres.common.LabelFactoryForCluster) StackGresUtil(io.stackgres.common.StackGresUtil) EnvVarBuilder(io.fabric8.kubernetes.api.model.EnvVarBuilder) VolumeBuilder(io.fabric8.kubernetes.api.model.VolumeBuilder) Collectors(java.util.stream.Collectors) HasMetadata(io.fabric8.kubernetes.api.model.HasMetadata) OperatorVersionBinder(io.stackgres.operator.conciliation.OperatorVersionBinder) BackupPhase(io.stackgres.common.crd.sgbackup.BackupPhase) CronJobBuilder(io.fabric8.kubernetes.api.model.batch.v1beta1.CronJobBuilder) StackGresComponent(io.stackgres.common.StackGresComponent) List(java.util.List) Stream(java.util.stream.Stream) ClusterStatefulSetVolumeConfig(io.stackgres.operator.conciliation.factory.cluster.patroni.ClusterStatefulSetVolumeConfig) ClusterEnvironmentVariablesFactoryDiscoverer(io.stackgres.operator.conciliation.factory.cluster.patroni.ClusterEnvironmentVariablesFactoryDiscoverer) Optional(java.util.Optional) ClusterEnvironmentVariablesFactory(io.stackgres.operator.conciliation.factory.cluster.patroni.ClusterEnvironmentVariablesFactory) CustomResource(io.fabric8.kubernetes.client.CustomResource) ObjectFieldSelectorBuilder(io.fabric8.kubernetes.api.model.ObjectFieldSelectorBuilder) CronJobBuilder(io.fabric8.kubernetes.api.model.batch.v1beta1.CronJobBuilder) StackGresBackupConfig(io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfig) VolumeBuilder(io.fabric8.kubernetes.api.model.VolumeBuilder) EnvVarBuilder(io.fabric8.kubernetes.api.model.EnvVarBuilder) StackGresCluster(io.stackgres.common.crd.sgcluster.StackGresCluster) StackGresBackup(io.stackgres.common.crd.sgbackup.StackGresBackup) ContainerBuilder(io.fabric8.kubernetes.api.model.ContainerBuilder) EnvVarSourceBuilder(io.fabric8.kubernetes.api.model.EnvVarSourceBuilder) StackGresBackupConfigSpec(io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec) JobTemplateSpecBuilder(io.fabric8.kubernetes.api.model.batch.v1beta1.JobTemplateSpecBuilder) EnvVar(io.fabric8.kubernetes.api.model.EnvVar)

Example 3 with StackGresBackupConfigSpec

use of io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec in project stackgres by ongres.

the class BackupEnvVarFactoryImpl method getSecretEnvVar.

@Override
public Map<String, String> getSecretEnvVar(StackGresBackupConfig backupConfig) {
    String namespace = backupConfig.getMetadata().getNamespace();
    final StackGresBackupConfigSpec spec = backupConfig.getSpec();
    var secrets = getBackupConfigSecretReferences(namespace, spec);
    return getBackupSecrets(spec, secrets);
}
Also used : StackGresBackupConfigSpec(io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec)

Example 4 with StackGresBackupConfigSpec

use of io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec in project stackgres by ongres.

the class BackupConfigDefaultValuesMutatorTest method getEmptyReview.

@Override
protected BackupConfigReview getEmptyReview() {
    BackupConfigReview backupConfigReview = JsonUtil.readFromJson("backupconfig_allow_request/create.json", BackupConfigReview.class);
    backupConfigReview.getRequest().getObject().setSpec(new StackGresBackupConfigSpec());
    return backupConfigReview;
}
Also used : StackGresBackupConfigSpec(io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec) BackupConfigReview(io.stackgres.operator.common.BackupConfigReview)

Example 5 with StackGresBackupConfigSpec

use of io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec 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;
}
Also used : BaseBackupPerformance(io.stackgres.apiweb.dto.backupconfig.BaseBackupPerformance) StackGresBaseBackupPerformance(io.stackgres.common.crd.sgbackupconfig.StackGresBaseBackupPerformance) StackGresBackupConfigSpec(io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec) BackupConfigSpec(io.stackgres.apiweb.dto.backupconfig.BackupConfigSpec) BaseBackupConfig(io.stackgres.apiweb.dto.backupconfig.BaseBackupConfig) StackGresBaseBackupConfig(io.stackgres.common.crd.sgbackupconfig.StackGresBaseBackupConfig)

Aggregations

StackGresBackupConfigSpec (io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfigSpec)8 StackGresBaseBackupConfig (io.stackgres.common.crd.sgbackupconfig.StackGresBaseBackupConfig)4 StackGresBackupConfig (io.stackgres.common.crd.sgbackupconfig.StackGresBackupConfig)3 StackGresCluster (io.stackgres.common.crd.sgcluster.StackGresCluster)3 ImmutableList (com.google.common.collect.ImmutableList)2 ContainerBuilder (io.fabric8.kubernetes.api.model.ContainerBuilder)2 EnvVar (io.fabric8.kubernetes.api.model.EnvVar)2 EnvVarBuilder (io.fabric8.kubernetes.api.model.EnvVarBuilder)2 EnvVarSourceBuilder (io.fabric8.kubernetes.api.model.EnvVarSourceBuilder)2 HasMetadata (io.fabric8.kubernetes.api.model.HasMetadata)2 ObjectFieldSelectorBuilder (io.fabric8.kubernetes.api.model.ObjectFieldSelectorBuilder)2 PodSecurityContext (io.fabric8.kubernetes.api.model.PodSecurityContext)2 VolumeBuilder (io.fabric8.kubernetes.api.model.VolumeBuilder)2 CustomResource (io.fabric8.kubernetes.client.CustomResource)2 ClusterContext (io.stackgres.common.ClusterContext)2 ClusterStatefulSetPath (io.stackgres.common.ClusterStatefulSetPath)2 LabelFactoryForCluster (io.stackgres.common.LabelFactoryForCluster)2 StackGresComponent (io.stackgres.common.StackGresComponent)2 StackGresContext (io.stackgres.common.StackGresContext)2 StackGresUtil (io.stackgres.common.StackGresUtil)2