Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3f65715

Browse files
feat: improve terraform lock file warning based on feedback
- Change from INFO to WARN level for better visibility of performance issues- Use go-cmp for better, more readable diff output instead of custom implementation- Write warning to error stream for better visibility- Update messaging to emphasize potential performance impact- Remove custom generateFileDiff function and related testsAddresses feedback from@johnstcn in PR review.Co-authored-by: kylecarbs <7122116+kylecarbs@users.noreply.github.com>
1 parent97c740d commit3f65715

File tree

2 files changed

+12
-78
lines changed

2 files changed

+12
-78
lines changed

‎provisioner/terraform/executor.go

Lines changed: 12 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"sync"
1616
"time"
1717

18+
"github.com/google/go-cmp/cmp"
1819
"github.com/hashicorp/go-version"
1920
tfjson"github.com/hashicorp/terraform-json"
2021
"go.opentelemetry.io/otel/attribute"
@@ -249,21 +250,22 @@ func (e *executor) init(ctx, killCtx context.Context, logr logSink) error {
249250

250251
// Check if .terraform.lock.hcl was modified after terraform init
251252
postInitLockFileContent,_:=os.ReadFile(lockFilePath)
252-
diff:=generateFileDiff(preInitLockFileContent,postInitLockFileContent)
253-
ifdiff!="" {
254-
// Log informational message about lock file changes with diff
255-
infoMsg:="INFO: .terraform.lock.hcl was modified during 'terraform init'. "+
256-
"This is normal when Terraform downloads providers or updates dependencies. "+
253+
if!bytes.Equal(preInitLockFileContent,postInitLockFileContent) {
254+
diff:=cmp.Diff(string(preInitLockFileContent),string(postInitLockFileContent))
255+
// Log warning message about lock file changes with diff
256+
warnMsg:="WARN: .terraform.lock.hcl was modified during 'terraform init'. "+
257+
"This may indicate that provider hashes are missing for your target architecture, "+
258+
"which can cause unnecessary provider downloads and slower workspace builds. "+
257259
"See https://developer.hashicorp.com/terraform/language/files/dependency-lock#understanding-lock-file-changes "+
258260
"for more information about lock file changes."
259261

260-
// Writeinfo message todebug stream
261-
ifoutWriter!=nil {
262-
_,_=outWriter.Write([]byte(infoMsg+"\n"))
263-
_,_=outWriter.Write([]byte("\nLock file changes:\n"+diff+"\n"))
262+
// Writewarning message toerror stream for visibility
263+
iferrWriter!=nil {
264+
_,_=errWriter.Write([]byte(warnMsg+"\n"))
265+
_,_=errWriter.Write([]byte("\nLock file changes:\n"+diff+"\n"))
264266
}
265267

266-
e.logger.Info(ctx,"terraform lock file modified during init",
268+
e.logger.Warn(ctx,"terraform lock file modified during init",
267269
slog.F("lock_file_path",lockFilePath),
268270
slog.F("diff",diff),
269271
)
@@ -290,48 +292,7 @@ func getTerraformLockFilePath(workdir string) string {
290292
returnfilepath.Join(workdir,".terraform.lock.hcl")
291293
}
292294

293-
// generateFileDiff generates a simple diff between two file contents.
294-
// Returns empty string if files are identical.
295-
funcgenerateFileDiff(beforeContent,afterContent []byte)string {
296-
ifbytes.Equal(beforeContent,afterContent) {
297-
return""
298-
}
299-
300-
// Simple line-by-line diff
301-
beforeLines:=strings.Split(string(beforeContent),"\n")
302-
afterLines:=strings.Split(string(afterContent),"\n")
303-
304-
vardiff strings.Builder
305-
diff.WriteString("--- .terraform.lock.hcl (before terraform init)\n")
306-
diff.WriteString("+++ .terraform.lock.hcl (after terraform init)\n")
307-
308-
// Simple diff showing added/removed lines
309-
beforeMap:=make(map[string]bool)
310-
for_,line:=rangebeforeLines {
311-
beforeMap[line]=true
312-
}
313-
314-
afterMap:=make(map[string]bool)
315-
for_,line:=rangeafterLines {
316-
afterMap[line]=true
317-
}
318295

319-
// Show removed lines
320-
for_,line:=rangebeforeLines {
321-
if!afterMap[line]&&strings.TrimSpace(line)!="" {
322-
diff.WriteString("- "+line+"\n")
323-
}
324-
}
325-
326-
// Show added lines
327-
for_,line:=rangeafterLines {
328-
if!beforeMap[line]&&strings.TrimSpace(line)!="" {
329-
diff.WriteString("+ "+line+"\n")
330-
}
331-
}
332-
333-
returndiff.String()
334-
}
335296

336297
// revive:disable-next-line:flag-parameter
337298
func (e*executor)plan(ctx,killCtx context.Context,env,vars []string,logrlogSink,metadata*proto.Metadata) (*proto.PlanComplete,error) {

‎provisioner/terraform/executor_internal_test.go

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -184,31 +184,4 @@ func TestGetTerraformLockFilePath(t *testing.T) {
184184
require.Equal(t,expected,got)
185185
}
186186

187-
funcTestGenerateFileDiff(t*testing.T) {
188-
t.Parallel()
189187

190-
// Test with identical content
191-
content:= []byte("line1\nline2\nline3")
192-
diff:=generateFileDiff(content,content)
193-
require.Equal(t,"",diff)
194-
195-
// Test with different content
196-
content1:= []byte("line1\nline2\nline3")
197-
content2:= []byte("line1\nmodified line2\nline3\nnew line4")
198-
diff=generateFileDiff(content1,content2)
199-
require.NotEmpty(t,diff)
200-
require.Contains(t,diff,"--- .terraform.lock.hcl (before terraform init)")
201-
require.Contains(t,diff,"+++ .terraform.lock.hcl (after terraform init)")
202-
require.Contains(t,diff,"- line2")
203-
require.Contains(t,diff,"+ modified line2")
204-
require.Contains(t,diff,"+ new line4")
205-
206-
// Test with empty before content (new file)
207-
emptyContent:= []byte("")
208-
newContent:= []byte("provider\"aws\" {\n version =\"5.0.0\"\n}")
209-
diff=generateFileDiff(emptyContent,newContent)
210-
require.NotEmpty(t,diff)
211-
require.Contains(t,diff,"+ provider\"aws\" {")
212-
require.Contains(t,diff,"+ version =\"5.0.0\"")
213-
require.Contains(t,diff,"+ }")
214-
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp