Resolve the values of the blueprint variables.

        This will resolve the values of the template parameters with values
        from the env file, the config, and any lookups resolved. The
        resolution is run twice, in case the blueprint is jinja2 templated
        and requires provided variables to render.

        Args:
            provided_variables (list of :class:`stacker.variables.Variable`):
                list of provided variables

def resolve_variables(self, provided_variables):
        """Resolve the values of the blueprint variables.

        This will resolve the values of the template parameters with values
        from the env file, the config, and any lookups resolved. The
        resolution is run twice, in case the blueprint is jinja2 templated
        and requires provided variables to render.

        Args:
            provided_variables (list of :class:`stacker.variables.Variable`):
                list of provided variables

        """
        # Pass 1 to set resolved_variables to provided variables
        self.resolved_variables = {}
        variable_dict = dict((var.name, var) for var in provided_variables)
        for var_name, _var_def in variable_dict.items():
            value = resolve_variable(
                variable_dict.get(var_name),
                self.name
            )
            if value is not None:
                self.resolved_variables[var_name] = value

        # Pass 2 to render the blueprint and set resolved_variables according
        # to defined variables
        defined_variables = self.get_parameter_definitions()
        self.resolved_variables = {}
        variable_dict = dict((var.name, var) for var in provided_variables)
        for var_name, _var_def in defined_variables.items():
            value = resolve_variable(
                variable_dict.get(var_name),
                self.name
            )
            if value is not None:
                self.resolved_variables[var_name] = value