mirror of https://github.com/databricks/cli.git
Pass `USERPROFILE` environment variable to Terraform (#1001)
## Changes It appears that `USERPROFILE` env variable indicates where Azure CLI stores configuration data (aka `.azure` folder). https://learn.microsoft.com/en-us/cli/azure/azure-cli-configuration#cli-configuration-file Passing it to terraform executable allows it to correctly authenticate using Azure CLI. Fixes #983 ## Tests Ran deployment on Window VM before and after the fix.
This commit is contained in:
parent
fa89db57e9
commit
48e293c72c
|
@ -81,6 +81,13 @@ func inheritEnvVars(ctx context.Context, environ map[string]string) error {
|
||||||
environ["HOME"] = home
|
environ["HOME"] = home
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Include $USERPROFILE in set of environment variables to pass along.
|
||||||
|
// This variable is used by Azure CLI on Windows to find stored credentials and metadata
|
||||||
|
userProfile, ok := env.Lookup(ctx, "USERPROFILE")
|
||||||
|
if ok {
|
||||||
|
environ["USERPROFILE"] = userProfile
|
||||||
|
}
|
||||||
|
|
||||||
// Include $PATH in set of environment variables to pass along.
|
// Include $PATH in set of environment variables to pass along.
|
||||||
// This is necessary to ensure that our Terraform provider can use the
|
// This is necessary to ensure that our Terraform provider can use the
|
||||||
// same auxiliary programs (e.g. `az`, or `gcloud`) as the CLI.
|
// same auxiliary programs (e.g. `az`, or `gcloud`) as the CLI.
|
||||||
|
@ -113,8 +120,6 @@ func setTempDirEnvVars(ctx context.Context, environ map[string]string, b *bundle
|
||||||
environ["TMP"] = v
|
environ["TMP"] = v
|
||||||
} else if v, ok := env.Lookup(ctx, "TEMP"); ok {
|
} else if v, ok := env.Lookup(ctx, "TEMP"); ok {
|
||||||
environ["TEMP"] = v
|
environ["TEMP"] = v
|
||||||
} else if v, ok := env.Lookup(ctx, "USERPROFILE"); ok {
|
|
||||||
environ["USERPROFILE"] = v
|
|
||||||
} else {
|
} else {
|
||||||
tmpDir, err := b.CacheDir(ctx, "tmp")
|
tmpDir, err := b.CacheDir(ctx, "tmp")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -163,36 +163,6 @@ func TestSetTempDirEnvVarsForWindowWithUserProfileAndTempSet(t *testing.T) {
|
||||||
}, env)
|
}, env)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSetTempDirEnvVarsForWindowWithUserProfileSet(t *testing.T) {
|
|
||||||
if runtime.GOOS != "windows" {
|
|
||||||
t.SkipNow()
|
|
||||||
}
|
|
||||||
|
|
||||||
b := &bundle.Bundle{
|
|
||||||
Config: config.Root{
|
|
||||||
Path: t.TempDir(),
|
|
||||||
Bundle: config.Bundle{
|
|
||||||
Target: "whatever",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set environment variables
|
|
||||||
unsetEnv(t, "TMP")
|
|
||||||
unsetEnv(t, "TEMP")
|
|
||||||
t.Setenv("USERPROFILE", "c:\\foo\\c")
|
|
||||||
|
|
||||||
// compute env
|
|
||||||
env := make(map[string]string, 0)
|
|
||||||
err := setTempDirEnvVars(context.Background(), env, b)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// assert that we pass through the user profile
|
|
||||||
assert.Equal(t, map[string]string{
|
|
||||||
"USERPROFILE": "c:\\foo\\c",
|
|
||||||
}, env)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSetTempDirEnvVarsForWindowsWithoutAnyTempDirEnvVarsSet(t *testing.T) {
|
func TestSetTempDirEnvVarsForWindowsWithoutAnyTempDirEnvVarsSet(t *testing.T) {
|
||||||
if runtime.GOOS != "windows" {
|
if runtime.GOOS != "windows" {
|
||||||
t.SkipNow()
|
t.SkipNow()
|
||||||
|
@ -284,9 +254,18 @@ func TestInheritEnvVars(t *testing.T) {
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, map[string]string{
|
require.Equal(t, env["HOME"], "/home/testuser")
|
||||||
"HOME": "/home/testuser",
|
require.Equal(t, env["PATH"], "/foo:/bar")
|
||||||
"PATH": "/foo:/bar",
|
require.Equal(t, env["TF_CLI_CONFIG_FILE"], "/tmp/config.tfrc")
|
||||||
"TF_CLI_CONFIG_FILE": "/tmp/config.tfrc",
|
}
|
||||||
}, env)
|
|
||||||
|
func TestSetUserProfileFromInheritEnvVars(t *testing.T) {
|
||||||
|
t.Setenv("USERPROFILE", "c:\\foo\\c")
|
||||||
|
|
||||||
|
env := make(map[string]string, 0)
|
||||||
|
err := inheritEnvVars(context.Background(), env)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
assert.Contains(t, env, "USERPROFILE")
|
||||||
|
assert.Equal(t, env["USERPROFILE"], "c:\\foo\\c")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue