Esempio n. 1
0
 /// <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));
        }
Esempio n. 5
0
 /// <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;
 }
Esempio n. 6
0
        /// <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)
 {
 }
Esempio n. 11
0
 /// <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)
 {
 }
Esempio n. 12
0
 /// <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)
 {
 }
Esempio n. 14
0
 /// <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)
 {
 }
Esempio n. 15
0
        /// <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)
 {
 }
Esempio n. 17
0
 /// <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)
 {
 }
Esempio n. 19
0
 /// <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)
 {
 }
Esempio n. 21
0
 /// <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)
 {
 }
Esempio n. 22
0
 /// <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)
 {
 }
Esempio n. 24
0
 /// <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;
 }