func (c *rackspaceFirewaller) getInstanceConfigurator(inst instance.Instance) ([]network.Address, common.InstanceConfigurator, error) { addresses, err := inst.Addresses() if err != nil { return nil, nil, errors.Trace(err) } if len(addresses) == 0 { return addresses, nil, errors.New("No addresses found") } client := common.NewSshInstanceConfigurator(addresses[0].Value) return addresses, client, err }
func (inst *environInstance) getInstanceConfigurator() ([]network.Address, common.InstanceConfigurator, error) { addresses, err := inst.Addresses() if err != nil { return nil, nil, errors.Trace(err) } var localAddr string for _, addr := range addresses { if addr.Scope == network.ScopeCloudLocal { localAddr = addr.Value break } } client := common.NewSshInstanceConfigurator(localAddr) return addresses, client, err }
// CreateInstance create new vm in vsphere and run it func (c *client) CreateInstance(ecfg *environConfig, spec *instanceSpec) (*mo.VirtualMachine, error) { manager := &ovaImportManager{client: c} vm, err := manager.importOva(ecfg, spec) if err != nil { return nil, errors.Annotatef(err, "Failed to import OVA file") } task, err := vm.PowerOn(context.TODO()) if err != nil { return nil, errors.Trace(err) } taskInfo, err := task.WaitForResult(context.TODO(), nil) if err != nil { return nil, errors.Trace(err) } // We assign public ip address for all instances. // We can't assign public ip only when OpenPort is called, as assigning // an ip address via reconfiguring the VM makes it inaccessible to the // controller. if ecfg.externalNetwork() != "" { ip, err := vm.WaitForIP(context.TODO()) if err != nil { return nil, errors.Trace(err) } client := common.NewSshInstanceConfigurator(ip) err = client.ConfigureExternalIpAddress(spec.apiPort) if err != nil { return nil, errors.Trace(err) } } var res mo.VirtualMachine err = c.connection.RetrieveOne(context.TODO(), *taskInfo.Entity, nil, &res) if err != nil { return nil, errors.Trace(err) } return &res, nil }