mirror of https://github.com/helm/helm
parent
9ca8c27e16
commit
ebd81152dd
@ -0,0 +1,78 @@
|
||||
package chartutil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/kubernetes/helm/pkg/proto/hapi/chart"
|
||||
)
|
||||
|
||||
const (
|
||||
// ChartfileName is the default Chart file name.
|
||||
ChartfileName = "Chart.yaml"
|
||||
// ValuesfileName is the default values file name.
|
||||
ValuesfileName = "values.yaml"
|
||||
// TemplatesDir is the relative directory name for templates.
|
||||
TemplatesDir = "templates"
|
||||
// ChartsDir is the relative directory name for charts dependencies.
|
||||
ChartsDir = "charts"
|
||||
)
|
||||
|
||||
const defaultValues = `# Default values for %s.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare name/value pairs to be passed into your templates.
|
||||
# name: value
|
||||
`
|
||||
|
||||
// Create creates a new chart in a directory.
|
||||
//
|
||||
// Inside of dir, this will create a directory based on the name of
|
||||
// chartfile.Name. It will then write the Chart.yaml into this directory and
|
||||
// create the (empty) appropriate directories.
|
||||
//
|
||||
// The returned string will point to the newly created directory. It will be
|
||||
// an absolute path, even if the provided base directory was relative.
|
||||
//
|
||||
// If dir does not exist, this will return an error.
|
||||
// If Chart.yaml or any directories cannot be created, this will return an
|
||||
// error. In such a case, this will attempt to clean up by removing the
|
||||
// new chart directory.
|
||||
func Create(chartfile *chart.Metadata, dir string) (string, error) {
|
||||
path, err := filepath.Abs(dir)
|
||||
if err != nil {
|
||||
return path, err
|
||||
}
|
||||
|
||||
if fi, err := os.Stat(path); err != nil {
|
||||
return path, err
|
||||
} else if !fi.IsDir() {
|
||||
return path, fmt.Errorf("no such directory %s", path)
|
||||
}
|
||||
|
||||
n := chartfile.Name
|
||||
cdir := filepath.Join(path, n)
|
||||
if fi, err := os.Stat(cdir); err == nil && !fi.IsDir() {
|
||||
return cdir, fmt.Errorf("file %s already exists and is not a directory", cdir)
|
||||
}
|
||||
if err := os.MkdirAll(cdir, 0755); err != nil {
|
||||
return cdir, err
|
||||
}
|
||||
|
||||
if err := SaveChartfile(filepath.Join(cdir, ChartfileName), chartfile); err != nil {
|
||||
return cdir, err
|
||||
}
|
||||
|
||||
val := []byte(fmt.Sprintf(defaultValues, chartfile.Name))
|
||||
if err := ioutil.WriteFile(filepath.Join(cdir, ValuesfileName), val, 0644); err != nil {
|
||||
return cdir, err
|
||||
}
|
||||
|
||||
for _, d := range []string{TemplatesDir, ChartsDir} {
|
||||
if err := os.MkdirAll(filepath.Join(cdir, d), 0755); err != nil {
|
||||
return cdir, err
|
||||
}
|
||||
}
|
||||
return cdir, nil
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package chartutil
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/kubernetes/helm/pkg/proto/hapi/chart"
|
||||
)
|
||||
|
||||
func TestCreate(t *testing.T) {
|
||||
tdir, err := ioutil.TempDir("", "helm-")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(tdir)
|
||||
|
||||
cf := &chart.Metadata{Name: "foo"}
|
||||
|
||||
c, err := Create(cf, tdir)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
dir := filepath.Join(tdir, "foo")
|
||||
|
||||
mychart, err := LoadDir(c)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to load newly created chart %q: %s", c, err)
|
||||
}
|
||||
|
||||
if mychart.Metadata.Name != "foo" {
|
||||
t.Errorf("Expected name to be 'foo', got %q", mychart.Metadata.Name)
|
||||
}
|
||||
|
||||
for _, d := range []string{TemplatesDir, ChartsDir} {
|
||||
if fi, err := os.Stat(filepath.Join(dir, d)); err != nil {
|
||||
t.Errorf("Expected %s dir: %s", d, err)
|
||||
} else if !fi.IsDir() {
|
||||
t.Errorf("Expected %s to be a directory.", d)
|
||||
}
|
||||
}
|
||||
|
||||
for _, f := range []string{ChartfileName, ValuesfileName} {
|
||||
if fi, err := os.Stat(filepath.Join(dir, f)); err != nil {
|
||||
t.Errorf("Expected %s file: %s", f, err)
|
||||
} else if fi.IsDir() {
|
||||
t.Errorf("Expected %s to be a fle.", f)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue