use of io.stackgres.common.crd.sgcluster.StackGresClusterSpec in project stackgres by ongres.
the class ClusterRequiredResourcesGeneratorTest method givenClusterWithNoBackupConfig_NotFail.
@Test
void givenClusterWithNoBackupConfig_NotFail() {
final ObjectMeta metadata = cluster.getMetadata();
final String clusterNamespace = metadata.getNamespace();
final StackGresClusterSpec clusterSpec = cluster.getSpec();
final StackGresClusterConfiguration clusterConfiguration = clusterSpec.getConfiguration();
final String backupConfigName = clusterConfiguration.getBackupConfig();
when(backupConfigFinder.findByNameAndNamespace(backupConfigName, clusterNamespace)).thenReturn(Optional.empty());
final String postgresConfigName = clusterConfiguration.getPostgresConfig();
mockPgConfig(clusterNamespace, postgresConfigName);
final String connectionPoolingConfig = clusterConfiguration.getConnectionPoolingConfig();
mockPoolingConfig(clusterNamespace, connectionPoolingConfig);
final String resourceProfile = clusterSpec.getResourceProfile();
when(profileConfigFinder.findByNameAndNamespace(resourceProfile, clusterNamespace)).thenReturn(Optional.of(instanceProfile));
when(backupScanner.getResources()).thenReturn(backups);
mockSecrets(clusterNamespace);
generator.getRequiredResources(cluster);
verify(backupConfigFinder).findByNameAndNamespace(backupConfigName, clusterNamespace);
verify(postgresConfigFinder).findByNameAndNamespace(postgresConfigName, clusterNamespace);
verify(poolingConfigFinder).findByNameAndNamespace(connectionPoolingConfig, clusterNamespace);
verify(profileConfigFinder).findByNameAndNamespace(resourceProfile, clusterNamespace);
verify(backupScanner, atLeastOnce()).getResources();
}
use of io.stackgres.common.crd.sgcluster.StackGresClusterSpec in project stackgres by ongres.
the class StackGresDistributedLogsUtil method getStackGresClusterForDistributedLogs.
static StackGresCluster getStackGresClusterForDistributedLogs(StackGresDistributedLogs distributedLogs) {
final StackGresCluster distributedLogsCluster = new StackGresCluster();
distributedLogsCluster.getMetadata().setNamespace(distributedLogs.getMetadata().getNamespace());
distributedLogsCluster.getMetadata().setName(distributedLogs.getMetadata().getName());
distributedLogsCluster.getMetadata().setUid(distributedLogs.getMetadata().getUid());
final StackGresClusterSpec spec = new StackGresClusterSpec();
spec.setPostgres(new StackGresClusterPostgres());
spec.getPostgres().setVersion(getPostgresVersion());
spec.setInstances(1);
final StackGresClusterPod pod = new StackGresClusterPod();
final StackGresPodPersistentVolume persistentVolume = new StackGresPodPersistentVolume();
persistentVolume.setSize(distributedLogs.getSpec().getPersistentVolume().getSize());
persistentVolume.setStorageClass(distributedLogs.getSpec().getPersistentVolume().getStorageClass());
pod.setPersistentVolume(persistentVolume);
spec.setPostgresServices(buildPostgresServices(distributedLogs.getSpec()));
StackGresClusterPodScheduling scheduling = new StackGresClusterPodScheduling();
Optional.of(distributedLogs).map(StackGresDistributedLogs::getSpec).map(StackGresDistributedLogsSpec::getScheduling).ifPresent(distributedLogsScheduling -> {
scheduling.setNodeSelector(distributedLogsScheduling.getNodeSelector());
scheduling.setTolerations(distributedLogsScheduling.getTolerations());
});
pod.setScheduling(scheduling);
spec.setPod(pod);
final StackGresClusterInitData initData = new StackGresClusterInitData();
final StackGresClusterScriptEntry script = new StackGresClusterScriptEntry();
script.setName("distributed-logs-template");
script.setDatabase("template1");
script.setScript(Unchecked.supplier(() -> Resources.asCharSource(StackGresDistributedLogsUtil.class.getResource("/distributed-logs-template.sql"), StandardCharsets.UTF_8).read()).get());
initData.setScripts(ImmutableList.of(script));
spec.setInitData(initData);
final StackGresClusterNonProduction nonProduction = new StackGresClusterNonProduction();
nonProduction.setDisableClusterPodAntiAffinity(Optional.ofNullable(distributedLogs.getSpec().getNonProduction()).map(StackGresDistributedLogsNonProduction::getDisableClusterPodAntiAffinity).orElse(false));
spec.setNonProduction(nonProduction);
final StackGresClusterSpecMetadata metadata = new StackGresClusterSpecMetadata();
final StackGresClusterSpecAnnotations annotations = new StackGresClusterSpecAnnotations();
Optional.of(distributedLogs).map(StackGresDistributedLogs::getSpec).map(StackGresDistributedLogsSpec::getMetadata).map(StackGresDistributedLogsSpecMetadata::getAnnotations).ifPresent(distributedLogsAnnotations -> {
annotations.setAllResources(distributedLogsAnnotations.getAllResources());
annotations.setClusterPods(distributedLogsAnnotations.getPods());
annotations.setPrimaryService(distributedLogsAnnotations.getServices());
annotations.setReplicasService(distributedLogsAnnotations.getServices());
});
metadata.setAnnotations(annotations);
spec.setMetadata(metadata);
spec.setToInstallPostgresExtensions(Optional.ofNullable(distributedLogs.getSpec()).map(StackGresDistributedLogsSpec::getToInstallPostgresExtensions).orElse(null));
distributedLogsCluster.setSpec(spec);
return distributedLogsCluster;
}
use of io.stackgres.common.crd.sgcluster.StackGresClusterSpec in project stackgres by ongres.
the class StackGresClusterSpecFixture method build.
public StackGresClusterSpec build() {
StackGresClusterSpec spec = new StackGresClusterSpec();
spec.setPod(this.pod);
return spec;
}
use of io.stackgres.common.crd.sgcluster.StackGresClusterSpec in project stackgres by ongres.
the class ClusterTransformer method getCustomResourceSpec.
private StackGresClusterSpec getCustomResourceSpec(ClusterSpec source) {
if (source == null) {
return null;
}
StackGresClusterSpec transformation = new StackGresClusterSpec();
transformation.setPostgres(new StackGresClusterPostgres());
transformation.getPostgres().setVersion(source.getPostgres().getVersion());
transformation.getPostgres().setExtensions(Optional.ofNullable(source.getPostgres().getExtensions()).stream().flatMap(List::stream).map(this::getCustomResourceExtension).collect(ImmutableList.toImmutableList()));
final ClusterSsl sourceClusterSsl = source.getPostgres().getSsl();
if (sourceClusterSsl != null) {
transformation.getPostgres().setSsl(new StackGresClusterSsl());
transformation.getPostgres().getSsl().setEnabled(sourceClusterSsl.getEnabled());
transformation.getPostgres().getSsl().setCertificateSecretKeySelector(sourceClusterSsl.getCertificateSecretKeySelector());
transformation.getPostgres().getSsl().setPrivateKeySecretKeySelector(sourceClusterSsl.getPrivateKeySecretKeySelector());
}
final ClusterConfiguration sourceClusterConfiguration = source.getConfigurations();
if (sourceClusterConfiguration != null) {
transformation.setConfiguration(new StackGresClusterConfiguration());
transformation.getConfiguration().setBackupConfig(source.getConfigurations().getSgBackupConfig());
transformation.getConfiguration().setConnectionPoolingConfig(source.getConfigurations().getSgPoolingConfig());
transformation.getConfiguration().setPostgresConfig(source.getConfigurations().getSgPostgresConfig());
}
transformation.setInstances(source.getInstances());
transformation.setNonProduction(getCustomResourceNonProduction(source.getNonProduction()));
transformation.setPrometheusAutobind(source.getPrometheusAutobind());
transformation.setResourceProfile(source.getSgInstanceProfile());
final ClusterSpecMetadata specMetadata = source.getMetadata();
if (specMetadata != null) {
transformation.setMetadata(new StackGresClusterSpecMetadata());
final ClusterSpecAnnotations sourceAnnotations = specMetadata.getAnnotations();
if (sourceAnnotations != null) {
StackGresClusterSpecAnnotations targetAnnotations = new StackGresClusterSpecAnnotations();
targetAnnotations.setAllResources(sourceAnnotations.getAllResources());
targetAnnotations.setClusterPods(sourceAnnotations.getClusterPods());
targetAnnotations.setServices(sourceAnnotations.getServices());
targetAnnotations.setPrimaryService(sourceAnnotations.getPrimaryService());
targetAnnotations.setReplicasService(sourceAnnotations.getReplicasService());
transformation.getMetadata().setAnnotations(targetAnnotations);
}
final ClusterSpecLabels sourceLabels = specMetadata.getLabels();
if (sourceLabels != null) {
StackGresClusterSpecLabels targetLabels = new StackGresClusterSpecLabels();
targetLabels.setClusterPods(sourceLabels.getClusterPods());
transformation.getMetadata().setLabels(targetLabels);
}
}
final ClusterPostgresServices sourcePostgresServices = source.getPostgresServices();
if (sourcePostgresServices != null) {
transformation.setPostgresServices(new StackGresClusterPostgresServices());
final StackGresClusterPostgresServices targetPostgresService = transformation.getPostgresServices();
final PostgresService sourcePrimaryService = sourcePostgresServices.getPrimary();
if (sourcePrimaryService != null) {
targetPostgresService.setPrimary(new StackGresPostgresService());
final StackGresPostgresService targetPrimaryService = targetPostgresService.getPrimary();
targetPrimaryService.setType(sourcePrimaryService.getType());
targetPrimaryService.setEnabled(sourcePrimaryService.getEnabled());
}
final PostgresService sourceReplicaService = sourcePostgresServices.getReplicas();
if (sourceReplicaService != null) {
targetPostgresService.setReplicas(new StackGresPostgresService());
final StackGresPostgresService targetReplicaService = targetPostgresService.getReplicas();
targetReplicaService.setEnabled(sourceReplicaService.getEnabled());
targetReplicaService.setType(sourceReplicaService.getType());
}
}
final ClusterInitData sourceInitData = source.getInitData();
if (sourceInitData != null) {
final StackGresClusterInitData targetInitData = new StackGresClusterInitData();
transformation.setInitData(targetInitData);
if (sourceInitData.getRestore() != null) {
targetInitData.setRestore(getCustomResourceRestore(sourceInitData.getRestore()));
}
if (sourceInitData.getScripts() != null) {
targetInitData.setScripts(getCustomResourceScripts(sourceInitData.getScripts()));
}
}
final StackGresClusterPod targetPod = new StackGresClusterPod();
transformation.setPod(targetPod);
targetPod.setPersistentVolume(new StackGresPodPersistentVolume());
targetPod.getPersistentVolume().setStorageClass(source.getPods().getPersistentVolume().getStorageClass());
targetPod.getPersistentVolume().setSize(source.getPods().getPersistentVolume().getSize());
targetPod.setDisableConnectionPooling(source.getPods().getDisableConnectionPooling());
targetPod.setDisableMetricsExporter(source.getPods().getDisableMetricsExporter());
targetPod.setDisablePostgresUtil(source.getPods().getDisablePostgresUtil());
targetPod.setScheduling(Optional.ofNullable(source.getPods().getScheduling()).map(sourceScheduling -> {
return new ClusterPodSchedulingConverter().to(sourceScheduling);
}).orElse(null));
transformation.setDistributedLogs(getCustomResourceDistributedLogs(source.getDistributedLogs()));
return transformation;
}
use of io.stackgres.common.crd.sgcluster.StackGresClusterSpec in project stackgres by ongres.
the class ExtensionsResource method get.
/**
* Looks for all extensions that are published in configured repositories with only versions
* available for the sgcluster retrieved using the namespace and name provided.
* @return the extensions
*/
@Operation(responses = { @ApiResponse(responseCode = "200", description = "OK", content = { @Content(mediaType = "application/json", schema = @Schema(implementation = ExtensionsDto.class)) }) })
@CommonApiResponses
@GET
@Path("{postgresVersion}")
public ExtensionsDto get(@PathParam("postgresVersion") String postgresVersion) {
StackGresCluster cluster = new StackGresCluster();
cluster.setSpec(new StackGresClusterSpec());
cluster.getSpec().setPostgres(new StackGresClusterPostgres());
cluster.getSpec().getPostgres().setVersion(postgresVersion);
return Optional.of(Unchecked.supplier(() -> clusterExtensionMetadataManager.getExtensions()).get()).map(extensionMetadataList -> extensionsTransformer.toDto(extensionMetadataList, cluster)).get();
}
Aggregations