Source code for stacker.commands.stacker.build
"""Launches or updates CloudFormation stacks based on the given config.
Stacker is smart enough to figure out if anything (the template or parameters)
have changed for a given stack. If nothing has changed, stacker will correctly
skip executing anything against the stack.
"""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from .base import BaseCommand, cancel
from ...actions import build
[docs]class Build(BaseCommand):
name = "build"
description = __doc__
[docs] def add_arguments(self, parser):
super(Build, self).add_arguments(parser)
parser.add_argument("-o", "--outline", action="store_true",
help="Print an outline of what steps will be "
"taken to build the stacks")
parser.add_argument("--force", action="append", default=[],
metavar="STACKNAME", type=str,
help="If a stackname is provided to --force, it "
"will be updated, even if it is locked in "
"the config.")
parser.add_argument("--targets", "--stacks", action="append",
metavar="STACKNAME", type=str,
help="Only work on the stacks given, and their "
"dependencies. Can be specified more than "
"once. If not specified then stacker will "
"work on all stacks in the config file.")
parser.add_argument("-j", "--max-parallel", action="store", type=int,
default=0,
help="The maximum number of stacks to execute in "
"parallel. If not provided, the value will "
"be constrained based on the underlying "
"graph.")
parser.add_argument("-t", "--tail", action="store_true",
help="Tail the CloudFormation logs while working "
"with stacks")
parser.add_argument("-d", "--dump", action="store", type=str,
help="Dump the rendered Cloudformation templates "
"to a directory")
[docs] def run(self, options, **kwargs):
super(Build, self).run(options, **kwargs)
action = build.Action(options.context,
provider_builder=options.provider_builder,
cancel=cancel())
action.execute(concurrency=options.max_parallel,
outline=options.outline,
tail=options.tail,
dump=options.dump)
[docs] def get_context_kwargs(self, options, **kwargs):
return {"stack_names": options.targets, "force_stacks": options.force}