Skip to content

AWS

pulumi_extra.contrib.aws

is_aws_resource(resource_type)

Determine if a given resource type is an AWS resource.

Source code in pulumi_extra/contrib/aws/common.py
2
3
4
def is_aws_resource(resource_type: str) -> bool:
    """Determine if a given resource type is an AWS resource."""
    return resource_type.startswith("aws:")

is_taggable(resource_type)

Determine if a given AWS resource type is taggable.

Source code in pulumi_extra/contrib/aws/autotag.py
def is_taggable(resource_type: str) -> bool:
    """Determine if a given AWS resource type is taggable."""
    if not is_aws_resource(resource_type):
        pulumi.log.debug(f"Resource type {resource_type} is not a AWS resource")
        return False

    if resource_type in _NOT_TAGGABLE_RESOURCES:
        pulumi.log.info(
            f"Resource type {resource_type} is set not-taggable explicitly",
        )
        return False

    return resource_has_attribute(resource_type, "tags")

register_auto_tagging(*, exclude=None, extra=None, no_default_tags=False)

Register a Pulumi stack transform that automatically tags resources.

Parameters:

Name Type Description Default
exclude set[str] | None

Resources to exclude from tagging.

None
extra dict[str, str] | None

Extra tags to add.

None
no_default_tags bool

If True, do not add default tags; pulumi:Organization, pulumi:Project, pulumi:Stack, Managed-By.

False
Source code in pulumi_extra/contrib/aws/autotag.py
def register_auto_tagging(
    *,
    exclude: set[str] | None = None,
    extra: dict[str, str] | None = None,
    no_default_tags: bool = False,
) -> None:
    """Register a Pulumi stack transform that automatically tags resources.

    Args:
        exclude: Resources to exclude from tagging.
        extra: Extra tags to add.
        no_default_tags: If `True`, do not add default tags;
            pulumi:Organization, pulumi:Project, pulumi:Stack, Managed-By.
    """
    tags = {}
    extra = extra or {}
    exclude = exclude or set()

    # Pulumi tags
    if not no_default_tags:
        org = pulumi.get_organization()
        project = pulumi.get_project()
        stack = pulumi.get_stack()
        tags.update(
            {
                "pulumi:Organization": org,
                "pulumi:Project": project,
                "pulumi:Stack": stack,
                "Managed-By": "Pulumi",
            },
        )

    tags.update(extra)

    def transform(
        args: pulumi.ResourceTransformArgs,
    ) -> pulumi.ResourceTransformResult | None:
        if args.type_ not in exclude and is_taggable(args.type_):
            if TYPE_CHECKING:
                assert isinstance(args.props, dict)
            args.props["tags"] = {
                **tags,
                **(args.props.get("tags", {})),
            }
            return pulumi.ResourceTransformResult(props=args.props, opts=args.opts)

        return None

    pulumi.runtime.register_resource_transform(transform)