tailscale/tstest/integration/vms/distros.go
Joe Tsai 741ae9956e
tstest/integration/vms: use hujson.Standardize instead of hujson.Unmarshal (#4520)
The hujson package transition to just being a pure AST
parser and formatter for HuJSON and not an unmarshaler.

Thus, parse HuJSON as such, convert it to JSON,
and then use the standard JSON unmarshaler.

Signed-off-by: Joe Tsai <joetsai@digital-static.net>
2022-05-06 14:16:10 -07:00

66 lines
1.6 KiB
Go

// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package vms
import (
_ "embed"
"encoding/json"
"log"
"github.com/tailscale/hujson"
)
// go:generate go run ./gen
type Distro struct {
Name string // amazon-linux
URL string // URL to a qcow2 image
SHA256Sum string // hex-encoded sha256 sum of contents of URL
MemoryMegs int // VM memory in megabytes
PackageManager string // yum/apt/dnf/zypper
InitSystem string // systemd/openrc
HostGenerated bool // generated image rather than downloaded
}
func (d *Distro) InstallPre() string {
switch d.PackageManager {
case "yum":
return ` - [ yum, update, gnupg2 ]
- [ yum, "-y", install, iptables ]
- [ sh, "-c", "printf '\n\nUseDNS no\n\n' | tee -a /etc/ssh/sshd_config" ]
- [ systemctl, restart, "sshd.service" ]`
case "zypper":
return ` - [ zypper, in, "-y", iptables ]`
case "dnf":
return ` - [ dnf, install, "-y", iptables ]`
case "apt":
return ` - [ apt-get, update ]
- [ apt-get, "-y", install, curl, "apt-transport-https", gnupg2 ]`
case "apk":
return ` - [ apk, "-U", add, curl, "ca-certificates", iptables, ip6tables ]
- [ modprobe, tun ]`
}
return ""
}
//go:embed distros.hujson
var distroData string
var Distros []Distro = func() []Distro {
var result []Distro
b, err := hujson.Standardize([]byte(distroData))
if err != nil {
log.Fatalf("error decoding distros: %v", err)
}
if err := json.Unmarshal(b, &result); err != nil {
log.Fatalf("error decoding distros: %v", err)
}
return result
}()