/// <summary> /// Initializes a new instance of the <see cref="HclWriter"/> class. /// </summary> /// <param name="module">The module to serialize.</param> /// <param name="warnings">Warning list</param> /// <param name="errors">Error list</param> public HclWriter(ModuleInfo module, IList <string> warnings, IList <string> errors) { this.module = module; this.errors = errors; this.warnings = warnings; this.settings = module.Settings; }
/// <summary> /// Initializes a new instance of the <see cref="ResourceImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> protected ResourceImporter( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) { this.ImportSettings = importSettings; this.TerraformSettings = terraformSettings; this.AwsResource = this.TerraformSettings.Template.Resources.First(r => r.Name == this.ImportSettings.Resource.LogicalId); }
/// <summary> /// Initializes a new instance of the <see cref="ResourceDependencyResolver"/> class. /// </summary> /// <param name="settings">Main settings object.</param> /// <param name="terraformResources">All imported terraform resources (as JSON from state file).</param> /// <param name="module">The module being processed.</param> /// <param name="warnings">Global warning list.</param> public ResourceDependencyResolver( ITerraformExportSettings settings, IReadOnlyCollection <StateFileResourceDeclaration> terraformResources, ModuleInfo module, IList <string> warnings) { this.module = module; this.settings = settings; this.warnings = warnings; this.template = settings.Template; this.terraformResources = terraformResources; }
/// <summary> /// Factory to create a resource importer for given resource type. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> /// <returns>Appropriate subtype of <see cref="ResourceImporter"/></returns> public static ResourceImporter Create( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) { if (!ResourceImporters.ContainsKey(importSettings.Resource.TerraformType)) { return(null); } return((ResourceImporter)Activator.CreateInstance( ResourceImporters[importSettings.Resource.TerraformType], importSettings, terraformSettings)); }
/// <summary> /// Initializes a new instance of the <see cref="IntrinsicVisitorContext"/> class. /// </summary> /// <param name="settings">Main settings object.</param> /// <param name="terraformResources">All imported terraform resources.</param> /// <param name="inputs">The list of input variables and data sources.</param> /// <param name="resource">The CLoudFormation resource being visited.</param> /// <param name="warnings">The warnings collection.</param> /// <param name="module">The current module being processed.</param> public IntrinsicVisitorContext( ITerraformExportSettings settings, IReadOnlyCollection <StateFileResourceDeclaration> terraformResources, IList <InputVariable> inputs, IResource resource, IList <string> warnings, ModuleInfo module) { this.module = module; this.settings = settings; this.currentCloudFormationResource = resource; this.warnings = warnings; this.TerraformResources = terraformResources; this.Inputs = inputs; this.template = settings.Template; }
/// <summary> /// Initializes a new instance of the <see cref="ModuleInfo"/> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="nestedModules">The nested modules.</param> /// <param name="inputs">List of input variables.</param> /// <param name="outputs">List of CloudFormation outputs</param> public ModuleInfo( ITerraformExportSettings settings, IReadOnlyCollection <ModuleInfo> nestedModules, IEnumerable <InputVariable> inputs, IEnumerable <Output> outputs) { this.Settings = settings; this.NestedModules = nestedModules ?? new List <ModuleInfo>(); foreach (var nestedModule in this.NestedModules) { nestedModule.Parent = this; } if (inputs != null) { this.Inputs = inputs.ToList(); } if (outputs != null) { this.Outputs = outputs.ToList(); } }
/// <summary> /// Initializes a new instance of the <see cref="DBOptionGroupImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public DBOptionGroupImporter(IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="ListenerCertificateImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public ListenerCertificateImporter( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="CognitoIdentityPoolRoleAttachmentImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public CognitoIdentityPoolRoleAttachmentImporter( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="NetworkAclEntryImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public NetworkAclEntryImporter(IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="ApiGatewayApiDependencyImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public ApiGatewayApiDependencyImporter( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="TerraformExporter"/> class. /// </summary> /// <param name="settings">The settings.</param> public TerraformExporter(ITerraformExportSettings settings) { this.settings = settings; this.stateFilePath = Path.Combine(settings.WorkspaceDirectory, "terraform.tfstate"); }
/// <summary> /// Initializes a new instance of the <see cref="AbstractAASImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> protected AbstractAASImporter(IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="RouteTableAssociationImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public RouteTableAssociationImporter( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Recursively process nested stacks. /// </summary> /// <param name="settings">The settings.</param> /// <param name="warnings">The warnings.</param> /// <returns>Module being processed.</returns> private static async Task <ModuleInfo> ProcessChildModule( ITerraformExportSettings settings, IList <string> warnings) { var childModules = new List <ModuleInfo>(); foreach (var child in settings.Resources.Where( r => r.ResourceType == TerraformExporterConstants.AwsCloudFormationStack)) { var logicalId = child.LogicalResourceId; var stackName = GetStackName(child.StackResource.PhysicalResourceId); var stackData = await StackHelper.ReadStackAsync( settings.CloudFormationClient, stackName, new Dictionary <string, object>()); var childModuleSettings = settings.CopyWith( stackData.Template, stackData.Resources, stackData.Outputs, stackName, Path.Combine("modules", stackName), logicalId); childModules.Add(await ProcessChildModule(childModuleSettings, warnings)); } var workingDirectory = Path.Combine(settings.WorkspaceDirectory, settings.ModuleDirectory); if (!Directory.Exists(workingDirectory)) { Directory.CreateDirectory(workingDirectory); } settings.Logger.LogInformation($"Processing stack {settings.StackName}..."); var scriptFile = Path.Combine(workingDirectory, TerraformExporterConstants.MainScriptFile); ModuleInfo module; using (var fs = settings.IsRootModule ? AsyncFileHelpers.OpenAppendAsync(scriptFile) : AsyncFileHelpers.OpenWriteAsync(scriptFile)) using (var writer = new StreamWriter(fs, AsyncFileHelpers.DefaultEncoding)) { var thisModuleSettings = settings.CopyWith( settings.Template, settings.Resources.Where(r => r.ResourceType != TerraformExporterConstants.AwsCloudFormationStack), null, settings.StackName, settings.IsRootModule ? "." : settings.ModuleDirectory, settings.LogicalId); module = new ModuleInfo( thisModuleSettings, childModules, new InputVariableProcessor(thisModuleSettings, warnings).ProcessInputs(), thisModuleSettings.CloudFormationOutputs); await module.ProcessResources(writer, warnings); } await module.WriteModuleBlocksAsync(); return(module); }
/// <summary> /// Initializes a new instance of the <see cref="RouteImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public RouteImporter( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="CognitoUserGroupImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public CognitoUserGroupImporter(IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="ApiGatewayMethodImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public ApiGatewayMethodImporter(IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="LambdaPermissionImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public LambdaPermissionImporter(IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="ApiGatewayBasePathMappingImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public ApiGatewayBasePathMappingImporter( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="ApiGatewayUsagePlanKeyImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public ApiGatewayUsagePlanKeyImporter( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="IAMManagedPolicyImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public IAMManagedPolicyImporter(IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="AASAutoScalingPolicyImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public AASAutoScalingPolicyImporter( IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="ResourceMapper"/> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="warnings">The warnings.</param> public ResourceMapper(ITerraformExportSettings settings, IList <string> warnings) { this.settings = settings; this.warnings = warnings; }
/// <summary> /// Initializes a new instance of the <see cref="AASServiceScalableTargetImporter"/> class. /// </summary> /// <param name="importSettings">The import settings.</param> /// <param name="terraformSettings">The terraform settings.</param> public AASServiceScalableTargetImporter(IResourceImporterSettings importSettings, ITerraformExportSettings terraformSettings) : base(importSettings, terraformSettings) { }
/// <summary> /// Initializes a new instance of the <see cref="InputVariableProcessor"/> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="warnings">The warnings.</param> public InputVariableProcessor(ITerraformExportSettings settings, IList <string> warnings) { this.warnings = warnings; this.logger = settings.Logger; this.template = settings.Template; }