Skip to content

Commit e364bc5

Browse files
committed
fix customDiff
1 parent 26f2022 commit e364bc5

File tree

3 files changed

+152
-8
lines changed

3 files changed

+152
-8
lines changed

internal/services/baremetal/helpers.go

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"github.com/scaleway/scaleway-sdk-go/validation"
99
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/regional"
10+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/logging"
1011
"sort"
1112
"time"
1213

@@ -199,30 +200,48 @@ func customDiffPrivateNetworkOption() func(ctx context.Context, diff *schema.Res
199200

200201
func customDiffOffer() func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
201202
return func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
203+
logging.L.Debugf("customDiffOffer() function")
204+
205+
if diff.Get("offer") == "" || !diff.HasChange("offer") || diff.Id() == "" {
206+
return nil
207+
}
202208
api, zone, err := NewAPIWithZoneAndID(i, diff.Id())
209+
logging.L.Debugf("value of api is %v and zone is %v", api, zone)
203210
if err != nil {
204211
return err
205212
}
206213

207-
oldOffer, newOffer := diff.GetChange("newOfferID")
208-
newOfferID := regional.ExpandID(newOffer)
209-
oldOfferID := regional.ExpandID(oldOffer)
214+
oldOffer, newOffer := diff.GetChange("offer")
215+
newOfferID := regional.ExpandID(newOffer.(string))
216+
oldOfferID := regional.ExpandID(oldOffer.(string))
210217
if !validation.IsUUID(newOfferID.ID) {
211-
//TODO warning use datasource instead
218+
logging.L.Warningf("Your should use datasource instead of the offer_name")
212219
}
220+
213221
oldOfferDetails, err := FindOfferByID(ctx, api, zone.Zone, oldOfferID.ID)
214222
if err != nil {
215-
return err
223+
return errors.New("can not find the offer by id" + err.Error())
216224
}
225+
217226
newOfferDetails, err := FindOfferByID(ctx, api, zone.Zone, newOfferID.ID)
218227
if err != nil {
219-
return err
228+
return errors.New("can not find the offer by id" + err.Error())
220229
}
221230
if oldOfferDetails.Name != newOfferDetails.Name {
222-
return diff.ForceNew("offer changed")
231+
return diff.ForceNew("offer")
223232
}
224233
if oldOfferDetails.SubscriptionPeriod == baremetal.OfferSubscriptionPeriodMonthly && newOfferDetails.SubscriptionPeriod == baremetal.OfferSubscriptionPeriodHourly {
225-
return errors.New("Offer's subscription period is restricted to monthly or hourly")
234+
return errors.New("offer's subscription period is restricted to monthly or hourly")
235+
}
236+
logging.L.Infof("migration ok")
237+
logging.L.Infof("severID is %v", diff.Id())
238+
ServerID := regional.ExpandID(diff.Id())
239+
_, err = api.MigrateServerToMonthlyOffer(&baremetal.MigrateServerToMonthlyOfferRequest{
240+
Zone: "fr-par-2",
241+
ServerID: ServerID.ID,
242+
}, scw.WithContext(ctx))
243+
if err != nil {
244+
return errors.New("migration failed: " + err.Error())
226245
}
227246
return nil
228247
}

internal/services/baremetal/server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ If this behaviour is wanted, please set 'reinstall_on_ssh_key_changes' argument
255255

256256
CustomizeDiff: customdiff.Sequence(
257257
cdf.LocalityCheck("private_network.#.id"),
258+
customDiffOffer(),
258259
customDiffPrivateNetworkOption(),
259260
),
260261
}

internal/services/baremetal/server_test.go

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,130 @@ func TestAccServer_AddAnotherPrivateNetwork(t *testing.T) {
858858
})
859859
}
860860

861+
func TestAccServer_UpdateSubscriptionPeriod(t *testing.T) {
862+
tt := acctest.NewTestTools(t)
863+
defer tt.Cleanup()
864+
865+
//if !IsOfferAvailable(OfferID, "fr-par-2", tt) {
866+
// t.Skip("Offer is out of stock")
867+
//}
868+
869+
resource.ParallelTest(t, resource.TestCase{
870+
PreCheck: func() { acctest.PreCheck(t) },
871+
ProviderFactories: tt.ProviderFactories,
872+
CheckDestroy: resource.ComposeTestCheckFunc(
873+
baremetalchecks.CheckServerDestroy(tt),
874+
),
875+
Steps: []resource.TestStep{
876+
{
877+
Config: fmt.Sprintf(`
878+
879+
data "scaleway_baremetal_offer" "my_offer" {
880+
zone = "fr-par-2"
881+
name = "EM-B112X-SSD"
882+
subscription_period = "hourly"
883+
884+
}
885+
886+
resource "scaleway_baremetal_server" "server01" {
887+
name = "TestAccServer_UpdateSubscriptionPeriod"
888+
offer = data.scaleway_baremetal_offer.my_offer.offer_id
889+
zone = "fr-par-2"
890+
install_config_afterward = true
891+
892+
}`,
893+
),
894+
Check: resource.ComposeTestCheckFunc(
895+
//resource.TestCheckResourceAttr("scaleway_baremetal_server.server01", "subscription_period", "hourly"),
896+
resource.TestCheckResourceAttr("scaleway_baremetal_server.server01", "zone", "fr-par-2"),
897+
),
898+
},
899+
{
900+
Config: fmt.Sprintf(`
901+
data "scaleway_baremetal_offer" "my_offer" {
902+
zone = "fr-par-2"
903+
name = "EM-B112X-SSD"
904+
subscription_period = "hourly"
905+
906+
}
907+
908+
data "scaleway_baremetal_offer" "my_offer_monthly" {
909+
zone = "fr-par-2"
910+
name = "EM-B112X-SSD"
911+
subscription_period = "monthly"
912+
913+
}
914+
915+
resource "scaleway_baremetal_server" "server01" {
916+
name = "TestAccServer_UpdateSubscriptionPeriod"
917+
offer = data.scaleway_baremetal_offer.my_offer_monthly.offer_id
918+
zone = "fr-par-2"
919+
install_config_afterward = true
920+
921+
}`,
922+
),
923+
Check: resource.ComposeTestCheckFunc(
924+
//resource.TestCheckResourceAttr("scaleway_baremetal_server.server01", "subscription_period", "hourly"),
925+
resource.TestCheckResourceAttr("scaleway_baremetal_server.server01", "zone", "fr-par-2"),
926+
),
927+
},
928+
{
929+
Config: fmt.Sprintf(`
930+
data "scaleway_baremetal_offer" "my_offer" {
931+
zone = "fr-par-2"
932+
name = "EM-B112X-SSD"
933+
subscription_period = "hourly"
934+
935+
}
936+
937+
data "scaleway_baremetal_offer" "my_offer_monthly" {
938+
zone = "fr-par-2"
939+
name = "EM-B112X-SSD"
940+
subscription_period = "monthly"
941+
942+
}
943+
944+
resource "scaleway_baremetal_server" "server01" {
945+
name = "Test_UpdateSubscriptionPeriod"
946+
offer = data.scaleway_baremetal_offer.my_offer.offer_id
947+
zone = "fr-par-2"
948+
install_config_afterward = true
949+
950+
}`,
951+
),
952+
Check: resource.ComposeTestCheckFunc(
953+
//resource.TestCheckResourceAttr("scaleway_baremetal_server.server01", "subscription_period", "hourly"),
954+
resource.TestCheckResourceAttr("scaleway_baremetal_server.server01", "zone", "fr-par-2"),
955+
),
956+
},
957+
{
958+
Config: fmt.Sprintf(`
959+
960+
data "scaleway_baremetal_offer" "my_offer" {
961+
zone = "fr-par-2"
962+
name = "EM-B111X-SATA"
963+
subscription_period = "hourly"
964+
965+
}
966+
967+
resource "scaleway_baremetal_server" "server01" {
968+
name = "Test_UpdateSubscriptionPeriod"
969+
offer = data.scaleway_baremetal_offer.my_offer.offer_id
970+
zone = "fr-par-2"
971+
install_config_afterward = true
972+
973+
}`,
974+
),
975+
Check: resource.ComposeTestCheckFunc(
976+
//resource.TestCheckResourceAttr("scaleway_baremetal_server.server01", "subscription_period", "hourly"),
977+
resource.TestCheckResourceAttr("scaleway_baremetal_server.server01", "zone", "fr-par-2"),
978+
),
979+
},
980+
},
981+
})
982+
983+
}
984+
861985
func TestAccServer_WithIPAMPrivateNetwork(t *testing.T) {
862986
tt := acctest.NewTestTools(t)
863987
defer tt.Cleanup()

0 commit comments

Comments
 (0)