github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/scaleway/resource_scaleway_server_test.go (about) 1 package scaleway 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/resource" 8 "github.com/hashicorp/terraform/terraform" 9 ) 10 11 func TestAccScalewayServer_Basic(t *testing.T) { 12 resource.Test(t, resource.TestCase{ 13 PreCheck: func() { testAccPreCheck(t) }, 14 Providers: testAccProviders, 15 CheckDestroy: testAccCheckScalewayServerDestroy, 16 Steps: []resource.TestStep{ 17 resource.TestStep{ 18 Config: testAccCheckScalewayServerConfig, 19 Check: resource.ComposeTestCheckFunc( 20 testAccCheckScalewayServerExists("scaleway_server.base"), 21 testAccCheckScalewayServerAttributes("scaleway_server.base"), 22 resource.TestCheckResourceAttr( 23 "scaleway_server.base", "type", "C1"), 24 resource.TestCheckResourceAttr( 25 "scaleway_server.base", "name", "test"), 26 resource.TestCheckResourceAttr( 27 "scaleway_server.base", "tags.0", "terraform-test"), 28 ), 29 }, 30 resource.TestStep{ 31 Config: testAccCheckScalewayServerConfig_IPAttachment, 32 Check: resource.ComposeTestCheckFunc( 33 testAccCheckScalewayServerIPAttachmentAttributes("scaleway_ip.base", "scaleway_server.base"), 34 ), 35 }, 36 resource.TestStep{ 37 Config: testAccCheckScalewayServerConfig_IPDetachment, 38 Check: resource.ComposeTestCheckFunc( 39 testAccCheckScalewayServerIPDetachmentAttributes("scaleway_server.base"), 40 ), 41 }, 42 }, 43 }) 44 } 45 46 func TestAccScalewayServer_ExistingIP(t *testing.T) { 47 resource.Test(t, resource.TestCase{ 48 PreCheck: func() { testAccPreCheck(t) }, 49 Providers: testAccProviders, 50 CheckDestroy: testAccCheckScalewayServerDestroy, 51 Steps: []resource.TestStep{ 52 resource.TestStep{ 53 Config: testAccCheckScalewayServerConfig_IPAttachment, 54 Check: resource.ComposeTestCheckFunc( 55 testAccCheckScalewayServerExists("scaleway_server.base"), 56 testAccCheckScalewayServerIPAttachmentAttributes("scaleway_ip.base", "scaleway_server.base"), 57 ), 58 }, 59 }, 60 }) 61 } 62 63 func TestAccScalewayServer_Volumes(t *testing.T) { 64 resource.Test(t, resource.TestCase{ 65 PreCheck: func() { testAccPreCheck(t) }, 66 Providers: testAccProviders, 67 CheckDestroy: testAccCheckScalewayServerDestroy, 68 Steps: []resource.TestStep{ 69 resource.TestStep{ 70 Config: testAccCheckScalewayServerVolumeConfig, 71 Check: resource.ComposeTestCheckFunc( 72 testAccCheckScalewayServerExists("scaleway_server.base"), 73 testAccCheckScalewayServerAttributes("scaleway_server.base"), 74 resource.TestCheckResourceAttr( 75 "scaleway_server.base", "type", "C1"), 76 resource.TestCheckResourceAttr( 77 "scaleway_server.base", "volume.#", "2"), 78 resource.TestCheckResourceAttrSet( 79 "scaleway_server.base", "volume.0.volume_id"), 80 resource.TestCheckResourceAttr( 81 "scaleway_server.base", "volume.0.type", "l_ssd"), 82 resource.TestCheckResourceAttr( 83 "scaleway_server.base", "volume.0.size_in_gb", "20"), 84 resource.TestCheckResourceAttrSet( 85 "scaleway_server.base", "volume.1.volume_id"), 86 resource.TestCheckResourceAttr( 87 "scaleway_server.base", "volume.1.type", "l_ssd"), 88 resource.TestCheckResourceAttr( 89 "scaleway_server.base", "volume.1.size_in_gb", "30"), 90 ), 91 }, 92 }, 93 }) 94 } 95 96 func TestAccScalewayServer_SecurityGroup(t *testing.T) { 97 resource.Test(t, resource.TestCase{ 98 PreCheck: func() { testAccPreCheck(t) }, 99 Providers: testAccProviders, 100 CheckDestroy: testAccCheckScalewayServerDestroy, 101 Steps: []resource.TestStep{ 102 resource.TestStep{ 103 Config: testAccCheckScalewayServerConfig_SecurityGroup, 104 Check: resource.ComposeTestCheckFunc( 105 testAccCheckScalewayServerExists("scaleway_server.base"), 106 testAccCheckScalewayServerSecurityGroup("scaleway_server.base", "blue"), 107 ), 108 }, 109 resource.TestStep{ 110 Config: testAccCheckScalewayServerConfig_SecurityGroup_Update, 111 Check: resource.ComposeTestCheckFunc( 112 testAccCheckScalewayServerExists("scaleway_server.base"), 113 testAccCheckScalewayServerSecurityGroup("scaleway_server.base", "red"), 114 ), 115 }, 116 }, 117 }) 118 } 119 120 func testAccCheckScalewayServerDestroy(s *terraform.State) error { 121 client := testAccProvider.Meta().(*Client).scaleway 122 123 for _, rs := range s.RootModule().Resources { 124 if rs.Type != "scaleway" { 125 continue 126 } 127 128 _, err := client.GetServer(rs.Primary.ID) 129 130 if err == nil { 131 return fmt.Errorf("Server still exists") 132 } 133 } 134 135 return nil 136 } 137 138 func testAccCheckScalewayServerIPAttachmentAttributes(ipName, serverName string) resource.TestCheckFunc { 139 return func(s *terraform.State) error { 140 ip, ok := s.RootModule().Resources[ipName] 141 if !ok { 142 return fmt.Errorf("Unknown scaleway_ip resource: %s", ipName) 143 } 144 145 server, ok := s.RootModule().Resources[serverName] 146 if !ok { 147 return fmt.Errorf("Unknown scaleway_server resource: %s", serverName) 148 } 149 150 client := testAccProvider.Meta().(*Client).scaleway 151 152 res, err := client.GetIP(ip.Primary.ID) 153 if err != nil { 154 return err 155 } 156 if res.IP.Server == nil || res.IP.Server.Identifier != server.Primary.ID { 157 return fmt.Errorf("IP %q is not attached to server %q", ip.Primary.ID, server.Primary.ID) 158 } 159 160 return nil 161 } 162 } 163 164 func testAccCheckScalewayServerIPDetachmentAttributes(n string) resource.TestCheckFunc { 165 return func(s *terraform.State) error { 166 rs, ok := s.RootModule().Resources[n] 167 if !ok { 168 return fmt.Errorf("Unknown resource: %s", n) 169 } 170 171 client := testAccProvider.Meta().(*Client).scaleway 172 server, err := client.GetServer(rs.Primary.ID) 173 if err != nil { 174 return err 175 } 176 177 if server.PublicAddress.Identifier != "" { 178 return fmt.Errorf("Expected server to have no public IP but got %q", server.PublicAddress.Identifier) 179 } 180 return nil 181 } 182 } 183 184 func testAccCheckScalewayServerAttributes(n string) resource.TestCheckFunc { 185 return func(s *terraform.State) error { 186 rs, ok := s.RootModule().Resources[n] 187 if !ok { 188 return fmt.Errorf("Unknown resource: %s", n) 189 } 190 191 client := testAccProvider.Meta().(*Client).scaleway 192 server, err := client.GetServer(rs.Primary.ID) 193 194 if err != nil { 195 return err 196 } 197 198 if server.Name != "test" { 199 return fmt.Errorf("Server has wrong name") 200 } 201 if server.Image.Identifier != armImageIdentifier { 202 return fmt.Errorf("Wrong server image") 203 } 204 if server.CommercialType != "C1" { 205 return fmt.Errorf("Wrong server type") 206 } 207 208 return nil 209 } 210 } 211 212 func testAccCheckScalewayServerSecurityGroup(n, securityGroupName string) resource.TestCheckFunc { 213 return func(s *terraform.State) error { 214 rs, ok := s.RootModule().Resources[n] 215 if !ok { 216 return fmt.Errorf("Unknown resource: %s", n) 217 } 218 219 client := testAccProvider.Meta().(*Client).scaleway 220 server, err := client.GetServer(rs.Primary.ID) 221 222 if err != nil { 223 return err 224 } 225 226 if server.SecurityGroup.Name != securityGroupName { 227 return fmt.Errorf("Server has wrong security_group") 228 } 229 230 return nil 231 } 232 } 233 234 func testAccCheckScalewayServerExists(n string) resource.TestCheckFunc { 235 return func(s *terraform.State) error { 236 rs, ok := s.RootModule().Resources[n] 237 238 if !ok { 239 return fmt.Errorf("Not found: %s", n) 240 } 241 242 if rs.Primary.ID == "" { 243 return fmt.Errorf("No Server ID is set") 244 } 245 246 client := testAccProvider.Meta().(*Client).scaleway 247 server, err := client.GetServer(rs.Primary.ID) 248 249 if err != nil { 250 return err 251 } 252 253 if server.Identifier != rs.Primary.ID { 254 return fmt.Errorf("Record not found") 255 } 256 257 return nil 258 } 259 } 260 261 var armImageIdentifier = "5faef9cd-ea9b-4a63-9171-9e26bec03dbc" 262 263 var testAccCheckScalewayServerConfig = fmt.Sprintf(` 264 resource "scaleway_server" "base" { 265 name = "test" 266 # ubuntu 14.04 267 image = "%s" 268 type = "C1" 269 tags = [ "terraform-test" ] 270 }`, armImageIdentifier) 271 272 var testAccCheckScalewayServerConfig_IPAttachment = fmt.Sprintf(` 273 resource "scaleway_ip" "base" {} 274 275 resource "scaleway_server" "base" { 276 name = "test" 277 # ubuntu 14.04 278 image = "%s" 279 type = "C1" 280 tags = [ "terraform-test" ] 281 public_ip = "${scaleway_ip.base.ip}" 282 }`, armImageIdentifier) 283 284 var testAccCheckScalewayServerConfig_IPDetachment = fmt.Sprintf(` 285 resource "scaleway_server" "base" { 286 name = "test" 287 # ubuntu 14.04 288 image = "%s" 289 type = "C1" 290 tags = [ "terraform-test" ] 291 }`, armImageIdentifier) 292 293 var testAccCheckScalewayServerVolumeConfig = fmt.Sprintf(` 294 resource "scaleway_server" "base" { 295 name = "test" 296 # ubuntu 14.04 297 image = "%s" 298 type = "C1" 299 tags = [ "terraform-test" ] 300 301 volume { 302 size_in_gb = 20 303 type = "l_ssd" 304 } 305 306 volume { 307 size_in_gb = 30 308 type = "l_ssd" 309 } 310 }`, armImageIdentifier) 311 312 var testAccCheckScalewayServerConfig_SecurityGroup = fmt.Sprintf(` 313 resource "scaleway_security_group" "blue" { 314 name = "blue" 315 description = "blue" 316 } 317 318 resource "scaleway_security_group" "red" { 319 name = "red" 320 description = "red" 321 } 322 323 resource "scaleway_server" "base" { 324 name = "test" 325 # ubuntu 14.04 326 image = "%s" 327 type = "C1" 328 tags = [ "terraform-test" ] 329 security_group = "${scaleway_security_group.blue.id}" 330 }`, armImageIdentifier) 331 332 var testAccCheckScalewayServerConfig_SecurityGroup_Update = fmt.Sprintf(` 333 resource "scaleway_security_group" "blue" { 334 name = "blue" 335 description = "blue" 336 } 337 338 resource "scaleway_security_group" "red" { 339 name = "red" 340 description = "red" 341 } 342 343 resource "scaleway_server" "base" { 344 name = "test" 345 # ubuntu 14.04 346 image = "%s" 347 type = "C1" 348 tags = [ "terraform-test" ] 349 security_group = "${scaleway_security_group.red.id}" 350 }`, armImageIdentifier)