diff --git a/cmd/root/auth.go b/cmd/root/auth.go index 2a0cb22e..a2cdd04f 100644 --- a/cmd/root/auth.go +++ b/cmd/root/auth.go @@ -83,12 +83,14 @@ func MustAccountClient(cmd *cobra.Command, args []string) error { // 2. 99% of admins will have access to just one account // hence, we don't need to create a special "DEFAULT_ACCOUNT" profile yet _, profiles, err := databrickscfg.LoadProfiles(cmd.Context(), databrickscfg.MatchAccountProfiles) - if err != nil { - return err - } - if len(profiles) == 1 { + if err == nil && len(profiles) == 1 { cfg.Profile = profiles[0].Name } + + // if there is no config file, we don't want to fail and instead just skip it + if err != nil && !errors.Is(err, databrickscfg.ErrNoConfiguration) { + return err + } } allowPrompt := !hasProfileFlag && !shouldSkipPrompt(cmd.Context()) diff --git a/cmd/root/auth_test.go b/cmd/root/auth_test.go index 30fa9a08..7864c254 100644 --- a/cmd/root/auth_test.go +++ b/cmd/root/auth_test.go @@ -181,3 +181,51 @@ func TestWorkspaceClientOrPrompt(t *testing.T) { }) }) } + +func TestMustAccountClientWorksWithDatabricksCfg(t *testing.T) { + testutil.CleanupEnvironment(t) + + dir := t.TempDir() + configFile := filepath.Join(dir, ".databrickscfg") + err := os.WriteFile( + configFile, + []byte(` + [account-1111] + host = https://accounts.azuredatabricks.net/ + account_id = 1111 + token = foobar + `), + 0755) + require.NoError(t, err) + + cmd := New(context.Background()) + + t.Setenv("DATABRICKS_CONFIG_FILE", configFile) + err = MustAccountClient(cmd, []string{}) + require.NoError(t, err) +} + +func TestMustAccountClientWorksWithNoDatabricksCfgButEnvironmentVariables(t *testing.T) { + testutil.CleanupEnvironment(t) + + ctx, tt := cmdio.SetupTest(context.Background()) + t.Cleanup(tt.Done) + cmd := New(ctx) + t.Setenv("DATABRICKS_HOST", "https://accounts.azuredatabricks.net/") + t.Setenv("DATABRICKS_TOKEN", "foobar") + t.Setenv("DATABRICKS_ACCOUNT_ID", "1111") + + err := MustAccountClient(cmd, []string{}) + require.NoError(t, err) +} + +func TestMustAccountClientErrorsWithNoDatabricksCfg(t *testing.T) { + testutil.CleanupEnvironment(t) + + ctx, tt := cmdio.SetupTest(context.Background()) + t.Cleanup(tt.Done) + cmd := New(ctx) + + err := MustAccountClient(cmd, []string{}) + require.ErrorContains(t, err, "no configuration file found at") +}