Skip to content

Commit

Permalink
fix #724
Browse files Browse the repository at this point in the history
  • Loading branch information
eamonnfaherty committed Oct 15, 2024
1 parent b647d78 commit 5bfbeea
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 43 deletions.
76 changes: 37 additions & 39 deletions servicecatalog_puppet/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,33 +367,33 @@ def list_launches(expanded_manifest, format):

@cli.command()
@click.argument("f", type=click.File())
@click.option("--single-account", default=None)
@click.option("--parameter-override-file", type=click.File())
@click.option(
"--parameter-override-forced/--no-parameter-override-forced", default=False
"--single-account-or-action-configuration",
default="{}",
envvar="SINGLE_ACCOUNT_OR_ACTION_CONFIGURATION",
)
def expand(f, single_account, parameter_override_file, parameter_override_forced):
def expand(f, single_account_or_action_configuration):
puppet_account_id = remote_config.get_puppet_account_id()
regions = remote_config.get_regions(puppet_account_id, constants.HOME_REGION)
extra_params = dict(single_account=None)
if parameter_override_forced or misc_commands.is_a_parameter_override_execution():
overrides = dict(**yaml.safe_load(parameter_override_file.read()))
print(f"single_account_or_action_configuration is {single_account_or_action_configuration}")
overrides = yaml.safe_load(single_account_or_action_configuration)
print(f"overrides is {overrides}")

if overrides.get("subset"):
subset = dict(**overrides.get("subset"))
else:
subset = dict(**overrides)
if overrides.get("subset"):
subset = dict(**overrides.get("subset"))
else:
subset = dict(**overrides)

if subset.get("single_account"):
del subset["single_account"]
if subset.get("single_account"):
del subset["single_account"]

if overrides.get("single_account"):
del overrides["single_account"]
if overrides.get("single_account"):
del overrides["single_account"]

extra_params = dict(
single_account=overrides.get("single_account"), subset=subset
)
click.echo(f"Overridden parameters {extra_params}")
extra_params = dict(
single_account=overrides.get("single_account"), subset=subset
)
click.echo(f"Overridden parameters {extra_params}")

manifest_commands.expand(f, puppet_account_id, regions, **extra_params)
if config.get_should_explode_manifest(puppet_account_id):
Expand Down Expand Up @@ -593,7 +593,6 @@ def setup_config(
@click.option("--num-workers", default=10)
@click.option("--execution-mode", default="hub")
@click.option("--puppet-account-id", default=None)
@click.option("--single-account", default=None)
@click.option("--home-region", default=None)
@click.option("--regions", default="")
@click.option("--should-collect-cloudformation-events", default=None, type=bool)
Expand All @@ -608,47 +607,46 @@ def setup_config(
@click.option(
"--is-caching-enabled", default="", envvar="SCT_IS_CACHING_ENABLED",
)
@click.option("--parameter-override-file", type=click.File())
@click.option(
"--parameter-override-forced/--no-parameter-override-forced", default=False
"--single-account-or-action-configuration",
default="{}",
envvar="SINGLE_ACCOUNT_OR_ACTION_CONFIGURATION",
)
@click.option("--on-complete-url", default=None)
def deploy_from_task_reference(
path,
num_workers,
execution_mode,
puppet_account_id,
single_account,
home_region,
regions,
should_collect_cloudformation_events,
should_forward_events_to_eventbridge,
should_forward_failures_to_opscenter,
output_cache_starting_point,
is_caching_enabled,
parameter_override_file,
parameter_override_forced,
single_account_or_action_configuration,
on_complete_url,
):
params = dict()
if parameter_override_forced or misc_commands.is_a_parameter_override_execution():
overrides = dict(**yaml.safe_load(parameter_override_file.read()))
if overrides.get("subset"):
subset = overrides.get("subset")
overrides = dict(
section=subset.get("section"),
item=subset.get("name"),
include_dependencies=subset.get("include_dependencies"),
include_reverse_dependencies=subset.get("include_reverse_dependencies"),
)
params.update(
dict(single_account=overrides.get("single_account"), subset=overrides,)

overrides = dict(**yaml.safe_load(single_account_or_action_configuration))
if overrides.get("subset"):
subset = overrides.get("subset")
overrides = dict(
section=subset.get("section"),
item=subset.get("name"),
include_dependencies=subset.get("include_dependencies"),
include_reverse_dependencies=subset.get("include_reverse_dependencies"),
)
click.echo(f"Overridden parameters {params}")
params.update(
dict(single_account=str(overrides.get("single_account")), subset=overrides,)
)
click.echo(f"Overridden parameters {params}")

setup_config(
puppet_account_id=puppet_account_id,
single_account=single_account or params.get("single_account"),
single_account=params.get("single_account"),
num_workers=str(num_workers),
execution_mode=execution_mode,
home_region=home_region,
Expand Down
13 changes: 10 additions & 3 deletions servicecatalog_puppet/commands/task_reference.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,20 +65,21 @@ def deploy_from_task_reference(path):
single_account_id = config.get_single_account_id()

for task_reference, task in all_tasks.items():
if single_account_id:
if single_account_id: # running single account mode
task_section_name = task.get("section_name")
task_account_id = task.get("account_id")
spoke_execution = str(config.get_executor_account_id()) != str(
puppet_account_id
)
if spoke_execution:
if spoke_execution: # is a spoke execution
if (
task_account_id == single_account_id
and task_section_name != constants.RUN_DEPLOY_IN_SPOKE
):
tasks_to_run_filtered[task_reference] = task

else:
else: # is running in a hub
# need to continue any tasks that should not be executed in single account mode
if task.get("task_reference") == constants.CREATE_POLICIES:
continue

Expand All @@ -95,6 +96,12 @@ def deploy_from_task_reference(path):
):
continue

if str(task.get('task_generating_output_account_id')) not in [
str(puppet_account_id),
str(single_account_id),
]:
continue

else:
if task_account_id and str(task_account_id) not in [
str(single_account_id),
Expand Down
15 changes: 14 additions & 1 deletion servicecatalog_puppet/template_builder/hub/bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

from servicecatalog_puppet import config, constants, environmental_variables

single_account_or_action_configuration_parameter_name="single_account_or_action_configuration"

def get_template(
puppet_version,
Expand Down Expand Up @@ -961,7 +962,7 @@ def get_template(
Configuration={
"ProjectName": t.Ref("DeployProject"),
"PrimarySource": "Source",
"EnvironmentVariables": '[{"name":"EXECUTION_ID","value":"#{codepipeline.PipelineExecutionId}","type":"PLAINTEXT"}]',
"EnvironmentVariables": '[{"name":"EXECUTION_ID","value":"#{codepipeline.PipelineExecutionId}","type":"PLAINTEXT"},{"name":"SINGLE_ACCOUNT_OR_ACTION_CONFIGURATION","value":"#{variables.'+single_account_or_action_configuration_parameter_name+'}","type":"PLAINTEXT"}]', #EPF
},
RunOrder=1,
),
Expand All @@ -985,6 +986,13 @@ def get_template(
RestartExecutionOnUpdate=True,
ExecutionMode="QUEUED",
PipelineType="V2",
Variables=[
codepipeline.VariableDeclaration(
Name=single_account_or_action_configuration_parameter_name,
Description="YAML configuration to configure this solution to run a subset of the pipeline",
DefaultValue="{}"
),
]
)
)

Expand Down Expand Up @@ -1075,6 +1083,11 @@ def get_template(
"Name": "SPOKE_EXECUTION_MODE_DEPLOY_ENV",
"Value": constants.SPOKE_EXECUTION_MODE_DEPLOY_ENV_PARAMETER_NAME,
},
{
"Type": "PLAINTEXT",
"Name": "SINGLE_ACCOUNT_OR_ACTION_CONFIGURATION",
"Value": "{}"
}
]
+ deploy_env_vars,
),
Expand Down

0 comments on commit 5bfbeea

Please sign in to comment.