@@ -7,8 +7,7 @@ package vmwarevcloudair
77import (
88 "fmt"
99 "io/ioutil"
10- "os/exec"
11- "path"
10+ "path/filepath"
1211 "strings"
1312
1413 "github.com/vmware/govcloudair"
@@ -17,6 +16,7 @@ import (
1716 "github.com/codegangsta/cli"
1817 "github.com/docker/docker/utils"
1918 "github.com/docker/machine/drivers"
19+ "github.com/docker/machine/provider"
2020 "github.com/docker/machine/ssh"
2121 "github.com/docker/machine/state"
2222)
@@ -36,6 +36,7 @@ type Driver struct {
3636 Catalog string
3737 CatalogItem string
3838 MachineName string
39+ SSHUser string
3940 SSHPort int
4041 DockerPort int
4142 Provision bool
@@ -61,6 +62,7 @@ type CreateFlags struct {
6162 Catalog * string
6263 CatalogItem * string
6364 Name * string
65+ SSHUser string
6466 SSHPort * int
6567 DockerPort * int
6668 Provision * bool
@@ -166,55 +168,88 @@ func NewDriver(machineName string, storePath string, caCert string, privateKey s
166168 return driver , nil
167169}
168170
171+ func (d * Driver ) AuthorizePort (ports []* drivers.Port ) error {
172+ return nil
173+ }
174+
175+ func (d * Driver ) DeauthorizePort (ports []* drivers.Port ) error {
176+ return nil
177+ }
178+
179+ func (d * Driver ) GetMachineName () string {
180+ return d .MachineName
181+ }
182+
183+ func (d * Driver ) GetSSHHostname () (string , error ) {
184+ return d .GetIP ()
185+ }
186+
187+ func (d * Driver ) GetSSHKeyPath () string {
188+ return filepath .Join (d .storePath , "id_rsa" )
189+ }
190+
191+ func (d * Driver ) GetSSHPort () (int , error ) {
192+ return d .SSHPort , nil
193+ }
194+
195+ func (d * Driver ) GetSSHUsername () string {
196+ return d .SSHUser
197+ }
198+
199+ func (d * Driver ) GetProviderType () provider.ProviderType {
200+ return provider .Remote
201+ }
202+
169203// Driver interface implementation
170- func (driver * Driver ) DriverName () string {
204+ func (d * Driver ) DriverName () string {
171205 return "vmwarevcloudair"
172206}
173207
174- func (driver * Driver ) SetConfigFromFlags (flags drivers.DriverOptions ) error {
208+ func (d * Driver ) SetConfigFromFlags (flags drivers.DriverOptions ) error {
175209
176- driver .UserName = flags .String ("vmwarevcloudair-username" )
177- driver .UserPassword = flags .String ("vmwarevcloudair-password" )
178- driver .VDCID = flags .String ("vmwarevcloudair-vdcid" )
179- driver .PublicIP = flags .String ("vmwarevcloudair-publicip" )
180- driver .SwarmMaster = flags .Bool ("swarm-master" )
181- driver .SwarmHost = flags .String ("swarm-host" )
182- driver .SwarmDiscovery = flags .String ("swarm-discovery" )
210+ d .UserName = flags .String ("vmwarevcloudair-username" )
211+ d .UserPassword = flags .String ("vmwarevcloudair-password" )
212+ d .VDCID = flags .String ("vmwarevcloudair-vdcid" )
213+ d .PublicIP = flags .String ("vmwarevcloudair-publicip" )
214+ d .SwarmMaster = flags .Bool ("swarm-master" )
215+ d .SwarmHost = flags .String ("swarm-host" )
216+ d .SwarmDiscovery = flags .String ("swarm-discovery" )
183217
184218 // Check for required Params
185- if driver .UserName == "" || driver .UserPassword == "" || driver .VDCID == "" || driver .PublicIP == "" {
219+ if d .UserName == "" || d .UserPassword == "" || d .VDCID == "" || d .PublicIP == "" {
186220 return fmt .Errorf ("Please specify vcloudair mandatory params using options: -vmwarevcloudair-username -vmwarevcloudair-password -vmwarevcloudair-vdcid and -vmwarevcloudair-publicip" )
187221 }
188222
189223 // If ComputeID is not set we're using a VPC, hence setting ComputeID = VDCID
190224 if flags .String ("vmwarevcloudair-computeid" ) == "" {
191- driver .ComputeID = flags .String ("vmwarevcloudair-vdcid" )
225+ d .ComputeID = flags .String ("vmwarevcloudair-vdcid" )
192226 } else {
193- driver .ComputeID = flags .String ("vmwarevcloudair-computeid" )
227+ d .ComputeID = flags .String ("vmwarevcloudair-computeid" )
194228 }
195229
196230 // If the Org VDC Network is empty, set it to the default routed network.
197231 if flags .String ("vmwarevcloudair-orgvdcnetwork" ) == "" {
198- driver .OrgVDCNet = flags .String ("vmwarevcloudair-vdcid" ) + "-default-routed"
232+ d .OrgVDCNet = flags .String ("vmwarevcloudair-vdcid" ) + "-default-routed"
199233 } else {
200- driver .OrgVDCNet = flags .String ("vmwarevcloudair-orgvdcnetwork" )
234+ d .OrgVDCNet = flags .String ("vmwarevcloudair-orgvdcnetwork" )
201235 }
202236
203237 // If the Edge Gateway is empty, just set it to the default edge gateway.
204238 if flags .String ("vmwarevcloudair-edgegateway" ) == "" {
205- driver .EdgeGateway = flags .String ("vmwarevcloudair-vdcid" )
239+ d .EdgeGateway = flags .String ("vmwarevcloudair-vdcid" )
206240 } else {
207- driver .EdgeGateway = flags .String ("vmwarevcloudair-edgegateway" )
241+ d .EdgeGateway = flags .String ("vmwarevcloudair-edgegateway" )
208242 }
209243
210- driver .Catalog = flags .String ("vmwarevcloudair-catalog" )
211- driver .CatalogItem = flags .String ("vmwarevcloudair-catalogitem" )
244+ d .Catalog = flags .String ("vmwarevcloudair-catalog" )
245+ d .CatalogItem = flags .String ("vmwarevcloudair-catalogitem" )
212246
213- driver .DockerPort = flags .Int ("vmwarevcloudair-docker-port" )
214- driver .SSHPort = flags .Int ("vmwarevcloudair-ssh-port" )
215- driver .Provision = flags .Bool ("vmwarevcloudair-provision" )
216- driver .CPUCount = flags .Int ("vmwarevcloudair-cpu-count" )
217- driver .MemorySize = flags .Int ("vmwarevcloudair-memory-size" )
247+ d .DockerPort = flags .Int ("vmwarevcloudair-docker-port" )
248+ d .SSHUser = "root"
249+ d .SSHPort = flags .Int ("vmwarevcloudair-ssh-port" )
250+ d .Provision = flags .Bool ("vmwarevcloudair-provision" )
251+ d .CPUCount = flags .Int ("vmwarevcloudair-cpu-count" )
252+ d .MemorySize = flags .Int ("vmwarevcloudair-memory-size" )
218253
219254 return nil
220255}
@@ -395,26 +430,10 @@ func (d *Driver) Create() error {
395430 return err
396431 }
397432
398- log .Info ("Configuring Machine..." )
399-
400- log .Debugf ("Setting hostname: %s" , d .MachineName )
401- cmd , err := d .GetSSHCommand (fmt .Sprintf (
402- "echo \" 127.0.0.1 %s\" | sudo tee -a /etc/hosts && sudo hostname %s && echo \" %s\" | sudo tee /etc/hostname" ,
403- d .MachineName ,
404- d .MachineName ,
405- d .MachineName ,
406- ))
407- if err != nil {
408- return err
409- }
410- if err := cmd .Run (); err != nil {
411- return err
412- }
413-
414433 connTest := "ping -c 3 www.google.com >/dev/null 2>&1 && ( echo \" Connectivity and DNS tests passed.\" ) || ( echo \" Connectivity and DNS tests failed, trying to add Nameserver to resolv.conf\" ; echo \" nameserver 8.8.8.8\" >> /etc/resolv.conf )"
415434
416435 log .Debugf ("Connectivity and DNS sanity test..." )
417- cmd , err = d . GetSSHCommand ( connTest )
436+ cmd , err := drivers . GetSSHCommandFromDriver ( d , connTest )
418437 if err != nil {
419438 return err
420439 }
@@ -437,7 +456,6 @@ func (d *Driver) Create() error {
437456}
438457
439458func (d * Driver ) Remove () error {
440-
441459 p , err := govcloudair .NewClient ()
442460 if err != nil {
443461 return err
@@ -660,7 +678,6 @@ func (d *Driver) Restart() error {
660678}
661679
662680func (d * Driver ) Kill () error {
663-
664681 p , err := govcloudair .NewClient ()
665682 if err != nil {
666683 return err
@@ -703,58 +720,6 @@ func (d *Driver) Kill() error {
703720
704721}
705722
706- func (d * Driver ) StartDocker () error {
707- log .Debug ("Starting Docker..." )
708-
709- cmd , err := d .GetSSHCommand ("sudo service docker start" )
710- if err != nil {
711- return err
712- }
713- if err := cmd .Run (); err != nil {
714- return err
715- }
716-
717- return nil
718- }
719-
720- func (d * Driver ) StopDocker () error {
721- log .Debug ("Stopping Docker..." )
722-
723- cmd , err := d .GetSSHCommand ("sudo service docker stop" )
724- if err != nil {
725- return err
726- }
727- if err := cmd .Run (); err != nil {
728- return err
729- }
730-
731- return nil
732- }
733-
734- func (d * Driver ) GetDockerConfigDir () string {
735- return dockerConfigDir
736- }
737-
738- func (d * Driver ) Upgrade () error {
739- log .Debugf ("Upgrading Docker" )
740-
741- cmd , err := d .GetSSHCommand ("sudo apt-get update && sudo apt-get install --upgrade lxc-docker" )
742- if err != nil {
743- return err
744-
745- }
746- if err := cmd .Run (); err != nil {
747- return err
748-
749- }
750-
751- return cmd .Run ()
752- }
753-
754- func (d * Driver ) GetSSHCommand (args ... string ) (* exec.Cmd , error ) {
755- return ssh .GetSSHCommand (d .PublicIP , d .SSHPort , "root" , d .sshKeyPath (), args ... ), nil
756- }
757-
758723// Helpers
759724
760725func generateVMName () string {
@@ -763,8 +728,7 @@ func generateVMName() string {
763728}
764729
765730func (d * Driver ) createSSHKey () (string , error ) {
766-
767- if err := ssh .GenerateSSHKey (d .sshKeyPath ()); err != nil {
731+ if err := ssh .GenerateSSHKey (d .GetSSHKeyPath ()); err != nil {
768732 return "" , err
769733 }
770734
@@ -776,10 +740,6 @@ func (d *Driver) createSSHKey() (string, error) {
776740 return string (publicKey ), nil
777741}
778742
779- func (d * Driver ) sshKeyPath () string {
780- return path .Join (d .storePath , "id_rsa" )
781- }
782-
783743func (d * Driver ) publicSSHKeyPath () string {
784- return d .sshKeyPath () + ".pub"
744+ return d .GetSSHKeyPath () + ".pub"
785745}
0 commit comments