diff --git a/.changelog/9047.txt b/.changelog/9047.txt new file mode 100644 index 00000000000..000f20c3de2 --- /dev/null +++ b/.changelog/9047.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +artifactregistry: added support for remote APT and YUM repositories to `google_artifact_registry_repository` +``` diff --git a/google/services/artifactregistry/resource_artifact_registry_repository.go b/google/services/artifactregistry/resource_artifact_registry_repository.go index 3a5e366605c..972fab13298 100644 --- a/google/services/artifactregistry/resource_artifact_registry_repository.go +++ b/google/services/artifactregistry/resource_artifact_registry_repository.go @@ -155,6 +155,42 @@ snapshot versions.`, MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ + "apt_repository": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `Specific settings for an Apt remote repository.`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "public_repository": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `One of the publicly available Apt repositories supported by Artifact Registry.`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "repository_base": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: verify.ValidateEnum([]string{"DEBIAN", "UBUNTU"}), + Description: `A common public repository base for Apt, e.g. '"debian/dists/buster"' Possible values: ["DEBIAN", "UBUNTU"]`, + }, + "repository_path": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: `Specific repository from the base.`, + }, + }, + }, + }, + }, + }, + ExactlyOneOf: []string{"remote_repository_config.0.apt_repository", "remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository", "remote_repository_config.0.yum_repository"}, + }, "description": { Type: schema.TypeString, Optional: true, @@ -180,7 +216,7 @@ snapshot versions.`, }, }, }, - ExactlyOneOf: []string{"remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository"}, + ExactlyOneOf: []string{"remote_repository_config.0.apt_repository", "remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository", "remote_repository_config.0.yum_repository"}, }, "maven_repository": { Type: schema.TypeList, @@ -201,7 +237,7 @@ snapshot versions.`, }, }, }, - ExactlyOneOf: []string{"remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository"}, + ExactlyOneOf: []string{"remote_repository_config.0.apt_repository", "remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository", "remote_repository_config.0.yum_repository"}, }, "npm_repository": { Type: schema.TypeList, @@ -222,7 +258,7 @@ snapshot versions.`, }, }, }, - ExactlyOneOf: []string{"remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository"}, + ExactlyOneOf: []string{"remote_repository_config.0.apt_repository", "remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository", "remote_repository_config.0.yum_repository"}, }, "python_repository": { Type: schema.TypeList, @@ -243,7 +279,43 @@ snapshot versions.`, }, }, }, - ExactlyOneOf: []string{"remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository"}, + ExactlyOneOf: []string{"remote_repository_config.0.apt_repository", "remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository", "remote_repository_config.0.yum_repository"}, + }, + "yum_repository": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `Specific settings for an Yum remote repository.`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "public_repository": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `One of the publicly available Yum repositories supported by Artifact Registry.`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "repository_base": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: verify.ValidateEnum([]string{"CENTOS", "CENTOS_DEBUG", "CENTOS_VAULT", "CENTOS_STREAM", "ROCKY", "EPEL"}), + Description: `A common public repository base for Yum. Possible values: ["CENTOS", "CENTOS_DEBUG", "CENTOS_VAULT", "CENTOS_STREAM", "ROCKY", "EPEL"]`, + }, + "repository_path": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: `Specific repository from the base, e.g. '"8-stream/BaseOs/x86_64/os"'`, + }, + }, + }, + }, + }, + }, + ExactlyOneOf: []string{"remote_repository_config.0.apt_repository", "remote_repository_config.0.docker_repository", "remote_repository_config.0.maven_repository", "remote_repository_config.0.npm_repository", "remote_repository_config.0.python_repository", "remote_repository_config.0.yum_repository"}, }, }, }, @@ -858,6 +930,8 @@ func flattenArtifactRegistryRepositoryRemoteRepositoryConfig(v interface{}, d *s transformed := make(map[string]interface{}) transformed["description"] = flattenArtifactRegistryRepositoryRemoteRepositoryConfigDescription(original["description"], d, config) + transformed["apt_repository"] = + flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepository(original["aptRepository"], d, config) transformed["docker_repository"] = flattenArtifactRegistryRepositoryRemoteRepositoryConfigDockerRepository(original["dockerRepository"], d, config) transformed["maven_repository"] = @@ -866,12 +940,50 @@ func flattenArtifactRegistryRepositoryRemoteRepositoryConfig(v interface{}, d *s flattenArtifactRegistryRepositoryRemoteRepositoryConfigNpmRepository(original["npmRepository"], d, config) transformed["python_repository"] = flattenArtifactRegistryRepositoryRemoteRepositoryConfigPythonRepository(original["pythonRepository"], d, config) + transformed["yum_repository"] = + flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepository(original["yumRepository"], d, config) return []interface{}{transformed} } func flattenArtifactRegistryRepositoryRemoteRepositoryConfigDescription(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { return v } +func flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + if len(original) == 0 { + return nil + } + transformed := make(map[string]interface{}) + transformed["public_repository"] = + flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository(original["publicRepository"], d, config) + return []interface{}{transformed} +} +func flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + if len(original) == 0 { + return nil + } + transformed := make(map[string]interface{}) + transformed["repository_base"] = + flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryBase(original["repositoryBase"], d, config) + transformed["repository_path"] = + flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryPath(original["repositoryPath"], d, config) + return []interface{}{transformed} +} +func flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryBase(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + return v +} + +func flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryPath(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + return v +} + func flattenArtifactRegistryRepositoryRemoteRepositoryConfigDockerRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { if v == nil { return nil @@ -940,6 +1052,42 @@ func flattenArtifactRegistryRepositoryRemoteRepositoryConfigPythonRepositoryPubl return v } +func flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + if len(original) == 0 { + return nil + } + transformed := make(map[string]interface{}) + transformed["public_repository"] = + flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository(original["publicRepository"], d, config) + return []interface{}{transformed} +} +func flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + if len(original) == 0 { + return nil + } + transformed := make(map[string]interface{}) + transformed["repository_base"] = + flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryBase(original["repositoryBase"], d, config) + transformed["repository_path"] = + flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryPath(original["repositoryPath"], d, config) + return []interface{}{transformed} +} +func flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryBase(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + return v +} + +func flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryPath(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + return v +} + func expandArtifactRegistryRepositoryFormat(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { return v, nil } @@ -1112,6 +1260,13 @@ func expandArtifactRegistryRepositoryRemoteRepositoryConfig(v interface{}, d tpg transformed["description"] = transformedDescription } + transformedAptRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepository(original["apt_repository"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedAptRepository); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["aptRepository"] = transformedAptRepository + } + transformedDockerRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigDockerRepository(original["docker_repository"], d, config) if err != nil { return nil, err @@ -1140,6 +1295,13 @@ func expandArtifactRegistryRepositoryRemoteRepositoryConfig(v interface{}, d tpg transformed["pythonRepository"] = transformedPythonRepository } + transformedYumRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepository(original["yum_repository"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedYumRepository); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["yumRepository"] = transformedYumRepository + } + return transformed, nil } @@ -1147,6 +1309,59 @@ func expandArtifactRegistryRepositoryRemoteRepositoryConfigDescription(v interfa return v, nil } +func expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedPublicRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository(original["public_repository"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedPublicRepository); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["publicRepository"] = transformedPublicRepository + } + + return transformed, nil +} + +func expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedRepositoryBase, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryBase(original["repository_base"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedRepositoryBase); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["repositoryBase"] = transformedRepositoryBase + } + + transformedRepositoryPath, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryPath(original["repository_path"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedRepositoryPath); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["repositoryPath"] = transformedRepositoryPath + } + + return transformed, nil +} + +func expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryBase(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryPath(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + func expandArtifactRegistryRepositoryRemoteRepositoryConfigDockerRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { l := v.([]interface{}) if len(l) == 0 || l[0] == nil { @@ -1239,6 +1454,59 @@ func expandArtifactRegistryRepositoryRemoteRepositoryConfigPythonRepositoryPubli return v, nil } +func expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedPublicRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository(original["public_repository"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedPublicRepository); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["publicRepository"] = transformedPublicRepository + } + + return transformed, nil +} + +func expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedRepositoryBase, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryBase(original["repository_base"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedRepositoryBase); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["repositoryBase"] = transformedRepositoryBase + } + + transformedRepositoryPath, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryPath(original["repository_path"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedRepositoryPath); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["repositoryPath"] = transformedRepositoryPath + } + + return transformed, nil +} + +func expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryBase(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryPath(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + func resourceArtifactRegistryRepositoryEncoder(d *schema.ResourceData, meta interface{}, obj map[string]interface{}) (map[string]interface{}, error) { config := meta.(*transport_tpg.Config) if _, ok := d.GetOk("location"); !ok { diff --git a/google/services/artifactregistry/resource_artifact_registry_repository_generated_test.go b/google/services/artifactregistry/resource_artifact_registry_repository_generated_test.go index 31414d2ba3c..5e8830df64a 100644 --- a/google/services/artifactregistry/resource_artifact_registry_repository_generated_test.go +++ b/google/services/artifactregistry/resource_artifact_registry_repository_generated_test.go @@ -250,6 +250,98 @@ resource "google_artifact_registry_repository" "my-repo" { `, context) } +func TestAccArtifactRegistryRepository_artifactRegistryRepositoryRemoteAptExample(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "random_suffix": acctest.RandString(t, 10), + } + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckArtifactRegistryRepositoryDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccArtifactRegistryRepository_artifactRegistryRepositoryRemoteAptExample(context), + }, + { + ResourceName: "google_artifact_registry_repository.my-repo", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"repository_id", "location"}, + }, + }, + }) +} + +func testAccArtifactRegistryRepository_artifactRegistryRepositoryRemoteAptExample(context map[string]interface{}) string { + return acctest.Nprintf(` +resource "google_artifact_registry_repository" "my-repo" { + location = "us-central1" + repository_id = "tf-test-debian-buster%{random_suffix}" + description = "example remote apt repository%{random_suffix}" + format = "APT" + mode = "REMOTE_REPOSITORY" + remote_repository_config { + description = "Debian buster remote repository" + apt_repository { + public_repository { + repository_base = "DEBIAN" + repository_path = "debian/dists/buster" + } + } + } +} +`, context) +} + +func TestAccArtifactRegistryRepository_artifactRegistryRepositoryRemoteYumExample(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "random_suffix": acctest.RandString(t, 10), + } + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckArtifactRegistryRepositoryDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccArtifactRegistryRepository_artifactRegistryRepositoryRemoteYumExample(context), + }, + { + ResourceName: "google_artifact_registry_repository.my-repo", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"repository_id", "location"}, + }, + }, + }) +} + +func testAccArtifactRegistryRepository_artifactRegistryRepositoryRemoteYumExample(context map[string]interface{}) string { + return acctest.Nprintf(` +resource "google_artifact_registry_repository" "my-repo" { + location = "us-central1" + repository_id = "tf-test-centos-8%{random_suffix}" + description = "example remote yum repository%{random_suffix}" + format = "YUM" + mode = "REMOTE_REPOSITORY" + remote_repository_config { + description = "Centos 8 remote repository" + yum_repository { + public_repository { + repository_base = "CENTOS" + repository_path = "8-stream/BaseOs/x86_64/os" + } + } + } +} +`, context) +} + func testAccCheckArtifactRegistryRepositoryDestroyProducer(t *testing.T) func(s *terraform.State) error { return func(s *terraform.State) error { for name, rs := range s.RootModule().Resources { diff --git a/website/docs/r/artifact_registry_repository.html.markdown b/website/docs/r/artifact_registry_repository.html.markdown index 6830fb9507a..4471557ac72 100644 --- a/website/docs/r/artifact_registry_repository.html.markdown +++ b/website/docs/r/artifact_registry_repository.html.markdown @@ -147,6 +147,58 @@ resource "google_artifact_registry_repository" "my-repo" { } } ``` +
+ + Open in Cloud Shell + +
+## Example Usage - Artifact Registry Repository Remote Apt + + +```hcl +resource "google_artifact_registry_repository" "my-repo" { + location = "us-central1" + repository_id = "debian-buster" + description = "example remote apt repository" + format = "APT" + mode = "REMOTE_REPOSITORY" + remote_repository_config { + description = "Debian buster remote repository" + apt_repository { + public_repository { + repository_base = "DEBIAN" + repository_path = "debian/dists/buster" + } + } + } +} +``` +
+ + Open in Cloud Shell + +
+## Example Usage - Artifact Registry Repository Remote Yum + + +```hcl +resource "google_artifact_registry_repository" "my-repo" { + location = "us-central1" + repository_id = "centos-8" + description = "example remote yum repository" + format = "YUM" + mode = "REMOTE_REPOSITORY" + remote_repository_config { + description = "Centos 8 remote repository" + yum_repository { + public_repository { + repository_base = "CENTOS" + repository_path = "8-stream/BaseOs/x86_64/os" + } + } + } +} +```
Open in Cloud Shell @@ -389,6 +441,11 @@ The following arguments are supported: (Optional) The description of the remote source. +* `apt_repository` - + (Optional) + Specific settings for an Apt remote repository. + Structure is [documented below](#nested_apt_repository). + * `docker_repository` - (Optional) Specific settings for a Docker remote repository. @@ -409,6 +466,30 @@ The following arguments are supported: Specific settings for a Python remote repository. Structure is [documented below](#nested_python_repository). +* `yum_repository` - + (Optional) + Specific settings for an Yum remote repository. + Structure is [documented below](#nested_yum_repository). + + +The `apt_repository` block supports: + +* `public_repository` - + (Optional) + One of the publicly available Apt repositories supported by Artifact Registry. + Structure is [documented below](#nested_public_repository). + + +The `public_repository` block supports: + +* `repository_base` - + (Required) + A common public repository base for Apt, e.g. `"debian/dists/buster"` + Possible values are: `DEBIAN`, `UBUNTU`. + +* `repository_path` - + (Required) + Specific repository from the base. The `docker_repository` block supports: @@ -442,6 +523,25 @@ The following arguments are supported: Default value is `PYPI`. Possible values are: `PYPI`. +The `yum_repository` block supports: + +* `public_repository` - + (Optional) + One of the publicly available Yum repositories supported by Artifact Registry. + Structure is [documented below](#nested_public_repository). + + +The `public_repository` block supports: + +* `repository_base` - + (Required) + A common public repository base for Yum. + Possible values are: `CENTOS`, `CENTOS_DEBUG`, `CENTOS_VAULT`, `CENTOS_STREAM`, `ROCKY`, `EPEL`. + +* `repository_path` - + (Required) + Specific repository from the base, e.g. `"8-stream/BaseOs/x86_64/os"` + ## Attributes Reference In addition to the arguments listed above, the following computed attributes are exported: