From df0af23e87a60a3ea2744953fa42599d5a63b479 Mon Sep 17 00:00:00 2001 From: Quentin Lemaire Date: Wed, 18 Jan 2023 17:09:02 +0100 Subject: [PATCH 1/3] fix(kube): Use user-provided timeouts for all resources --- ovh/resource_cloud_project_kube.go | 18 +++++++++--------- ...source_cloud_project_kube_iprestrictions.go | 8 ++++---- ovh/resource_cloud_project_kube_nodepool.go | 14 +++++++------- ovh/resource_cloud_project_kube_oidc.go | 6 +++--- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/ovh/resource_cloud_project_kube.go b/ovh/resource_cloud_project_kube.go index 827e2c58b..51fa0f097 100644 --- a/ovh/resource_cloud_project_kube.go +++ b/ovh/resource_cloud_project_kube.go @@ -216,7 +216,7 @@ func resourceCloudProjectKubeCreate(d *schema.ResourceData, meta interface{}) er } log.Printf("[DEBUG] Waiting for kube %s to be READY", res.Id) - err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, res.Id, []string{"INSTALLING"}, []string{"READY"}) + err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, res.Id, []string{"INSTALLING"}, []string{"READY"}, d.Timeout(schema.TimeoutCreate)) if err != nil { return fmt.Errorf("timeout while waiting kube %s to be READY: %w", res.Id, err) } @@ -271,7 +271,7 @@ func resourceCloudProjectKubeDelete(d *schema.ResourceData, meta interface{}) er } log.Printf("[DEBUG] Waiting for kube %s to be DELETED", d.Id()) - err = waitForCloudProjectKubeDeleted(config.OVHClient, serviceName, d.Id()) + err = waitForCloudProjectKubeDeleted(d, config.OVHClient, serviceName, d.Id()) if err != nil { return fmt.Errorf("timeout while waiting kube %s to be DELETED: %w", d.Id(), err) } @@ -299,7 +299,7 @@ func resourceCloudProjectKubeUpdate(d *schema.ResourceData, meta interface{}) er } log.Printf("[DEBUG] Waiting for kube %s to be READY", d.Id()) - err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, d.Id(), []string{"REDEPLOYING", "RESETTING"}, []string{"READY"}) + err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, d.Id(), []string{"REDEPLOYING", "RESETTING"}, []string{"READY"}, d.Timeout(schema.TimeoutUpdate)) if err != nil { return fmt.Errorf("timeout while waiting kube %s to be READY: %w", d.Id(), err) } @@ -351,7 +351,7 @@ func resourceCloudProjectKubeUpdate(d *schema.ResourceData, meta interface{}) er } log.Printf("[DEBUG] Waiting for kube %s to be READY", d.Id()) - err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, d.Id(), []string{"UPDATING", "REDEPLOYING", "RESETTING"}, []string{"READY"}) + err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, d.Id(), []string{"UPDATING", "REDEPLOYING", "RESETTING"}, []string{"READY"}, d.Timeout(schema.TimeoutUpdate)) if err != nil { return fmt.Errorf("timeout while waiting kube %s to be READY: %w", d.Id(), err) } @@ -405,7 +405,7 @@ func resourceCloudProjectKubeUpdate(d *schema.ResourceData, meta interface{}) er } log.Printf("[DEBUG] Waiting for kube %s to be READY", d.Id()) - err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, d.Id(), []string{"REDEPLOYING", "RESETTING"}, []string{"READY"}) + err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, d.Id(), []string{"REDEPLOYING", "RESETTING"}, []string{"READY"}, d.Timeout(schema.TimeoutUpdate)) if err != nil { return fmt.Errorf("timeout while waiting kube %s to be READY: %w", d.Id(), err) } @@ -422,7 +422,7 @@ func cloudProjectKubeExists(serviceName, id string, client *ovh.Client) error { return client.Get(endpoint, res) } -func waitForCloudProjectKubeReady(client *ovh.Client, serviceName, kubeId string, pending []string, target []string) error { +func waitForCloudProjectKubeReady(client *ovh.Client, serviceName, kubeId string, pending []string, target []string, timeout time.Duration) error { stateConf := &resource.StateChangeConf{ Pending: pending, Target: target, @@ -436,7 +436,7 @@ func waitForCloudProjectKubeReady(client *ovh.Client, serviceName, kubeId string return res, res.Status, nil }, - Timeout: 20 * time.Minute, + Timeout: timeout, Delay: 5 * time.Second, MinTimeout: 3 * time.Second, } @@ -445,7 +445,7 @@ func waitForCloudProjectKubeReady(client *ovh.Client, serviceName, kubeId string return err } -func waitForCloudProjectKubeDeleted(client *ovh.Client, serviceName, kubeId string) error { +func waitForCloudProjectKubeDeleted(d *schema.ResourceData, client *ovh.Client, serviceName, kubeId string) error { stateConf := &resource.StateChangeConf{ Pending: []string{"DELETING"}, Target: []string{"DELETED"}, @@ -463,7 +463,7 @@ func waitForCloudProjectKubeDeleted(client *ovh.Client, serviceName, kubeId stri return res, res.Status, nil }, - Timeout: 20 * time.Minute, + Timeout: d.Timeout(schema.TimeoutDelete), Delay: 5 * time.Second, MinTimeout: 3 * time.Second, } diff --git a/ovh/resource_cloud_project_kube_iprestrictions.go b/ovh/resource_cloud_project_kube_iprestrictions.go index d0d426190..24bddf12a 100644 --- a/ovh/resource_cloud_project_kube_iprestrictions.go +++ b/ovh/resource_cloud_project_kube_iprestrictions.go @@ -91,7 +91,7 @@ func resourceCloudProjectKubeIpRestrictionsCreateOrUpdate(d *schema.ResourceData params := (&CloudProjectKubeIpRestrictionsCreateOrUpdateOpts{}).FromResource(d) - err := resourceCloudProjectKubeIpRestrictionsUpdate(config, serviceName, kubeId, params) + err := resourceCloudProjectKubeIpRestrictionsUpdate(d, config, serviceName, kubeId, params) if err != nil { return err } @@ -107,12 +107,12 @@ func resourceCloudProjectKubeIpRestrictionsDelete(d *schema.ResourceData, meta i serviceName := d.Get("service_name").(string) kubeId := d.Get("kube_id").(string) - return resourceCloudProjectKubeIpRestrictionsUpdate(config, serviceName, kubeId, &CloudProjectKubeIpRestrictionsCreateOrUpdateOpts{ + return resourceCloudProjectKubeIpRestrictionsUpdate(d, config, serviceName, kubeId, &CloudProjectKubeIpRestrictionsCreateOrUpdateOpts{ Ips: []string{}, }) } -func resourceCloudProjectKubeIpRestrictionsUpdate(config *Config, serviceName string, kubeId string, params *CloudProjectKubeIpRestrictionsCreateOrUpdateOpts) error { +func resourceCloudProjectKubeIpRestrictionsUpdate(d *schema.ResourceData, config *Config, serviceName string, kubeId string, params *CloudProjectKubeIpRestrictionsCreateOrUpdateOpts) error { endpoint := fmt.Sprintf("/cloud/project/%s/kube/%s/ipRestrictions", url.PathEscape(serviceName), url.PathEscape(kubeId)) res := make(CloudProjectKubeIpRestrictionsResponse, 0) @@ -123,7 +123,7 @@ func resourceCloudProjectKubeIpRestrictionsUpdate(config *Config, serviceName st } log.Printf("[DEBUG] Waiting for kube %s to be READY", kubeId) - err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, kubeId, []string{"REDEPLOYING", "RESETTING"}, []string{"READY"}) + err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, kubeId, []string{"REDEPLOYING", "RESETTING"}, []string{"READY"}, d.Timeout(schema.TimeoutUpdate)) if err != nil { return fmt.Errorf("timeout while waiting kube %s to be READY: %v", kubeId, err) } diff --git a/ovh/resource_cloud_project_kube_nodepool.go b/ovh/resource_cloud_project_kube_nodepool.go index 51e1c821a..0afb35cc3 100644 --- a/ovh/resource_cloud_project_kube_nodepool.go +++ b/ovh/resource_cloud_project_kube_nodepool.go @@ -264,7 +264,7 @@ func resourceCloudProjectKubeNodePoolCreate(d *schema.ResourceData, meta interfa } log.Printf("[DEBUG] Waiting for nodepool %s to be READY", res.Id) - err = waitForCloudProjectKubeNodePoolReady(config.OVHClient, serviceName, kubeId, res.Id) + err = waitForCloudProjectKubeNodePoolReady(config.OVHClient, serviceName, kubeId, res.Id, d.Timeout(schema.TimeoutCreate)) if err != nil { return fmt.Errorf("timeout while waiting nodepool %s to be READY: %w", res.Id, err) } @@ -318,7 +318,7 @@ func resourceCloudProjectKubeNodePoolUpdate(d *schema.ResourceData, meta interfa } log.Printf("[DEBUG] Waiting for nodepool %s to be READY", d.Id()) - err = waitForCloudProjectKubeNodePoolReady(config.OVHClient, serviceName, kubeId, d.Id()) + err = waitForCloudProjectKubeNodePoolReady(config.OVHClient, serviceName, kubeId, d.Id(), d.Timeout(schema.TimeoutUpdate)) if err != nil { return fmt.Errorf("timeout while waiting nodepool %s to be READY: %w", d.Id(), err) } @@ -341,7 +341,7 @@ func resourceCloudProjectKubeNodePoolDelete(d *schema.ResourceData, meta interfa } log.Printf("[DEBUG] Waiting for nodepool %s to be DELETED", d.Id()) - err = waitForCloudProjectKubeNodePoolDeleted(config.OVHClient, serviceName, kubeId, d.Id()) + err = waitForCloudProjectKubeNodePoolDeleted(config.OVHClient, serviceName, kubeId, d.Id(), d.Timeout(schema.TimeoutDelete)) if err != nil { return fmt.Errorf("timeout while waiting nodepool %s to be DELETED: %v", d.Id(), err) } @@ -359,7 +359,7 @@ func cloudProjectKubeNodePoolExists(serviceName, kubeId, id string, client *ovh. return client.Get(endpoint, res) } -func waitForCloudProjectKubeNodePoolReady(client *ovh.Client, serviceName, kubeId, id string) error { +func waitForCloudProjectKubeNodePoolReady(client *ovh.Client, serviceName, kubeId, id string, timeout time.Duration) error { stateConf := &resource.StateChangeConf{ Pending: []string{"INSTALLING", "UPDATING", "REDEPLOYING", "RESIZING", "DOWNSCALING", "UPSCALING"}, Target: []string{"READY"}, @@ -373,7 +373,7 @@ func waitForCloudProjectKubeNodePoolReady(client *ovh.Client, serviceName, kubeI return res, res.Status, nil }, - Timeout: 20 * time.Minute, + Timeout: timeout, Delay: 5 * time.Second, MinTimeout: 3 * time.Second, } @@ -382,7 +382,7 @@ func waitForCloudProjectKubeNodePoolReady(client *ovh.Client, serviceName, kubeI return err } -func waitForCloudProjectKubeNodePoolDeleted(client *ovh.Client, serviceName, kubeId, id string) error { +func waitForCloudProjectKubeNodePoolDeleted(client *ovh.Client, serviceName, kubeId, id string, timeout time.Duration) error { stateConf := &resource.StateChangeConf{ Pending: []string{"DELETING"}, Target: []string{"DELETED"}, @@ -400,7 +400,7 @@ func waitForCloudProjectKubeNodePoolDeleted(client *ovh.Client, serviceName, kub return res, res.Status, nil }, - Timeout: 20 * time.Minute, + Timeout: timeout, Delay: 5 * time.Second, MinTimeout: 3 * time.Second, } diff --git a/ovh/resource_cloud_project_kube_oidc.go b/ovh/resource_cloud_project_kube_oidc.go index a6f58a0d6..ee08ac490 100644 --- a/ovh/resource_cloud_project_kube_oidc.go +++ b/ovh/resource_cloud_project_kube_oidc.go @@ -116,7 +116,7 @@ func resourceCloudProjectKubeOIDCCreate(d *schema.ResourceData, meta interface{} d.SetId(serviceName + "/" + kubeID) log.Printf("[DEBUG] Waiting for kube %s to be READY", kubeID) - err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, kubeID, []string{"REDEPLOYING"}, []string{"READY"}) + err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, kubeID, []string{"REDEPLOYING"}, []string{"READY"}, d.Timeout(schema.TimeoutCreate)) if err != nil { return fmt.Errorf("timeout while waiting kube %s to be READY: %w", kubeID, err) } @@ -168,7 +168,7 @@ func resourceCloudProjectKubeOIDCUpdate(d *schema.ResourceData, meta interface{} } log.Printf("[DEBUG] Waiting for kube %s to be READY", kubeID) - err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, kubeID, []string{"REDEPLOYING"}, []string{"READY"}) + err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, kubeID, []string{"REDEPLOYING"}, []string{"READY"}, d.Timeout(schema.TimeoutUpdate)) if err != nil { return fmt.Errorf("timeout while waiting kube %s to be READY: %w", kubeID, err) } @@ -192,7 +192,7 @@ func resourceCloudProjectKubeOIDCDelete(d *schema.ResourceData, meta interface{} } log.Printf("[DEBUG] Waiting for kube %s to be READY", kubeID) - err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, kubeID, []string{"REDEPLOYING"}, []string{"READY"}) + err = waitForCloudProjectKubeReady(config.OVHClient, serviceName, kubeID, []string{"REDEPLOYING"}, []string{"READY"}, d.Timeout(schema.TimeoutDelete)) if err != nil { return fmt.Errorf("timeout while waiting kube %s to be READY: %w", kubeID, err) } From 53c831d6a3827ac883ac06cd209ce5ed56fc6f29 Mon Sep 17 00:00:00 2001 From: Quentin Lemaire Date: Tue, 7 Feb 2023 17:24:41 +0100 Subject: [PATCH 2/3] fix(kube): Enable resources timeouts configuration --- ovh/resource_cloud_project_kube.go | 8 ++++++++ ovh/resource_cloud_project_kube_iprestrictions.go | 9 +++++++++ ovh/resource_cloud_project_kube_nodepool.go | 8 ++++++++ ovh/resource_cloud_project_kube_oidc.go | 8 ++++++++ 4 files changed, 33 insertions(+) diff --git a/ovh/resource_cloud_project_kube.go b/ovh/resource_cloud_project_kube.go index 51fa0f097..956810057 100644 --- a/ovh/resource_cloud_project_kube.go +++ b/ovh/resource_cloud_project_kube.go @@ -33,6 +33,14 @@ func resourceCloudProjectKube() *schema.Resource { State: resourceCloudProjectKubeImportState, }, + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(15 * time.Minute), + Update: schema.DefaultTimeout(10 * time.Minute), + Delete: schema.DefaultTimeout(10 * time.Minute), + Read: schema.DefaultTimeout(5 * time.Minute), + Default: schema.DefaultTimeout(10 * time.Minute), + }, + Schema: map[string]*schema.Schema{ "service_name": { Type: schema.TypeString, diff --git a/ovh/resource_cloud_project_kube_iprestrictions.go b/ovh/resource_cloud_project_kube_iprestrictions.go index 24bddf12a..ebb1b7fa5 100644 --- a/ovh/resource_cloud_project_kube_iprestrictions.go +++ b/ovh/resource_cloud_project_kube_iprestrictions.go @@ -5,6 +5,7 @@ import ( "log" "net/url" "strings" + "time" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -22,6 +23,14 @@ func resourceCloudProjectKubeIpRestrictions() *schema.Resource { State: resourceCloudProjectKubeIpRestrictionsImportState, }, + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(10 * time.Minute), + Update: schema.DefaultTimeout(5 * time.Minute), + Delete: schema.DefaultTimeout(5 * time.Minute), + Read: schema.DefaultTimeout(5 * time.Minute), + Default: schema.DefaultTimeout(10 * time.Minute), + }, + Schema: map[string]*schema.Schema{ "service_name": { Type: schema.TypeString, diff --git a/ovh/resource_cloud_project_kube_nodepool.go b/ovh/resource_cloud_project_kube_nodepool.go index 0afb35cc3..dc20e10f8 100644 --- a/ovh/resource_cloud_project_kube_nodepool.go +++ b/ovh/resource_cloud_project_kube_nodepool.go @@ -23,6 +23,14 @@ func resourceCloudProjectKubeNodePool() *schema.Resource { State: resourceCloudProjectKubeNodePoolImportState, }, + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(20 * time.Minute), + Update: schema.DefaultTimeout(10 * time.Minute), + Delete: schema.DefaultTimeout(10 * time.Minute), + Read: schema.DefaultTimeout(5 * time.Minute), + Default: schema.DefaultTimeout(10 * time.Minute), + }, + Schema: map[string]*schema.Schema{ "service_name": { Type: schema.TypeString, diff --git a/ovh/resource_cloud_project_kube_oidc.go b/ovh/resource_cloud_project_kube_oidc.go index ee08ac490..21e83637c 100644 --- a/ovh/resource_cloud_project_kube_oidc.go +++ b/ovh/resource_cloud_project_kube_oidc.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "strings" + "time" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -17,6 +18,13 @@ func resourceCloudProjectKubeOIDC() *schema.Resource { Importer: &schema.ResourceImporter{ State: resourceCloudProjectKubeOIDCImportState, }, + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(10 * time.Minute), + Update: schema.DefaultTimeout(10 * time.Minute), + Delete: schema.DefaultTimeout(10 * time.Minute), + Read: schema.DefaultTimeout(5 * time.Minute), + Default: schema.DefaultTimeout(10 * time.Minute), + }, Schema: map[string]*schema.Schema{ "service_name": { From b38d56a8126a0eb16f260a0b0367d8ee6a9272e6 Mon Sep 17 00:00:00 2001 From: Quentin Lemaire Date: Wed, 8 Feb 2023 16:18:36 +0100 Subject: [PATCH 3/3] fix(kube): Update documentation with timeouts --- .../docs/r/cloud_project_kube.html.markdown | 17 ++++++++++ ..._project_kube_iprestrictions.html.markdown | 17 ++++++++++ .../cloud_project_kube_nodepool.html.markdown | 17 ++++++++++ .../r/cloud_project_kube_oidc.html.markdown | 34 +++++++++++-------- 4 files changed, 71 insertions(+), 14 deletions(-) diff --git a/website/docs/r/cloud_project_kube.html.markdown b/website/docs/r/cloud_project_kube.html.markdown index 63adde0ca..572aee95e 100644 --- a/website/docs/r/cloud_project_kube.html.markdown +++ b/website/docs/r/cloud_project_kube.html.markdown @@ -162,6 +162,23 @@ The following attributes are exported: * `version` - See Argument Reference above. * `customization` - See Argument Reference above. +## Timeouts + +```hcl +resource "ovh_cloud_project_kube" "my_kube_cluster" { + # ... + + timeouts { + create = "1h" + update = "45m" + delete = "50s" + } +} +``` +* `create` - (Default 10m) +* `update` - (Default 10m) +* `delete` - (Default 10m) + ## Import OVHcloud Managed Kubernetes Service clusters can be imported using the `service_name` and the `id` of the cluster, separated by "/" E.g., diff --git a/website/docs/r/cloud_project_kube_iprestrictions.html.markdown b/website/docs/r/cloud_project_kube_iprestrictions.html.markdown index 84e201063..f1f693ec9 100644 --- a/website/docs/r/cloud_project_kube_iprestrictions.html.markdown +++ b/website/docs/r/cloud_project_kube_iprestrictions.html.markdown @@ -35,6 +35,23 @@ The following arguments are supported: No additional attributes than the ones provided are exported. +## Timeouts + +```hcl +resource "ovh_cloud_project_kube_iprestrictions" "vrack_only" { + # ... + + timeouts { + create = "1h" + update = "45m" + delete = "50s" + } +} +``` +* `create` - (Default 10m) +* `update` - (Default 5m) +* `delete` - (Default 5m) + ## Import OVHcloud Managed Kubernetes Service cluster IP restrictions can be imported using the `service_name` and the `id` of the cluster, separated by "/" E.g., diff --git a/website/docs/r/cloud_project_kube_nodepool.html.markdown b/website/docs/r/cloud_project_kube_nodepool.html.markdown index fc8987d43..de7d0b958 100644 --- a/website/docs/r/cloud_project_kube_nodepool.html.markdown +++ b/website/docs/r/cloud_project_kube_nodepool.html.markdown @@ -118,6 +118,23 @@ In addition, the following attributes are exported: * `up_to_date_nodes` - Number of nodes with latest version installed in the pool * `updated_at` - Last update date +## Timeouts + +```hcl +resource "ovh_cloud_project_kube_nodepool" "pool" { + # ... + + timeouts { + create = "1h" + update = "45m" + delete = "50s" + } +} +``` +* `create` - (Default 20m) +* `update` - (Default 10m) +* `delete` - (Default 10m) + ## Import OVHcloud Managed Kubernetes Service cluster node pool can be imported using the `service_name`, the `id` of the cluster, and the `id` of the nodepool separated by "/" E.g., diff --git a/website/docs/r/cloud_project_kube_oidc.html.markdown b/website/docs/r/cloud_project_kube_oidc.html.markdown index f4554e027..2f81abadc 100644 --- a/website/docs/r/cloud_project_kube_oidc.html.markdown +++ b/website/docs/r/cloud_project_kube_oidc.html.markdown @@ -36,29 +36,35 @@ resource "ovh_cloud_project_kube_oidc" "my-oidc" { The following arguments are supported: -* `service_name` - (required) The ID of the public cloud project. If omitted, - the `OVH_CLOUD_PROJECT_SERVICE` environment variable is used. - +* `service_name` - (required) The ID of the public cloud project. If omitted, the `OVH_CLOUD_PROJECT_SERVICE` environment variable is used. * `kube_id` - The ID of the managed kubernetes cluster. - * `client_id` - The OIDC client ID. - * `issuer_url` - The OIDC issuer url. - -* `oidcUsernameClaim` - JWT claim to use as the user name. By default sub, which is expected to be a unique identifier of the end user. Admins can choose other claims, such as email or name, depending on their provider. However, claims other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins. - +* `oidcUsernameClaim` - JWT claim to use as the username. By default, sub, which is expected to be a unique identifier of the end user. Admins can choose other claims, such as email or name, depending on their provider. However, claims other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins. * `oidcUsernamePrefix` - Prefix prepended to username claims to prevent clashes with existing names (such as `system:users`). For example, the value `oidc:` will create usernames like `oidc:jane.doe`. If this field isn't set and `oidcUsernameClaim` is a value other than email the prefix defaults to `issuer_url` where `issuer_url` is the value of `oidcIssuerUrl.` The value - can be used to disable all prefixing. - * `oidcGroupsClaim` - Array of JWT claim to use as the user's group. If the claim is present it must be an array of strings. - * `oidcGroupsPrefix` - Prefix prepended to group claims to prevent clashes with existing names (such as `system:groups`). For example, the value `oidc:` will create group names like `oidc:engineering` and `oidc:infra`. - * `oidcRequiredClaim` - Array of `key=value` pairs that describe required claims in the ID Token. If set, the claims are verified to be present in the ID Token with a matching value." - -* `oidcSigningAlgs` - Array of signing algorithms accepted. Default is `RS256`. - +* `oidcSigningAlgs` - Array of signing algorithms accepted. Default is `RS256`. * `oidcCaContent` - Content of the certificate for the CA, in Base64 format, that signed your identity provider's web certificate. Defaults to the host's root CAs. +## Timeouts + +```hcl +resource "ovh_cloud_project_kube_oidc" "oidc" { + # ... + + timeouts { + create = "1h" + update = "45m" + delete = "50s" + } +} +``` +* `create` - (Default 10m) +* `update` - (Default 10m) +* `delete` - (Default 10m) + ## Import OVHcloud Managed Kubernetes Service cluster OIDC can be imported using the tenant `service_name` and cluster id `kube_id` separated by "/" E.g.,