@@ -19,6 +19,7 @@ import (
1919 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
2020 "github.com/hashicorp/terraform-provider-azurerm/helpers/tf"
2121 "github.com/hashicorp/terraform-provider-azurerm/internal/clients"
22+ "github.com/hashicorp/terraform-provider-azurerm/internal/features"
2223 "github.com/hashicorp/terraform-provider-azurerm/internal/sdk"
2324 "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate"
2425 "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
@@ -29,7 +30,7 @@ import (
2930//go:generate go run ../../tools/generator-tests resourceidentity -resource-name dedicated_host -service-package-name compute -properties "name" -compare-values "subscription_id:dedicated_host_group_id,resource_group_name:dedicated_host_group_id,host_group_name:dedicated_host_group_id"
3031
3132func resourceDedicatedHost () * pluginsdk.Resource {
32- return & pluginsdk.Resource {
33+ resource := & pluginsdk.Resource {
3334 Create : resourceDedicatedHostCreate ,
3435 Read : resourceDedicatedHostRead ,
3536 Update : resourceDedicatedHostUpdate ,
@@ -134,17 +135,29 @@ func resourceDedicatedHost() *pluginsdk.Resource {
134135 Type : pluginsdk .TypeString ,
135136 Optional : true ,
136137 ValidateFunc : validation .StringInSlice ([]string {
137- // TODO: remove `None` in 4.0 in favour of this field being set to an empty string (since it's optional)
138- string (dedicatedhosts .DedicatedHostLicenseTypesNone ),
139138 string (dedicatedhosts .DedicatedHostLicenseTypesWindowsServerHybrid ),
140139 string (dedicatedhosts .DedicatedHostLicenseTypesWindowsServerPerpetual ),
141140 }, false ),
142- Default : string (dedicatedhosts .DedicatedHostLicenseTypesNone ),
143141 },
144142
145143 "tags" : commonschema .Tags (),
146144 },
147145 }
146+
147+ if ! features .FivePointOh () {
148+ resource .Schema ["license_type" ] = & pluginsdk.Schema {
149+ Type : pluginsdk .TypeString ,
150+ Optional : true ,
151+ ValidateFunc : validation .StringInSlice ([]string {
152+ string (dedicatedhosts .DedicatedHostLicenseTypesNone ),
153+ string (dedicatedhosts .DedicatedHostLicenseTypesWindowsServerHybrid ),
154+ string (dedicatedhosts .DedicatedHostLicenseTypesWindowsServerPerpetual ),
155+ }, false ),
156+ Default : string (dedicatedhosts .DedicatedHostLicenseTypesNone ),
157+ }
158+ }
159+
160+ return resource
148161}
149162
150163func resourceDedicatedHostCreate (d * pluginsdk.ResourceData , meta interface {}) error {
@@ -170,12 +183,11 @@ func resourceDedicatedHostCreate(d *pluginsdk.ResourceData, meta interface{}) er
170183 }
171184 }
172185
173- licenseType := dedicatedhosts .DedicatedHostLicenseTypes (d .Get ("license_type" ).(string ))
174186 payload := dedicatedhosts.DedicatedHost {
175187 Location : location .Normalize (d .Get ("location" ).(string )),
176188 Properties : & dedicatedhosts.DedicatedHostProperties {
177189 AutoReplaceOnFailure : pointer .To (d .Get ("auto_replace_on_failure" ).(bool )),
178- LicenseType : & licenseType ,
190+ LicenseType : pointer . To ( dedicatedhosts . DedicatedHostLicenseTypesNone ) ,
179191 PlatformFaultDomain : pointer .To (int64 (d .Get ("platform_fault_domain" ).(int ))),
180192 },
181193 Sku : dedicatedhosts.Sku {
@@ -184,6 +196,10 @@ func resourceDedicatedHostCreate(d *pluginsdk.ResourceData, meta interface{}) er
184196 Tags : tags .Expand (d .Get ("tags" ).(map [string ]interface {})),
185197 }
186198
199+ if v := d .Get ("license_type" ).(string ); v != "" {
200+ payload .Properties .LicenseType = pointer.ToEnum [dedicatedhosts.DedicatedHostLicenseTypes ](v )
201+ }
202+
187203 if err := client .CreateOrUpdateCallbackThenPoll (ctx , id , payload , sdk .SetIDAndIdentityCallback (meta , & id , d )); err != nil {
188204 return fmt .Errorf ("creating %s: %+v" , id , err )
189205 }
@@ -225,7 +241,16 @@ func resourceDedicatedHostRead(d *pluginsdk.ResourceData, meta interface{}) erro
225241 d .Set ("sku_name" , model .Sku .Name )
226242 if props := model .Properties ; props != nil {
227243 d .Set ("auto_replace_on_failure" , props .AutoReplaceOnFailure )
228- d .Set ("license_type" , string (pointer .From (props .LicenseType )))
244+
245+ if ! features .FivePointOh () {
246+ d .Set ("license_type" , pointer .FromEnum (props .LicenseType ))
247+ } else {
248+ licenseType := pointer .FromEnum (props .LicenseType )
249+ if licenseType == string (dedicatedhosts .DedicatedHostLicenseTypesNone ) {
250+ licenseType = ""
251+ }
252+ d .Set ("license_type" , licenseType )
253+ }
229254
230255 platformFaultDomain := 0
231256 if props .PlatformFaultDomain != nil {
@@ -260,8 +285,11 @@ func resourceDedicatedHostUpdate(d *pluginsdk.ResourceData, meta interface{}) er
260285 payload .Properties .AutoReplaceOnFailure = pointer .To (d .Get ("auto_replace_on_failure" ).(bool ))
261286 }
262287 if d .HasChange ("license_type" ) {
263- licenseType := dedicatedhosts .DedicatedHostLicenseTypes (d .Get ("license_type" ).(string ))
264- payload .Properties .LicenseType = & licenseType
288+ licenseType := dedicatedhosts .DedicatedHostLicenseTypesNone
289+ if v := d .Get ("license_type" ).(string ); v != "" {
290+ licenseType = dedicatedhosts .DedicatedHostLicenseTypes (v )
291+ }
292+ payload .Properties .LicenseType = pointer .To (licenseType )
265293 }
266294 }
267295
0 commit comments