@@ -111,6 +111,7 @@ type Driver struct {
111111 Token string `json:"token,omitempty"`
112112 RootVolumeOpts * services.DiskOpts `json:"-"`
113113 UserDataFile string `json:"-"`
114+ UserData []byte `json:"-"`
114115 IPVersion int `json:"-"`
115116 skipEIPCreation bool
116117 eipConfig * services.ElasticIPOpts
@@ -356,6 +357,18 @@ func (d *Driver) Create() error {
356357 return nil
357358}
358359
360+ func (d * Driver ) getUserData () error {
361+ if d .UserDataFile == "" || len (d .UserData ) != 0 {
362+ return nil
363+ }
364+ userData , err := ioutil .ReadFile (d .UserDataFile )
365+ if err != nil {
366+ return err
367+ }
368+ d .UserData = userData
369+ return nil
370+ }
371+
359372func (d * Driver ) createInstance () error {
360373 if d .InstanceID != "" {
361374 return nil
@@ -384,13 +397,10 @@ func (d *Driver) createInstance() error {
384397 ServerGroupID : d .ServerGroupID ,
385398 }
386399
387- if d .UserDataFile != "" {
388- userData , err := ioutil .ReadFile (d .UserDataFile )
389- if err != nil {
390- return err
391- }
392- serverOpts .UserData = userData
400+ if err := d .getUserData (); err != nil {
401+ return err
393402 }
403+ serverOpts .UserData = d .UserData
394404
395405 instance , err := d .client .CreateInstance (serverOpts )
396406 if err != nil {
@@ -552,6 +562,10 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
552562 EnvVar : "OS_USER_DATA_FILE" ,
553563 Usage : "File containing an user data script" ,
554564 },
565+ mcnflag.StringFlag {
566+ Name : "otc-user-data-raw" ,
567+ Usage : "Contents of user data file as a string" ,
568+ },
555569 mcnflag.StringFlag {
556570 Name : "otc-token" ,
557571 EnvVar : "OS_TOKEN" ,
@@ -965,6 +979,7 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
965979 d .PrivateKeyFile = flags .String ("otc-private-key-file" )
966980 d .Token = flags .String ("otc-token" )
967981 d .UserDataFile = flags .String ("otc-user-data-file" )
982+ d .UserData = []byte (flags .String ("otc-user-data-raw" ))
968983 d .ServerGroup = flags .String ("otc-server-group" )
969984 d .ServerGroupID = flags .String ("otc-server-group-id" )
970985 d .AccessKey = services.AccessKey {
@@ -1023,5 +1038,8 @@ func (d *Driver) checkConfig() error {
10231038 (d .AccessKey .AccessKey == "" || d .AccessKey .SecretKey == "" ) {
10241039 return fmt .Errorf ("at least one authorization method must be provided" )
10251040 }
1041+ if len (d .UserData ) > 0 && d .UserDataFile != "" {
1042+ return fmt .Errorf ("both `-otc-user-data` and `-otc-user-data` is defined" )
1043+ }
10261044 return nil
10271045}
0 commit comments