Skip to content

Commit

Permalink
[WOR-1410] add regional default parameters for landing zones (#378)
Browse files Browse the repository at this point in the history
  • Loading branch information
marctalbott authored Jan 12, 2024
1 parent 1f30f38 commit 075ac01
Show file tree
Hide file tree
Showing 65 changed files with 556 additions and 497 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import bio.terra.landingzone.service.bpm.LandingZoneBillingProfileManagerService;
import bio.terra.landingzone.service.iam.LandingZoneSamService;
import bio.terra.landingzone.service.landingzone.azure.LandingZoneService;
import bio.terra.landingzone.stairway.flight.ParametersResolverProvider;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
Expand All @@ -24,6 +25,7 @@ public class LandingZoneFlightBeanBag {
private final LandingZoneBillingProfileManagerService bpmService;
private final ObjectMapper objectMapper;
private final LandingZoneProtectedDataConfiguration landingZoneProtectedDataConfiguration;
private final ParametersResolverProvider parametersResolverProvider;
private final AzureCustomerUsageConfiguration azureCustomerUsageConfiguration;
private final AzureCredentialsProvider azureCredentialsProvider;

Expand All @@ -37,6 +39,7 @@ public LandingZoneFlightBeanBag(
LandingZoneSamService samService,
LandingZoneBillingProfileManagerService bpmService,
LandingZoneProtectedDataConfiguration landingZoneProtectedDataConfiguration,
ParametersResolverProvider parametersResolverProvider,
AzureCustomerUsageConfiguration azureCustomerUsageConfiguration,
AzureCredentialsProvider azureCredentialsProvider,
ObjectMapper objectMapper) {
Expand All @@ -47,6 +50,7 @@ public LandingZoneFlightBeanBag(
this.samService = samService;
this.bpmService = bpmService;
this.landingZoneProtectedDataConfiguration = landingZoneProtectedDataConfiguration;
this.parametersResolverProvider = parametersResolverProvider;
this.azureCustomerUsageConfiguration = azureCustomerUsageConfiguration;
this.azureCredentialsProvider = azureCredentialsProvider;
this.objectMapper = objectMapper;
Expand Down Expand Up @@ -88,6 +92,10 @@ public LandingZoneProtectedDataConfiguration getLandingZoneProtectedDataConfigur
return landingZoneProtectedDataConfiguration;
}

public ParametersResolverProvider getParametersResolverProvider() {
return parametersResolverProvider;
}

public AzureCustomerUsageConfiguration getAzureCustomerUsageConfiguration() {
return azureCustomerUsageConfiguration;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package bio.terra.landingzone.library.configuration;

import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "landingzone.regions")
public class LandingZoneAzureRegionConfiguration {

private Map<String, Map<String, String>> defaultParameters;

public Map<String, Map<String, String>> getDefaultParameters() {
return defaultParameters;
}

public void setDefaultParameters(Map<String, Map<String, String>> defaultParameters) {
this.defaultParameters = defaultParameters;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import bio.terra.landingzone.library.landingzones.definition.DefinitionHeader;
import bio.terra.landingzone.library.landingzones.definition.DefinitionVersion;
import bio.terra.landingzone.library.landingzones.definition.factories.validation.InputParametersValidationFactory;
import bio.terra.landingzone.stairway.flight.ParametersResolverProvider;
import bio.terra.landingzone.stairway.flight.ResourceNameProvider;
import bio.terra.landingzone.stairway.flight.create.resource.step.CreateAksCostOptimizationDataCollectionRulesStep;
import bio.terra.landingzone.stairway.flight.create.resource.step.CreateAksStep;
Expand All @@ -30,6 +31,7 @@
import bio.terra.landingzone.stairway.flight.create.resource.step.EnableAksContainerInsightsStep;
import bio.terra.landingzone.stairway.flight.create.resource.step.EnableAksContainerLogV2Step;
import bio.terra.landingzone.stairway.flight.create.resource.step.GetManagedResourceGroupInfo;
import bio.terra.landingzone.stairway.flight.create.resource.step.GetParametersResolver;
import bio.terra.landingzone.stairway.flight.create.resource.step.KubernetesClientProviderImpl;
import bio.terra.landingzone.stairway.flight.create.resource.step.ValidateLandingZoneParametersStep;
import bio.terra.stairway.RetryRule;
Expand Down Expand Up @@ -61,82 +63,59 @@ public List<DefinitionVersion> availableVersions() {
@Override
public List<Pair<Step, RetryRule>> get(
ArmManagers armManagers,
ParametersResolver parametersResolver,
ParametersResolverProvider parametersResolverProvider,
ResourceNameProvider resourceNameProvider,
LandingZoneProtectedDataConfiguration landingZoneProtectedDataConfiguration) {
return List.of(
Pair.of(new GetManagedResourceGroupInfo(armManagers), RetryRules.cloud()),
Pair.of(new GetParametersResolver(parametersResolverProvider), RetryRules.shortDatabase()),
Pair.of(
new ValidateLandingZoneParametersStep(
InputParametersValidationFactory.buildValidators(
StepsDefinitionFactoryType.CROMWELL_BASE_DEFINITION_STEPS_PROVIDER_TYPE),
parametersResolver),
StepsDefinitionFactoryType.CROMWELL_BASE_DEFINITION_STEPS_PROVIDER_TYPE)),
RetryRules.shortExponential()),
Pair.of(new GetManagedResourceGroupInfo(armManagers), RetryRules.cloud()),
Pair.of(
new CreateNetworkSecurityGroupStep(
armManagers, parametersResolver, resourceNameProvider),
new CreateNetworkSecurityGroupStep(armManagers, resourceNameProvider),
RetryRules.cloud()),
Pair.of(new CreateVnetStep(armManagers, resourceNameProvider), RetryRules.cloud()),
Pair.of(
new CreateVnetStep(armManagers, parametersResolver, resourceNameProvider),
new CreateLogAnalyticsWorkspaceStep(armManagers, resourceNameProvider),
RetryRules.cloud()),
Pair.of(new CreatePostgresqlDNSStep(armManagers, resourceNameProvider), RetryRules.cloud()),
Pair.of(
new CreateLogAnalyticsWorkspaceStep(
armManagers, parametersResolver, resourceNameProvider),
new CreateVirtualNetworkLinkStep(armManagers, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new CreatePostgresqlDNSStep(armManagers, parametersResolver, resourceNameProvider),
new CreateLandingZoneIdentityStep(armManagers, resourceNameProvider),
RetryRules.cloud()),
Pair.of(new CreatePostgresqlDbStep(armManagers, resourceNameProvider), RetryRules.cloud()),
Pair.of(
new CreateVirtualNetworkLinkStep(armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new CreateLandingZoneIdentityStep(
armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new CreatePostgresqlDbStep(armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new CreateStorageAccountStep(armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()),
new CreateStorageAccountStep(armManagers, resourceNameProvider), RetryRules.cloud()),
Pair.of(new CreateBatchAccountStep(armManagers, resourceNameProvider), RetryRules.cloud()),
Pair.of(
new CreateBatchAccountStep(armManagers, parametersResolver, resourceNameProvider),
new CreateStorageAccountCorsRules(armManagers, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new CreateStorageAccountCorsRules(
armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new CreateLogAnalyticsDataCollectionRulesStep(
armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new CreateAksStep(armManagers, parametersResolver, resourceNameProvider),
new CreateLogAnalyticsDataCollectionRulesStep(armManagers, resourceNameProvider),
RetryRules.cloud()),
Pair.of(new CreateAksStep(armManagers, resourceNameProvider), RetryRules.cloud()),
Pair.of(
new CreateLandingZoneFederatedIdentityStep(
armManagers, new KubernetesClientProviderImpl()),
RetryRules.cloud()),
Pair.of(
new CreateRelayNamespaceStep(armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new CreateStorageAuditLogSettingsStep(
armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()),
new CreateRelayNamespaceStep(armManagers, resourceNameProvider), RetryRules.cloud()),
Pair.of(
new CreateBatchLogSettingsStep(armManagers, parametersResolver, resourceNameProvider),
new CreateStorageAuditLogSettingsStep(armManagers, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new CreatePostgresLogSettingsStep(
armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()),
new CreateBatchLogSettingsStep(armManagers, resourceNameProvider), RetryRules.cloud()),
Pair.of(
new CreateAppInsightsStep(armManagers, parametersResolver, resourceNameProvider),
new CreatePostgresLogSettingsStep(armManagers, resourceNameProvider),
RetryRules.cloud()),
Pair.of(new CreateAppInsightsStep(armManagers, resourceNameProvider), RetryRules.cloud()),
Pair.of(
new CreateAksCostOptimizationDataCollectionRulesStep(
armManagers, parametersResolver, resourceNameProvider),
new CreateAksCostOptimizationDataCollectionRulesStep(armManagers, resourceNameProvider),
RetryRules.cloud()),
Pair.of(
new EnableAksContainerLogV2Step(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,10 @@
package bio.terra.landingzone.library.landingzones.definition.factories;

import java.util.HashMap;
import java.util.Map;

public class ParametersResolver {
private final Map<String, String> defaultParameters;
private final Map<String, String> parameters;

public ParametersResolver(Map<String, String> parameters, Map<String, String> defaultParameters) {
if (defaultParameters == null) {
this.defaultParameters = new HashMap<>();
} else {
this.defaultParameters = defaultParameters;
}

this.parameters = parameters;
}
public record ParametersResolver(Map<String, String> parameters) {

public String getValue(String parameterName) {
if (parameters == null) {
return defaultParameters.getOrDefault(parameterName, "");
}

return parameters.getOrDefault(
parameterName, defaultParameters.getOrDefault(parameterName, ""));
return parameters.getOrDefault(parameterName, "");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import bio.terra.landingzone.library.landingzones.definition.ArmManagers;
import bio.terra.landingzone.library.landingzones.definition.DefinitionHeader;
import bio.terra.landingzone.library.landingzones.definition.DefinitionVersion;
import bio.terra.landingzone.stairway.flight.ParametersResolverProvider;
import bio.terra.landingzone.stairway.flight.ResourceNameProvider;
import bio.terra.landingzone.stairway.flight.create.resource.step.ConnectLongTermLogStorageStep;
import bio.terra.landingzone.stairway.flight.create.resource.step.CreateAksLogSettingsStep;
Expand Down Expand Up @@ -44,59 +45,49 @@ public List<DefinitionVersion> availableVersions() {
@Override
public List<Pair<Step, RetryRule>> get(
ArmManagers armManagers,
ParametersResolver parametersResolver,
ParametersResolverProvider parametersResolverProvider,
ResourceNameProvider resourceNameProvider,
LandingZoneProtectedDataConfiguration landingZoneProtectedDataConfiguration) {
// inherit all cromwell steps and define specific below
var protectedDataSteps =
new ArrayList<>(
super.get(
armManagers,
parametersResolver,
parametersResolverProvider,
resourceNameProvider,
landingZoneProtectedDataConfiguration));

protectedDataSteps.add(
Pair.of(
new ConnectLongTermLogStorageStep(
armManagers,
parametersResolver,
resourceNameProvider,
new ProtectedDataAzureStorageHelper(armManagers),
landingZoneProtectedDataConfiguration.getLongTermStorageTableNames(),
landingZoneProtectedDataConfiguration.getLongTermStorageAccountIds()),
RetryRules.cloud()));

protectedDataSteps.add(
Pair.of(
new CreateSentinelStep(armManagers, parametersResolver, resourceNameProvider),
RetryRules.cloud()));
Pair.of(new CreateSentinelStep(armManagers, resourceNameProvider), RetryRules.cloud()));

protectedDataSteps.add(
Pair.of(
new CreateSentinelRunPlaybookAutomationRule(
armManagers,
parametersResolver,
resourceNameProvider,
landingZoneProtectedDataConfiguration),
armManagers, resourceNameProvider, landingZoneProtectedDataConfiguration),
RetryRules.cloud()));

protectedDataSteps.add(
Pair.of(
new CreateSentinelAlertRulesStep(
armManagers,
parametersResolver,
resourceNameProvider,
new AlertRulesHelper(armManagers.securityInsightsManager()),
landingZoneProtectedDataConfiguration),
RetryRules.cloudLongRunning()));
protectedDataSteps.add(
Pair.of(
new CreateAksLogSettingsStep(
armManagers,
parametersResolver,
resourceNameProvider,
landingZoneProtectedDataConfiguration),
armManagers, resourceNameProvider, landingZoneProtectedDataConfiguration),
RetryRules.cloud()));

return protectedDataSteps;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import bio.terra.landingzone.library.landingzones.definition.ArmManagers;
import bio.terra.landingzone.library.landingzones.definition.DefinitionHeader;
import bio.terra.landingzone.library.landingzones.definition.DefinitionVersion;
import bio.terra.landingzone.stairway.flight.ParametersResolverProvider;
import bio.terra.landingzone.stairway.flight.ResourceNameProvider;
import bio.terra.stairway.RetryRule;
import bio.terra.stairway.Step;
Expand Down Expand Up @@ -43,14 +44,14 @@ public interface StepsDefinitionProvider {
* should go first in the list definition.
*
* @param ArmManagers armManagers
* @param ParametersResolver parametersResolver
* @param ParametersResolverProvider parametersResolverProvider
* @param ResourceNameProvider resourceNameProvider
* @param LandingZoneProtectedDataConfiguration landingZoneProtectedDataConfiguration
* @return List of pairs of steps and step's retry rule
*/
List<Pair<Step, RetryRule>> get(
ArmManagers armManagers,
ParametersResolver parametersResolver,
ParametersResolverProvider parametersResolverProvider,
ResourceNameProvider resourceNameProvider,
LandingZoneProtectedDataConfiguration landingZoneProtectedDataConfiguration);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public class LandingZoneFlightMapKeys {
public static final String STORAGE_ACCOUNT_NAME = "storageAccountName";
public static final String CREATE_LANDING_ZONE_RESOURCES_INNER_FLIGHT_JOB_ID =
"createLandingZoneResourcesInnerFlightJobId";
public static final String CREATE_LANDING_ZONE_PARAMETERS_RESOLVER = "parametersResolver";

private LandingZoneFlightMapKeys() {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package bio.terra.landingzone.stairway.flight;

import bio.terra.landingzone.library.configuration.LandingZoneAzureRegionConfiguration;
import bio.terra.landingzone.library.landingzones.definition.factories.ParametersResolver;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class ParametersResolverProvider {

private final LandingZoneAzureRegionConfiguration landingZoneAzureRegionConfiguration;

@Autowired
public ParametersResolverProvider(
LandingZoneAzureRegionConfiguration landingZoneAzureRegionConfiguration) {
this.landingZoneAzureRegionConfiguration = landingZoneAzureRegionConfiguration;
}

/**
* Returns a ParametersResolver for a set of input parameters and Azure region. Input parameters
* take precedence over regional default parameters, which in turn take precedence over default
* landing zone parameters defined in `LandingZoneDefaultParameters`.
*/
public ParametersResolver create(Map<String, String> inputParameters, String region) {
var parameters = new HashMap<>(LandingZoneDefaultParameters.get());

var regionalParameters = landingZoneAzureRegionConfiguration.getDefaultParameters();

if (regionalParameters != null) {
if (region == null) {
throw new IllegalArgumentException("Region must not be null.");
} else {
parameters.putAll(regionalParameters.getOrDefault(region, new HashMap<>()));
}
}
if (inputParameters != null) {
parameters.putAll(inputParameters);
}

return new ParametersResolver(parameters);
}
}
Loading

0 comments on commit 075ac01

Please sign in to comment.