Skip to content

Commit cb367b9

Browse files
committed
Create and own userdata within inletsctl
HTTPS userdata was already owned inside inletsctl, but not for TCP tunnels. This has now been pulled up from cloudprovision for easier maintenance. Unit tests updated and pass. Converted from string concat to string interpolation with fmt.Sprintf. Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com>
1 parent 845e34a commit cb367b9

2 files changed

Lines changed: 71 additions & 18 deletions

File tree

cmd/create.go

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -295,11 +295,11 @@ func runCreate(cmd *cobra.Command, _ []string) error {
295295

296296
var userData string
297297
if len(letsencryptDomains) > 0 {
298-
userData = MakeHTTPSUserdata(inletsToken,
298+
userData = makeHTTPSUserdata(inletsToken,
299299
inletsProVersion,
300300
letsencryptIssuer, letsencryptDomains)
301301
} else {
302-
userData = provision.MakeExitServerUserdata(
302+
userData = makeExitServerUserdata(
303303
inletsToken,
304304
inletsProVersion)
305305
}
@@ -595,31 +595,55 @@ func createHost(provider, name, region, zone, projectID, userData, inletsProCont
595595
return nil, fmt.Errorf("no provisioner for provider: %q", provider)
596596
}
597597

598-
// MakeHTTPSUserdata makes a user-data script in bash to setup inlets
599-
// PRO with a systemd service and the given version.
600-
func MakeHTTPSUserdata(authToken, version, letsEncryptIssuer string, domains []string) string {
598+
// makeHTTPSUserdata makes a user-data script in bash to setup inlets
599+
// with a systemd service and the given version.
600+
func makeHTTPSUserdata(authToken, version, letsEncryptIssuer string, domains []string) string {
601601

602602
domainFlags := ""
603603
for _, domain := range domains {
604604
domainFlags += fmt.Sprintf("--letsencrypt-domain=%s ", domain)
605605
}
606+
domainFlags = strings.TrimSpace(domainFlags)
607+
return fmt.Sprintf(`#!/bin/bash
608+
export AUTHTOKEN="%s"
609+
export IP=$(curl -sfSL https://checkip.amazonaws.com)
610+
export VERSION="%s"
611+
612+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro -o /tmp/inlets-pro && \
613+
chmod +x /tmp/inlets-pro && \
614+
mv /tmp/inlets-pro /usr/local/bin/inlets-pro
615+
616+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro-http.service -o inlets-pro.service && \
617+
mv inlets-pro.service /etc/systemd/system/inlets-pro.service && \
618+
echo "AUTHTOKEN=$AUTHTOKEN" >> /etc/default/inlets-pro && \
619+
echo "IP=$IP" >> /etc/default/inlets-pro && \
620+
echo "DOMAINS=%s" >> /etc/default/inlets-pro && \
621+
echo "ISSUER=--letsencrypt-issuer=%s" >> /etc/default/inlets-pro && \
622+
systemctl daemon-reload && \
623+
systemctl start inlets-pro && \
624+
systemctl enable inlets-pro
625+
`, authToken, version, domainFlags, letsEncryptIssuer)
626+
}
627+
628+
// makeExitServerUserdata makes a user-data script in bash to setup inlets
629+
// with systemd service and the given version.
630+
func makeExitServerUserdata(authToken, version string) string {
606631

607-
return `#!/bin/bash
608-
export AUTHTOKEN="` + authToken + `"
632+
return fmt.Sprintf(`#!/bin/bash
633+
export AUTHTOKEN="%s"
609634
export IP=$(curl -sfSL https://checkip.amazonaws.com)
635+
export VERSION="%s"
610636
611-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/` + version + `/inlets-pro -o /tmp/inlets-pro && \
637+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro -o /tmp/inlets-pro && \
612638
chmod +x /tmp/inlets-pro && \
613639
mv /tmp/inlets-pro /usr/local/bin/inlets-pro
614640
615-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/` + version + `/inlets-pro-http.service -o inlets-pro.service && \
641+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro.service -o inlets-pro.service && \
616642
mv inlets-pro.service /etc/systemd/system/inlets-pro.service && \
617643
echo "AUTHTOKEN=$AUTHTOKEN" >> /etc/default/inlets-pro && \
618644
echo "IP=$IP" >> /etc/default/inlets-pro && \
619-
echo "DOMAINS=` + strings.TrimSpace(domainFlags) + `" >> /etc/default/inlets-pro && \
620-
echo "ISSUER=--letsencrypt-issuer=` + letsEncryptIssuer + `" >> /etc/default/inlets-pro && \
621645
systemctl daemon-reload && \
622646
systemctl start inlets-pro && \
623647
systemctl enable inlets-pro
624-
`
648+
`, authToken, version)
625649
}

cmd/create_test.go

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,47 @@ import (
88
"testing"
99
)
1010

11+
func Test_MakeTCPUserdata_OneTunnel(t *testing.T) {
12+
got := makeExitServerUserdata("token", "0.11.5")
13+
os.WriteFile("/tmp/tcp.txt", []byte(got), 0600)
14+
want := `#!/bin/bash
15+
export AUTHTOKEN="token"
16+
export IP=$(curl -sfSL https://checkip.amazonaws.com)
17+
export VERSION="0.11.5"
18+
19+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro -o /tmp/inlets-pro && \
20+
chmod +x /tmp/inlets-pro && \
21+
mv /tmp/inlets-pro /usr/local/bin/inlets-pro
22+
23+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro.service -o inlets-pro.service && \
24+
mv inlets-pro.service /etc/systemd/system/inlets-pro.service && \
25+
echo "AUTHTOKEN=$AUTHTOKEN" >> /etc/default/inlets-pro && \
26+
echo "IP=$IP" >> /etc/default/inlets-pro && \
27+
systemctl daemon-reload && \
28+
systemctl start inlets-pro && \
29+
systemctl enable inlets-pro
30+
`
31+
32+
if want != got {
33+
t.Fatalf("want\n\n%s\n\nbut got\n\n%s\n\n", want, got)
34+
}
35+
36+
}
37+
1138
func Test_MakeHTTPSUserdata_OneDomain(t *testing.T) {
12-
got := MakeHTTPSUserdata("token", "0.9.40", "prod", []string{"example.com"})
39+
got := makeHTTPSUserdata("token", "0.9.40", "prod", []string{"example.com"})
1340

1441
os.WriteFile("/tmp/t.txt", []byte(got), 0600)
1542
want := `#!/bin/bash
1643
export AUTHTOKEN="token"
1744
export IP=$(curl -sfSL https://checkip.amazonaws.com)
45+
export VERSION="0.9.40"
1846
19-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-pro -o /tmp/inlets-pro && \
47+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro -o /tmp/inlets-pro && \
2048
chmod +x /tmp/inlets-pro && \
2149
mv /tmp/inlets-pro /usr/local/bin/inlets-pro
2250
23-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-pro-http.service -o inlets-pro.service && \
51+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro-http.service -o inlets-pro.service && \
2452
mv inlets-pro.service /etc/systemd/system/inlets-pro.service && \
2553
echo "AUTHTOKEN=$AUTHTOKEN" >> /etc/default/inlets-pro && \
2654
echo "IP=$IP" >> /etc/default/inlets-pro && \
@@ -36,19 +64,20 @@ curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-
3664
}
3765

3866
func Test_MakeHTTPSUserdata_TwoDomains(t *testing.T) {
39-
got := MakeHTTPSUserdata("token", "0.9.40", "prod",
67+
got := makeHTTPSUserdata("token", "0.9.40", "prod",
4068
[]string{"a.example.com", "b.example.com"})
4169

4270
os.WriteFile("/tmp/t.txt", []byte(got), 0600)
4371
want := `#!/bin/bash
4472
export AUTHTOKEN="token"
4573
export IP=$(curl -sfSL https://checkip.amazonaws.com)
74+
export VERSION="0.9.40"
4675
47-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-pro -o /tmp/inlets-pro && \
76+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro -o /tmp/inlets-pro && \
4877
chmod +x /tmp/inlets-pro && \
4978
mv /tmp/inlets-pro /usr/local/bin/inlets-pro
5079
51-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-pro-http.service -o inlets-pro.service && \
80+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro-http.service -o inlets-pro.service && \
5281
mv inlets-pro.service /etc/systemd/system/inlets-pro.service && \
5382
echo "AUTHTOKEN=$AUTHTOKEN" >> /etc/default/inlets-pro && \
5483
echo "IP=$IP" >> /etc/default/inlets-pro && \

0 commit comments

Comments
 (0)