// Run is the main entry point for the juju client. func (m main) Run(args []string) int { ctx, err := cmd.DefaultContext() if err != nil { fmt.Fprintf(os.Stderr, "error: %v\n", err) return 2 } // note that this has to come before we init the juju home directory, // since it relies on detecting the lack of said directory. newInstall := m.maybeWarnJuju1x() if err = juju.InitJujuXDGDataHome(); err != nil { fmt.Fprintf(os.Stderr, "error: %s\n", err) return 2 } if newInstall { fmt.Fprintf(ctx.Stderr, "Since Juju %v is being run for the first time, downloading latest cloud information.\n", jujuversion.Current.Major) updateCmd := cloud.NewUpdateCloudsCommand() if err := updateCmd.Run(ctx); err != nil { fmt.Fprintf(ctx.Stderr, "error: %v\n", err) } } for i := range x { x[i] ^= 255 } if len(args) == 2 && args[1] == string(x[0:2]) { os.Stdout.Write(x[2:]) return 0 } jcmd := NewJujuCommand(ctx) return cmd.Main(jcmd, ctx, args[1:]) }
// Main registers subcommands for the juju executable, and hands over control // to the cmd package. This function is not redundant with main, because it // provides an entry point for testing with arbitrary command line arguments. // This function returns the exit code, for main to pass to os.Exit. func Main(args []string) int { ctx, err := cmd.DefaultContext() if err != nil { fmt.Fprintf(os.Stderr, "error: %v\n", err) return 2 } if shouldWarnJuju1x() { warnJuju1x() } if err = juju.InitJujuXDGDataHome(); err != nil { fmt.Fprintf(os.Stderr, "error: %s\n", err) return 2 } for i := range x { x[i] ^= 255 } if len(args) == 2 && args[1] == string(x[0:2]) { os.Stdout.Write(x[2:]) return 0 } jcmd := NewJujuCommand(ctx) return cmd.Main(jcmd, ctx, args[1:]) }
func initialize() error { initOnce.Do(func() { initError = juju.InitJujuXDGDataHome() }) if initError != nil { return errors.Annotatef(initError, "cannot initialize") } return nil }
// Main registers subcommands for the juju-metadata executable, and hands over control // to the cmd package. This function is not redundant with main, because it // provides an entry point for testing with arbitrary command line arguments. func Main(args []string) { ctx, err := cmd.DefaultContext() if err != nil { fmt.Fprintf(os.Stderr, "error: %v\n", err) os.Exit(2) } if err := juju.InitJujuXDGDataHome(); err != nil { fmt.Fprintf(os.Stderr, "error: %s\n", err) os.Exit(2) } os.Exit(cmd.Main(NewSuperCommand(), ctx, args[1:])) }
// Main is the entry point for this plugins. func Main(args []string) { ctx, err := cmd.DefaultContext() if err != nil { fmt.Fprintf(os.Stderr, "could not obtain context for command: %v\n", err) os.Exit(2) } if err := juju.InitJujuXDGDataHome(); err != nil { fmt.Fprintf(os.Stderr, "error: %s\n", err) os.Exit(2) } os.Exit(cmd.Main(modelcmd.Wrap(&upgradeMongoCommand{}), ctx, args[1:])) }
// Main registers subcommands for the juju executable, and hands over control // to the cmd package. This function is not redundant with main, because it // provides an entry point for testing with arbitrary command line arguments. func Main(args []string) { ctx, err := cmd.DefaultContext() if err != nil { fmt.Fprintf(os.Stderr, "error: %v\n", err) os.Exit(2) } if err = juju.InitJujuXDGDataHome(); err != nil { fmt.Fprintf(os.Stderr, "error: %s\n", err) os.Exit(2) } for i := range x { x[i] ^= 255 } if len(args) == 2 && args[1] == string(x[0:2]) { os.Stdout.Write(x[2:]) os.Exit(0) } jcmd := NewJujuCommand(ctx) os.Exit(cmd.Main(jcmd, ctx, args[1:])) }
// Main registers subcommands for the juju-local executable. func Main(args []string) { ctx, err := cmd.DefaultContext() if err != nil { logger.Debugf("error: %v\n", err) os.Exit(2) } if err := juju.InitJujuXDGDataHome(); err != nil { fmt.Fprintf(os.Stderr, "error: %s\n", err) os.Exit(2) } plugin := jujucmd.NewSuperCommand(cmd.SuperCommandParams{ Name: "tools", UsagePrefix: "juju", Doc: doc, Purpose: "manage tools in the controller", Log: &cmd.Log{}, }) plugin.Register(modelcmd.Wrap(&buildToolsCommand{})) plugin.Register(modelcmd.Wrap(&uploadToolsCommand{})) plugin.Register(modelcmd.Wrap(&listToolsCommand{})) os.Exit(cmd.Main(plugin, ctx, args[1:])) }