github.com/jsoriano/terraform@v0.6.7-0.20151026070445-8b70867fdd95/builtin/providers/vsphere/resource_vsphere_virtual_machine_test.go (about) 1 package vsphere 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 "github.com/vmware/govmomi" 11 "github.com/vmware/govmomi/find" 12 "github.com/vmware/govmomi/object" 13 "golang.org/x/net/context" 14 ) 15 16 func TestAccVSphereVirtualMachine_basic(t *testing.T) { 17 var vm virtualMachine 18 datacenter := os.Getenv("VSPHERE_DATACENTER") 19 cluster := os.Getenv("VSPHERE_CLUSTER") 20 datastore := os.Getenv("VSPHERE_DATASTORE") 21 template := os.Getenv("VSPHERE_TEMPLATE") 22 gateway := os.Getenv("VSPHERE_NETWORK_GATEWAY") 23 label := os.Getenv("VSPHERE_NETWORK_LABEL") 24 ip_address := os.Getenv("VSPHERE_NETWORK_IP_ADDRESS") 25 26 resource.Test(t, resource.TestCase{ 27 PreCheck: func() { testAccPreCheck(t) }, 28 Providers: testAccProviders, 29 CheckDestroy: testAccCheckVSphereVirtualMachineDestroy, 30 Steps: []resource.TestStep{ 31 resource.TestStep{ 32 Config: fmt.Sprintf( 33 testAccCheckVSphereVirtualMachineConfig_basic, 34 datacenter, 35 cluster, 36 gateway, 37 label, 38 ip_address, 39 datastore, 40 template, 41 ), 42 Check: resource.ComposeTestCheckFunc( 43 testAccCheckVSphereVirtualMachineExists("vsphere_virtual_machine.foo", &vm), 44 resource.TestCheckResourceAttr( 45 "vsphere_virtual_machine.foo", "name", "terraform-test"), 46 resource.TestCheckResourceAttr( 47 "vsphere_virtual_machine.foo", "datacenter", datacenter), 48 resource.TestCheckResourceAttr( 49 "vsphere_virtual_machine.foo", "vcpu", "2"), 50 resource.TestCheckResourceAttr( 51 "vsphere_virtual_machine.foo", "memory", "4096"), 52 resource.TestCheckResourceAttr( 53 "vsphere_virtual_machine.foo", "disk.#", "2"), 54 resource.TestCheckResourceAttr( 55 "vsphere_virtual_machine.foo", "disk.0.datastore", datastore), 56 resource.TestCheckResourceAttr( 57 "vsphere_virtual_machine.foo", "disk.0.template", template), 58 resource.TestCheckResourceAttr( 59 "vsphere_virtual_machine.foo", "network_interface.#", "1"), 60 resource.TestCheckResourceAttr( 61 "vsphere_virtual_machine.foo", "network_interface.0.label", label), 62 ), 63 }, 64 }, 65 }) 66 } 67 68 func TestAccVSphereVirtualMachine_dhcp(t *testing.T) { 69 var vm virtualMachine 70 datacenter := os.Getenv("VSPHERE_DATACENTER") 71 cluster := os.Getenv("VSPHERE_CLUSTER") 72 datastore := os.Getenv("VSPHERE_DATASTORE") 73 template := os.Getenv("VSPHERE_TEMPLATE") 74 label := os.Getenv("VSPHERE_NETWORK_LABEL_DHCP") 75 password := os.Getenv("VSPHERE_VM_PASSWORD") 76 77 resource.Test(t, resource.TestCase{ 78 PreCheck: func() { testAccPreCheck(t) }, 79 Providers: testAccProviders, 80 CheckDestroy: testAccCheckVSphereVirtualMachineDestroy, 81 Steps: []resource.TestStep{ 82 resource.TestStep{ 83 Config: fmt.Sprintf( 84 testAccCheckVSphereVirtualMachineConfig_dhcp, 85 datacenter, 86 cluster, 87 label, 88 datastore, 89 template, 90 password, 91 ), 92 Check: resource.ComposeTestCheckFunc( 93 testAccCheckVSphereVirtualMachineExists("vsphere_virtual_machine.bar", &vm), 94 resource.TestCheckResourceAttr( 95 "vsphere_virtual_machine.bar", "name", "terraform-test"), 96 resource.TestCheckResourceAttr( 97 "vsphere_virtual_machine.bar", "datacenter", datacenter), 98 resource.TestCheckResourceAttr( 99 "vsphere_virtual_machine.bar", "vcpu", "2"), 100 resource.TestCheckResourceAttr( 101 "vsphere_virtual_machine.bar", "memory", "4096"), 102 resource.TestCheckResourceAttr( 103 "vsphere_virtual_machine.bar", "disk.#", "1"), 104 resource.TestCheckResourceAttr( 105 "vsphere_virtual_machine.bar", "disk.0.datastore", datastore), 106 resource.TestCheckResourceAttr( 107 "vsphere_virtual_machine.bar", "disk.0.template", template), 108 resource.TestCheckResourceAttr( 109 "vsphere_virtual_machine.bar", "network_interface.#", "1"), 110 resource.TestCheckResourceAttr( 111 "vsphere_virtual_machine.bar", "network_interface.0.label", label), 112 ), 113 }, 114 }, 115 }) 116 } 117 118 func testAccCheckVSphereVirtualMachineDestroy(s *terraform.State) error { 119 client := testAccProvider.Meta().(*govmomi.Client) 120 finder := find.NewFinder(client.Client, true) 121 122 for _, rs := range s.RootModule().Resources { 123 if rs.Type != "vsphere_virtual_machine" { 124 continue 125 } 126 127 dc, err := finder.Datacenter(context.TODO(), rs.Primary.Attributes["datacenter"]) 128 if err != nil { 129 return fmt.Errorf("error %s", err) 130 } 131 132 dcFolders, err := dc.Folders(context.TODO()) 133 if err != nil { 134 return fmt.Errorf("error %s", err) 135 } 136 137 _, err = object.NewSearchIndex(client.Client).FindChild(context.TODO(), dcFolders.VmFolder, rs.Primary.Attributes["name"]) 138 if err == nil { 139 return fmt.Errorf("Record still exists") 140 } 141 } 142 143 return nil 144 } 145 146 func testAccCheckVSphereVirtualMachineExists(n string, vm *virtualMachine) resource.TestCheckFunc { 147 return func(s *terraform.State) error { 148 rs, ok := s.RootModule().Resources[n] 149 if !ok { 150 return fmt.Errorf("Not found: %s", n) 151 } 152 153 if rs.Primary.ID == "" { 154 return fmt.Errorf("No ID is set") 155 } 156 157 client := testAccProvider.Meta().(*govmomi.Client) 158 finder := find.NewFinder(client.Client, true) 159 160 dc, err := finder.Datacenter(context.TODO(), rs.Primary.Attributes["datacenter"]) 161 if err != nil { 162 return fmt.Errorf("error %s", err) 163 } 164 165 dcFolders, err := dc.Folders(context.TODO()) 166 if err != nil { 167 return fmt.Errorf("error %s", err) 168 } 169 170 _, err = object.NewSearchIndex(client.Client).FindChild(context.TODO(), dcFolders.VmFolder, rs.Primary.Attributes["name"]) 171 /* 172 vmRef, err := client.SearchIndex().FindChild(dcFolders.VmFolder, rs.Primary.Attributes["name"]) 173 if err != nil { 174 return fmt.Errorf("error %s", err) 175 } 176 177 found := govmomi.NewVirtualMachine(client, vmRef.Reference()) 178 fmt.Printf("%v", found) 179 180 if found.Name != rs.Primary.ID { 181 return fmt.Errorf("Instance not found") 182 } 183 *instance = *found 184 */ 185 186 *vm = virtualMachine{ 187 name: rs.Primary.ID, 188 } 189 190 return nil 191 } 192 } 193 194 const testAccCheckVSphereVirtualMachineConfig_basic = ` 195 resource "vsphere_virtual_machine" "foo" { 196 name = "terraform-test" 197 datacenter = "%s" 198 cluster = "%s" 199 vcpu = 2 200 memory = 4096 201 gateway = "%s" 202 network_interface { 203 label = "%s" 204 ip_address = "%s" 205 subnet_mask = "255.255.255.0" 206 } 207 disk { 208 datastore = "%s" 209 template = "%s" 210 iops = 500 211 } 212 disk { 213 size = 1 214 iops = 500 215 } 216 } 217 ` 218 219 const testAccCheckVSphereVirtualMachineConfig_dhcp = ` 220 resource "vsphere_virtual_machine" "bar" { 221 name = "terraform-test" 222 datacenter = "%s" 223 cluster = "%s" 224 vcpu = 2 225 memory = 4096 226 network_interface { 227 label = "%s" 228 } 229 disk { 230 datastore = "%s" 231 template = "%s" 232 } 233 234 connection { 235 host = "${self.network_interface.0.ip_address}" 236 user = "root" 237 password = "%s" 238 } 239 } 240 `