Skip to content
This repository was archived by the owner on Sep 30, 2020. It is now read-only.

Commit 01a4efd

Browse files
redbaronmumoshu
authored andcommitted
Inject stack name into userdata for nodepool workers (#735)
Fixes #727
1 parent 5082bd6 commit 01a4efd

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

core/controlplane/config/templates/cloud-config-worker

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
{{ define "instance" -}}
1+
{{ define "instance-script" -}}
22
{{- $S3URI := self.Parts.s3.Asset.S3URL -}}
3-
#!/bin/bash -xe
43
. /etc/environment
54
export COREOS_PRIVATE_IPV4 COREOS_PRIVATE_IPV6 COREOS_PUBLIC_IPV4 COREOS_PUBLIC_IPV6
65
REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')
@@ -22,14 +21,17 @@ run aws s3 --region $REGION cp {{ $S3URI }} /var/run/coreos/$USERDATA_FILE
2221

2322
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
2423

25-
run /bin/sh -c 'echo {{.StackNameEnvVarName}}=$(aws ec2 describe-tags --region "'$REGION'" --filters \
26-
"Name=resource-id,Values='$INSTANCE_ID'" \
27-
"Name=key,Values=aws:cloudformation:stack-name" \
28-
--output json \
29-
| jq -r ".Tags[].Value") >> {{.StackNameEnvFileName}}'
30-
3124
exec /usr/bin/coreos-cloudinit --from-file /var/run/coreos/$USERDATA_FILE
3225
{{ end }}
26+
27+
{{ define "instance" -}}
28+
{ "Fn::Base64": { "Fn::Join" : ["", [
29+
"#!/bin/bash -xe\n",
30+
{"Fn::Join":["",[ "echo '{{.StackNameEnvVarName}}=", { "Ref": "AWS::StackName" }, "' >> {{.StackNameEnvFileName}}\n" ]]},
31+
{{ (execTemplate "instance-script" .) | toJSON }}
32+
]]}}
33+
{{ end }}
34+
3335
{{ define "s3" -}}
3436
#cloud-config
3537
coreos:

core/nodepool/config/templates/stack-template.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@
101101
{{end}}
102102
],
103103
"SubnetId": {{$workerSubnet.Ref}},
104-
"UserData": {{ $.UserDataWorker.Parts.instance.Base64 true | checkSizeLessThan 16384 | quote }}
104+
"UserData": {{ $.UserDataWorker.Parts.instance.Template }}
105105
}
106106
{{end}}
107107
{{end}}
@@ -261,7 +261,7 @@
261261
{{else}}
262262
"PlacementTenancy": "{{.Tenancy}}",
263263
{{end}}
264-
"UserData": {{ .UserDataWorker.Parts.instance.Base64 true | checkSizeLessThan 16384 | quote }}
264+
"UserData": {{ .UserDataWorker.Parts.instance.Template }}
265265
},
266266
"Type": "AWS::AutoScaling::LaunchConfiguration"
267267
{{if not .IAMConfig.InstanceProfile.Arn}}

filereader/texttemplate/texttemplate.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package texttemplate
22

33
import (
44
"bytes"
5+
"encoding/json"
56
"fmt"
67
"github.com/Masterminds/sprig"
78
"io/ioutil"
@@ -21,9 +22,27 @@ func Parse(filename string, funcs template.FuncMap) (*template.Template, error)
2122
}
2223
return content, nil
2324
},
25+
"toJSON": func(v interface{}) (string, error) {
26+
data, err := json.Marshal(v)
27+
return string(data), err
28+
},
29+
"execTemplate": func(name string, ctx interface{}) (string, error) {
30+
panic("[bug] Stub 'execTemplate' was not replaced")
31+
},
32+
}
33+
34+
t, err := template.New(filename).Funcs(sprig.HermeticTxtFuncMap()).Funcs(funcs).Funcs(funcs2).Parse(string(raw))
35+
if err == nil {
36+
t = t.Funcs(template.FuncMap{
37+
"execTemplate": func(name string, ctx interface{}) (string, error) {
38+
b := bytes.Buffer{}
39+
err := t.ExecuteTemplate(&b, name, ctx)
40+
return b.String(), err
41+
},
42+
})
2443
}
44+
return t, err
2545

26-
return template.New(filename).Funcs(sprig.HermeticTxtFuncMap()).Funcs(funcs).Funcs(funcs2).Parse(string(raw))
2746
}
2847

2948
func GetBytesBuffer(filename string, data interface{}) (*bytes.Buffer, error) {

0 commit comments

Comments
 (0)