Sceptre / sceptre

Build better AWS infrastructure
https://docs.sceptre-project.org
Other
1.48k stars 313 forks source link

Sceptre 2.2 - sceptre.resolvers.RecursiveGet bug #810

Closed medbensalem closed 5 years ago

medbensalem commented 5 years ago

Hi,

Starting for the release 2.2 we are getting this error messages during deployemnts:

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/resolvers/__init__.py", line 119, in _no_recursive_get
    raise RecursiveGet()
sceptre.resolvers.RecursiveGet

Current work env: python 3.6.6 boto3 botocore 1.12.11

Full logs:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/bin/sceptre", line 10, in <module>
    sys.exit(cli())
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/cli/helpers.py", line 36, in decorated
    return func(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/cli/launch.py", line 38, in launch_command
    responses = plan.launch()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/plan/plan.py", line 130, in launch
    return self._execute(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/plan/plan.py", line 40, in _execute
    return executor.execute(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/plan/executor.py", line 55, in execute
    stack, status = future.result()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/concurrent/futures/_base.py", line 425, in result
    return self.__get_result()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/concurrent/futures/thread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/plan/executor.py", line 62, in _execute
    result = getattr(actions, self.command)(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/plan/actions.py", line 204, in launch
    status = self.update()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/hooks/__init__.py", line 104, in decorated
    response = func(self, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/plan/actions.py", line 114, in update
    "Parameters": self._format_parameters(self.stack.parameters),
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/resolvers/__init__.py", line 76, in __get__
    with self._no_recursive_get():
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sceptre/resolvers/__init__.py", line 119, in _no_recursive_get
    raise RecursiveGet()
sceptre.resolvers.RecursiveGet

Could you please assist. Thank you,

ngfgrant commented 5 years ago

Hey @medbensalem - ok thanks for raising. This comes from https://github.com/Sceptre/sceptre/commit/234da22e9a1fe63f8d0609ff3f9f06f922750931. Did your stack consistently work every time? The reason I ask is that the exception being thrown was designed to catch infinite recursions arising from sceptres resolvable property function.

medbensalem commented 5 years ago

Yes, I had no issue till version 2.2 has been released.

medbensalem commented 5 years ago

Just FYI, I have tried to remove all resolvers/hooks dependencies on my code and the problem persisted.

ngfgrant commented 5 years ago

Thanks @medbensalem looking into it now.

ghost commented 5 years ago

I can report the same bug. If I delete the stacks referenced and redeploy, it does not throw the error the first time via "sceptre launch " - when I run the same command a second time I get the RecursiveGet issue. We tried, also, removing all dependencies and resolvers and still have the same bug.

ngfgrant commented 5 years ago

Should be resolved in 2.2.1

ghost commented 5 years ago

Should be resolved in 2.2.1

Confirmed - working now with 2.2.1