Skip to content

Commit 22f9d92

Browse files
authored
Add support of raw user data as driver arguments (#38)
1 parent aee991e commit 22f9d92

File tree

3 files changed

+52
-8
lines changed

3 files changed

+52
-8
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export PATH:=/usr/local/go/bin:$(PATH)
33
exec_path := /usr/local/bin/
44
exec_name := docker-machine-driver-otc
55

6-
VERSION := 0.2.3b3
6+
VERSION := 0.2.3b4
77

88

99
default: test build

driver/opentelekomcloud.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
359372
func (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
}

driver/opentelekomcloud_test.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ func TestDriver_SetConfigFromFlagsDeprecated(t *testing.T) {
362362
// This test won't check anything really, it exists only for debug purposes
363363
func TestDriver_CreateWithUserData(t *testing.T) {
364364
fileName := "tmp.sh"
365-
userData := []byte("#!/usr/bin/bash\necho touch > /tmp/my")
365+
userData := []byte("#!/bin/bash\necho touch > /tmp/my")
366366
require.NoError(t, ioutil.WriteFile(fileName, userData, os.ModePerm))
367367
defer func() {
368368
_ = os.Remove(fileName)
@@ -383,6 +383,32 @@ func TestDriver_CreateWithUserData(t *testing.T) {
383383
assert.NoError(t, driver.Remove())
384384
}
385385

386+
func TestDriver_UserDataRaw(t *testing.T) {
387+
fileName := "tmp.sh"
388+
userData := []byte("#!/bin/bash\necho touch > /tmp/my")
389+
require.NoError(t, ioutil.WriteFile(fileName, userData, os.ModePerm))
390+
defer func() {
391+
_ = os.Remove(fileName)
392+
}()
393+
394+
driverFl, err := newDriverFromFlags(
395+
map[string]interface{}{
396+
"otc-cloud": "otc",
397+
"otc-user-data-file": fileName,
398+
})
399+
require.NoError(t, err)
400+
require.NoError(t, driverFl.getUserData())
401+
402+
driverRaw, err := newDriverFromFlags(
403+
map[string]interface{}{
404+
"otc-cloud": "otc",
405+
"otc-user-data-raw": string(userData),
406+
})
407+
require.NoError(t, err)
408+
409+
assert.Equal(t, driverFl.UserData, driverRaw.UserData)
410+
}
411+
386412
func TestDriver_ResolveServerGroup(t *testing.T) {
387413
driver, err := defaultDriver()
388414
require.NoError(t, err)

0 commit comments

Comments
 (0)