Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not enough values to unpack given a badly formatted stack ref #1388

Closed
alex-harvey-z3q opened this issue Nov 24, 2023 · 0 comments
Closed

Not enough values to unpack given a badly formatted stack ref #1388

alex-harvey-z3q opened this issue Nov 24, 2023 · 0 comments
Assignees

Comments

@alex-harvey-z3q
Copy link
Contributor

Subject of the issue

If a stack output is incorrectly formatted, and missing ::, a confusing and unhandled exception is seen:

[2023-11-24 01:53:39] - REDACTED - Successfully initiated creation of Change Set 'sceptre-foundations-3551-834819d8978ad61146f7c9d9d30cae792d4fe192'
Traceback (most recent call last):
  File "/usr/local/bin/sceptre", line 8, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/sceptre/cli/helpers.py", line 46, in decorated
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/sceptre/cli/create.py", line 49, in create_command
    plan.create_change_set(change_set_name)
  File "/usr/local/lib/python3.10/site-packages/sceptre/plan/plan.py", line 286, in create_change_set
    return self._execute(*args)
  File "/usr/local/lib/python3.10/site-packages/sceptre/plan/plan.py", line 30, in wrapped
    return func(self, *args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/sceptre/plan/plan.py", line 56, in _execute
    return executor.execute(*args)
  File "/usr/local/lib/python3.10/site-packages/sceptre/plan/executor.py", line 52, in execute
    stack, status = future.result()
  File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 451, in result
    return self.__get_result()
  File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 403, in __get_result
    raise self._exception
  File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/lib/python3.10/site-packages/sceptre/plan/executor.py", line 59, in _execute
    result = getattr(actions, self.command)(*args)
  File "/usr/local/lib/python3.10/site-packages/sceptre/hooks/__init__.py", line 95, in decorated
    response = func(self, *args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/sceptre/plan/actions.py", line 445, in create_change_set
    "Parameters": self._format_parameters(self.stack.parameters),
  File "/usr/local/lib/python3.10/site-packages/sceptre/resolvers/__init__.py", line 321, in __get__
    container = super().__get__(stack, stack_class)
  File "/usr/local/lib/python3.10/site-packages/sceptre/resolvers/__init__.py", line 230, in __get__
    return self.get_resolved_value(stack, stack_class)
  File "/usr/local/lib/python3.10/site-packages/sceptre/resolvers/__init__.py", line 371, in get_resolved_value
    _call_func_on_values(resolve, container, Resolver)
  File "/usr/local/lib/python3.10/site-packages/sceptre/helpers.py", line 91, in _call_func_on_values
    func_on_instance(key)
  File "/usr/local/lib/python3.10/site-packages/sceptre/helpers.py", line 85, in func_on_instance
    func(attr, key, value)
  File "/usr/local/lib/python3.10/site-packages/sceptre/resolvers/__init__.py", line 345, in resolve
    result = self.resolve_resolver_value(value)
  File "/usr/local/lib/python3.10/site-packages/sceptre/resolvers/__init__.py", line 2[84](https://github.com/REDACTED/actions/runs/6975938755/job/18983741778?pr=3551#step:9:86), in resolve_resolver_value
    return resolver.resolve()
  File "/usr/local/lib/python3.10/site-packages/sceptre/resolvers/stack_output.py", line 176, in resolve
    dependency_stack_name, output_key = stack_argument.split("::")
ValueError: not enough values to unpack (expected 2, got 1)

Your environment

  • version of sceptre (sceptre --version) 4.3.0
  • version of python (python --version) 3.10
  • which OS/distro

Steps to reproduce

Create a stack reference like

!stack_output_external myStackName

Noting that this is incomplete and missing the ::.

Expected behaviour

It should error out with a more helpful error message informing the expected format of the reference compared to the actual format.

Actual behaviour

ValueError: not enough values to unpack (expected 2, got 1)
@alex-harvey-z3q alex-harvey-z3q self-assigned this Nov 24, 2023
@iainelder iainelder mentioned this issue Nov 26, 2023
9 tasks
alex-harvey-z3q added a commit that referenced this issue Nov 27, 2023
This adds exception handling in the case of failures to parse the given
arguments to !stack_output and !stack_output_external.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant