From 07c4c90772701885e5c10de7c580c443323cb33d Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Thu, 23 Nov 2023 10:04:54 +0100 Subject: [PATCH] Tolerate missing .databrickscfg file during `databricks auth login` (#1003) ## Changes `databricks configure` creates a new .databrickscfg if one doesn't already exist, but `databricks auth login` fails in this case. Because `databricks auth login` anyways writes out the config file, we gracefully handle this error and continue. ## Tests Unit test. ``` $ ls ~/.databrickscfg* /Users/miles/.databrickscfg.bak $ ./cli auth login Databricks Profile Name: test Databricks Host: https:// Profile test was successfully saved $ ls ~/.databrickscfg* /Users/miles/.databrickscfg /Users/miles/.databrickscfg.bak $ cat ~/.databrickscfg ; The profile defined in the DEFAULT section is to be used as a fallback when no profile is explicitly specified. [DEFAULT] [test] host = https:// auth_type = databricks-cli ``` --- cmd/auth/login.go | 4 +++- cmd/auth/login_test.go | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 cmd/auth/login_test.go diff --git a/cmd/auth/login.go b/cmd/auth/login.go index 8c6d52fc..bbc88c12 100644 --- a/cmd/auth/login.go +++ b/cmd/auth/login.go @@ -2,6 +2,7 @@ package auth import ( "context" + "errors" "fmt" "time" @@ -131,7 +132,8 @@ func setHost(ctx context.Context, profileName string, persistentAuth *auth.Persi _, profiles, err := databrickscfg.LoadProfiles(ctx, func(p databrickscfg.Profile) bool { return p.Name == profileName }) - if err != nil { + // Tolerate ErrNoConfiguration here, as we will write out a configuration as part of the login flow. + if !errors.Is(err, databrickscfg.ErrNoConfiguration) { return err } if persistentAuth.Host == "" { diff --git a/cmd/auth/login_test.go b/cmd/auth/login_test.go new file mode 100644 index 00000000..9b834bd0 --- /dev/null +++ b/cmd/auth/login_test.go @@ -0,0 +1,17 @@ +package auth + +import ( + "context" + "testing" + + "github.com/databricks/cli/libs/auth" + "github.com/databricks/cli/libs/env" + "github.com/stretchr/testify/assert" +) + +func TestSetHostDoesNotFailWithNoDatabrickscfg(t *testing.T) { + ctx := context.Background() + ctx = env.Set(ctx, "DATABRICKS_CONFIG_FILE", "./imaginary-file/databrickscfg") + err := setHost(ctx, "foo", &auth.PersistentAuth{Host: "test"}, []string{}) + assert.NoError(t, err) +}