Merge pull request #4143 from SvenDowideit/add-vsphere-cfgparams

[VSPHERE] Add vm config params
This commit is contained in:
Joffrey F
2017-07-10 16:07:56 -07:00
committed by GitHub

View File

@@ -6,6 +6,7 @@ package vmwarevsphere
import (
"archive/tar"
"encoding/base64"
"fmt"
"io/ioutil"
"net"
@@ -61,6 +62,8 @@ type Driver struct {
Datacenter string
Pool string
HostSystem string
CfgParams []string
CloudInit string
SSHPassword string
}
@@ -147,6 +150,16 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
Name: "vmwarevsphere-hostsystem",
Usage: "vSphere compute resource where the docker VM will be instantiated (use <cluster>/* or <cluster>/<host> if using a cluster)",
},
mcnflag.StringSliceFlag{
EnvVar: "VSPHERE_CFGPARAM",
Name: "vmwarevsphere-cfgparam",
Usage: "vSphere vm configuration parameters (used for guestinfo)",
},
mcnflag.StringFlag{
EnvVar: "VSPHERE_CLOUDINIT",
Name: "vmwarevsphere-cloudinit",
Usage: "vSphere cloud-init file or url to set in the guestinfo",
},
}
}
@@ -198,6 +211,8 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
d.Datacenter = flags.String("vmwarevsphere-datacenter")
d.Pool = flags.String("vmwarevsphere-pool")
d.HostSystem = flags.String("vmwarevsphere-hostsystem")
d.CfgParams = flags.StringSlice("vmwarevsphere-cfgparam")
d.CloudInit = flags.String("vmwarevsphere-cloudinit")
d.SetSwarmConfigFromFlags(flags)
d.ISO = d.ResolveStorePath(isoFilename)
@@ -506,6 +521,54 @@ func (d *Driver) Create() error {
return err
}
// Adding some guestinfo data
var opts []types.BaseOptionValue
for _, param := range d.CfgParams {
v := strings.SplitN(param, "=", 2)
key := v[0]
value := ""
if len(v) > 1 {
value = v[1]
}
fmt.Printf("Setting %s to %s\n", key, value)
opts = append(opts, &types.OptionValue{
Key: key,
Value: value,
})
}
if d.CloudInit != "" {
if _, err := url.ParseRequestURI(d.CloudInit); err == nil {
log.Infof("setting guestinfo.cloud-init.data.url to %s\n", d.CloudInit)
opts = append(opts, &types.OptionValue{
Key: "guestinfo.cloud-init.config.url",
Value: d.CloudInit,
})
} else {
if _, err := os.Stat(d.CloudInit); err == nil {
if value, err := ioutil.ReadFile(d.CloudInit); err == nil {
log.Infof("setting guestinfo.cloud-init.data to encoded content of %s\n", d.CloudInit)
encoded := base64.StdEncoding.EncodeToString(value)
opts = append(opts, &types.OptionValue{
Key: "guestinfo.cloud-init.config.data",
Value: encoded,
})
opts = append(opts, &types.OptionValue{
Key: "guestinfo.cloud-init.data.encoding",
Value: "base64",
})
}
}
}
}
task, err = vm.Reconfigure(ctx, types.VirtualMachineConfigSpec{
ExtraConfig: opts,
})
if err != nil {
return err
}
task.Wait(ctx)
if err := d.Start(); err != nil {
return err
}