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://<HOST>
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://<HOST>
auth_type = databricks-cli
```
This commit is contained in:
Miles Yucht 2023-11-23 10:04:54 +01:00 committed by GitHub
parent d9fe2ab43d
commit 07c4c90772
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View File

@ -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 == "" {

17
cmd/auth/login_test.go Normal file
View File

@ -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)
}