(ctx context.Context, newVM vmConfig)
| 181 | } |
| 182 | |
| 183 | func vCenterConnect(ctx context.Context, newVM vmConfig) (*govmomi.Client, *object.Datastore, *object.DatacenterFolders, *object.HostSystem, object.NetworkReference, *object.ResourcePool) { |
| 184 | |
| 185 | // Parse URL from string |
| 186 | u, err := url.Parse(*newVM.vCenterURL) |
| 187 | if err != nil { |
| 188 | log.Fatalf("URL can't be parsed, ensure it is https://username:password/<address>/sdk %v", err) |
| 189 | } |
| 190 | |
| 191 | // Connect and log in to ESX or vCenter |
| 192 | c, err := govmomi.NewClient(ctx, u, true) |
| 193 | if err != nil { |
| 194 | log.Fatalf("Error logging into vCenter, check address and credentials %v", err) |
| 195 | } |
| 196 | |
| 197 | // Create a new finder that will discover the defaults and are looked for Networks/Datastores |
| 198 | f := find.NewFinder(c.Client, true) |
| 199 | |
| 200 | // Find one and only datacenter, not sure how VMware linked mode will work |
| 201 | dc, err := f.DatacenterOrDefault(ctx, *newVM.dcName) |
| 202 | if err != nil { |
| 203 | log.Fatalf("No Datacenter instance could be found inside of vCenter %v", err) |
| 204 | } |
| 205 | |
| 206 | // Make future calls local to this datacenter |
| 207 | f.SetDatacenter(dc) |
| 208 | |
| 209 | // Find Datastore/Network |
| 210 | dss, err := f.DatastoreOrDefault(ctx, *newVM.dsName) |
| 211 | if err != nil { |
| 212 | log.Fatalf("Datastore [%s], could not be found", *newVM.dsName) |
| 213 | } |
| 214 | |
| 215 | folders, err := dc.Folders(ctx) |
| 216 | if err != nil { |
| 217 | log.Fatalln("Error locating default datacenter folder") |
| 218 | } |
| 219 | |
| 220 | // This code is shared between Push/Run, a network isn't needed for Pushing an image |
| 221 | var net object.NetworkReference |
| 222 | if newVM.networkName != nil && *newVM.networkName != "" { |
| 223 | net, err = f.NetworkOrDefault(ctx, *newVM.networkName) |
| 224 | if err != nil { |
| 225 | log.Fatalf("Network [%s], could not be found", *newVM.networkName) |
| 226 | } |
| 227 | } |
| 228 | |
| 229 | // Check to see if a host has been specified |
| 230 | var hs *object.HostSystem |
| 231 | if *newVM.vSphereHost != "" { |
| 232 | // Find the selected host |
| 233 | hs, err = f.HostSystem(ctx, *newVM.vSphereHost) |
| 234 | if err != nil { |
| 235 | log.Fatalf("vSphere host [%s], could not be found", *newVM.vSphereHost) |
| 236 | } |
| 237 | } else { |
| 238 | allHosts, err := f.HostSystemList(ctx, "*/*") |
| 239 | if err != nil || len(allHosts) == 0 { |
| 240 | log.Fatalf("No vSphere hosts could be found on vCenter server") |
no outgoing calls
no test coverage detected