diff --git a/drivers/openstack/client.go b/drivers/openstack/client.go index 791a66f..83a5739 100644 --- a/drivers/openstack/client.go +++ b/drivers/openstack/client.go @@ -63,6 +63,7 @@ func (c *GenericClient) CreateInstance(d *Driver) (string, error) { Name: d.MachineName, FlavorRef: d.FlavorId, ImageRef: d.ImageId, + UserData: d.UserData, SecurityGroups: d.SecurityGroups, AvailabilityZone: d.AvailabilityZone, } diff --git a/drivers/openstack/openstack.go b/drivers/openstack/openstack.go index 3b31e8a..89ce20c 100644 --- a/drivers/openstack/openstack.go +++ b/drivers/openstack/openstack.go @@ -37,6 +37,7 @@ type Driver struct { KeyPairName string NetworkName string NetworkId string + UserData []byte PrivateKeyFile string SecurityGroups []string FloatingIpPool string @@ -161,6 +162,12 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag { Usage: "Private keyfile to use for SSH (absolute path)", Value: "", }, + mcnflag.StringFlag{ + EnvVar: "OS_USER_DATA_FILE", + Name: "openstack-user-data-file", + Usage: "File containing an openstack userdata script", + Value: "", + }, mcnflag.StringFlag{ EnvVar: "OS_NETWORK_NAME", Name: "openstack-net-name", @@ -270,6 +277,16 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { d.SSHPort = flags.Int("openstack-ssh-port") d.KeyPairName = flags.String("openstack-keypair-name") d.PrivateKeyFile = flags.String("openstack-private-key-file") + + if flags.String("openstack-user-data-file") != "" { + userData, err := ioutil.ReadFile(flags.String("openstack-user-data-file")) + if err == nil { + d.UserData = userData + } else { + return err + } + } + d.SetSwarmConfigFromFlags(flags) return d.checkConfig()