Skip to content
This repository was archived by the owner on Feb 16, 2023. It is now read-only.

Commit af3917c

Browse files
authored
Merge pull request #389 from secrethub/fix/migrate-config-template
Fix `migrate config templates` command
2 parents d9dbccf + 30a6a0e commit af3917c

4 files changed

Lines changed: 39 additions & 33 deletions

File tree

internals/secrethub/migrate_config_envfile.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package secrethub
22

33
import (
4-
"bytes"
54
"fmt"
65
"io/ioutil"
76
"os"
@@ -40,18 +39,22 @@ func (cmd *MigrateConfigEnvfileCommand) Run() error {
4039
return err
4140
}
4241

43-
outFile, err := os.Create(".env")
42+
output, replaceCount, err := migrateTemplateTags(string(inFileContents), refMapping, "%s")
4443
if err != nil {
45-
return fmt.Errorf("cannot create output .env file: %s", err)
44+
return err
45+
}
46+
47+
inFileInfo, err := os.Stat(filepath)
48+
if err != nil {
49+
return ErrReadFile(filepath, err)
4650
}
47-
defer outFile.Close()
4851

49-
replaceCount, err := migrateTemplateTags(bytes.NewBuffer(inFileContents), outFile, refMapping, "%s")
52+
err = ioutil.WriteFile(".env", []byte(output), inFileInfo.Mode())
5053
if err != nil {
5154
return err
5255
}
5356

54-
fmt.Fprintf(cmd.io.Output(), "Created new .env file with %d op:// references\n", len(replaceCount))
57+
fmt.Fprintf(cmd.io.Output(), "Created new .env file with %d op:// references\n", replaceCount)
5558

5659
return nil
5760
}

internals/secrethub/migrate_config_references.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package secrethub
33
import (
44
"fmt"
55
"io/ioutil"
6+
"os"
67
"regexp"
78
"strings"
89

@@ -60,7 +61,12 @@ func migrateReferences(inFile string, outFile string, mapping referenceMapping)
6061
return nil, fmt.Errorf("no 1Password equivalent present in your migration plan for the following secrets:\n- %s", strings.Join(misses, "\n- "))
6162
}
6263

63-
err = ioutil.WriteFile(outFile, []byte(output), 0666)
64+
inFileInfo, err := os.Stat(inFile)
65+
if err != nil {
66+
return nil, ErrReadFile(inFile, err)
67+
}
68+
69+
err = ioutil.WriteFile(outFile, []byte(output), inFileInfo.Mode())
6470
if err != nil {
6571
return nil, err
6672
}

internals/secrethub/migrate_config_templates.go

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package secrethub
22

33
import (
44
"fmt"
5-
"io"
65
"io/ioutil"
76
"os"
87
"regexp"
@@ -31,31 +30,35 @@ func (cmd *MigrateConfigTemplatesCommand) Run() error {
3130
refMapping.stripSecretHubURIScheme()
3231

3332
for _, filepath := range cmd.inFiles {
34-
file, err := os.Open(filepath)
33+
inFileContents, err := ioutil.ReadFile(filepath)
3534
if err != nil {
3635
return ErrReadFile(filepath, err)
3736
}
38-
defer file.Close()
3937

40-
replaceCount, err := migrateTemplateTags(file, file, refMapping, "{{ %s }}")
38+
output, replaceCount, err := migrateTemplateTags(string(inFileContents), refMapping, "{{ %s }}")
4139
if err != nil {
4240
return err
4341
}
4442

45-
fmt.Fprintf(cmd.io.Output(), "Updated %s with %d op:// references\n", filepath, len(replaceCount))
43+
inFileInfo, err := os.Stat(filepath)
44+
if err != nil {
45+
return ErrReadFile(filepath, err)
46+
}
47+
48+
err = ioutil.WriteFile(filepath, []byte(output), inFileInfo.Mode())
49+
if err != nil {
50+
return err
51+
}
52+
53+
fmt.Fprintf(cmd.io.Output(), "Updated %s with %d op:// references\n", filepath, replaceCount)
4654
}
4755

4856
return nil
4957
}
5058

51-
func migrateTemplateTags(inFile io.Reader, outFile io.Writer, mapping referenceMapping, formatString string) ([]string, error) {
52-
raw, err := ioutil.ReadAll(inFile)
53-
if err != nil {
54-
return nil, ErrReadFile(inFile, err)
55-
}
56-
59+
func migrateTemplateTags(inFileContents string, mapping referenceMapping, formatString string) (string, int, error) {
5760
var hits, misses []string
58-
output := regexpSecretTemplateTags.ReplaceAllStringFunc(string(raw), func(templateTag string) string {
61+
output := regexpSecretTemplateTags.ReplaceAllStringFunc(inFileContents, func(templateTag string) string {
5962
path := regexpSecretTemplatePath.FindString(templateTag)
6063
if path == "" {
6164
misses = append(misses, templateTag)
@@ -86,15 +89,10 @@ func migrateTemplateTags(inFile io.Reader, outFile io.Writer, mapping referenceM
8689
errMsg += "\nDid you specify every possible value for your template variables? E.g. --var varname1=a,b,c,d --var varname2=x,y,z"
8790
}
8891

89-
return nil, fmt.Errorf(errMsg)
90-
}
91-
92-
_, err = io.WriteString(outFile, output)
93-
if err != nil {
94-
return nil, err
92+
return "", 0, fmt.Errorf(errMsg)
9593
}
9694

97-
return hits, nil
95+
return output, len(hits), nil
9896
}
9997

10098
type MigrateConfigTemplatesCommand struct {

internals/secrethub/migrate_config_test.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package secrethub
22

33
import (
4-
"bytes"
54
"testing"
65

76
"github.com/secrethub/secrethub-go/internals/assert"
@@ -103,20 +102,20 @@ func TestMigrateTemplates(t *testing.T) {
103102
},
104103
} {
105104
t.Run(name, func(t *testing.T) {
106-
var out bytes.Buffer
105+
var out string
107106
m := referenceMapping(tc.mapping)
108107
m.stripSecretHubURIScheme()
109108
err := m.addVarPossibilities(tc.vars)
110109
assert.OK(t, err)
111110

112-
_, err = migrateTemplateTags(bytes.NewReader([]byte(tc.in)), &out, m, "{{ %s }}")
111+
out, _, err = migrateTemplateTags(tc.in, m, "{{ %s }}")
113112
if tc.expectedErr {
114113
assert.Equal(t, err != nil, true)
115114
return
116115
}
117116

118117
assert.OK(t, err)
119-
assert.Equal(t, out.String(), tc.expected)
118+
assert.Equal(t, out, tc.expected)
120119
})
121120
}
122121
}
@@ -225,7 +224,7 @@ func TestMigrateEnvfile(t *testing.T) {
225224
},
226225
} {
227226
t.Run(name, func(t *testing.T) {
228-
var out bytes.Buffer
227+
var out string
229228
m := referenceMapping(tc.mapping)
230229
m.stripSecretHubURIScheme()
231230
err := m.addVarPossibilities(tc.vars)
@@ -237,7 +236,7 @@ func TestMigrateEnvfile(t *testing.T) {
237236
return err
238237
}
239238

240-
_, err = migrateTemplateTags(bytes.NewReader([]byte(tc.in)), &out, m, "%s")
239+
out, _, err = migrateTemplateTags(tc.in, m, "%s")
241240
return err
242241
}()
243242

@@ -247,7 +246,7 @@ func TestMigrateEnvfile(t *testing.T) {
247246
}
248247

249248
assert.OK(t, err)
250-
assert.Equal(t, out.String(), tc.expected)
249+
assert.Equal(t, out, tc.expected)
251250
})
252251
}
253252
}

0 commit comments

Comments
 (0)