Merge pull request #4143 from SvenDowideit/add-vsphere-cfgparams
[VSPHERE] Add vm config params
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user