Skip to content

Commit 1db87f0

Browse files
committed
feat: make plugin version optional - installs latest version
1 parent 2f0f121 commit 1db87f0

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

docs/resources/cloud_plugin_installation.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ resource "grafana_cloud_plugin_installation" "test" {
3838

3939
- `slug` (String) Slug of the plugin to be installed.
4040
- `stack_slug` (String) The stack id to which the plugin should be installed.
41-
- `version` (String) Version of the plugin to be installed.
41+
42+
### Optional
43+
44+
- `version` (String) Version of the plugin to be installed, latest version is installed when omitted.
4245

4346
### Read-Only
4447

internal/resources/cloud/resource_cloud_plugin_installation.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ Required access policy scopes:
4343
ForceNew: true,
4444
},
4545
"version": {
46-
Description: "Version of the plugin to be installed.",
46+
Description: "Version of the plugin to be installed, latest version is installed when omitted.",
4747
Type: schema.TypeString,
48-
Required: true,
48+
Optional: true,
4949
ForceNew: true,
5050
},
5151
},
@@ -89,10 +89,14 @@ func listStackPlugins(ctx context.Context, client *gcom.APIClient, data *ListerD
8989
func resourcePluginInstallationCreate(ctx context.Context, d *schema.ResourceData, client *gcom.APIClient) diag.Diagnostics {
9090
stackSlug := d.Get("stack_slug").(string)
9191
pluginSlug := d.Get("slug").(string)
92+
version := "latest"
93+
if v, ok := d.GetOk("version"); ok {
94+
version = v.(string)
95+
}
9296

9397
req := gcom.PostInstancePluginsRequest{
9498
Plugin: pluginSlug,
95-
Version: common.Ref(d.Get("version").(string)),
99+
Version: common.Ref(version),
96100
}
97101
_, _, err := client.InstancesAPI.PostInstancePlugins(ctx, stackSlug).
98102
PostInstancePluginsRequest(req).
@@ -120,7 +124,9 @@ func resourcePluginInstallationRead(ctx context.Context, d *schema.ResourceData,
120124

121125
d.Set("stack_slug", installation.InstanceSlug)
122126
d.Set("slug", installation.PluginSlug)
123-
d.Set("version", installation.Version)
127+
if _, ok := d.GetOk("version"); ok {
128+
d.Set("version", installation.Version)
129+
}
124130
d.SetId(resourcePluginInstallationID.Make(stackSlug, pluginSlug))
125131

126132
return nil

internal/resources/cloud/resource_cloud_plugin_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ func TestAccResourcePluginInstallation(t *testing.T) {
3636
resource.TestCheckResourceAttr("grafana_cloud_plugin_installation.test-installation", "slug", "grafana-googlesheets-datasource"),
3737
resource.TestCheckResourceAttr("grafana_cloud_plugin_installation.test-installation", "version", "1.2.5")),
3838
},
39+
{
40+
Config: testAccGrafanaCloudPluginInstallationNoVersion(stackSlug, pluginSlug),
41+
Check: resource.ComposeTestCheckFunc(
42+
testAccStackCheckExists("grafana_cloud_stack.test", &stack),
43+
testAccCloudPluginInstallationCheckExists(stackSlug, pluginSlug),
44+
resource.TestCheckResourceAttrSet("grafana_cloud_plugin_installation.test-installation-no-version", "id"),
45+
resource.TestCheckResourceAttr("grafana_cloud_plugin_installation.test-installation-no-version", "stack_slug", stackSlug),
46+
resource.TestCheckResourceAttr("grafana_cloud_plugin_installation.test-installation-no-version", "slug", pluginSlug),
47+
// Don't check version attribute since it's not specified in config
48+
),
49+
},
3950
{
4051
ResourceName: "grafana_cloud_plugin_installation.test-installation",
4152
ImportState: true,
@@ -105,3 +116,18 @@ func testAccGrafanaCloudPluginInstallation(stackSlug, name, version string) stri
105116
}
106117
`, stackSlug, name, version)
107118
}
119+
120+
func testAccGrafanaCloudPluginInstallationNoVersion(stackSlug, name string) string {
121+
return fmt.Sprintf(`
122+
resource "grafana_cloud_stack" "test" {
123+
name = "%[1]s"
124+
slug = "%[1]s"
125+
wait_for_readiness = false
126+
}
127+
resource "grafana_cloud_plugin_installation" "test-installation-no-version" {
128+
stack_slug = grafana_cloud_stack.test.slug
129+
slug = "%[2]s"
130+
# version omitted - should install latest
131+
}
132+
`, stackSlug, name)
133+
}

0 commit comments

Comments
 (0)