示例#1
0
    def run(self, collector, stack, available_actions, tasks, **extras):
        """Run this task"""
        task_action = available_actions[self.action]
        self.set_description(available_actions)
        configuration = collector.configuration.wrapped()

        if self.options:
            if stack:
                configuration.update({"stacks": {stack: self.options}})
            else:
                configuration.update(self.options)

        configuration.update(configuration["args_dict"].as_dict(),
                             source="<cli>")

        if self.overrides:
            overrides = {}
            for key, val in self.overrides.items():
                overrides[key] = val
                if isinstance(val, MergedOptions):
                    overrides[key] = dict(val.items())
            configuration.update(overrides)

        if task_action.needs_stack:
            environment = configuration["bespin"].environment
            if not environment:
                raise BadOption("Please specify an environment",
                                available=list(
                                    configuration.get("environments",
                                                      {}).keys()))
            if configuration["environments"].get(environment) is None:
                raise BadOption(
                    "No configuration found for specified environment",
                    environment=environment,
                    available=list(configuration["environments"].keys()))

            self.find_stack(stack, configuration)
            stack = configuration["stacks"][stack]

        bespin = configuration["bespin"]
        info = {"done": False}

        def set_credentials():
            if info["done"]:
                return
            info["done"] = True

            environment = configuration["bespin"].environment
            if not environment:
                raise BadOption("Please specify an environment",
                                available=list(
                                    configuration["environments"].keys()))
            if environment not in configuration["environments"]:
                raise BadOption("Please specify a defined environment",
                                available=list(
                                    configuration["environments"].keys()))
            region = configuration["environments"][environment].region

            no_assume_role = configuration["bespin"].no_assume_role
            if self.options and "no_assume_role" in self.options:
                no_assume_role = self.options["no_assume_role"]
            assume_role = NotSpecified if no_assume_role else configuration[
                "bespin"].assume_role

            credentials = Credentials(
                region, configuration["environments"][environment].account_id,
                assume_role)
            bespin.credentials = credentials

        bespin.set_credentials = set_credentials
        if task_action.needs_credentials:
            bespin.set_credentials()

        artifact = configuration["bespin"].chosen_artifact or None
        if task_action.needs_artifact and not artifact:
            raise BadOption("Please specify an artifact")

        from bespin.collector import Collector
        new_collector = Collector()
        new_collector.configuration = configuration
        new_collector.configuration_file = collector.configuration_file
        return task_action(collector,
                           stack=stack,
                           artifact=artifact,
                           tasks=tasks,
                           **extras)
示例#2
0
    def run(self, collector, stack, available_actions, tasks, **extras):
        """Run this task"""
        task_action = available_actions[self.action]
        self.set_description(available_actions)
        configuration = collector.configuration.wrapped()

        if self.options:
            if stack:
                configuration.update({"stacks": {stack: self.options}})
            else:
                configuration.update(self.options)

        configuration.update(configuration["cli_args"].as_dict(), source="<cli>")

        if self.overrides:
            overrides = {}
            for key, val in self.overrides.items():
                overrides[key] = val
                if isinstance(val, MergedOptions):
                    overrides[key] = dict(val.items())
            configuration.update(overrides)

        if task_action.needs_stack:
            environment = configuration["bespin"].environment
            if not environment:
                raise BadOption("Please specify an environment", available=list(configuration.get("environments", {}).keys()))
            if configuration["environments"].get(environment) is None:
                raise BadOption("No configuration found for specified environment", environment=environment, available=list(configuration["environments"].keys()))

            self.find_stack(stack, configuration)
            stack = configuration["stacks"][stack]

        bespin = configuration["bespin"]
        info = {"done": False}
        def set_credentials():
            if info["done"]:
                return
            info["done"] = True

            environment = configuration["bespin"].environment
            if not environment:
                raise BadOption("Please specify an environment", available=list(configuration["environments"].keys()))
            if environment not in configuration["environments"]:
                raise BadOption("Please specify a defined environment", available=list(configuration["environments"].keys()))
            region = configuration["environments"][environment].region

            no_assume_role = configuration["bespin"].no_assume_role
            if self.options and "no_assume_role" in self.options:
                no_assume_role = self.options["no_assume_role"]
            assume_role = NotSpecified if no_assume_role else configuration["bespin"].assume_role

            credentials = Credentials(
                  region
                , configuration["environments"][environment].account_id
                , assume_role
                )
            bespin.credentials = credentials
        bespin.set_credentials = set_credentials
        if task_action.needs_credentials:
            bespin.set_credentials()

        artifact = configuration["bespin"].chosen_artifact or None
        if task_action.needs_artifact and not artifact:
            raise BadOption("Please specify an artifact")

        from bespin.collector import Collector
        new_collector = Collector()
        new_collector.configuration = configuration
        new_collector.configuration_file = collector.configuration_file
        return task_action(collector, stack=stack, artifact=artifact, tasks=tasks, **extras)