1
1
package server_test
2
2
3
3
import (
4
+ "context"
4
5
"crypto/sha1"
5
6
"encoding/base64"
6
7
"fmt"
@@ -22,6 +23,7 @@ import (
22
23
"github.com/hetznercloud/terraform-provider-hcloud/internal/teste2e"
23
24
"github.com/hetznercloud/terraform-provider-hcloud/internal/testsupport"
24
25
"github.com/hetznercloud/terraform-provider-hcloud/internal/testtemplate"
26
+ "github.com/hetznercloud/terraform-provider-hcloud/internal/util/hcloudutil"
25
27
)
26
28
27
29
func TestServerResource_Basic (t * testing.T ) {
@@ -898,6 +900,13 @@ func TestServerResource_PlacementGroup(t *testing.T) {
898
900
}
899
901
srvRes .SetRName ("server-placement-group" )
900
902
903
+ srvResNoPG := & server.RData {
904
+ Name : srvRes .Name ,
905
+ Type : srvRes .Type ,
906
+ Image : srvRes .Image ,
907
+ }
908
+ srvResNoPG .SetRName ("server-placement-group" )
909
+
901
910
tmplMan := testtemplate.Manager {}
902
911
903
912
resource .ParallelTest (t , resource.TestCase {
@@ -915,15 +924,65 @@ func TestServerResource_PlacementGroup(t *testing.T) {
915
924
Check : resource .ComposeTestCheckFunc (
916
925
testsupport .CheckResourceExists (srvRes .TFID (), server .ByID (t , & srv )),
917
926
testsupport .CheckResourceExists (pgRes .TFID (), placementgroup .ByID (t , & pg )),
918
- resource .TestCheckResourceAttr (srvRes .TFID (), "name" ,
919
- fmt .Sprintf ("server-placement-group--%d" , tmplMan .RandInt )),
927
+ resource .TestCheckResourceAttr (srvRes .TFID (), "name" , fmt .Sprintf ("server-placement-group--%d" , tmplMan .RandInt )),
920
928
resource .TestCheckResourceAttr (srvRes .TFID (), "server_type" , srvRes .Type ),
921
929
resource .TestCheckResourceAttr (srvRes .TFID (), "image" , srvRes .Image ),
922
930
testsupport .CheckResourceAttrFunc (srvRes .TFID (), "placement_group_id" , func () string {
923
931
return strconv .Itoa (pg .ID )
924
932
}),
925
933
),
926
934
},
935
+ {
936
+ // Try to remove PG of running server -> error
937
+ Config : tmplMan .Render (t ,
938
+ "testdata/r/hcloud_placement_group" , pgRes ,
939
+ "testdata/r/hcloud_server" , srvResNoPG ,
940
+ ),
941
+ ExpectError : regexp .MustCompile ("removing a running server from a placement group is currently not supported in the provider.*" ),
942
+ },
943
+ {
944
+ // Remove Placement Group
945
+ PreConfig : func () {
946
+ ctx := context .TODO ()
947
+ // Removing PG is not support only in TF, we need to shut down the server manually beforehand
948
+ client , err := testsupport .CreateClient ()
949
+ if err != nil {
950
+ t .Errorf ("PreConfig: failed to create client: %v" , err )
951
+ return
952
+ }
953
+ action , _ , err := client .Server .Poweroff (ctx , & srv )
954
+ if err != nil {
955
+ t .Errorf ("PreConfig: failed to power off server: %v" , err )
956
+ return
957
+ }
958
+ err = hcloudutil .WaitForAction (ctx , & client .Action , action )
959
+ if err != nil {
960
+ t .Errorf ("PreConfig: power off server action failed: %v" , err )
961
+ return
962
+ }
963
+ },
964
+ Config : tmplMan .Render (t ,
965
+ "testdata/r/hcloud_placement_group" , pgRes ,
966
+ "testdata/r/hcloud_server" , srvResNoPG ,
967
+ ),
968
+ Check : resource .ComposeTestCheckFunc (
969
+ resource .TestCheckResourceAttr (srvResNoPG .TFID (), "status" , "off" ),
970
+ resource .TestCheckResourceAttr (srvResNoPG .TFID (), "placement_group_id" , "0" ),
971
+ ),
972
+ },
973
+ {
974
+ // Add Placement Group back
975
+ Config : tmplMan .Render (t ,
976
+ "testdata/r/hcloud_placement_group" , pgRes ,
977
+ "testdata/r/hcloud_server" , srvRes ,
978
+ ),
979
+ Check : resource .ComposeTestCheckFunc (
980
+ resource .TestCheckResourceAttr (srvResNoPG .TFID (), "status" , "running" ),
981
+ testsupport .CheckResourceAttrFunc (srvRes .TFID (), "placement_group_id" , func () string {
982
+ return strconv .Itoa (pg .ID )
983
+ }),
984
+ ),
985
+ },
927
986
},
928
987
})
929
988
}
0 commit comments