mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-30 05:25:35 +00:00
98f4dd9857
cmd/k8s-operator,k8s-operator,kube: Add TSRecorder CRD + controller Deploys tsrecorder images to the operator's cluster. S3 storage is configured via environment variables from a k8s Secret. Currently only supports a single tsrecorder replica, but I've tried to take early steps towards supporting multiple replicas by e.g. having a separate secret for auth and state storage. Example CR: ```yaml apiVersion: tailscale.com/v1alpha1 kind: Recorder metadata: name: rec spec: enableUI: true ``` Updates #13298 Signed-off-by: Tom Proctor <tomhjp@users.noreply.github.com>
87 lines
3.4 KiB
Go
87 lines
3.4 KiB
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
//go:build !plan9 && !windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func Test_generate(t *testing.T) {
|
|
base, err := os.Getwd()
|
|
base = filepath.Join(base, "../../../")
|
|
if err != nil {
|
|
t.Fatalf("error getting current working directory: %v", err)
|
|
}
|
|
defer cleanup(base)
|
|
if err := generate(base); err != nil {
|
|
t.Fatalf("CRD template generation: %v", err)
|
|
}
|
|
|
|
tempDir := t.TempDir()
|
|
helmCLIPath := filepath.Join(base, "tool/helm")
|
|
helmChartTemplatesPath := filepath.Join(base, "cmd/k8s-operator/deploy/chart")
|
|
helmPackageCmd := exec.Command(helmCLIPath, "package", helmChartTemplatesPath, "--destination", tempDir, "--version", "0.0.1")
|
|
helmPackageCmd.Stderr = os.Stderr
|
|
helmPackageCmd.Stdout = os.Stdout
|
|
if err := helmPackageCmd.Run(); err != nil {
|
|
t.Fatalf("error packaging Helm chart: %v", err)
|
|
}
|
|
helmPackagePath := filepath.Join(tempDir, "tailscale-operator-0.0.1.tgz")
|
|
helmLintCmd := exec.Command(helmCLIPath, "lint", helmPackagePath)
|
|
helmLintCmd.Stderr = os.Stderr
|
|
helmLintCmd.Stdout = os.Stdout
|
|
if err := helmLintCmd.Run(); err != nil {
|
|
t.Fatalf("Helm chart linter failed: %v", err)
|
|
}
|
|
|
|
// Test that default Helm install contains the Connector and ProxyClass CRDs.
|
|
installContentsWithCRD := bytes.NewBuffer([]byte{})
|
|
helmTemplateWithCRDCmd := exec.Command(helmCLIPath, "template", helmPackagePath)
|
|
helmTemplateWithCRDCmd.Stderr = os.Stderr
|
|
helmTemplateWithCRDCmd.Stdout = installContentsWithCRD
|
|
if err := helmTemplateWithCRDCmd.Run(); err != nil {
|
|
t.Fatalf("templating Helm chart with CRDs failed: %v", err)
|
|
}
|
|
if !strings.Contains(installContentsWithCRD.String(), "name: connectors.tailscale.com") {
|
|
t.Errorf("Connector CRD not found in default chart install")
|
|
}
|
|
if !strings.Contains(installContentsWithCRD.String(), "name: proxyclasses.tailscale.com") {
|
|
t.Errorf("ProxyClass CRD not found in default chart install")
|
|
}
|
|
if !strings.Contains(installContentsWithCRD.String(), "name: dnsconfigs.tailscale.com") {
|
|
t.Errorf("DNSConfig CRD not found in default chart install")
|
|
}
|
|
if !strings.Contains(installContentsWithCRD.String(), "name: recorders.tailscale.com") {
|
|
t.Errorf("Recorder CRD not found in default chart install")
|
|
}
|
|
|
|
// Test that CRDs can be excluded from Helm chart install
|
|
installContentsWithoutCRD := bytes.NewBuffer([]byte{})
|
|
helmTemplateWithoutCRDCmd := exec.Command(helmCLIPath, "template", helmPackagePath, "--set", "installCRDs=false")
|
|
helmTemplateWithoutCRDCmd.Stderr = os.Stderr
|
|
helmTemplateWithoutCRDCmd.Stdout = installContentsWithoutCRD
|
|
if err := helmTemplateWithoutCRDCmd.Run(); err != nil {
|
|
t.Fatalf("templating Helm chart without CRDs failed: %v", err)
|
|
}
|
|
if strings.Contains(installContentsWithoutCRD.String(), "name: connectors.tailscale.com") {
|
|
t.Errorf("Connector CRD found in chart install that should not contain a CRD")
|
|
}
|
|
if strings.Contains(installContentsWithoutCRD.String(), "name: connectors.tailscale.com") {
|
|
t.Errorf("ProxyClass CRD found in chart install that should not contain a CRD")
|
|
}
|
|
if strings.Contains(installContentsWithoutCRD.String(), "name: dnsconfigs.tailscale.com") {
|
|
t.Errorf("DNSConfig CRD found in chart install that should not contain a CRD")
|
|
}
|
|
if strings.Contains(installContentsWithoutCRD.String(), "name: recorders.tailscale.com") {
|
|
t.Errorf("Recorder CRD found in chart install that should not contain a CRD")
|
|
}
|
|
}
|