Skip to content

Commit 8dec567

Browse files
Add support for remote OS repositories to Artifact Registry (#9047) (#15973)
Signed-off-by: Modular Magician <[email protected]>
1 parent d694f58 commit 8dec567

File tree

4 files changed

+467
-4
lines changed

4 files changed

+467
-4
lines changed

.changelog/9047.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
artifactregistry: added support for remote APT and YUM repositories to `google_artifact_registry_repository`
3+
```

google/services/artifactregistry/resource_artifact_registry_repository.go

+272-4
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,42 @@ snapshot versions.`,
155155
MaxItems: 1,
156156
Elem: &schema.Resource{
157157
Schema: map[string]*schema.Schema{
158+
"apt_repository": {
159+
Type: schema.TypeList,
160+
Optional: true,
161+
ForceNew: true,
162+
Description: `Specific settings for an Apt remote repository.`,
163+
MaxItems: 1,
164+
Elem: &schema.Resource{
165+
Schema: map[string]*schema.Schema{
166+
"public_repository": {
167+
Type: schema.TypeList,
168+
Optional: true,
169+
ForceNew: true,
170+
Description: `One of the publicly available Apt repositories supported by Artifact Registry.`,
171+
MaxItems: 1,
172+
Elem: &schema.Resource{
173+
Schema: map[string]*schema.Schema{
174+
"repository_base": {
175+
Type: schema.TypeString,
176+
Required: true,
177+
ForceNew: true,
178+
ValidateFunc: verify.ValidateEnum([]string{"DEBIAN", "UBUNTU"}),
179+
Description: `A common public repository base for Apt, e.g. '"debian/dists/buster"' Possible values: ["DEBIAN", "UBUNTU"]`,
180+
},
181+
"repository_path": {
182+
Type: schema.TypeString,
183+
Required: true,
184+
ForceNew: true,
185+
Description: `Specific repository from the base.`,
186+
},
187+
},
188+
},
189+
},
190+
},
191+
},
192+
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"},
193+
},
158194
"description": {
159195
Type: schema.TypeString,
160196
Optional: true,
@@ -180,7 +216,7 @@ snapshot versions.`,
180216
},
181217
},
182218
},
183-
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"},
219+
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"},
184220
},
185221
"maven_repository": {
186222
Type: schema.TypeList,
@@ -201,7 +237,7 @@ snapshot versions.`,
201237
},
202238
},
203239
},
204-
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"},
240+
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"},
205241
},
206242
"npm_repository": {
207243
Type: schema.TypeList,
@@ -222,7 +258,7 @@ snapshot versions.`,
222258
},
223259
},
224260
},
225-
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"},
261+
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"},
226262
},
227263
"python_repository": {
228264
Type: schema.TypeList,
@@ -243,7 +279,43 @@ snapshot versions.`,
243279
},
244280
},
245281
},
246-
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"},
282+
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"},
283+
},
284+
"yum_repository": {
285+
Type: schema.TypeList,
286+
Optional: true,
287+
ForceNew: true,
288+
Description: `Specific settings for an Yum remote repository.`,
289+
MaxItems: 1,
290+
Elem: &schema.Resource{
291+
Schema: map[string]*schema.Schema{
292+
"public_repository": {
293+
Type: schema.TypeList,
294+
Optional: true,
295+
ForceNew: true,
296+
Description: `One of the publicly available Yum repositories supported by Artifact Registry.`,
297+
MaxItems: 1,
298+
Elem: &schema.Resource{
299+
Schema: map[string]*schema.Schema{
300+
"repository_base": {
301+
Type: schema.TypeString,
302+
Required: true,
303+
ForceNew: true,
304+
ValidateFunc: verify.ValidateEnum([]string{"CENTOS", "CENTOS_DEBUG", "CENTOS_VAULT", "CENTOS_STREAM", "ROCKY", "EPEL"}),
305+
Description: `A common public repository base for Yum. Possible values: ["CENTOS", "CENTOS_DEBUG", "CENTOS_VAULT", "CENTOS_STREAM", "ROCKY", "EPEL"]`,
306+
},
307+
"repository_path": {
308+
Type: schema.TypeString,
309+
Required: true,
310+
ForceNew: true,
311+
Description: `Specific repository from the base, e.g. '"8-stream/BaseOs/x86_64/os"'`,
312+
},
313+
},
314+
},
315+
},
316+
},
317+
},
318+
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"},
247319
},
248320
},
249321
},
@@ -858,6 +930,8 @@ func flattenArtifactRegistryRepositoryRemoteRepositoryConfig(v interface{}, d *s
858930
transformed := make(map[string]interface{})
859931
transformed["description"] =
860932
flattenArtifactRegistryRepositoryRemoteRepositoryConfigDescription(original["description"], d, config)
933+
transformed["apt_repository"] =
934+
flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepository(original["aptRepository"], d, config)
861935
transformed["docker_repository"] =
862936
flattenArtifactRegistryRepositoryRemoteRepositoryConfigDockerRepository(original["dockerRepository"], d, config)
863937
transformed["maven_repository"] =
@@ -866,12 +940,50 @@ func flattenArtifactRegistryRepositoryRemoteRepositoryConfig(v interface{}, d *s
866940
flattenArtifactRegistryRepositoryRemoteRepositoryConfigNpmRepository(original["npmRepository"], d, config)
867941
transformed["python_repository"] =
868942
flattenArtifactRegistryRepositoryRemoteRepositoryConfigPythonRepository(original["pythonRepository"], d, config)
943+
transformed["yum_repository"] =
944+
flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepository(original["yumRepository"], d, config)
869945
return []interface{}{transformed}
870946
}
871947
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigDescription(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
872948
return v
873949
}
874950

951+
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
952+
if v == nil {
953+
return nil
954+
}
955+
original := v.(map[string]interface{})
956+
if len(original) == 0 {
957+
return nil
958+
}
959+
transformed := make(map[string]interface{})
960+
transformed["public_repository"] =
961+
flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository(original["publicRepository"], d, config)
962+
return []interface{}{transformed}
963+
}
964+
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
965+
if v == nil {
966+
return nil
967+
}
968+
original := v.(map[string]interface{})
969+
if len(original) == 0 {
970+
return nil
971+
}
972+
transformed := make(map[string]interface{})
973+
transformed["repository_base"] =
974+
flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryBase(original["repositoryBase"], d, config)
975+
transformed["repository_path"] =
976+
flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryPath(original["repositoryPath"], d, config)
977+
return []interface{}{transformed}
978+
}
979+
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryBase(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
980+
return v
981+
}
982+
983+
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryPath(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
984+
return v
985+
}
986+
875987
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigDockerRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
876988
if v == nil {
877989
return nil
@@ -940,6 +1052,42 @@ func flattenArtifactRegistryRepositoryRemoteRepositoryConfigPythonRepositoryPubl
9401052
return v
9411053
}
9421054

1055+
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1056+
if v == nil {
1057+
return nil
1058+
}
1059+
original := v.(map[string]interface{})
1060+
if len(original) == 0 {
1061+
return nil
1062+
}
1063+
transformed := make(map[string]interface{})
1064+
transformed["public_repository"] =
1065+
flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository(original["publicRepository"], d, config)
1066+
return []interface{}{transformed}
1067+
}
1068+
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1069+
if v == nil {
1070+
return nil
1071+
}
1072+
original := v.(map[string]interface{})
1073+
if len(original) == 0 {
1074+
return nil
1075+
}
1076+
transformed := make(map[string]interface{})
1077+
transformed["repository_base"] =
1078+
flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryBase(original["repositoryBase"], d, config)
1079+
transformed["repository_path"] =
1080+
flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryPath(original["repositoryPath"], d, config)
1081+
return []interface{}{transformed}
1082+
}
1083+
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryBase(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1084+
return v
1085+
}
1086+
1087+
func flattenArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryPath(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1088+
return v
1089+
}
1090+
9431091
func expandArtifactRegistryRepositoryFormat(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
9441092
return v, nil
9451093
}
@@ -1112,6 +1260,13 @@ func expandArtifactRegistryRepositoryRemoteRepositoryConfig(v interface{}, d tpg
11121260
transformed["description"] = transformedDescription
11131261
}
11141262

1263+
transformedAptRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepository(original["apt_repository"], d, config)
1264+
if err != nil {
1265+
return nil, err
1266+
} else if val := reflect.ValueOf(transformedAptRepository); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1267+
transformed["aptRepository"] = transformedAptRepository
1268+
}
1269+
11151270
transformedDockerRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigDockerRepository(original["docker_repository"], d, config)
11161271
if err != nil {
11171272
return nil, err
@@ -1140,13 +1295,73 @@ func expandArtifactRegistryRepositoryRemoteRepositoryConfig(v interface{}, d tpg
11401295
transformed["pythonRepository"] = transformedPythonRepository
11411296
}
11421297

1298+
transformedYumRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepository(original["yum_repository"], d, config)
1299+
if err != nil {
1300+
return nil, err
1301+
} else if val := reflect.ValueOf(transformedYumRepository); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1302+
transformed["yumRepository"] = transformedYumRepository
1303+
}
1304+
11431305
return transformed, nil
11441306
}
11451307

11461308
func expandArtifactRegistryRepositoryRemoteRepositoryConfigDescription(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
11471309
return v, nil
11481310
}
11491311

1312+
func expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1313+
l := v.([]interface{})
1314+
if len(l) == 0 || l[0] == nil {
1315+
return nil, nil
1316+
}
1317+
raw := l[0]
1318+
original := raw.(map[string]interface{})
1319+
transformed := make(map[string]interface{})
1320+
1321+
transformedPublicRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository(original["public_repository"], d, config)
1322+
if err != nil {
1323+
return nil, err
1324+
} else if val := reflect.ValueOf(transformedPublicRepository); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1325+
transformed["publicRepository"] = transformedPublicRepository
1326+
}
1327+
1328+
return transformed, nil
1329+
}
1330+
1331+
func expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1332+
l := v.([]interface{})
1333+
if len(l) == 0 || l[0] == nil {
1334+
return nil, nil
1335+
}
1336+
raw := l[0]
1337+
original := raw.(map[string]interface{})
1338+
transformed := make(map[string]interface{})
1339+
1340+
transformedRepositoryBase, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryBase(original["repository_base"], d, config)
1341+
if err != nil {
1342+
return nil, err
1343+
} else if val := reflect.ValueOf(transformedRepositoryBase); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1344+
transformed["repositoryBase"] = transformedRepositoryBase
1345+
}
1346+
1347+
transformedRepositoryPath, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryPath(original["repository_path"], d, config)
1348+
if err != nil {
1349+
return nil, err
1350+
} else if val := reflect.ValueOf(transformedRepositoryPath); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1351+
transformed["repositoryPath"] = transformedRepositoryPath
1352+
}
1353+
1354+
return transformed, nil
1355+
}
1356+
1357+
func expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryBase(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1358+
return v, nil
1359+
}
1360+
1361+
func expandArtifactRegistryRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryRepositoryPath(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1362+
return v, nil
1363+
}
1364+
11501365
func expandArtifactRegistryRepositoryRemoteRepositoryConfigDockerRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
11511366
l := v.([]interface{})
11521367
if len(l) == 0 || l[0] == nil {
@@ -1239,6 +1454,59 @@ func expandArtifactRegistryRepositoryRemoteRepositoryConfigPythonRepositoryPubli
12391454
return v, nil
12401455
}
12411456

1457+
func expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1458+
l := v.([]interface{})
1459+
if len(l) == 0 || l[0] == nil {
1460+
return nil, nil
1461+
}
1462+
raw := l[0]
1463+
original := raw.(map[string]interface{})
1464+
transformed := make(map[string]interface{})
1465+
1466+
transformedPublicRepository, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository(original["public_repository"], d, config)
1467+
if err != nil {
1468+
return nil, err
1469+
} else if val := reflect.ValueOf(transformedPublicRepository); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1470+
transformed["publicRepository"] = transformedPublicRepository
1471+
}
1472+
1473+
return transformed, nil
1474+
}
1475+
1476+
func expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepository(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1477+
l := v.([]interface{})
1478+
if len(l) == 0 || l[0] == nil {
1479+
return nil, nil
1480+
}
1481+
raw := l[0]
1482+
original := raw.(map[string]interface{})
1483+
transformed := make(map[string]interface{})
1484+
1485+
transformedRepositoryBase, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryBase(original["repository_base"], d, config)
1486+
if err != nil {
1487+
return nil, err
1488+
} else if val := reflect.ValueOf(transformedRepositoryBase); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1489+
transformed["repositoryBase"] = transformedRepositoryBase
1490+
}
1491+
1492+
transformedRepositoryPath, err := expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryPath(original["repository_path"], d, config)
1493+
if err != nil {
1494+
return nil, err
1495+
} else if val := reflect.ValueOf(transformedRepositoryPath); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1496+
transformed["repositoryPath"] = transformedRepositoryPath
1497+
}
1498+
1499+
return transformed, nil
1500+
}
1501+
1502+
func expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryBase(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1503+
return v, nil
1504+
}
1505+
1506+
func expandArtifactRegistryRepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryRepositoryPath(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1507+
return v, nil
1508+
}
1509+
12421510
func resourceArtifactRegistryRepositoryEncoder(d *schema.ResourceData, meta interface{}, obj map[string]interface{}) (map[string]interface{}, error) {
12431511
config := meta.(*transport_tpg.Config)
12441512
if _, ok := d.GetOk("location"); !ok {

0 commit comments

Comments
 (0)