From 42aa70d675b706c80f8a4fcf2277a2ed4665dbc2 Mon Sep 17 00:00:00 2001 From: The Magician Date: Fri, 18 Aug 2023 12:25:39 -0700 Subject: [PATCH] Artifact Registry: Implement cleanup policies (#8671) (#15561) Signed-off-by: Modular Magician --- .changelog/8671.txt | 3 + ...artifact_registry_repository.html.markdown | 116 ++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 .changelog/8671.txt diff --git a/.changelog/8671.txt b/.changelog/8671.txt new file mode 100644 index 00000000000..70180c25216 --- /dev/null +++ b/.changelog/8671.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +artifactregistry: added `cleanup_policies` and `cleanup_policy_dry_run` fields to resource `google_artifact_registry_repository` +``` diff --git a/website/docs/r/artifact_registry_repository.html.markdown b/website/docs/r/artifact_registry_repository.html.markdown index d937ba1e50f..d701c439e5a 100644 --- a/website/docs/r/artifact_registry_repository.html.markdown +++ b/website/docs/r/artifact_registry_repository.html.markdown @@ -147,6 +147,50 @@ resource "google_artifact_registry_repository" "my-repo" { } } ``` + +## Example Usage - Artifact Registry Repository Cleanup + + +```hcl +resource "google_artifact_registry_repository" "my-repo" { + provider = google-beta + location = "us-central1" + repository_id = "my-repository" + description = "example docker repository with cleanup policies" + format = "DOCKER" + cleanup_policy_dry_run = false + cleanup_policies { + id = "delete-prerelease" + action = "DELETE" + condition { + tag_state = "TAGGED" + tag_prefixes = ["alpha", "v0"] + older_than = "2592000s" + } + } + cleanup_policies { + id = "keep-tagged-release" + action = "KEEP" + condition { + tag_state = "TAGGED" + tag_prefixes = ["release"] + package_name_prefixes = ["webapp", "mobile"] + } + } + cleanup_policies { + id = "keep-minimum-versions" + action = "KEEP" + most_recent_versions { + package_name_prefixes = ["webapp", "mobile", "sandbox"] + keep_count = 5 + } + } +} +``` ## Argument Reference @@ -215,11 +259,24 @@ The following arguments are supported: Configuration specific for a Virtual Repository. Structure is [documented below](#nested_virtual_repository_config). +* `cleanup_policies` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Cleanup policies for this repository. Cleanup policies indicate when + certain package versions can be automatically deleted. + Map keys are policy IDs supplied by users during policy creation. They must + unique within a repository and be under 128 characters in length. + Structure is [documented below](#nested_cleanup_policies). + * `remote_repository_config` - (Optional) Configuration specific for a Remote Repository. Structure is [documented below](#nested_remote_repository_config). +* `cleanup_policy_dry_run` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + If true, the cleanup pipeline is prevented from deleting versions in this + repository. + * `project` - (Optional) The ID of the project in which the resource belongs. If it is not provided, the provider project is used. @@ -267,6 +324,65 @@ The following arguments are supported: (Optional) Entries with a greater priority value take precedence in the pull order. +The `cleanup_policies` block supports: + +* `id` - (Required) The identifier for this object. Format specified above. + +* `action` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Policy action. + Possible values are: `DELETE`, `KEEP`. + +* `condition` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Policy condition for matching versions. + Structure is [documented below](#nested_condition). + +* `most_recent_versions` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Policy condition for retaining a minimum number of versions. May only be + specified with a Keep action. + Structure is [documented below](#nested_most_recent_versions). + + +The `condition` block supports: + +* `tag_state` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Match versions by tag status. + Default value is `ANY`. + Possible values are: `TAGGED`, `UNTAGGED`, `ANY`. + +* `tag_prefixes` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Match versions by tag prefix. Applied on any prefix match. + +* `version_name_prefixes` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Match versions by version name prefix. Applied on any prefix match. + +* `package_name_prefixes` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Match versions by package prefix. Applied on any prefix match. + +* `older_than` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Match versions older than a duration. + +* `newer_than` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Match versions newer than a duration. + +The `most_recent_versions` block supports: + +* `package_name_prefixes` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Match versions by package prefix. Applied on any prefix match. + +* `keep_count` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + Minimum number of versions to keep. + The `remote_repository_config` block supports: * `description` -