|
19 | 19 | )
|
20 | 20 | )
|
21 | 21 |
|
| 22 | +const LatestVersion = "latest" |
| 23 | + |
22 | 24 | func resourcePluginInstallation() *common.Resource {
|
23 | 25 | schema := &schema.Resource{
|
24 | 26 | Description: `
|
@@ -46,9 +48,10 @@ Required access policy scopes:
|
46 | 48 | ForceNew: true,
|
47 | 49 | },
|
48 | 50 | "version": {
|
49 |
| - Description: "Version of the plugin to be installed.", |
| 51 | + Description: "Version of the plugin to be installed. Defaults to 'latest' and installs the most recent version. Terraform will detect new version as drift for plan/apply.", |
50 | 52 | Type: schema.TypeString,
|
51 |
| - Required: true, |
| 53 | + Optional: true, |
| 54 | + Default: LatestVersion, |
52 | 55 | ForceNew: true,
|
53 | 56 | },
|
54 | 57 | },
|
@@ -92,10 +95,11 @@ func listStackPlugins(ctx context.Context, client *gcom.APIClient, data *ListerD
|
92 | 95 | func resourcePluginInstallationCreate(ctx context.Context, d *schema.ResourceData, client *gcom.APIClient) diag.Diagnostics {
|
93 | 96 | stackSlug := d.Get("stack_slug").(string)
|
94 | 97 | pluginSlug := d.Get("slug").(string)
|
| 98 | + version := d.Get("version").(string) |
95 | 99 |
|
96 | 100 | req := gcom.PostInstancePluginsRequest{
|
97 | 101 | Plugin: pluginSlug,
|
98 |
| - Version: common.Ref(d.Get("version").(string)), |
| 102 | + Version: common.Ref(version), |
99 | 103 | }
|
100 | 104 |
|
101 | 105 | err := retry.RetryContext(ctx, 2*time.Minute, func() *retry.RetryError {
|
@@ -133,10 +137,24 @@ func resourcePluginInstallationRead(ctx context.Context, d *schema.ResourceData,
|
133 | 137 | if err, shouldReturn := common.CheckReadError("plugin", d, err); shouldReturn {
|
134 | 138 | return err
|
135 | 139 | }
|
| 140 | + desiredVersion := d.Get("version").(string) |
| 141 | + catalogVersion := "" |
| 142 | + if desiredVersion == LatestVersion { |
| 143 | + catalogPlugin, _, err := client.PluginsAPI.GetPlugin(ctx, pluginSlug.(string)).Execute() |
| 144 | + if err, shouldReturn := common.CheckReadError("plugin", d, err); shouldReturn { |
| 145 | + return err |
| 146 | + } |
| 147 | + catalogVersion = catalogPlugin.Version |
| 148 | + } |
136 | 149 |
|
137 | 150 | d.Set("stack_slug", installation.InstanceSlug)
|
138 | 151 | d.Set("slug", installation.PluginSlug)
|
139 |
| - d.Set("version", installation.Version) |
| 152 | + |
| 153 | + if desiredVersion == LatestVersion && installation.Version == catalogVersion { |
| 154 | + d.Set("version", LatestVersion) |
| 155 | + } else { |
| 156 | + d.Set("version", installation.Version) |
| 157 | + } |
140 | 158 | d.SetId(resourcePluginInstallationID.Make(stackSlug, pluginSlug))
|
141 | 159 |
|
142 | 160 | return nil
|
|
0 commit comments