Skip to content

Commit 8ea234a

Browse files
authored
auth: Make access policy token's expires_at optional (#788)
* auth: Make access policy token's `expires_at` optional * tidy up go.sum * feedback: add dedicated tests to exercise no expiration * remove unused import
1 parent d0612af commit 8ea234a

File tree

4 files changed

+53
-18
lines changed

4 files changed

+53
-18
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.18
55
require (
66
github.com/Masterminds/semver/v3 v3.2.0
77
github.com/grafana/amixr-api-go-client v0.0.5
8-
github.com/grafana/grafana-api-golang-client v0.18.1
8+
github.com/grafana/grafana-api-golang-client v0.18.2
99
github.com/grafana/machine-learning-go-client v0.3.0
1010
github.com/grafana/synthetic-monitoring-agent v0.14.0
1111
github.com/grafana/synthetic-monitoring-api-go-client v0.6.5

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
7777
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
7878
github.com/grafana/amixr-api-go-client v0.0.5 h1:jqmljnd5FozuOsCNuyhZVpooxmj0BW9MmeLA7PaLK6U=
7979
github.com/grafana/amixr-api-go-client v0.0.5/go.mod h1:N6x26XUrM5zGtK5zL5vNJnAn2JFMxLFPPLTw/6pDkFE=
80-
github.com/grafana/grafana-api-golang-client v0.18.1 h1:yOXCQQZvVsgE5aBoc+W1kNdke1mqZ8czdJIL6A+cdc4=
81-
github.com/grafana/grafana-api-golang-client v0.18.1/go.mod h1:24W29gPe9yl0/3A9X624TPkAOR8DpHno490cPwnkv8E=
80+
github.com/grafana/grafana-api-golang-client v0.18.2 h1:WPYT4Cyw0uqBHAyO619HykzNsQ98yHKFmPuJonfiW8c=
81+
github.com/grafana/grafana-api-golang-client v0.18.2/go.mod h1:24W29gPe9yl0/3A9X624TPkAOR8DpHno490cPwnkv8E=
8282
github.com/grafana/machine-learning-go-client v0.3.0 h1:QmDPt9kFvw7RsVZE92V4tSbng2dHsOsVsHvNczLpNy8=
8383
github.com/grafana/machine-learning-go-client v0.3.0/go.mod h1:QFfZz8NkqVF8++skjkKQXJEZfpCYd8S0yTWJUpsLLTA=
8484
github.com/grafana/synthetic-monitoring-agent v0.14.0 h1:3kdNdMrQCBznU0uJWK7LN/+sKnzn/DpTvnNOKYC2iZM=

grafana/resource_cloud_access_policy_token.go

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -92,22 +92,21 @@ func CreateCloudAccessPolicyToken(ctx context.Context, d *schema.ResourceData, m
9292
client := meta.(*client).gcloudapi
9393
region := d.Get("region").(string)
9494

95-
expiresAt, err := time.Parse(time.RFC3339, d.Get("expires_at").(string))
96-
if err != nil {
97-
return diag.FromErr(err)
95+
tokenInput := gapi.CreateCloudAccessPolicyTokenInput{
96+
AccessPolicyID: d.Get("access_policy_id").(string),
97+
Name: d.Get("name").(string),
98+
DisplayName: d.Get("display_name").(string),
9899
}
99100

100-
displayName := d.Get("display_name").(string)
101-
if displayName == "" {
102-
displayName = d.Get("name").(string)
101+
if v, ok := d.GetOk("expires_at"); ok {
102+
expiresAt, err := time.Parse(time.RFC3339, v.(string))
103+
if err != nil {
104+
return diag.FromErr(err)
105+
}
106+
tokenInput.ExpiresAt = &expiresAt
103107
}
104108

105-
result, err := client.CreateCloudAccessPolicyToken(region, gapi.CreateCloudAccessPolicyTokenInput{
106-
AccessPolicyID: d.Get("access_policy_id").(string),
107-
Name: d.Get("name").(string),
108-
DisplayName: displayName,
109-
ExpiresAt: expiresAt,
110-
})
109+
result, err := client.CreateCloudAccessPolicyToken(region, tokenInput)
111110
if err != nil {
112111
return diag.FromErr(err)
113112
}
@@ -158,9 +157,13 @@ func ReadCloudAccessPolicyToken(ctx context.Context, d *schema.ResourceData, met
158157
d.Set("region", region)
159158
d.Set("name", result.Name)
160159
d.Set("display_name", result.DisplayName)
161-
d.Set("expires_at", result.ExpiresAt.Format(time.RFC3339))
162160
d.Set("created_at", result.CreatedAt.Format(time.RFC3339))
163-
d.Set("updated_at", result.UpdatedAt.Format(time.RFC3339))
161+
if result.ExpiresAt != nil {
162+
d.Set("expires_at", result.ExpiresAt.Format(time.RFC3339))
163+
}
164+
if result.UpdatedAt != nil {
165+
d.Set("updated_at", result.UpdatedAt.Format(time.RFC3339))
166+
}
164167

165168
return nil
166169
}

grafana/resource_cloud_access_policy_token_test.go

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,34 @@ func TestResourceCloudAccessPolicyToken_Basic(t *testing.T) {
110110
})
111111
}
112112

113+
func TestResourceCloudAccessPolicyToken_NoExpiration(t *testing.T) {
114+
t.Parallel()
115+
CheckCloudAPITestsEnabled(t)
116+
117+
var policy gapi.CloudAccessPolicy
118+
var policyToken gapi.CloudAccessPolicyToken
119+
120+
resource.Test(t, resource.TestCase{
121+
ProviderFactories: testAccProviderFactories,
122+
Steps: []resource.TestStep{
123+
{
124+
Config: testAccCloudAccessPolicyTokenConfigBasic("initial-no-expiration", "", []string{"metrics:read"}, ""),
125+
Check: resource.ComposeTestCheckFunc(
126+
testAccCloudAccessPolicyCheckExists("grafana_cloud_access_policy.test", &policy),
127+
testAccCloudAccessPolicyTokenCheckExists("grafana_cloud_access_policy_token.test", &policyToken),
128+
resource.TestCheckNoResourceAttr("grafana_cloud_access_policy_token.test", "expires_at"),
129+
),
130+
},
131+
{
132+
ResourceName: "grafana_cloud_access_policy_token.test",
133+
ImportState: true,
134+
ImportStateVerify: true,
135+
ImportStateVerifyIgnore: []string{"token"},
136+
},
137+
},
138+
})
139+
}
140+
113141
// nolint: unparam
114142
func testAccCloudAccessPolicyCheckExists(rn string, a *gapi.CloudAccessPolicy) resource.TestCheckFunc {
115143
return func(s *terraform.State) error {
@@ -193,6 +221,10 @@ func testAccCloudAccessPolicyTokenConfigBasic(name, displayName string, scopes [
193221
displayName = fmt.Sprintf("display_name = \"%s\"", displayName)
194222
}
195223

224+
if expiresAt != "" {
225+
expiresAt = fmt.Sprintf("expires_at = \"%s\"", expiresAt)
226+
}
227+
196228
return fmt.Sprintf(`
197229
data "grafana_cloud_organization" "current" {
198230
slug = "%[4]s"
@@ -220,7 +252,7 @@ func testAccCloudAccessPolicyTokenConfigBasic(name, displayName string, scopes [
220252
access_policy_id = grafana_cloud_access_policy.test.policy_id
221253
name = "token-%[1]s"
222254
%[2]s
223-
expires_at = "%[5]s"
255+
%[5]s
224256
}
225257
`, name, displayName, strings.Join(scopes, `","`), os.Getenv("GRAFANA_CLOUD_ORG"), expiresAt)
226258
}

0 commit comments

Comments
 (0)