Skip to content

Commit e50c295

Browse files
committed
feat: add OIDC configuration to containerRegistry
Signed-off-by: Thomas Coudert <[email protected]>
1 parent 6f0cc4b commit e50c295

20 files changed

+786
-28
lines changed

ovh/data_cloud_project_capabilities_containerregistry_filter_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
func TestAccCloudProjectCapabilitiesContainerRegistryFilterDataSource_basic(t *testing.T) {
1212
serviceName := os.Getenv("OVH_CLOUD_PROJECT_SERVICE_TEST")
1313
planName := "SMALL"
14-
region := "GRA"
14+
region := os.Getenv("OVH_CLOUD_PROJECT_CONTAINERREGISTRY_REGION_TEST")
1515

1616
config := fmt.Sprintf(
1717
testAccCloudProjectCapabilitiesContainerRegistryFilterDatasourceConfig_Basic,
@@ -21,7 +21,7 @@ func TestAccCloudProjectCapabilitiesContainerRegistryFilterDataSource_basic(t *t
2121
)
2222

2323
resource.Test(t, resource.TestCase{
24-
PreCheck: func() { testAccPreCheckCloud(t) },
24+
PreCheck: func() { testAccPreCheckContainerRegistry(t) },
2525
Providers: testAccProviders,
2626
Steps: []resource.TestStep{
2727
{
@@ -30,7 +30,7 @@ func TestAccCloudProjectCapabilitiesContainerRegistryFilterDataSource_basic(t *t
3030
resource.TestCheckResourceAttr(
3131
"data.ovh_cloud_project_capabilities_containerregistry_filter.cap",
3232
"region",
33-
"GRA",
33+
region,
3434
),
3535
resource.TestCheckResourceAttr(
3636
"data.ovh_cloud_project_capabilities_containerregistry_filter.cap",

ovh/data_cloud_project_capabilities_containerregistry_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func TestAccCloudProjectCapabilitiesContainerRegistryDataSource_basic(t *testing
1616
)
1717

1818
resource.Test(t, resource.TestCase{
19-
PreCheck: func() { testAccPreCheckCloud(t) },
19+
PreCheck: func() { testAccPreCheckContainerRegistry(t) },
2020
Providers: testAccProviders,
2121
Steps: []resource.TestStep{
2222
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package ovh
2+
3+
import (
4+
"fmt"
5+
"log"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
)
9+
10+
func dataSourceCloudProjectContainerRegistryOIDC() *schema.Resource {
11+
return &schema.Resource{
12+
Read: dataSourceCloudProjectContainerRegistryOIDCRead,
13+
Schema: map[string]*schema.Schema{
14+
"service_name": {
15+
Type: schema.TypeString,
16+
Description: "Service name",
17+
Required: true,
18+
ForceNew: true,
19+
DefaultFunc: schema.EnvDefaultFunc("OVH_CLOUD_PROJECT_SERVICE", nil),
20+
},
21+
"registry_id": {
22+
Type: schema.TypeString,
23+
Description: "Registry ID",
24+
Required: true,
25+
ForceNew: true,
26+
},
27+
"oidc_name": {
28+
Type: schema.TypeString,
29+
Required: false,
30+
Optional: true,
31+
},
32+
"oidc_endpoint": {
33+
Type: schema.TypeString,
34+
Required: false,
35+
Optional: true,
36+
},
37+
"oidc_client_id": {
38+
Type: schema.TypeString,
39+
Required: false,
40+
Optional: true,
41+
},
42+
"oidc_scope": {
43+
Type: schema.TypeString,
44+
Required: false,
45+
Optional: true,
46+
},
47+
"oidc_groups_claim": {
48+
Type: schema.TypeString,
49+
Required: false,
50+
Optional: true,
51+
},
52+
"oidc_admin_group": {
53+
Type: schema.TypeString,
54+
Required: false,
55+
Optional: true,
56+
},
57+
"oidc_verify_cert": {
58+
Type: schema.TypeBool,
59+
Required: false,
60+
Optional: true,
61+
},
62+
"oidc_auto_onboard": {
63+
Type: schema.TypeBool,
64+
Required: false,
65+
Optional: true,
66+
},
67+
"oidc_user_claim": {
68+
Type: schema.TypeString,
69+
Required: false,
70+
Optional: true,
71+
},
72+
},
73+
}
74+
}
75+
76+
func dataSourceCloudProjectContainerRegistryOIDCRead(d *schema.ResourceData, meta interface{}) error {
77+
config := meta.(*Config)
78+
serviceName := d.Get("service_name").(string)
79+
registryID := d.Get("registry_id").(string)
80+
81+
endpoint := fmt.Sprintf("/cloud/project/%s/containerRegistry/%s/openIdConnect", serviceName, registryID)
82+
res := &CloudProjectContainerRegistryOIDCResponse{}
83+
84+
log.Printf("[DEBUG] Will read OIDC from registry %s and project: %s", registryID, serviceName)
85+
err := config.OVHClient.Get(endpoint, res)
86+
if err != nil {
87+
return fmt.Errorf("calling get %s %w", endpoint, err)
88+
}
89+
for k, v := range res.ToMap() {
90+
if k != "id" {
91+
d.Set(k, v)
92+
}
93+
}
94+
d.SetId(registryID + "-" + res.ClientID + "-" + res.Endpoint)
95+
96+
log.Printf("[DEBUG] Read OIDC %+v", res)
97+
return nil
98+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package ovh
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
)
11+
12+
func TestAccCloudProjectContainerRegistryOIDCDataSource_basic(t *testing.T) {
13+
serviceName := os.Getenv("OVH_CLOUD_PROJECT_SERVICE_TEST")
14+
region := os.Getenv("OVH_CLOUD_PROJECT_CONTAINERREGISTRY_REGION_TEST")
15+
registryName := acctest.RandomWithPrefix(test_prefix)
16+
oidcEndpoint := os.Getenv("OVH_CLOUD_PROJECT_CONTAINERREGISTRY_OIDC_ENDPOINT_TEST")
17+
18+
config := fmt.Sprintf(
19+
testAccCloudProjectContainerRegistryOIDCDataSourceConfig,
20+
serviceName,
21+
region,
22+
registryName,
23+
oidcEndpoint,
24+
)
25+
26+
resource.Test(t, resource.TestCase{
27+
PreCheck: func() {
28+
testAccPreCheckContainerRegistryOIDC(t)
29+
},
30+
Providers: testAccProviders,
31+
Steps: []resource.TestStep{
32+
{
33+
Config: config,
34+
Check: resource.ComposeTestCheckFunc(
35+
resource.TestCheckResourceAttr(
36+
"data.ovh_cloud_project_containerregistry_oidc.oidcData", "oidc_name", "name"),
37+
resource.TestCheckResourceAttr(
38+
"data.ovh_cloud_project_containerregistry_oidc.oidcData", "oidc_endpoint", oidcEndpoint),
39+
resource.TestCheckResourceAttr(
40+
"data.ovh_cloud_project_containerregistry_oidc.oidcData", "oidc_client_id", "clientID"),
41+
resource.TestCheckResourceAttr(
42+
"data.ovh_cloud_project_containerregistry_oidc.oidcData", "oidc_scope", "openid,profile,email,offline_access"),
43+
resource.TestCheckResourceAttr(
44+
"data.ovh_cloud_project_containerregistry_oidc.oidcData", "oidc_groups_claim", "groupsClaim"),
45+
resource.TestCheckResourceAttr(
46+
"data.ovh_cloud_project_containerregistry_oidc.oidcData", "oidc_admin_group", "adminGroup"),
47+
resource.TestCheckResourceAttr(
48+
"data.ovh_cloud_project_containerregistry_oidc.oidcData", "oidc_verify_cert", "true"),
49+
resource.TestCheckResourceAttr(
50+
"data.ovh_cloud_project_containerregistry_oidc.oidcData", "oidc_auto_onboard", "true"),
51+
resource.TestCheckResourceAttr(
52+
"data.ovh_cloud_project_containerregistry_oidc.oidcData", "oidc_user_claim", "userClaim"),
53+
),
54+
},
55+
},
56+
})
57+
}
58+
59+
var testAccCloudProjectContainerRegistryOIDCDataSourceConfig = `
60+
data "ovh_cloud_project_capabilities_containerregistry_filter" "registryCap" {
61+
service_name = "%s"
62+
plan_name = "SMALL"
63+
region = "%s"
64+
}
65+
66+
resource "ovh_cloud_project_containerregistry" "registry" {
67+
service_name = data.ovh_cloud_project_capabilities_containerregistry_filter.registryCap.service_name
68+
plan_id = data.ovh_cloud_project_capabilities_containerregistry_filter.registryCap.id
69+
name = "%s"
70+
region = data.ovh_cloud_project_capabilities_containerregistry_filter.registryCap.region
71+
}
72+
73+
resource "ovh_cloud_project_containerregistry_oidc" "oidc" {
74+
service_name = ovh_cloud_project_containerregistry.registry.service_name
75+
registry_id = ovh_cloud_project_containerregistry.registry.id
76+
77+
oidc_name = "name"
78+
oidc_endpoint = "%s"
79+
oidc_client_id = "clientID"
80+
oidc_client_secret = "clientSecret"
81+
oidc_scope = "openid,profile,email,offline_access"
82+
oidc_groups_claim = "groupsClaim"
83+
oidc_admin_group = "adminGroup"
84+
oidc_verify_cert = "true"
85+
oidc_auto_onboard = "true"
86+
oidc_user_claim = "userClaim"
87+
88+
depends_on = [
89+
ovh_cloud_project_containerregistry.registry
90+
]
91+
}
92+
93+
data "ovh_cloud_project_containerregistry_oidc" "oidcData" {
94+
service_name = ovh_cloud_project_containerregistry.registry.service_name
95+
registry_id = ovh_cloud_project_containerregistry.registry.id
96+
97+
depends_on = [
98+
ovh_cloud_project_containerregistry_oidc.oidc
99+
]
100+
}
101+
`

ovh/data_cloud_project_containerregistry_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ import (
1111

1212
func TestAccCloudProjectContainerRegistryDataSource_basic(t *testing.T) {
1313
serviceName := os.Getenv("OVH_CLOUD_PROJECT_SERVICE_TEST")
14-
regName := acctest.RandomWithPrefix(test_prefix)
15-
region := "GRA"
14+
registryName := acctest.RandomWithPrefix(test_prefix)
15+
region := os.Getenv("OVH_CLOUD_PROJECT_CONTAINERREGISTRY_REGION_TEST")
1616
config := fmt.Sprintf(
1717
testAccCloudProjectContainerRegistryDatasourceConfig_Basic,
1818
serviceName,
1919
region,
20-
regName,
20+
registryName,
2121
)
2222

2323
resource.Test(t, resource.TestCase{
24-
PreCheck: func() { testAccPreCheckCloud(t) },
24+
PreCheck: func() { testAccPreCheckContainerRegistry(t) },
2525
Providers: testAccProviders,
2626
Steps: []resource.TestStep{
2727
{

ovh/data_cloud_project_containerregistry_users_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ import (
1111

1212
func TestAccCloudProjectContainerRegistryUsersDataSource_basic(t *testing.T) {
1313
serviceName := os.Getenv("OVH_CLOUD_PROJECT_SERVICE_TEST")
14-
regName := acctest.RandomWithPrefix(test_prefix)
15-
region := "GRA"
14+
registryName := acctest.RandomWithPrefix(test_prefix)
15+
region := os.Getenv("OVH_CLOUD_PROJECT_CONTAINERREGISTRY_REGION_TEST")
1616
config := fmt.Sprintf(
1717
testAccCloudProjectContainerRegistryUsersDatasourceConfig_Basic,
1818
serviceName,
1919
region,
20-
regName,
20+
registryName,
2121
)
2222

2323
resource.Test(t, resource.TestCase{
24-
PreCheck: func() { testAccPreCheckCloud(t) },
24+
PreCheck: func() { testAccPreCheckContainerRegistry(t) },
2525
Providers: testAccProviders,
2626
Steps: []resource.TestStep{
2727
{

ovh/provider.go

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ func Provider() *schema.Provider {
5151
"ovh_cloud_project_capabilities_containerregistry_filter": dataSourceCloudProjectCapabilitiesContainerRegistryFilter(),
5252
"ovh_cloud_project_containerregistries": dataSourceCloudProjectContainerRegistries(),
5353
"ovh_cloud_project_containerregistry": dataSourceCloudProjectContainerRegistry(),
54+
"ovh_cloud_project_containerregistry_oidc": dataSourceCloudProjectContainerRegistryOIDC(),
5455
"ovh_cloud_project_containerregistry_users": dataSourceCloudProjectContainerRegistryUsers(),
5556
"ovh_cloud_project_database": dataSourceCloudProjectDatabase(),
5657
"ovh_cloud_project_databases": dataSourceCloudProjectDatabases(),
@@ -142,6 +143,7 @@ func Provider() *schema.Provider {
142143
ResourcesMap: map[string]*schema.Resource{
143144
"ovh_cloud_project": resourceCloudProject(),
144145
"ovh_cloud_project_containerregistry": resourceCloudProjectContainerRegistry(),
146+
"ovh_cloud_project_containerregistry_oidc": resourceCloudProjectContainerRegistryOIDC(),
145147
"ovh_cloud_project_containerregistry_user": resourceCloudProjectContainerRegistryUser(),
146148
"ovh_cloud_project_database": resourceCloudProjectDatabase(),
147149
"ovh_cloud_project_database_database": resourceCloudProjectDatabaseDatabase(),

ovh/provider_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,21 @@ func testAccPreCheckCloud(t *testing.T) {
181181
checkEnvOrSkip(t, "OVH_CLOUD_PROJECT_SERVICE_TEST")
182182
}
183183

184+
// Checks that the environment variables needed for the /cloud/{cloudId}/containerregistry acceptance tests
185+
// are set.
186+
func testAccPreCheckContainerRegistry(t *testing.T) {
187+
testAccPreCheckCloud(t)
188+
testAccCheckCloudProjectExists(t)
189+
checkEnvOrSkip(t, "OVH_CLOUD_PROJECT_CONTAINERREGISTRY_REGION_TEST")
190+
}
191+
192+
// Checks that the environment variables needed for the /cloud/{cloudId}/containerregistry/{registryID}/openIdConnect acceptance tests
193+
// are set.
194+
func testAccPreCheckContainerRegistryOIDC(t *testing.T) {
195+
testAccPreCheckContainerRegistry(t)
196+
checkEnvOrSkip(t, "OVH_CLOUD_PROJECT_CONTAINERREGISTRY_OIDC_ENDPOINT_TEST")
197+
}
198+
184199
// Checks that the environment variables needed for the /cloud/project/{projectId}/database/ acceptance tests are set.
185200
func testAccPreCheckCloudDatabase(t *testing.T) {
186201
testAccPreCheckCloudDatabaseNoEngine(t)

0 commit comments

Comments
 (0)