toolbox/toolbox-cmd-root-Make-toolbox-create-or-fall-back-to-a-conta.patch
Jindrich Novy 067c49f5d1 toolbox-0.0.99.2-2.el9
- Actually apply the patch to make 'toolbox' create or fall back to a
  container if possible
- Support logging into a registry if necessary
- Resolves: #1977343

Signed-off-by: Jindrich Novy <jnovy@redhat.com>
2021-07-05 13:14:16 +02:00

124 lines
3.5 KiB
Diff

From 6c86cabbe5da6e542b50c5c043b4d213c6279bbc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20M=C3=ADchal?= <harrymichal@seznam.cz>
Date: Fri, 25 Jun 2021 16:04:52 +0200
Subject: [PATCH] cmd/root: Make 'toolbox' create or fall back to a container
if possible
This makes 'toolbox', without any commands specified, behave a lot like
'toolbox enter'. When there aren't any toolbox containers, it will
offer to create a new container matching the same parameters passed to
the command. If there's just one toolbox container available, then it
will fall back to it.
This makes the command line interface a lot similar to that of
github.com/coreos/toolbox, which makes things easier for those
switching over from it.
Some changes by Debarshi Ray.
https://github.com/containers/toolbox/pull/811
---
src/cmd/root.go | 65 +++++++++++++++++++++++++++++++++------
test/system/002-help.bats | 8 -----
2 files changed, 55 insertions(+), 18 deletions(-)
diff --git a/src/cmd/root.go b/src/cmd/root.go
index d50135b9e963..7c4aef61eee8 100644
--- a/src/cmd/root.go
+++ b/src/cmd/root.go
@@ -177,17 +177,62 @@ func rootHelp(cmd *cobra.Command, args []string) {
}
func rootRun(cmd *cobra.Command, args []string) error {
- var builder strings.Builder
- fmt.Fprintf(&builder, "missing command\n")
- fmt.Fprintf(&builder, "\n")
- fmt.Fprintf(&builder, "create Create a new toolbox container\n")
- fmt.Fprintf(&builder, "enter Enter an existing toolbox container\n")
- fmt.Fprintf(&builder, "list List all existing toolbox containers and images\n")
- fmt.Fprintf(&builder, "\n")
- fmt.Fprintf(&builder, "Run '%s --help' for usage.", executableBase)
+ if len(args) != 0 {
+ panic("unexpected argument: commands known or unknown shouldn't reach here")
+ }
- errMsg := builder.String()
- return errors.New(errMsg)
+ if utils.IsInsideContainer() {
+ if !utils.IsInsideToolboxContainer() {
+ return errors.New("this is not a toolbox container")
+ }
+
+ if _, err := utils.ForwardToHost(); err != nil {
+ return err
+ }
+
+ return nil
+ }
+
+ container, image, release, err := utils.ResolveContainerAndImageNames("", "", "", "")
+ if err != nil {
+ return err
+ }
+
+ userShell := os.Getenv("SHELL")
+ if userShell == "" {
+ return errors.New("failed to get the current user's default shell")
+ }
+
+ command := []string{userShell, "-l"}
+
+ hostID, err := utils.GetHostID()
+ if err != nil {
+ return fmt.Errorf("failed to get the host ID: %w", err)
+ }
+
+ hostVariantID, err := utils.GetHostVariantID()
+ if err != nil {
+ return errors.New("failed to get the host VARIANT_ID")
+ }
+
+ var emitEscapeSequence bool
+
+ if hostID == "fedora" && (hostVariantID == "silverblue" || hostVariantID == "workstation") {
+ emitEscapeSequence = true
+ }
+
+ if err := runCommand(container,
+ true,
+ image,
+ release,
+ command,
+ emitEscapeSequence,
+ true,
+ false); err != nil {
+ return err
+ }
+
+ return nil
}
func rootUsage(cmd *cobra.Command) error {
diff --git a/test/system/002-help.bats b/test/system/002-help.bats
index 8a057ddb3818..4ff02c6215e7 100644
--- a/test/system/002-help.bats
+++ b/test/system/002-help.bats
@@ -4,14 +4,6 @@ load 'libs/bats-support/load'
load 'libs/bats-assert/load'
load 'libs/helpers.bash'
-@test "help: Try to run toolbox with no command (shows usage screen)" {
- run $TOOLBOX
-
- assert_failure
- assert_line --index 0 "Error: missing command"
- assert_output --partial "Run 'toolbox --help' for usage."
-}
-
@test "help: Run command 'help'" {
run $TOOLBOX help
--
2.31.1