Skip to content

Commit 554f43d

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 554f43d

2 files changed

Lines changed: 44 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-http.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: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,19 @@ import (
99
)
1010

1111
func Test_MakeHTTPSUserdata_OneDomain(t *testing.T) {
12-
got := MakeHTTPSUserdata("token", "0.9.40", "prod", []string{"example.com"})
12+
got := makeHTTPSUserdata("token", "0.9.40", "prod", []string{"example.com"})
1313

1414
os.WriteFile("/tmp/t.txt", []byte(got), 0600)
1515
want := `#!/bin/bash
1616
export AUTHTOKEN="token"
1717
export IP=$(curl -sfSL https://checkip.amazonaws.com)
18+
export VERSION="0.9.40"
1819
19-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-pro -o /tmp/inlets-pro && \
20+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro -o /tmp/inlets-pro && \
2021
chmod +x /tmp/inlets-pro && \
2122
mv /tmp/inlets-pro /usr/local/bin/inlets-pro
2223
23-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-pro-http.service -o inlets-pro.service && \
24+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro-http.service -o inlets-pro.service && \
2425
mv inlets-pro.service /etc/systemd/system/inlets-pro.service && \
2526
echo "AUTHTOKEN=$AUTHTOKEN" >> /etc/default/inlets-pro && \
2627
echo "IP=$IP" >> /etc/default/inlets-pro && \
@@ -36,19 +37,20 @@ curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-
3637
}
3738

3839
func Test_MakeHTTPSUserdata_TwoDomains(t *testing.T) {
39-
got := MakeHTTPSUserdata("token", "0.9.40", "prod",
40+
got := makeHTTPSUserdata("token", "0.9.40", "prod",
4041
[]string{"a.example.com", "b.example.com"})
4142

4243
os.WriteFile("/tmp/t.txt", []byte(got), 0600)
4344
want := `#!/bin/bash
4445
export AUTHTOKEN="token"
4546
export IP=$(curl -sfSL https://checkip.amazonaws.com)
47+
export VERSION="0.9.40"
4648
47-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-pro -o /tmp/inlets-pro && \
49+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro -o /tmp/inlets-pro && \
4850
chmod +x /tmp/inlets-pro && \
4951
mv /tmp/inlets-pro /usr/local/bin/inlets-pro
5052
51-
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/0.9.40/inlets-pro-http.service -o inlets-pro.service && \
53+
curl -SLsf https://github.com/inlets/inlets-pro/releases/download/$VERSION/inlets-pro-http.service -o inlets-pro.service && \
5254
mv inlets-pro.service /etc/systemd/system/inlets-pro.service && \
5355
echo "AUTHTOKEN=$AUTHTOKEN" >> /etc/default/inlets-pro && \
5456
echo "IP=$IP" >> /etc/default/inlets-pro && \

0 commit comments

Comments
 (0)