github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/plugins/juju-metadata/metadata.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package main 5 6 import ( 7 "os" 8 9 "github.com/juju/cmd" 10 "github.com/juju/loggo" 11 "github.com/juju/utils/featureflag" 12 13 "github.com/juju/juju/feature" 14 "github.com/juju/juju/juju" 15 "github.com/juju/juju/juju/osenv" 16 _ "github.com/juju/juju/provider/all" 17 ) 18 19 var logger = loggo.GetLogger("juju.plugins.metadata") 20 21 var metadataDoc = ` 22 Juju metadata is used to find the correct image and agent binaries when bootstrapping a 23 Juju model. 24 ` 25 26 // Main registers subcommands for the juju-metadata executable, and hands over control 27 // to the cmd package. This function is not redundant with main, because it 28 // provides an entry point for testing with arbitrary command line arguments. 29 func Main(args []string) { 30 ctx, err := cmd.DefaultContext() 31 if err != nil { 32 cmd.WriteError(os.Stderr, err) 33 os.Exit(2) 34 } 35 if err := juju.InitJujuXDGDataHome(); err != nil { 36 cmd.WriteError(ctx.Stderr, err) 37 os.Exit(2) 38 } 39 os.Exit(cmd.Main(NewSuperCommand(), ctx, args[1:])) 40 } 41 42 // NewSuperCommand creates the metadata plugin supercommand and registers the 43 // subcommands that it supports. 44 func NewSuperCommand() cmd.Command { 45 metadatacmd := cmd.NewSuperCommand(cmd.SuperCommandParams{ 46 Name: "metadata", 47 UsagePrefix: "juju", 48 Doc: metadataDoc, 49 Purpose: "tools for generating and validating image and tools metadata", 50 Log: &cmd.Log{}}) 51 52 metadatacmd.Register(newValidateImageMetadataCommand()) 53 metadatacmd.Register(newImageMetadataCommand()) 54 metadatacmd.Register(newToolsMetadataCommand()) 55 metadatacmd.Register(newValidateToolsMetadataCommand()) 56 metadatacmd.Register(newSignMetadataCommand()) 57 if featureflag.Enabled(feature.ImageMetadata) { 58 metadatacmd.Register(newListImagesCommand()) 59 metadatacmd.Register(newAddImageMetadataCommand()) 60 metadatacmd.Register(newDeleteImageMetadataCommand()) 61 } 62 return metadatacmd 63 } 64 65 func init() { 66 featureflag.SetFlagsFromEnvironment(osenv.JujuFeatureFlagEnvKey) 67 } 68 69 func main() { 70 Main(os.Args) 71 }