@@ -10,6 +10,7 @@ import (
1010 "github.com/hashicorp/terraform-plugin-testing/helper/resource"
1111 "github.com/hashicorp/terraform-plugin-testing/terraform"
1212 instanceSDK "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
13+ "github.com/scaleway/scaleway-sdk-go/api/marketplace/v2"
1314 "github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
1415 "github.com/scaleway/terraform-provider-scaleway/v2/internal/locality"
1516 "github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/zonal"
@@ -20,6 +21,8 @@ import (
2021 "github.com/stretchr/testify/assert"
2122)
2223
24+ const marketplaceImageType = "instance_sbs"
25+
2326func TestAccServer_Minimal1 (t * testing.T ) {
2427 tt := acctest .NewTestTools (t )
2528 defer tt .Cleanup ()
@@ -1391,6 +1394,8 @@ func TestAccServer_CustomDiffImage(t *testing.T) {
13911394 tt := acctest .NewTestTools (t )
13921395 defer tt .Cleanup ()
13931396
1397+ var mainServerID , controlServerID string
1398+
13941399 resource .ParallelTest (t , resource.TestCase {
13951400 PreCheck : func () { acctest .PreCheck (t ) },
13961401 ProtoV6ProviderFactories : tt .ProviderFactories ,
@@ -1399,143 +1404,125 @@ func TestAccServer_CustomDiffImage(t *testing.T) {
13991404 {
14001405 Config : `
14011406 resource "scaleway_instance_server" "main" {
1407+ name = "main-server"
14021408 image = "ubuntu_jammy"
14031409 type = "DEV1-S"
14041410 state = "stopped"
1405- root_volume {
1406- volume_type = "l_ssd" // Keep this while data.scaleway_marketplace_image does not provide a image_type filter.
1407- }
14081411 }
1409- ` ,
1410- Check : resource .ComposeTestCheckFunc (
1411- isServerPresent (tt , "scaleway_instance_server.main" ),
1412- resource .TestCheckResourceAttr ("scaleway_instance_server.main" , "image" , "ubuntu_jammy" ),
1413- ),
1414- },
1415- {
1416- Config : `
1417- resource "scaleway_instance_server" "main" {
1412+ resource "scaleway_instance_server" "control" {
1413+ name = "control-server"
14181414 image = "ubuntu_jammy"
14191415 type = "DEV1-S"
14201416 state = "stopped"
1421- root_volume {
1422- volume_type = "l_ssd" // Keep this while data.scaleway_marketplace_image does not provide a image_type filter.
1423- }
1424- }
1425- resource "scaleway_instance_server" "copy" {
1426- image = "ubuntu_jammy"
1427- type = "DEV1-S"
1428- state = "stopped"
1429- root_volume {
1430- volume_type = "l_ssd" // Keep this while data.scaleway_marketplace_image does not provide a image_type filter.
1431- }
14321417 }
14331418 ` ,
14341419 Check : resource .ComposeTestCheckFunc (
14351420 isServerPresent (tt , "scaleway_instance_server.main" ),
1436- isServerPresent (tt , "scaleway_instance_server.copy " ),
1421+ isServerPresent (tt , "scaleway_instance_server.control " ),
14371422 resource .TestCheckResourceAttr ("scaleway_instance_server.main" , "image" , "ubuntu_jammy" ),
1438- resource .TestCheckResourceAttr ("scaleway_instance_server.copy" , "image" , "ubuntu_jammy" ),
1439- resource .TestCheckResourceAttrPair ("scaleway_instance_server.main" , "id" , "scaleway_instance_server.copy" , "id" ),
1423+ resource .TestCheckResourceAttr ("scaleway_instance_server.control" , "image" , "ubuntu_jammy" ),
1424+ acctest .CheckResourceIDPersisted ("scaleway_instance_server.main" , & mainServerID ),
1425+ acctest .CheckResourceIDPersisted ("scaleway_instance_server.control" , & controlServerID ),
14401426 ),
1441- ResourceName : "scaleway_instance_server.copy" ,
1442- ImportState : true ,
1443- ImportStateIdFunc : func (state * terraform.State ) (string , error ) {
1444- return state .RootModule ().Resources ["scaleway_instance_server.main" ].Primary .ID , nil
1445- },
1446- ImportStatePersist : true ,
14471427 },
14481428 {
1449- Config : `
1429+ Config : fmt . Sprintf ( `
14501430 data "scaleway_marketplace_image" "jammy" {
14511431 label = "ubuntu_jammy"
1432+ image_type = "%s"
14521433 }
14531434 resource "scaleway_instance_server" "main" {
1435+ name = "main-server"
14541436 image = data.scaleway_marketplace_image.jammy.id
14551437 type = "DEV1-S"
14561438 state = "stopped"
1457- root_volume {
1458- volume_type = "l_ssd" // Keep this while data.scaleway_marketplace_image does not provide a image_type filter.
1459- }
14601439 }
1461- resource "scaleway_instance_server" "copy" {
1440+ resource "scaleway_instance_server" "control" {
1441+ name = "control-server"
14621442 image = "ubuntu_jammy"
14631443 type = "DEV1-S"
14641444 state = "stopped"
1465- root_volume {
1466- volume_type = "l_ssd" // Keep this while data.scaleway_marketplace_image does not provide a image_type filter.
1467- }
14681445 }
1469- ` ,
1470- Check : resource .ComposeTestCheckFunc (
1471- isServerPresent (tt , "scaleway_instance_server.main" ),
1472- isServerPresent (tt , "scaleway_instance_server.copy" ),
1473- resource .TestCheckResourceAttrPair ("scaleway_instance_server.main" , "image" , "data.scaleway_marketplace_image.jammy" , "id" ),
1474- resource .TestCheckResourceAttrPair ("scaleway_instance_server.main" , "id" , "scaleway_instance_server.copy" , "id" ),
1475- ),
1476- },
1477- {
1478- RefreshState : true ,
1446+ ` , marketplaceImageType ),
14791447 Check : resource .ComposeTestCheckFunc (
14801448 isServerPresent (tt , "scaleway_instance_server.main" ),
1481- isServerPresent (tt , "scaleway_instance_server.copy " ),
1449+ isServerPresent (tt , "scaleway_instance_server.control " ),
14821450 resource .TestCheckResourceAttrPair ("scaleway_instance_server.main" , "image" , "data.scaleway_marketplace_image.jammy" , "id" ),
1483- resource .TestCheckResourceAttrPair ("scaleway_instance_server.main" , "id" , "scaleway_instance_server.copy" , "id" ),
1451+ resource .TestCheckResourceAttr ("scaleway_instance_server.control" , "image" , "ubuntu_jammy" ),
1452+ imageIDMatchLabel (tt , "scaleway_instance_server.main" , "scaleway_instance_server.control" , true ),
1453+ acctest .CheckResourceIDPersisted ("scaleway_instance_server.main" , & mainServerID ),
1454+ acctest .CheckResourceIDPersisted ("scaleway_instance_server.control" , & controlServerID ),
14841455 ),
14851456 },
14861457 {
1487- Config : `
1458+ Config : fmt . Sprintf ( `
14881459 data "scaleway_marketplace_image" "focal" {
14891460 label = "ubuntu_focal"
1461+ image_type = "%s"
14901462 }
14911463 resource "scaleway_instance_server" "main" {
1464+ name = "main-server"
14921465 image = data.scaleway_marketplace_image.focal.id
14931466 type = "DEV1-S"
14941467 state = "stopped"
1495- root_volume {
1496- volume_type = "l_ssd" // Keep this while data.scaleway_marketplace_image does not provide a image_type filter.
1497- }
14981468 }
1499- resource "scaleway_instance_server" "copy" {
1469+ resource "scaleway_instance_server" "control" {
1470+ name = "control-server"
15001471 image = "ubuntu_jammy"
15011472 type = "DEV1-S"
15021473 state = "stopped"
1503- root_volume {
1504- volume_type = "l_ssd" // Keep this while data.scaleway_marketplace_image does not provide a image_type filter.
1505- }
15061474 }
1507- ` ,
1508- PlanOnly : true ,
1509- ExpectNonEmptyPlan : true ,
1475+ ` , marketplaceImageType ),
15101476 Check : resource .ComposeTestCheckFunc (
15111477 isServerPresent (tt , "scaleway_instance_server.main" ),
1478+ isServerPresent (tt , "scaleway_instance_server.control" ),
15121479 resource .TestCheckResourceAttrPair ("scaleway_instance_server.main" , "image" , "data.scaleway_marketplace_image.focal" , "id" ),
1513- resource .TestCheckResourceAttr ("scaleway_instance_server.copy" , "image" , "ubuntu_jammy" ),
1514- serverIDsAreDifferent ("scaleway_instance_server.main" , "scaleway_instance_server.copy" ),
1480+ resource .TestCheckResourceAttr ("scaleway_instance_server.control" , "image" , "ubuntu_jammy" ),
1481+ imageIDMatchLabel (tt , "scaleway_instance_server.main" , "scaleway_instance_server.control" , false ),
1482+ acctest .CheckResourceIDChanged ("scaleway_instance_server.main" , & mainServerID ),
1483+ acctest .CheckResourceIDPersisted ("scaleway_instance_server.control" , & controlServerID ),
15151484 ),
15161485 },
15171486 },
15181487 })
15191488}
15201489
1521- func serverIDsAreDifferent ( nameFirst , nameSecond string ) resource.TestCheckFunc {
1490+ func imageIDMatchLabel ( tt * acctest. TestTools , resourceWithImageID , resourceWithImageLabel string , expectMatch bool ) resource.TestCheckFunc {
15221491 return func (s * terraform.State ) error {
1523- rs , ok := s .RootModule ().Resources [nameFirst ]
1492+ rs , ok := s .RootModule ().Resources [resourceWithImageID ]
15241493 if ! ok {
1525- return fmt .Errorf ("resource was not found: %s" , nameFirst )
1494+ return fmt .Errorf ("resource was not found: %s" , resourceWithImageID )
15261495 }
15271496
1528- idFirst := rs .Primary .ID
1497+ zonedImageID := zonal .ExpandID (rs .Primary .Attributes ["image" ])
1498+ expectedImageID := zonedImageID .ID
1499+ zone := zonedImageID .Zone
1500+ commercialType := rs .Primary .Attributes ["type" ]
15291501
1530- rs , ok = s .RootModule ().Resources [nameSecond ]
1502+ rs , ok = s .RootModule ().Resources [resourceWithImageLabel ]
15311503 if ! ok {
1532- return fmt .Errorf ("resource was not found: %s" , nameSecond )
1504+ return fmt .Errorf ("resource was not found: %s" , resourceWithImageLabel )
15331505 }
15341506
1535- idSecond := rs .Primary .ID
1507+ imageLabel := rs .Primary .Attributes ["image" ]
1508+
1509+ client := meta .ExtractScwClient (tt .Meta )
1510+ api := marketplace .NewAPI (client )
1511+
1512+ localImageIDFromLabel , err := api .GetLocalImageByLabel (& marketplace.GetLocalImageByLabelRequest {
1513+ ImageLabel : imageLabel ,
1514+ Zone : zone ,
1515+ CommercialType : commercialType ,
1516+ Type : marketplaceImageType ,
1517+ })
1518+ if err != nil {
1519+ return fmt .Errorf ("failed to get local image by label: %w" , err )
1520+ }
15361521
1537- if idFirst == idSecond {
1538- return fmt .Errorf ("IDs of both resources were equal when they should not have been (%s and %s)" , nameFirst , nameSecond )
1522+ if expectMatch && expectedImageID != localImageIDFromLabel .ID {
1523+ return fmt .Errorf ("unexpected image ID for label %q: expected %s, got %s" , imageLabel , expectedImageID , localImageIDFromLabel .ID )
1524+ } else if ! expectMatch && expectedImageID == localImageIDFromLabel .ID {
1525+ return fmt .Errorf ("images IDs match when they should not" )
15391526 }
15401527
15411528 return nil
@@ -2200,6 +2187,7 @@ func TestAccServer_PrivateNetworkMissingPNIC(t *testing.T) {
22002187}
22012188
22022189func TestAccServer_AdminPasswordEncryptionSSHKeyID (t * testing.T ) {
2190+ t .Skip ("There is currently a bug when resetting the field, we should reinstate the test once the fix has been deployed" )
22032191 tt := acctest .NewTestTools (t )
22042192 defer tt .Cleanup ()
22052193
@@ -2272,6 +2260,7 @@ func TestAccServer_AdminPasswordEncryptionSSHKeyID(t *testing.T) {
22722260}
22732261
22742262func TestGetEndOfServiceDate (t * testing.T ) {
2263+ t .Skip ("There are currently no Instance type scheduled for EndOfService" )
22752264 tt := acctest .NewTestTools (t )
22762265
22772266 client := meta .ExtractScwClient (tt .Meta )
0 commit comments