func (d *Driver) Start() error { machineState, err := d.GetState() if err != nil { return err } switch machineState { case state.Running: log.Infof("VM %s has already been started", d.MachineName) return nil case state.Stopped: // TODO add transactional or error handling in the following steps vcConn := NewVcConn(d) err := vcConn.VMPowerOn() if err != nil { return err } // this step waits for the vm to start and fetch its ip address; // this guarantees that the opem-vmtools has started working... _, err = vcConn.VMFetchIP() if err != nil { return err } d.IPAddress, err = d.GetIP() return err } return errors.NewInvalidStateError(d.MachineName) }
func (d *Driver) GetIP() (string, error) { status, err := d.GetState() if status != state.Running { return "", errors.NewInvalidStateError(d.MachineName) } vcConn := NewVcConn(d) rawIP, err := vcConn.VMFetchIP() if err != nil { return "", err } ip := strings.Trim(strings.Split(rawIP, "\n")[0], " ") return ip, nil }