Skip to content

Commit 58349d6

Browse files
committed
Add Cloud-init based User data as file
1 parent fec01b3 commit 58349d6

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ $ docker-machine create \
100100
see [SSH Keys API](https://docs.hetzner.cloud/#resources-ssh-keys-get) for how to get a list
101101
- `--hetzner-additional-key`: Upload an additional public key associated with the server, or associate an existing one with the same fingerprint. Can be specified multiple times.
102102
- `--hetzner-user-data`: Cloud-init based User data
103+
- `--hetzner-user-data-from-file`: Use Cloud-init based User data as file, `--hetzner-user-data` as file name
103104
- `--hetzner-volumes`: Volume IDs or names which should be attached to the server
104105
- `--hetzner-networks`: Network IDs or names which should be attached to the server private network interface
105106
- `--hetzner-use-private-network`: Use private network

driver.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"os"
88
"strings"
99
"time"
10+
ioutil "io/ioutil"
1011

1112
"github.com/docker/machine/libmachine/drivers"
1213
"github.com/docker/machine/libmachine/log"
@@ -39,6 +40,7 @@ type Driver struct {
3940
ServerID int
4041
cachedServer *hcloud.Server
4142
userData string
43+
userDataFromFile bool
4244
Volumes []string
4345
Networks []string
4446
UsePrivateNetwork bool
@@ -71,6 +73,7 @@ const (
7173
flagExKeyID = "hetzner-existing-key-id"
7274
flagExKeyPath = "hetzner-existing-key-path"
7375
flagUserData = "hetzner-user-data"
76+
flagUserDataFromFile = "hetzner-user-data-from-file"
7477
flagVolumes = "hetzner-volumes"
7578
flagNetworks = "hetzner-networks"
7679
flagUsePrivateNetwork = "hetzner-use-private-network"
@@ -163,6 +166,11 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
163166
Usage: "Cloud-init based User data",
164167
Value: "",
165168
},
169+
mcnflag.BoolFlag{
170+
EnvVar: "HETZNER_USER_DATA_FROM_FILE",
171+
Name: flagUserDataFromFile,
172+
Usage: "Cloud-init based User data is file",
173+
},
166174
mcnflag.StringSliceFlag{
167175
EnvVar: "HETZNER_VOLUMES",
168176
Name: flagVolumes,
@@ -273,6 +281,7 @@ func (d *Driver) setConfigFromFlagsImpl(opts drivers.DriverOptions) error {
273281
d.IsExistingKey = d.KeyID != 0
274282
d.originalKey = opts.String(flagExKeyPath)
275283
d.userData = opts.String(flagUserData)
284+
d.userDataFromFile = opts.Bool(flagUserDataFromFile)
276285
d.Volumes = opts.StringSlice(flagVolumes)
277286
d.Networks = opts.StringSlice(flagNetworks)
278287
disablePublic := opts.Bool(flagDisablePublic)
@@ -526,9 +535,19 @@ func (d *Driver) makeCreateServerOptions() (*hcloud.ServerCreateOpts, error) {
526535
return nil, err
527536
}
528537

538+
UserData := d.userData
539+
540+
if d.userDataFromFile == true {
541+
readUserData, err := ioutil.ReadFile(d.userData)
542+
if err != nil {
543+
return nil, err
544+
}
545+
UserData = string(readUserData)
546+
}
547+
529548
srvopts := hcloud.ServerCreateOpts{
530549
Name: d.GetMachineName(),
531-
UserData: d.userData,
550+
UserData: UserData,
532551
Labels: d.ServerLabels,
533552
PlacementGroup: pgrp,
534553
}

0 commit comments

Comments
 (0)