From 3d5f6d69448cb12cdeb80ef86f6eab1f539394e2 Mon Sep 17 00:00:00 2001 From: Ilia Medvedev Date: Wed, 21 Feb 2024 20:14:10 +0200 Subject: [PATCH 1/2] fix api-key logic --- .gitignore | 1 + codefresh/env.go | 2 +- codefresh/resource_api_key.go | 23 +++-------------------- main.go | 1 + 4 files changed, 6 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 78aae934..ad6a40bd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ terraform-provider-codefresh dist/ .vscode/ +**/__debug* **/.terraform **/terraform.tfstate diff --git a/codefresh/env.go b/codefresh/env.go index 3a53357b..02c6c969 100644 --- a/codefresh/env.go +++ b/codefresh/env.go @@ -8,5 +8,5 @@ const ( ENV_CODEFRESH_API_KEY = "CODEFRESH_API_KEY" DEFAULT_CODEFRESH_API_URL = "https://g.codefresh.io/api" DEFAULT_CODEFRESH_API2_URL = "https://g.codefresh.io/2.0/api/graphql" - DEFAULT_CODEFRESH_PLUGIN_ADDR = "registry.terraform.io/-/codefresh" + DEFAULT_CODEFRESH_PLUGIN_ADDR = "registry.terraform.io/codefresh-io/codefresh" ) diff --git a/codefresh/resource_api_key.go b/codefresh/resource_api_key.go index 02fa573a..da1637af 100644 --- a/codefresh/resource_api_key.go +++ b/codefresh/resource_api_key.go @@ -3,6 +3,7 @@ package codefresh import ( "errors" "fmt" + "strings" "github.com/codefresh-io/terraform-provider-codefresh/codefresh/cfclient" "github.com/codefresh-io/terraform-provider-codefresh/codefresh/internal/datautil" @@ -95,23 +96,8 @@ func resourceApiKeyCreate(d *schema.ResourceData, meta interface{}) error { client.Token = resp - apiKeys, err := client.GetApiKeysList() - if err != nil { - return nil - } - - var keyID string - for _, key := range apiKeys { - if key.Name == apiKey.Name { - keyID = key.ID - } - } - - if keyID == "" { - return errors.New("[ERROR] Key ID is not found.") - } - - d.SetId(keyID) + // Codefresh tokens are in the form xxxxxxxxxxxx.xxxxxxxxx the first half serves as the id + d.SetId(strings.Split(client.Token,".")[0]) return nil } @@ -132,7 +118,6 @@ func resourceApiKeyRead(d *schema.ResourceData, meta interface{}) error { return errors.New("[ERROR] Can't read API Key. Token is empty.") } - client.Token = token apiKey, err := client.GetAPIKey(keyID) if err != nil { @@ -157,8 +142,6 @@ func resourceApiKeyUpdate(d *schema.ResourceData, meta interface{}) error { return errors.New("[ERROR] Can't read API Key. Token is empty.") } - client.Token = token - err := client.UpdateAPIKey(&apiKey) if err != nil { return err diff --git a/main.go b/main.go index ac8ab335..f1e039d2 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,7 @@ func main() { providerAddr = codefresh.DEFAULT_CODEFRESH_PLUGIN_ADDR } plugin.Serve(&plugin.ServeOpts{ + ProviderAddr: providerAddr, ProviderFunc: codefresh.Provider, Debug: debugMode, }) From 9d011e15884e87a766ccb99fbe63d769930d2910 Mon Sep 17 00:00:00 2001 From: Ilia Medvedev Date: Thu, 22 Feb 2024 18:32:42 +0200 Subject: [PATCH 2/2] remove client.token and update docs for the resource --- codefresh/internal/schemautil/validation.go | 2 +- codefresh/resource_api_key.go | 5 +---- codefresh/resource_pipeline_test.go | 4 ++-- docs/resources/api_key.md | 4 ++-- templates/resources/api_key.md.tmpl | 4 ++-- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/codefresh/internal/schemautil/validation.go b/codefresh/internal/schemautil/validation.go index 263ae1fa..3cc188bd 100644 --- a/codefresh/internal/schemautil/validation.go +++ b/codefresh/internal/schemautil/validation.go @@ -89,4 +89,4 @@ func (o *ValidationOptions) setSummary(summary string) *ValidationOptions { func (o *ValidationOptions) setDetailFormat(detailFormat string) *ValidationOptions { o.detailFormat = detailFormat return o -} \ No newline at end of file +} diff --git a/codefresh/resource_api_key.go b/codefresh/resource_api_key.go index da1637af..8b8935d7 100644 --- a/codefresh/resource_api_key.go +++ b/codefresh/resource_api_key.go @@ -94,10 +94,8 @@ func resourceApiKeyCreate(d *schema.ResourceData, meta interface{}) error { return err } - client.Token = resp - // Codefresh tokens are in the form xxxxxxxxxxxx.xxxxxxxxx the first half serves as the id - d.SetId(strings.Split(client.Token,".")[0]) + d.SetId(strings.Split(resp, ".")[0]) return nil } @@ -118,7 +116,6 @@ func resourceApiKeyRead(d *schema.ResourceData, meta interface{}) error { return errors.New("[ERROR] Can't read API Key. Token is empty.") } - apiKey, err := client.GetAPIKey(keyID) if err != nil { return err diff --git a/codefresh/resource_pipeline_test.go b/codefresh/resource_pipeline_test.go index 4bfcfdf9..07dff4ad 100644 --- a/codefresh/resource_pipeline_test.go +++ b/codefresh/resource_pipeline_test.go @@ -532,8 +532,8 @@ func TestAccCodefreshPipeline_CronTriggersInvalid(t *testing.T) { var pipeline cfclient.Pipeline resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, Steps: []resource.TestStep{ { Config: testAccCodefreshPipelineBasicConfigCronTriggers( diff --git a/docs/resources/api_key.md b/docs/resources/api_key.md index 057a3853..48fab687 100644 --- a/docs/resources/api_key.md +++ b/docs/resources/api_key.md @@ -9,8 +9,8 @@ description: |- Manages an API Key tied to an Account and a User. -terraform-provider-codefresh itself uses an API key, passed as provider's attribute, but it's possible to use that API Key to generate a new one. - +terraform-provider-codefresh itself uses an API key, passed as provider's attribute, but it's possible to use that API Key to generate a new one. +This resource requires Codefresh system admin permissions, hence is relevant for on-prem deployments of Codefresh only. ## Example usage diff --git a/templates/resources/api_key.md.tmpl b/templates/resources/api_key.md.tmpl index 3ebc39c4..8c618e54 100644 --- a/templates/resources/api_key.md.tmpl +++ b/templates/resources/api_key.md.tmpl @@ -9,8 +9,8 @@ description: |- {{ .Description | trimspace }} -{{ .ProviderName }} itself uses an API key, passed as provider's attribute, but it's possible to use that API Key to generate a new one. - +{{ .ProviderName }} itself uses an API key, passed as provider's attribute, but it's possible to use that API Key to generate a new one. +This resource requires Codefresh system admin permissions, hence is relevant for on-prem deployments of Codefresh only. ## Example usage