11package cmd_package
22
33import (
4+ "github.com/sirupsen/logrus"
45 "os"
56 "path/filepath"
67
78 _package "github.com/rancherlabs/corral/pkg/package"
8- "github.com/sirupsen/logrus"
99 "github.com/spf13/cobra"
1010 "gopkg.in/yaml.v3"
1111)
@@ -15,80 +15,66 @@ Create a package from existing package(s).
1515
1616Examples:
1717corral package template a b c OUT
18- corral package template -f config.yaml
18+ corral package template --description "my description" a b c OUT
1919`
2020
2121func NewCommandTemplate () * cobra.Command {
22+ var description string
23+
2224 cmd := & cobra.Command {
2325 Use : "template" ,
2426 Short : "Create a package from a template" ,
2527 Long : templateDescription ,
2628 Run : func (cmd * cobra.Command , args []string ) {
27- err := template (cmd , args )
28- if err != nil {
29- logrus .Fatalf ("Error rendering package template: %v" , err )
30- }
29+ template (args [len (args )- 1 ], description , args [:len (args )- 1 ]... )
3130 },
32- Args : cobra .MinimumNArgs (1 ),
31+ Args : cobra .MinimumNArgs (2 ),
3332 }
3433
35- cmd .Flags ().StringP ( "file" , "f " , "" , "yaml file to define template values " )
34+ cmd .Flags ().StringVar ( & description , "description " , "" , "description of the rendered package " )
3635
3736 return cmd
3837}
3938
4039// embed a template
41- func template (cmd * cobra.Command , args []string ) error {
42- file , err := cmd .Flags ().GetString ("file" )
43- if err != nil {
44- return err
45- }
46-
47- body , err := os .ReadFile (file )
48- if err != nil {
49- return err
50- }
51-
52- var t _package.TemplateSpec
53-
54- if err = yaml .Unmarshal (body , & t ); err != nil {
55- return err
56- }
40+ func template (name , description string , packages ... string ) {
41+ pkgs := make ([]_package.Package , len (packages ))
5742
58- srcs := append (t .Packages , args [:len (args )- 1 ]... )
59- pkgs := make ([]_package.Package , len (srcs ))
60-
61- for i , p := range srcs {
43+ for i , p := range packages {
6244 pkg , err := _package .LoadPackage (p ) // ensures pkg is in cache
6345 if err != nil {
64- return err
46+ logrus . Fatalf ( "failed to load [%s] package" , p )
6547 }
6648 pkgs [i ] = pkg
6749 }
6850
69- name := args [len (args )- 1 ]
70-
7151 manifest , err := _package .MergePackages (name , pkgs )
7252 if err != nil {
73- return err
53+ logrus . Fatal ( err )
7454 }
7555
76- manifest .Description = t .Description
56+ if description == "" {
57+ for i := range pkgs {
58+ if i > 0 {
59+ description += "\n "
60+ }
7761
78- buf , err := yaml .Marshal (manifest )
79- if err != nil {
80- return err
62+ if pkgs [i ].Description != "" {
63+ description += pkgs [i ].Description
64+ }
65+ }
8166 }
67+ manifest .Description = description
8268
83- err = _package .ValidateManifest (buf )
84- if err != nil {
85- return err
86- }
69+ buf , _ := yaml .Marshal (manifest )
8770
8871 err = os .WriteFile (filepath .Join (name , "manifest.yaml" ), buf , 0664 )
8972 if err != nil {
90- return err
73+ logrus . Fatal ( "failed to write manifest: " , err )
9174 }
9275
93- return nil
76+ err = _package .ValidateManifest (buf )
77+ if err != nil {
78+ logrus .Fatal ("rendered package is not a valid package: " , err )
79+ }
9480}
0 commit comments