github.com/ggiamarchi/terraform@v0.3.7-0.20150607194748-ed2a66a46a71/builtin/providers/cloudstack/resource_cloudstack_instance_test.go (about) 1 package cloudstack 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/resource" 8 "github.com/hashicorp/terraform/terraform" 9 "github.com/xanzy/go-cloudstack/cloudstack" 10 ) 11 12 func TestAccCloudStackInstance_basic(t *testing.T) { 13 var instance cloudstack.VirtualMachine 14 15 resource.Test(t, resource.TestCase{ 16 PreCheck: func() { testAccPreCheck(t) }, 17 Providers: testAccProviders, 18 CheckDestroy: testAccCheckCloudStackInstanceDestroy, 19 Steps: []resource.TestStep{ 20 resource.TestStep{ 21 Config: testAccCloudStackInstance_basic, 22 Check: resource.ComposeTestCheckFunc( 23 testAccCheckCloudStackInstanceExists( 24 "cloudstack_instance.foobar", &instance), 25 testAccCheckCloudStackInstanceAttributes(&instance), 26 resource.TestCheckResourceAttr( 27 "cloudstack_instance.foobar", 28 "user_data", 29 "0cf3dcdc356ec8369494cb3991985ecd5296cdd5"), 30 resource.TestCheckResourceAttr( 31 "cloudstack_instance.foobar", 32 "keypair", 33 CLOUDSTACK_SSH_KEYPAIR), 34 ), 35 }, 36 }, 37 }) 38 } 39 40 func TestAccCloudStackInstance_update(t *testing.T) { 41 var instance cloudstack.VirtualMachine 42 43 resource.Test(t, resource.TestCase{ 44 PreCheck: func() { testAccPreCheck(t) }, 45 Providers: testAccProviders, 46 CheckDestroy: testAccCheckCloudStackInstanceDestroy, 47 Steps: []resource.TestStep{ 48 resource.TestStep{ 49 Config: testAccCloudStackInstance_basic, 50 Check: resource.ComposeTestCheckFunc( 51 testAccCheckCloudStackInstanceExists( 52 "cloudstack_instance.foobar", &instance), 53 testAccCheckCloudStackInstanceAttributes(&instance), 54 resource.TestCheckResourceAttr( 55 "cloudstack_instance.foobar", 56 "user_data", 57 "0cf3dcdc356ec8369494cb3991985ecd5296cdd5"), 58 resource.TestCheckResourceAttr( 59 "cloudstack_instance.foobar", 60 "keypair", 61 CLOUDSTACK_SSH_KEYPAIR), 62 ), 63 }, 64 65 resource.TestStep{ 66 Config: testAccCloudStackInstance_renameAndResize, 67 Check: resource.ComposeTestCheckFunc( 68 testAccCheckCloudStackInstanceExists( 69 "cloudstack_instance.foobar", &instance), 70 testAccCheckCloudStackInstanceRenamedAndResized(&instance), 71 resource.TestCheckResourceAttr( 72 "cloudstack_instance.foobar", "display_name", "terraform-updated"), 73 resource.TestCheckResourceAttr( 74 "cloudstack_instance.foobar", "service_offering", CLOUDSTACK_SERVICE_OFFERING_2), 75 ), 76 }, 77 }, 78 }) 79 } 80 81 func TestAccCloudStackInstance_fixedIP(t *testing.T) { 82 var instance cloudstack.VirtualMachine 83 84 resource.Test(t, resource.TestCase{ 85 PreCheck: func() { testAccPreCheck(t) }, 86 Providers: testAccProviders, 87 CheckDestroy: testAccCheckCloudStackInstanceDestroy, 88 Steps: []resource.TestStep{ 89 resource.TestStep{ 90 Config: testAccCloudStackInstance_fixedIP, 91 Check: resource.ComposeTestCheckFunc( 92 testAccCheckCloudStackInstanceExists( 93 "cloudstack_instance.foobar", &instance), 94 resource.TestCheckResourceAttr( 95 "cloudstack_instance.foobar", "ipaddress", CLOUDSTACK_NETWORK_1_IPADDRESS), 96 ), 97 }, 98 }, 99 }) 100 } 101 102 func testAccCheckCloudStackInstanceExists( 103 n string, instance *cloudstack.VirtualMachine) resource.TestCheckFunc { 104 return func(s *terraform.State) error { 105 rs, ok := s.RootModule().Resources[n] 106 if !ok { 107 return fmt.Errorf("Not found: %s", n) 108 } 109 110 if rs.Primary.ID == "" { 111 return fmt.Errorf("No instance ID is set") 112 } 113 114 cs := testAccProvider.Meta().(*cloudstack.CloudStackClient) 115 vm, _, err := cs.VirtualMachine.GetVirtualMachineByID(rs.Primary.ID) 116 117 if err != nil { 118 return err 119 } 120 121 if vm.Id != rs.Primary.ID { 122 return fmt.Errorf("Instance not found") 123 } 124 125 *instance = *vm 126 127 return nil 128 } 129 } 130 131 func testAccCheckCloudStackInstanceAttributes( 132 instance *cloudstack.VirtualMachine) resource.TestCheckFunc { 133 return func(s *terraform.State) error { 134 135 if instance.Name != "terraform-test" { 136 return fmt.Errorf("Bad name: %s", instance.Name) 137 } 138 139 if instance.Displayname != "terraform" { 140 return fmt.Errorf("Bad display name: %s", instance.Displayname) 141 } 142 143 if instance.Serviceofferingname != CLOUDSTACK_SERVICE_OFFERING_1 { 144 return fmt.Errorf("Bad service offering: %s", instance.Serviceofferingname) 145 } 146 147 if instance.Templatename != CLOUDSTACK_TEMPLATE { 148 return fmt.Errorf("Bad template: %s", instance.Templatename) 149 } 150 151 if instance.Nic[0].Networkname != CLOUDSTACK_NETWORK_1 { 152 return fmt.Errorf("Bad network: %s", instance.Nic[0].Networkname) 153 } 154 155 return nil 156 } 157 } 158 159 func testAccCheckCloudStackInstanceRenamedAndResized( 160 instance *cloudstack.VirtualMachine) resource.TestCheckFunc { 161 return func(s *terraform.State) error { 162 163 if instance.Displayname != "terraform-updated" { 164 return fmt.Errorf("Bad display name: %s", instance.Displayname) 165 } 166 167 if instance.Serviceofferingname != CLOUDSTACK_SERVICE_OFFERING_2 { 168 return fmt.Errorf("Bad service offering: %s", instance.Serviceofferingname) 169 } 170 171 return nil 172 } 173 } 174 175 func testAccCheckCloudStackInstanceDestroy(s *terraform.State) error { 176 cs := testAccProvider.Meta().(*cloudstack.CloudStackClient) 177 178 for _, rs := range s.RootModule().Resources { 179 if rs.Type != "cloudstack_instance" { 180 continue 181 } 182 183 if rs.Primary.ID == "" { 184 return fmt.Errorf("No instance ID is set") 185 } 186 187 p := cs.VirtualMachine.NewDestroyVirtualMachineParams(rs.Primary.ID) 188 _, err := cs.VirtualMachine.DestroyVirtualMachine(p) 189 190 if err != nil { 191 return fmt.Errorf( 192 "Error deleting instance (%s): %s", 193 rs.Primary.ID, err) 194 } 195 } 196 197 return nil 198 } 199 200 var testAccCloudStackInstance_basic = fmt.Sprintf(` 201 resource "cloudstack_instance" "foobar" { 202 name = "terraform-test" 203 display_name = "terraform" 204 service_offering= "%s" 205 network = "%s" 206 template = "%s" 207 zone = "%s" 208 keypair = "%s" 209 user_data = "foobar\nfoo\nbar" 210 expunge = true 211 }`, 212 CLOUDSTACK_SERVICE_OFFERING_1, 213 CLOUDSTACK_NETWORK_1, 214 CLOUDSTACK_TEMPLATE, 215 CLOUDSTACK_ZONE, 216 CLOUDSTACK_SSH_KEYPAIR) 217 218 var testAccCloudStackInstance_renameAndResize = fmt.Sprintf(` 219 resource "cloudstack_instance" "foobar" { 220 name = "terraform-test" 221 display_name = "terraform-updated" 222 service_offering= "%s" 223 network = "%s" 224 template = "%s" 225 zone = "%s" 226 keypair = "%s" 227 user_data = "foobar\nfoo\nbar" 228 expunge = true 229 }`, 230 CLOUDSTACK_SERVICE_OFFERING_2, 231 CLOUDSTACK_NETWORK_1, 232 CLOUDSTACK_TEMPLATE, 233 CLOUDSTACK_ZONE, 234 CLOUDSTACK_SSH_KEYPAIR) 235 236 var testAccCloudStackInstance_fixedIP = fmt.Sprintf(` 237 resource "cloudstack_instance" "foobar" { 238 name = "terraform-test" 239 display_name = "terraform" 240 service_offering= "%s" 241 network = "%s" 242 ipaddress = "%s" 243 template = "%s" 244 zone = "%s" 245 expunge = true 246 }`, 247 CLOUDSTACK_SERVICE_OFFERING_1, 248 CLOUDSTACK_NETWORK_1, 249 CLOUDSTACK_NETWORK_1_IPADDRESS, 250 CLOUDSTACK_TEMPLATE, 251 CLOUDSTACK_ZONE)