Skip to content
Snippets Groups Projects
Commit 43896a67 authored by Jessica Yuen's avatar Jessica Yuen
Browse files

Generate per-environment override file

This commit will generate an "<env-name>.jsonnet" file when an
environment is created.

For example, the default environment would have the following tree
structure:
├── environments
│   ├── base.libsonnet
│   └── default
│       ├── .metadata
│       │   ├── k.libsonnet
│       │   ├── k8s.libsonnet
│       │   └── swagger.json
│       ├── default.jsonnet
│       └── spec.json

The goal of this file is to allow users to extend on base.libsonnet on a
per-environment basis to allow for custom overrides, such as replica
count.
parent 4b50beb8
No related branches found
No related tags found
No related merge requests found
......@@ -16,9 +16,11 @@
package metadata
import (
"bytes"
"encoding/json"
"fmt"
"os"
"path"
"path/filepath"
"strings"
......@@ -121,6 +123,17 @@ func (m *manager) createEnvironment(name, uri string, extensionsLibData, k8sLibD
return err
}
// Generate the base.libsonnet override file
overrideFileName := path.Base(name) + ".jsonnet"
overrideData := m.generateOverrideData()
log.Debugf("Generating '%s', length: %d", overrideFileName, len(overrideData))
overrideLibPath := appendToAbsPath(envPath, overrideFileName)
err = afero.WriteFile(m.appFS, string(overrideLibPath), overrideData, defaultFilePermissions)
if err != nil {
log.Debugf("Failed to write '%s'", overrideFileName)
return err
}
// Generate the environment spec file.
envSpecData, err := generateSpecData(uri)
if err != nil {
......@@ -334,6 +347,16 @@ func (m *manager) generateKsonnetLibData(spec ClusterSpec) ([]byte, []byte, []by
return extensionsLibData, k8sLibData, text, err
}
func (m *manager) generateOverrideData() []byte {
var buf bytes.Buffer
buf.WriteString(fmt.Sprintf("local base = import \"%s\";\n", m.baseLibsonnetPath))
buf.WriteString(fmt.Sprintf("local k = import \"%s\";\n\n", path.Join(metadataDirName, extensionsLibFilename)))
buf.WriteString("base + {\n")
buf.WriteString(" // Insert user-specified overrides here.\n")
buf.WriteString("}\n")
return buf.Bytes()
}
func generateSpecData(uri string) ([]byte, error) {
// Format the spec json and return; preface keys with 2 space idents.
return json.MarshalIndent(EnvironmentSpec{URI: uri}, "", " ")
......
......@@ -180,3 +180,20 @@ func TestSetEnvironment(t *testing.T) {
t.Fatalf("Expected set URI to be \"%s\", got:\n %s", set.URI, envSpec.URI)
}
}
func TestGenerateOverrideData(t *testing.T) {
m := mockEnvironments(t, "test-gen-override-data")
expected := `local base = import "test-gen-override-data/environments/base.libsonnet";
local k = import ".metadata/k.libsonnet";
base + {
// Insert user-specified overrides here.
}
`
result := m.generateOverrideData()
if string(result) != expected {
t.Fatalf("Expected to generate override file with data:\n%s\n,got:\n%s", expected, result)
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment