From 7aa4ffa4d4d245ace9a9d02b79661d12a7fbbc09 Mon Sep 17 00:00:00 2001 From: Matt Butcher Date: Mon, 6 Jun 2016 19:00:58 -0600 Subject: [PATCH] feat(chartutil): switch TOML to YAML --- pkg/chartutil/testdata/albatross/values.toml | 1 - pkg/chartutil/testdata/albatross/values.yaml | 1 + pkg/chartutil/testdata/coleridge.yaml | 12 ++ pkg/chartutil/testdata/frobnitz-1.2.3.tgz | Bin 3491 -> 3459 bytes .../charts/mast1/{values.toml => values.yaml} | 0 .../frobnitz/charts/alpine/values.toml | 2 - .../frobnitz/charts/alpine/values.yaml | 2 + .../frobnitz/charts/mariner-4.3.2.tgz | Bin 905 -> 895 bytes pkg/chartutil/testdata/frobnitz/values.toml | 6 - pkg/chartutil/testdata/frobnitz/values.yaml | 6 + .../mariner/charts/albatross-0.1.0.tgz | Bin 321 -> 322 bytes .../mariner/{values.toml => values.yaml} | 4 +- pkg/chartutil/values.go | 81 ++++++++++ pkg/chartutil/values_test.go | 141 ++++++++++++++++++ 14 files changed, 245 insertions(+), 11 deletions(-) delete mode 100644 pkg/chartutil/testdata/albatross/values.toml create mode 100644 pkg/chartutil/testdata/albatross/values.yaml create mode 100644 pkg/chartutil/testdata/coleridge.yaml rename pkg/chartutil/testdata/frobnitz/charts/alpine/charts/mast1/{values.toml => values.yaml} (100%) delete mode 100644 pkg/chartutil/testdata/frobnitz/charts/alpine/values.toml create mode 100644 pkg/chartutil/testdata/frobnitz/charts/alpine/values.yaml delete mode 100644 pkg/chartutil/testdata/frobnitz/values.toml create mode 100644 pkg/chartutil/testdata/frobnitz/values.yaml rename pkg/chartutil/testdata/mariner/{values.toml => values.yaml} (53%) create mode 100644 pkg/chartutil/values.go create mode 100644 pkg/chartutil/values_test.go diff --git a/pkg/chartutil/testdata/albatross/values.toml b/pkg/chartutil/testdata/albatross/values.toml deleted file mode 100644 index 0ef7eb2f9..000000000 --- a/pkg/chartutil/testdata/albatross/values.toml +++ /dev/null @@ -1 +0,0 @@ -albatross = "true" diff --git a/pkg/chartutil/testdata/albatross/values.yaml b/pkg/chartutil/testdata/albatross/values.yaml new file mode 100644 index 000000000..0acfa292f --- /dev/null +++ b/pkg/chartutil/testdata/albatross/values.yaml @@ -0,0 +1 @@ +albatross: "true" diff --git a/pkg/chartutil/testdata/coleridge.yaml b/pkg/chartutil/testdata/coleridge.yaml new file mode 100644 index 000000000..b6579628b --- /dev/null +++ b/pkg/chartutil/testdata/coleridge.yaml @@ -0,0 +1,12 @@ +poet: "Coleridge" +title: "Rime of the Ancient Mariner" +stanza: ["at", "length", "did", "cross", "an", "Albatross"] + +mariner: + with: "crossbow" + shot: "ALBATROSS" + +water: + water: + where: "everywhere" + nor: "any drop to drink" diff --git a/pkg/chartutil/testdata/frobnitz-1.2.3.tgz b/pkg/chartutil/testdata/frobnitz-1.2.3.tgz index c908b22642d0aac2394809200e6baa2bc7600b21..80c0a25022b6306a4aadb290475650981f1fcef5 100644 GIT binary patch literal 3459 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 R1O$W{_&@1@#;gE%004h72QmNv diff --git a/pkg/chartutil/testdata/frobnitz/charts/alpine/charts/mast1/values.toml b/pkg/chartutil/testdata/frobnitz/charts/alpine/charts/mast1/values.yaml similarity index 100% rename from pkg/chartutil/testdata/frobnitz/charts/alpine/charts/mast1/values.toml rename to pkg/chartutil/testdata/frobnitz/charts/alpine/charts/mast1/values.yaml diff --git a/pkg/chartutil/testdata/frobnitz/charts/alpine/values.toml b/pkg/chartutil/testdata/frobnitz/charts/alpine/values.toml deleted file mode 100644 index 504e6e1be..000000000 --- a/pkg/chartutil/testdata/frobnitz/charts/alpine/values.toml +++ /dev/null @@ -1,2 +0,0 @@ -# The pod name -name = "my-alpine" diff --git a/pkg/chartutil/testdata/frobnitz/charts/alpine/values.yaml b/pkg/chartutil/testdata/frobnitz/charts/alpine/values.yaml new file mode 100644 index 000000000..6c2aab7ba --- /dev/null +++ b/pkg/chartutil/testdata/frobnitz/charts/alpine/values.yaml @@ -0,0 +1,2 @@ +# The pod name +name: "my-alpine" diff --git a/pkg/chartutil/testdata/frobnitz/charts/mariner-4.3.2.tgz b/pkg/chartutil/testdata/frobnitz/charts/mariner-4.3.2.tgz index d4f19e6243532eba705a306a0c7cca462aa41345..3b6f987b3b39b992636405c611bc710066b3a8cd 100644 GIT binary patch literal 895 zcmV-_1AzP=iwFRo99CBV1MQbvNEA^R$G0M@1@oncE`mozXpxI>?vBjtY%^yy%Q7gs=z~`FR4Q6)^iU)b1s2jxw%&rWi}X^Ks96SCdEI6&nrUT{ zyAqz?EPONU*>ldE|94xFm3b#88#G}A$8i%)gMej%7AL8o4FL$!MA8(&;6@|B35vvx z8bF70Q$x5F$ja(gL>5A`8(JKk{L69bFq`cU^Mu}G*#0MoA^lf5SQ%mktSC(W8tQp4 z6!m-k3BnZ6pE8@&(A5d8dPZ{{z{Qo2V zX&UAK$S|Zo;1!^LSgx1 zn=y+d8lWT!dVzJ?19w{g0v3UlIpA+Kf_?^EEH5hnO2F*DR}^(V-l;woNNyPnry~FQ z!Tuy6@H5n2Og>}tziKR;LlUg213=egWP|bIA2$*|=YNt=FBJcgU}S`kR33%e^k7u~ z&kAN1%95h!ag4xl4BGeo`x@iLKaG>a^`A5{YW%C?(f|L55LYr+QyIH$yJl8rQ*-V; z5F6FCyH$4~rtDI;=5})ZqW8K?TYCJln%b*3s@7%9Jiq*uwfsQCl6l7;7q+jgeU$0C z{59t6gH7wNms=fAJ)WGLm&tc;zT1pnq7%#K>DrEZ-_}xXg*dj+!^B&6c{4hkUrJsT zzdpU^O2@+HZ4oNsQXZFkC|&cxbDd02 z$Lu?$nXN_X1t-a_SAA8)8c)qYPid0ot8Z~_|KZD7XHKl$|3%+b(x0^5TNIr=XwP;x z89vSG+B$IYTtlBP`_qi>qG-!t-QGFRb}n#@Jhel8-BGveK38d$PL*y51OkCTAP@)y V0)apv5D3KI@Ex#|jWGZy005ZBxA6b~ literal 905 zcmV;419to$iwFQDCPr5P1MQYsXcIvg$Ad+YsCc|s@fusN2fLZw>}I7ZQtN%-RgDjd zPSQ!Uy2*y!iFgzg4^S&8Y8B51kJbkdisCIQ)#61_DYZmvM6rrR3TnM-U3b$&>siGn zBF>M%H%Vq^X6OH1KBP*1tlBJb1VShZ0*F{ggM}R5V50z*6FHV;p@ZW9WO-KPEI^3o zp<)Czf>h%uK17HsNZekmes`WR&ExsWI??y|Wd9L-QT;Q$NF~fdhEAVhXugqKgzfK=lc7R52u5u7g)2g=2oQukraPA$N;0U>;rDoGk`}? z!MLCctA0$dW}S~!Ei#E`>&k5pZ{n<$U zw~LV0|3r`qhGP#3$^|mk+Tg4Ac5w{22I63w6kC4e`6%FH2xDo;|Oo8 zJdL#fgRlC3B)bq%6-`Tn49h@<1JKsmzJ*nbC#g#eEjL>^lEXzb*$C-d5hZlN|0QaaDH_9{*)*%#Wss!W}_jg-#oT5!u- zlUKSWzsOm)(toZ>@jiJy0=58hu*!MCf44qX&p}8`26AfllL<}?6Bt-tzYtF z*QkqCyDkg*V12p&`sR{Z9nK{?L-jXn?i6qC@#IQbyZpyHGftP^(wxbQ;k^@YvJX@b zD%w;y;85trz%iZl+GY1g6}$)+o*CWc&8zyMJM~E|0{UTeHN3rQMs?t5PPoOn%d=Ov zeQW%r@2xI9QFi=@ZpoddZ>=~}r(aWhP1bM2s)?^REx6MqE717TmTs?Ym2qjQX6gU8 fWTQ|h6bgkxp-?Ck3WY+UP=1MzGA=TJ04M+ejvmV5 diff --git a/pkg/chartutil/testdata/frobnitz/values.toml b/pkg/chartutil/testdata/frobnitz/values.toml deleted file mode 100644 index 6fc24051f..000000000 --- a/pkg/chartutil/testdata/frobnitz/values.toml +++ /dev/null @@ -1,6 +0,0 @@ -# A values file contains configuration. - -name = "Some Name" - -[section] -name = "Name in a section" diff --git a/pkg/chartutil/testdata/frobnitz/values.yaml b/pkg/chartutil/testdata/frobnitz/values.yaml new file mode 100644 index 000000000..61f501258 --- /dev/null +++ b/pkg/chartutil/testdata/frobnitz/values.yaml @@ -0,0 +1,6 @@ +# A values file contains configuration. + +name: "Some Name" + +section: + name: "Name in a section" diff --git a/pkg/chartutil/testdata/mariner/charts/albatross-0.1.0.tgz b/pkg/chartutil/testdata/mariner/charts/albatross-0.1.0.tgz index ed3c1aee9d62a5860abd1069ed0d4863047e1ca7..6795b2d9e8d5ac0f91c5d842bb20f3ab82b42a0c 100644 GIT binary patch literal 322 zcmV-I0loeoiwFRo99CBV1MSw^YQrEL2Jl|zDWngOsr3N8E4vx&DNJTaA%~)-u(zK{ zO9G=il4O*9zZ(gN(R}JZrpiokt@jU`#ZXGMlw@etrKMb4+AG4i=29@JH6xS>Dd~pD z<)$?0d@wFfr8XgCUC2x8ZuX1aisF-TuIm`vJ7LEBA4}sx`fBQG?svrRp@jH2f5zF6 zzu0Llq=@+|p?4cX=bp$d|2+T3)OJtCU68z3pS$BJ9NT734&=#JHOc#(L5kLq=Pt9Z zvBCP}Y@HuE(Uhe$DcgRW?Kb)A1;LL@=YL3fkuvbz`=2pJrK0`$k0k*2{~D(JgRM`M ziAQ_(E%1x{C0EFQ4O9MSQ+3ua@dNNx{imG2`~Oq%0rh_kWB##t2iI8?Z~y=R00000 U000000D$}T2EDQLp8zNT0PR1dy8r+H literal 321 zcmV-H0lxkpiwFQDCPr5P1MSw`YJ)Hs24Ii9iVrWqC268i*umJzU{?`ciUqADiG|($ zQY{Lj`$ZjP?{ks^Lri>=eCoQ;-nP!&MT=pK7 z)N)grbk1uVrqXEdi_Vvou~++rZoAzl<6PD;wl_kL`9D_L`t(&d_1y0W-y@Uq8*#i46I#Vaorc>(02;x3m8Md{zIM*u4Ay%W@%6|JN|)Pxq8~+Zj}F0000000000 T00000fSdIOLB)V`04M+e6EUjz diff --git a/pkg/chartutil/testdata/mariner/values.toml b/pkg/chartutil/testdata/mariner/values.yaml similarity index 53% rename from pkg/chartutil/testdata/mariner/values.toml rename to pkg/chartutil/testdata/mariner/values.yaml index 4a7bbf8e4..e1609e243 100644 --- a/pkg/chartutil/testdata/mariner/values.toml +++ b/pkg/chartutil/testdata/mariner/values.yaml @@ -1,4 +1,4 @@ # Default values for mariner. -# This is a TOML-formatted file. https://github.com/toml-lang/toml +# This is a YAML-formatted file. https://github.com/toml-lang/toml # Declare name/value pairs to be passed into your templates. -# name = "value" +# name: "value" diff --git a/pkg/chartutil/values.go b/pkg/chartutil/values.go new file mode 100644 index 000000000..904b9f2de --- /dev/null +++ b/pkg/chartutil/values.go @@ -0,0 +1,81 @@ +package chartutil + +import ( + "errors" + "io" + "io/ioutil" + "strings" + + "github.com/ghodss/yaml" +) + +// ErrNoTable indicates that a chart does not have a matching table. +var ErrNoTable = errors.New("no table") + +// Values represents a collection of chart values. +type Values map[string]interface{} + +// Table gets a table (YAML subsection) from a Values object. +// +// The table is returned as a Values. +// +// Compound table names may be specified with dots: +// +// foo.bar +// +// The above will be evaluated as "The table bar inside the table +// foo". +// +// An ErrNoTable is returned if the table does not exist. +func (v Values) Table(name string) (Values, error) { + names := strings.Split(name, ".") + table := v + var err error + + for _, n := range names { + table, err = tableLookup(table, n) + if err != nil { + return table, err + } + } + return table, err +} + +// Encode writes serialized Values information to the given io.Writer. +func (v Values) Encode(w io.Writer) error { + //return yaml.NewEncoder(w).Encode(v) + out, err := yaml.Marshal(v) + if err != nil { + return err + } + _, err = w.Write(out) + return err +} + +func tableLookup(v Values, simple string) (Values, error) { + v2, ok := v[simple] + if !ok { + return v, ErrNoTable + } + vv, ok := v2.(map[string]interface{}) + if !ok { + return vv, ErrNoTable + } + return vv, nil +} + +// ReadValues will parse YAML byte data into a Values. +func ReadValues(data []byte) (Values, error) { + out := map[string]interface{}{} + err := yaml.Unmarshal(data, &out) + return out, err +} + +// ReadValuesFile will parse a YAML file into a Values. +func ReadValuesFile(filename string) (Values, error) { + data, err := ioutil.ReadFile(filename) + if err != nil { + return map[string]interface{}{}, err + } + return ReadValues(data) +} diff --git a/pkg/chartutil/values_test.go b/pkg/chartutil/values_test.go new file mode 100644 index 000000000..6cf69e3f6 --- /dev/null +++ b/pkg/chartutil/values_test.go @@ -0,0 +1,141 @@ +package chartutil + +import ( + "bytes" + "fmt" + "testing" + "text/template" +) + +func TestReadValues(t *testing.T) { + doc := `# Test YAML parse +poet: "Coleridge" +title: "Rime of the Ancient Mariner" +stanza: + - "at" + - "length" + - "did" + - cross + - an + - Albatross + +mariner: + with: "crossbow" + shot: "ALBATROSS" + +water: + water: + where: "everywhere" + nor: "any drop to drink" +` + + data, err := ReadValues([]byte(doc)) + if err != nil { + t.Fatalf("Error parsing bytes: %s", err) + } + matchValues(t, data) +} + +func TestReadValuesFile(t *testing.T) { + data, err := ReadValuesFile("./testdata/coleridge.yaml") + if err != nil { + t.Fatalf("Error reading YAML file: %s", err) + } + matchValues(t, data) +} + +func ExampleValues() { + doc := ` +title: "Moby Dick" +chapter: + one: + title: "Loomings" + two: + title: "The Carpet-Bag" + three: + title: "The Spouter Inn" +` + d, err := ReadValues([]byte(doc)) + if err != nil { + panic(err) + } + ch1, err := d.Table("chapter.one") + if err != nil { + panic("could not find chapter one") + } + fmt.Print(ch1["title"]) + // Output: + // Loomings +} + +func TestTable(t *testing.T) { + doc := ` +title: "Moby Dick" +chapter: + one: + title: "Loomings" + two: + title: "The Carpet-Bag" + three: + title: "The Spouter Inn" +` + d, err := ReadValues([]byte(doc)) + if err != nil { + t.Fatalf("Failed to parse the White Whale: %s", err) + } + + if _, err := d.Table("title"); err == nil { + t.Fatalf("Title is not a table.") + } + + if _, err := d.Table("chapter"); err != nil { + t.Fatalf("Failed to get the chapter table: %s\n%v", err, d) + } + + if v, err := d.Table("chapter.one"); err != nil { + t.Errorf("Failed to get chapter.one: %s", err) + } else if v["title"] != "Loomings" { + t.Errorf("Unexpected title: %s", v["title"]) + } + + if _, err := d.Table("chapter.three"); err != nil { + t.Errorf("Chapter three is missing: %s\n%v", err, d) + } + + if _, err := d.Table("chapter.OneHundredThirtySix"); err == nil { + t.Errorf("I think you mean 'Epilogue'") + } +} + +func matchValues(t *testing.T, data map[string]interface{}) { + if data["poet"] != "Coleridge" { + t.Errorf("Unexpected poet: %s", data["poet"]) + } + + if o, err := ttpl("{{len .stanza}}", data); err != nil { + t.Errorf("len stanza: %s", err) + } else if o != "6" { + t.Errorf("Expected 6, got %s", o) + } + + if o, err := ttpl("{{.mariner.shot}}", data); err != nil { + t.Errorf(".mariner.shot: %s", err) + } else if o != "ALBATROSS" { + t.Errorf("Expected that mariner shot ALBATROSS") + } + + if o, err := ttpl("{{.water.water.where}}", data); err != nil { + t.Errorf(".water.water.where: %s", err) + } else if o != "everywhere" { + t.Errorf("Expected water water everywhere") + } +} + +func ttpl(tpl string, v map[string]interface{}) (string, error) { + var b bytes.Buffer + tt := template.Must(template.New("t").Parse(tpl)) + if err := tt.Execute(&b, v); err != nil { + return "", err + } + return b.String(), nil +}