cmd/info.go (73 lines of code) (raw):
package cmd
import (
"encoding/json"
"fmt"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/Azure/draft/pkg/handlers"
)
type Format string
const (
JSON Format = "json"
)
var supportedDeploymentTypes = [...]string{
"helm",
"kustomize",
"manifests",
}
type infoCmd struct {
format string
info *draftInfo
}
// draftConfigInfo is a struct that contains information about the example usage of variables for a single draft.yaml
type draftConfigInfo struct {
Name string `json:"name"`
DisplayName string `json:"displayName,omitempty"`
VariableExampleValues map[string][]string `json:"variableExampleValues,omitempty"`
}
type draftInfo struct {
SupportedLanguages []draftConfigInfo `json:"supportedLanguages"`
SupportedDeploymentTypes [3]string `json:"supportedDeploymentTypes"`
}
func newInfoCmd() *cobra.Command {
ic := &infoCmd{}
var cmd = &cobra.Command{
Use: "info",
Short: "Prints draft supported values in machine-readable format",
Long: `This command prints information about the current draft environment and supported values such as supported dockerfile languages and deployment manifest types.`,
RunE: func(cmd *cobra.Command, args []string) error {
if err := ic.run(); err != nil {
return err
}
return nil
},
}
f := cmd.Flags()
f.StringVarP(&ic.format, "format", "f", ".", "specify the format to print draft information in (json, yaml, etc)")
return cmd
}
func (ic *infoCmd) run() error {
log.Debugf("getting supported languages")
supportedDockerfileTemplates := handlers.GetTemplatesByType(handlers.TemplateTypeDockerfile)
languagesInfo := make([]draftConfigInfo, 0)
for _, template := range supportedDockerfileTemplates {
newConfig := draftConfigInfo{
Name: template.Config.TemplateName,
DisplayName: template.Config.DisplayName,
VariableExampleValues: template.Config.GetVariableExampleValues(),
}
languagesInfo = append(languagesInfo, newConfig)
}
ic.info = &draftInfo{
SupportedLanguages: languagesInfo,
SupportedDeploymentTypes: supportedDeploymentTypes,
}
infoText, err := json.MarshalIndent(ic.info, "", " ")
if err != nil {
return fmt.Errorf("could not marshal draft info into json: %w", err)
}
fmt.Println(string(infoText))
return nil
}
func init() {
rootCmd.AddCommand(newInfoCmd())
}