only split the prefix string once from the s3 key
Ensure that the prefix is only split off a single time when the workspace_key_prefix is a substring of the workspace or key name.
This commit is contained in:
parent
096847c9f7
commit
43d000625d
|
@ -53,7 +53,7 @@ func (b *Backend) keyEnv(key string) string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
parts := strings.SplitAfter(key, b.workspaceKeyPrefix)
|
parts := strings.SplitAfterN(key, b.workspaceKeyPrefix, 2)
|
||||||
|
|
||||||
if len(parts) < 2 {
|
if len(parts) < 2 {
|
||||||
return ""
|
return ""
|
||||||
|
|
|
@ -249,6 +249,35 @@ func TestBackendExtraPaths(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ensure we can separate the workspace prefix when it also matches the prefix
|
||||||
|
// of the workspace name itself.
|
||||||
|
func TestBackendPrefixInWorkspace(t *testing.T) {
|
||||||
|
testACC(t)
|
||||||
|
bucketName := fmt.Sprintf("terraform-remote-s3-test-%x", time.Now().Unix())
|
||||||
|
|
||||||
|
b := backend.TestBackendConfig(t, New(), map[string]interface{}{
|
||||||
|
"bucket": bucketName,
|
||||||
|
"key": "test-env.tfstate",
|
||||||
|
"workspace_key_prefix": "env",
|
||||||
|
}).(*Backend)
|
||||||
|
|
||||||
|
createS3Bucket(t, b.s3Client, bucketName)
|
||||||
|
defer deleteS3Bucket(t, b.s3Client, bucketName)
|
||||||
|
|
||||||
|
// get a state that contains the prefix as a substring
|
||||||
|
sMgr, err := b.State("env-1")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := sMgr.RefreshState(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := checkStateList(b, []string{"default", "env-1"}); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestKeyEnv(t *testing.T) {
|
func TestKeyEnv(t *testing.T) {
|
||||||
testACC(t)
|
testACC(t)
|
||||||
keyName := "some/paths/tfstate"
|
keyName := "some/paths/tfstate"
|
||||||
|
|
Loading…
Reference in New Issue