From e5cf122248fc0157f8e5e1c23d6800fd67678fec Mon Sep 17 00:00:00 2001 From: apollorion Date: Thu, 6 Jun 2024 11:28:48 -0400 Subject: [PATCH] feat: do this smarter and add in argument for defaulting manage_state --- config.yml.example | 13 +++++++++++++ spacemk/commands/generate.py | 9 ++++++++- spacemk/generator.py | 9 ++++++--- spacemk/templates/base.tf.jinja | 16 +++------------- 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/config.yml.example b/config.yml.example index 4973a2e..b8dd6fd 100644 --- a/config.yml.example +++ b/config.yml.example @@ -10,6 +10,19 @@ exporter: workspaces: ^example-.*$ generator: + +# # If you use a custom app in github with spacelift, set this to `true`. +# # If you use the marketplace github app with spacelift, set this to `false`. +# # Default: false +# github: +# customApp: false +# +# # If you want spacelift to manage your state set to `true`. +# # If you want to use a third-party backend, like s3, set to `false`. +# # Default: true +# spacelift: +# manage_state: true + extra_vars: foo: bar # "{{ extra_vars.foo }}" in a template will be replaced by "bar" diff --git a/spacemk/commands/generate.py b/spacemk/commands/generate.py index 336000e..8862e3b 100644 --- a/spacemk/commands/generate.py +++ b/spacemk/commands/generate.py @@ -13,5 +13,12 @@ ) @pass_meta_key("config") def generate(config): + def default(value, default): + return value if value is not None else default + + spacelift = default(config.get("generator.spacelift"), {"manage_state": True}) + github = default(config.get("generator.github"), {"custom_app": False}) + generation_config = {"spacelift": spacelift, "github": github} + generator = Generator() - generator.generate(extra_vars=config.get("generator.extra_vars")) + generator.generate(extra_vars=config.get("generator.extra_vars"), generation_config=generation_config) diff --git a/spacemk/generator.py b/spacemk/generator.py index 77c9ec5..a7c7b3c 100644 --- a/spacemk/generator.py +++ b/spacemk/generator.py @@ -62,8 +62,9 @@ def _format_code(self) -> None: else: logging.info("Formatted generated Terraform code") - def _generate_code(self, data: dict, extra_vars: dict, template_name: str): + def _generate_code(self, data: dict, extra_vars: dict, template_name: str, generation_config: dict): data["extra_vars"] = extra_vars + data["generation_config"] = generation_config current_file_path = Path(__file__).parent.resolve() @@ -123,15 +124,17 @@ def _validate_code(self) -> None: else: logging.info("Generated Terraform code is valid") - def generate(self, extra_vars: Optional[dict] = None, template_name: str = "main.tf.jinja"): + def generate(self, extra_vars: Optional[dict] = None, template_name: str = "main.tf.jinja", generation_config: dict = None): """Generate source code for managing Spacelift entities""" + if generation_config is None: + generation_config = {} if extra_vars is None: extra_vars = {} self._check_requirements() data = self._load_data() data = self._process_data(data) - self._generate_code(data=data, extra_vars=extra_vars, template_name=template_name) + self._generate_code(data=data, extra_vars=extra_vars, template_name=template_name, generation_config=generation_config) self._format_code() self._validate_code() diff --git a/spacemk/templates/base.tf.jinja b/spacemk/templates/base.tf.jinja index beb267d..d9ee476 100644 --- a/spacemk/templates/base.tf.jinja +++ b/spacemk/templates/base.tf.jinja @@ -84,7 +84,7 @@ resource "spacelift_stack" "{{ stack._relationships.space._migration_id }}_{{ st {{ argument("description", stack.description) }} {{ argument("local_preview", stack.local_preview) }} {{ argument("labels", stack.labels) }} - {{ argument("manage_state", False) }} + {{ argument("manage_state", generation_config.spacelift.manage_state) }} {{ argument("name", stack.name, required=True) }} {{ argument("project_root", stack.vcs.project_root) }} {{ argument("repository", stack.vcs.repository, required=True) }} @@ -97,12 +97,7 @@ resource "spacelift_stack" "{{ stack._relationships.space._migration_id }}_{{ st {% if stack.terraform.workflow_tool == "CUSTOM" %} {{ argument("runner_image ", extra_vars.custom_terraform_runner_image ~ ":" ~ stack.terraform.version, required=True) }} {% endif %} - - {% if stack.vcs.provider == "github_custom" %} - {% if extra_vars is defined - and extra_vars.github is defined - and extra_vars.github.customApp is defined - and extra_vars.github.customApp %} + {% if stack.vcs.provider == "github_custom" and generation.github.custom_app %} github_enterprise { {{ argument("namespace", stack.vcs.namespace) }} } @@ -264,12 +259,7 @@ resource "spacelift_module" "{{ module._relationships.space._migration_id }}_{{ {{ argument("space_id", "spacelift_space." ~ module._relationships.space._migration_id ~ ".id", serialize=False) }} {{ argument("terraform_provider", module.terraform_provider) }} {% block module_arguments_extra scoped %}{% endblock %} - - {% if module.vcs.provider == "github_custom" %} - {% if extra_vars is defined - and extra_vars.github is defined - and extra_vars.github.customApp is defined - and extra_vars.github.customApp %} + {% if module.vcs.provider == "github_custom" and generation_config.github.custom_app %} github_enterprise { {{ argument("namespace", module.vcs.namespace) }} }