package staticfileserver
import (
"bytes"
"html/template"
"path/filepath"
"edge-infra.dev/config/components/pxe"
)
var (
volumeMountPoint = "/opt/boot"
livePath = volumeMountPoint + "/live"
)
// template locations
var (
deploymentTemplate = "deployment.template"
configMapTemplate = "configmap.template"
templateDir = "static-file-server"
deploymentTemplateGlob = filepath.Join(templateDir, deploymentTemplate)
configMapTemplateGlob = filepath.Join(templateDir, configMapTemplate)
)
// ScaleParams contains the configuration required to update replica counts
type ScaleParams struct {
Replicas int32
}
// ConfigParams contains the configuration required to update the
// static-file-server directory
type ConfigParams struct {
Directory string
}
// ScaledDownDeployment returns a scaled down static-file-server deployment with
// 0 replicas
func ScaledDownDeployment() ([]byte, error) {
return scaledDeployment(0)
}
// ScaledUpDeployment returns a scaled up static-file-server deployment with
// 1 replica
func ScaledUpDeployment() ([]byte, error) {
return scaledDeployment(1)
}
// scaledDeployment returns the static-file-server manifest scaled to the
// desired number of replicas
func scaledDeployment(desired int32) ([]byte, error) {
tmpl, err := template.New("").
Delims("<<", ">>").
ParseFS(pxe.TemplateFS, deploymentTemplateGlob)
if err != nil {
return nil, err
}
params := ScaleParams{
Replicas: desired,
}
var rendered bytes.Buffer
if err := tmpl.ExecuteTemplate(&rendered, deploymentTemplate, params); err != nil {
return nil, err
}
return rendered.Bytes(), nil
}
// ConfigMap returns the static-file-server-config configmap manifest
func ConfigMap() ([]byte, error) {
tmpl, err := template.New("").
Delims("<<", ">>").
ParseFS(pxe.TemplateFS, configMapTemplateGlob)
if err != nil {
return nil, err
}
params := ConfigParams{
Directory: livePath,
}
var rendered bytes.Buffer
if err := tmpl.ExecuteTemplate(&rendered, configMapTemplate, params); err != nil {
return nil, err
}
return rendered.Bytes(), nil
}