Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package terraform for openSUSE:Factory 
checked in at 2022-07-18 18:37:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/terraform (Old)
 and      /work/SRC/openSUSE:Factory/.terraform.new.1523 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "terraform"

Mon Jul 18 18:37:45 2022 rev:37 rq:989978 version:1.2.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/terraform/terraform.changes      2022-07-04 
11:32:54.516026376 +0200
+++ /work/SRC/openSUSE:Factory/.terraform.new.1523/terraform.changes    
2022-07-18 18:37:46.546103661 +0200
@@ -1,0 +2,8 @@
+Sat Jul 16 19:11:52 UTC 2022 - Johannes Kastl <ka...@b1-systems.de>
+
+- update to 1.2.5:
+  * BUG FIXES:
+    - Report correct error message when a prerelease field is included in the 
required_version global constraint. (#31331)
+    - Fix case when extra blank lines were inserted into the plan for 
unchanged blocks. (#31330)
+
+-------------------------------------------------------------------

Old:
----
  terraform-1.2.4.obscpio
  terraform-1.2.4.tar.gz

New:
----
  terraform-1.2.5.obscpio
  terraform-1.2.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ terraform.spec ++++++
--- /var/tmp/diff_new_pack.0sT0wg/_old  2022-07-18 18:37:47.786105551 +0200
+++ /var/tmp/diff_new_pack.0sT0wg/_new  2022-07-18 18:37:47.790105558 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           terraform
-Version:        1.2.4
+Version:        1.2.5
 Release:        0
 Summary:        Tool for building infrastructure safely and efficiently
 License:        MPL-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.0sT0wg/_old  2022-07-18 18:37:47.830105618 +0200
+++ /var/tmp/diff_new_pack.0sT0wg/_new  2022-07-18 18:37:47.834105624 +0200
@@ -3,8 +3,8 @@
     <param name="url">https://github.com/hashicorp/terraform</param>
     <param name="scm">git</param>
     <param name="filename">terraform</param>
-    <param name="versionformat">1.2.4</param>
-    <param name="revision">v1.2.4</param>
+    <param name="versionformat">1.2.5</param>
+    <param name="revision">v1.2.5</param>
     <param name="exclude">.git</param>
   </service>
   <service name="tar" mode="disabled"/>
@@ -16,7 +16,7 @@
     <param name="basename">terraform</param>
   </service>
   <service name="go_modules" mode="disabled">
-    <param name="archive">terraform-1.2.4.tar.gz</param>
+    <param name="archive">terraform-1.2.5.tar.gz</param>
   </service>
 </services>
 

++++++ terraform-1.2.4.obscpio -> terraform-1.2.5.obscpio ++++++
/work/SRC/openSUSE:Factory/terraform/terraform-1.2.4.obscpio 
/work/SRC/openSUSE:Factory/.terraform.new.1523/terraform-1.2.5.obscpio differ: 
char 49, line 1

++++++ terraform-1.2.4.tar.gz -> terraform-1.2.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/CHANGELOG.md 
new/terraform-1.2.5/CHANGELOG.md
--- old/terraform-1.2.4/CHANGELOG.md    2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/CHANGELOG.md    2022-07-13 12:14:18.000000000 +0200
@@ -1,3 +1,10 @@
+## 1.2.5 (July 13, 2022)
+
+BUG FIXES:
+
+* Report correct error message when a prerelease field is included in the 
`required_version` global constraint. 
([#31331](https://github.com/hashicorp/terraform/issues/31331))
+* Fix case when extra blank lines were inserted into the plan for unchanged 
blocks. ([#31330](https://github.com/hashicorp/terraform/issues/31330))
+
 ## 1.2.4 (June 29, 2022)
 
 ENHANCEMENTS:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/go.mod new/terraform-1.2.5/go.mod
--- old/terraform-1.2.4/go.mod  2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/go.mod  2022-07-13 12:14:18.000000000 +0200
@@ -43,7 +43,7 @@
        github.com/hashicorp/go-retryablehttp v0.7.0
        github.com/hashicorp/go-tfe v1.0.0
        github.com/hashicorp/go-uuid v1.0.2
-       github.com/hashicorp/go-version v1.3.0
+       github.com/hashicorp/go-version v1.6.0
        github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f
        github.com/hashicorp/hcl/v2 v2.12.0
        github.com/hashicorp/terraform-config-inspect 
v0.0.0-20210209133302-4fd17a0faac2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/go.sum new/terraform-1.2.5/go.sum
--- old/terraform-1.2.4/go.sum  2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/go.sum  2022-07-13 12:14:18.000000000 +0200
@@ -428,8 +428,9 @@
 github.com/hashicorp/go-version v1.0.0/go.mod 
h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
 github.com/hashicorp/go-version v1.1.0/go.mod 
h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
 github.com/hashicorp/go-version v1.2.0/go.mod 
h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go-version v1.3.0 
h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04x7iNw=
 github.com/hashicorp/go-version v1.3.0/go.mod 
h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/go-version v1.6.0 
h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
+github.com/hashicorp/go-version v1.6.0/go.mod 
h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
 github.com/hashicorp/golang-lru v0.5.0/go.mod 
h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.1 
h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
 github.com/hashicorp/golang-lru v0.5.1/go.mod 
h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/internal/command/fmt.go 
new/terraform-1.2.5/internal/command/fmt.go
--- old/terraform-1.2.4/internal/command/fmt.go 2022-06-29 19:05:59.000000000 
+0200
+++ new/terraform-1.2.5/internal/command/fmt.go 2022-07-13 12:14:18.000000000 
+0200
@@ -528,15 +528,18 @@
 
 func (c *FmtCommand) Help() string {
        helpText := `
-Usage: terraform [global options] fmt [options] [DIR]
+Usage: terraform [global options] fmt [options] [TARGET]
 
-       Rewrites all Terraform configuration files to a canonical format. Both
-       configuration files (.tf) and variables files (.tfvars) are updated.
-       JSON files (.tf.json or .tfvars.json) are not modified.
-
-       If DIR is not specified then the current working directory will be used.
-       If DIR is "-" then content will be read from STDIN. The given content 
must
-       be in the Terraform language native syntax; JSON is not supported.
+  Rewrites all Terraform configuration files to a canonical format. Both
+  configuration files (.tf) and variables files (.tfvars) are updated.
+  JSON files (.tf.json or .tfvars.json) are not modified.
+
+  If TARGET is not specified, the command uses the current working directory.
+  If TARGET is a file, the command only uses the specified file. If TARGET
+  is "-" then the command reads from STDIN.
+
+  The content must be in the Terraform language native syntax; JSON is not
+  supported.
 
 Options:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/internal/command/format/diff.go 
new/terraform-1.2.5/internal/command/format/diff.go
--- old/terraform-1.2.4/internal/command/format/diff.go 2022-06-29 
19:05:59.000000000 +0200
+++ new/terraform-1.2.5/internal/command/format/diff.go 2022-07-13 
12:14:18.000000000 +0200
@@ -310,7 +310,7 @@
                        if result.skippedBlocks == 1 {
                                noun = "block"
                        }
-                       p.buf.WriteString("\n")
+                       p.buf.WriteString("\n\n")
                        p.buf.WriteString(strings.Repeat(" ", indent+2))
                        
p.buf.WriteString(fmt.Sprintf(p.color.Color("[dark_gray]# (%d unchanged %s 
hidden)[reset]"), result.skippedBlocks, noun))
                }
@@ -326,8 +326,6 @@
        path cty.Path,
        result *blockBodyDiffResult) bool {
 
-       blankBeforeBlocks := false
-
        attrNames := make([]string, 0, len(attrsS))
        displayAttrNames := make(map[string]string, len(attrsS))
        attrNameLen := 0
@@ -349,8 +347,8 @@
                }
        }
        sort.Strings(attrNames)
-       if len(attrNames) > 0 {
-               blankBeforeBlocks = true
+       if len(attrNames) == 0 {
+               return false
        }
 
        for _, name := range attrNames {
@@ -365,7 +363,7 @@
                }
        }
 
-       return blankBeforeBlocks
+       return true
 }
 
 // getPlanActionAndShow returns the action value
@@ -754,10 +752,7 @@
                        action = plans.Update
                }
 
-               if blankBefore {
-                       p.buf.WriteRune('\n')
-               }
-               skipped := p.writeNestedBlockDiff(name, nil, &blockS.Block, 
action, old, new, indent, path)
+               skipped := p.writeNestedBlockDiff(name, nil, &blockS.Block, 
action, old, new, indent, blankBefore, path)
                if skipped {
                        return 1
                }
@@ -790,10 +785,7 @@
                        commonLen = len(newItems)
                }
 
-               if blankBefore && (len(oldItems) > 0 || len(newItems) > 0) {
-                       p.buf.WriteRune('\n')
-               }
-
+               blankBeforeInner := blankBefore
                for i := 0; i < commonLen; i++ {
                        path := append(path, cty.IndexStep{Key: 
cty.NumberIntVal(int64(i))})
                        oldItem := oldItems[i]
@@ -802,27 +794,33 @@
                        if oldItem.RawEquals(newItem) {
                                action = plans.NoOp
                        }
-                       skipped := p.writeNestedBlockDiff(name, nil, 
&blockS.Block, action, oldItem, newItem, indent, path)
+                       skipped := p.writeNestedBlockDiff(name, nil, 
&blockS.Block, action, oldItem, newItem, indent, blankBeforeInner, path)
                        if skipped {
                                skippedBlocks++
+                       } else {
+                               blankBeforeInner = false
                        }
                }
                for i := commonLen; i < len(oldItems); i++ {
                        path := append(path, cty.IndexStep{Key: 
cty.NumberIntVal(int64(i))})
                        oldItem := oldItems[i]
                        newItem := cty.NullVal(oldItem.Type())
-                       skipped := p.writeNestedBlockDiff(name, nil, 
&blockS.Block, plans.Delete, oldItem, newItem, indent, path)
+                       skipped := p.writeNestedBlockDiff(name, nil, 
&blockS.Block, plans.Delete, oldItem, newItem, indent, blankBeforeInner, path)
                        if skipped {
                                skippedBlocks++
+                       } else {
+                               blankBeforeInner = false
                        }
                }
                for i := commonLen; i < len(newItems); i++ {
                        path := append(path, cty.IndexStep{Key: 
cty.NumberIntVal(int64(i))})
                        newItem := newItems[i]
                        oldItem := cty.NullVal(newItem.Type())
-                       skipped := p.writeNestedBlockDiff(name, nil, 
&blockS.Block, plans.Create, oldItem, newItem, indent, path)
+                       skipped := p.writeNestedBlockDiff(name, nil, 
&blockS.Block, plans.Create, oldItem, newItem, indent, blankBeforeInner, path)
                        if skipped {
                                skippedBlocks++
+                       } else {
+                               blankBeforeInner = false
                        }
                }
        case configschema.NestingSet:
@@ -845,10 +843,7 @@
                allItems = append(allItems, newItems...)
                all := cty.SetVal(allItems)
 
-               if blankBefore {
-                       p.buf.WriteRune('\n')
-               }
-
+               blankBeforeInner := blankBefore
                for it := all.ElementIterator(); it.Next(); {
                        _, val := it.Element()
                        var action plans.Action
@@ -871,9 +866,11 @@
                                newValue = val
                        }
                        path := append(path, cty.IndexStep{Key: val})
-                       skipped := p.writeNestedBlockDiff(name, nil, 
&blockS.Block, action, oldValue, newValue, indent, path)
+                       skipped := p.writeNestedBlockDiff(name, nil, 
&blockS.Block, action, oldValue, newValue, indent, blankBeforeInner, path)
                        if skipped {
                                skippedBlocks++
+                       } else {
+                               blankBeforeInner = false
                        }
                }
 
@@ -904,10 +901,7 @@
                }
                sort.Strings(allKeysOrder)
 
-               if blankBefore {
-                       p.buf.WriteRune('\n')
-               }
-
+               blankBeforeInner := blankBefore
                for _, k := range allKeysOrder {
                        var action plans.Action
                        oldValue := oldItems[k]
@@ -926,9 +920,11 @@
                        }
 
                        path := append(path, cty.IndexStep{Key: 
cty.StringVal(k)})
-                       skipped := p.writeNestedBlockDiff(name, &k, 
&blockS.Block, action, oldValue, newValue, indent, path)
+                       skipped := p.writeNestedBlockDiff(name, &k, 
&blockS.Block, action, oldValue, newValue, indent, blankBeforeInner, path)
                        if skipped {
                                skippedBlocks++
+                       } else {
+                               blankBeforeInner = false
                        }
                }
        }
@@ -974,11 +970,15 @@
        p.buf.WriteString("}")
 }
 
-func (p *blockBodyDiffPrinter) writeNestedBlockDiff(name string, label 
*string, blockS *configschema.Block, action plans.Action, old, new cty.Value, 
indent int, path cty.Path) bool {
+func (p *blockBodyDiffPrinter) writeNestedBlockDiff(name string, label 
*string, blockS *configschema.Block, action plans.Action, old, new cty.Value, 
indent int, blankBefore bool, path cty.Path) bool {
        if action == plans.NoOp && !p.verbose {
                return true
        }
 
+       if blankBefore {
+               p.buf.WriteRune('\n')
+       }
+
        p.buf.WriteString("\n")
        p.buf.WriteString(strings.Repeat(" ", indent))
        p.writeActionSymbol(action)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/internal/command/format/diff_test.go 
new/terraform-1.2.5/internal/command/format/diff_test.go
--- old/terraform-1.2.4/internal/command/format/diff_test.go    2022-06-29 
19:05:59.000000000 +0200
+++ new/terraform-1.2.5/internal/command/format/diff_test.go    2022-07-13 
12:14:18.000000000 +0200
@@ -3744,6 +3744,7 @@
           + new_field   = "new_value"
           + volume_type = "gp2"
         }
+
         # (1 unchanged block hidden)
     }
 `,
@@ -3809,6 +3810,7 @@
       ~ root_block_device "a" { # forces replacement
           ~ volume_type = "gp2" -> "different"
         }
+
         # (1 unchanged block hidden)
     }
 `,
@@ -3973,6 +3975,599 @@
     }
 `,
                },
+               "in-place update - multiple unchanged blocks": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          testSchema(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+        # (2 unchanged blocks hidden)
+    }
+`,
+               },
+               "in-place update - multiple blocks first changed": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          testSchema(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+      ~ root_block_device "b" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+
+        # (1 unchanged block hidden)
+    }
+`,
+               },
+               "in-place update - multiple blocks second changed": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          testSchema(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+      ~ root_block_device "a" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+
+        # (1 unchanged block hidden)
+    }
+`,
+               },
+               "in-place update - multiple blocks changed": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          testSchema(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+      ~ root_block_device "a" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+      ~ root_block_device "b" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+    }
+`,
+               },
+               "in-place update - multiple different unchanged blocks": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          
testSchemaMultipleBlocks(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+        # (2 unchanged blocks hidden)
+    }
+`,
+               },
+               "in-place update - multiple different blocks first changed": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          
testSchemaMultipleBlocks(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+      ~ leaf_block_device "b" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+
+        # (1 unchanged block hidden)
+    }
+`,
+               },
+               "in-place update - multiple different blocks second changed": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          
testSchemaMultipleBlocks(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+      ~ root_block_device "a" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+
+        # (1 unchanged block hidden)
+    }
+`,
+               },
+               "in-place update - multiple different blocks changed": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          
testSchemaMultipleBlocks(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+      ~ leaf_block_device "b" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+
+      ~ root_block_device "a" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+    }
+`,
+               },
+               "in-place update - mixed blocks unchanged": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          
testSchemaMultipleBlocks(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+        # (4 unchanged blocks hidden)
+    }
+`,
+               },
+               "in-place update - mixed blocks changed": {
+                       Action: plans.Update,
+                       Mode:   addrs.ManagedResourceMode,
+                       Before: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-BEFORE"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                               }),
+                       }),
+                       After: cty.ObjectVal(map[string]cty.Value{
+                               "id":  cty.StringVal("i-02ae66f368e8518a9"),
+                               "ami": cty.StringVal("ami-AFTER"),
+                               "disks": cty.MapVal(map[string]cty.Value{
+                                       "disk_a": 
cty.ObjectVal(map[string]cty.Value{
+                                               "mount_point": 
cty.StringVal("/var/diska"),
+                                               "size":        
cty.StringVal("50GB"),
+                                       }),
+                               }),
+                               "root_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                               }),
+                               "leaf_block_device": 
cty.MapVal(map[string]cty.Value{
+                                       "a": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp2"),
+                                       }),
+                                       "b": cty.ObjectVal(map[string]cty.Value{
+                                               "volume_type": 
cty.StringVal("gp3"),
+                                       }),
+                               }),
+                       }),
+                       RequiredReplace: cty.NewPathSet(),
+                       Schema:          
testSchemaMultipleBlocks(configschema.NestingMap),
+                       ExpectedOutput: `  # test_instance.example will be 
updated in-place
+  ~ resource "test_instance" "example" {
+      ~ ami   = "ami-BEFORE" -> "ami-AFTER"
+        id    = "i-02ae66f368e8518a9"
+        # (1 unchanged attribute hidden)
+
+      ~ leaf_block_device "b" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+
+      ~ root_block_device "b" {
+          ~ volume_type = "gp2" -> "gp3"
+        }
+
+        # (2 unchanged blocks hidden)
+    }
+`,
+               },
        }
        runTestCases(t, testCases)
 }
@@ -5447,6 +6042,50 @@
                                Block: configschema.Block{
                                        Attributes: 
map[string]*configschema.Attribute{
                                                "volume_type": {
+                                                       Type:     cty.String,
+                                                       Optional: true,
+                                                       Computed: true,
+                                               },
+                                       },
+                               },
+                               Nesting: nesting,
+                       },
+               },
+       }
+}
+
+func testSchemaMultipleBlocks(nesting configschema.NestingMode) 
*configschema.Block {
+       return &configschema.Block{
+               Attributes: map[string]*configschema.Attribute{
+                       "id":  {Type: cty.String, Optional: true, Computed: 
true},
+                       "ami": {Type: cty.String, Optional: true},
+                       "disks": {
+                               NestedType: &configschema.Object{
+                                       Attributes: 
map[string]*configschema.Attribute{
+                                               "mount_point": {Type: 
cty.String, Optional: true},
+                                               "size":        {Type: 
cty.String, Optional: true},
+                                       },
+                                       Nesting: nesting,
+                               },
+                       },
+               },
+               BlockTypes: map[string]*configschema.NestedBlock{
+                       "root_block_device": {
+                               Block: configschema.Block{
+                                       Attributes: 
map[string]*configschema.Attribute{
+                                               "volume_type": {
+                                                       Type:     cty.String,
+                                                       Optional: true,
+                                                       Computed: true,
+                                               },
+                                       },
+                               },
+                               Nesting: nesting,
+                       },
+                       "leaf_block_device": {
+                               Block: configschema.Block{
+                                       Attributes: 
map[string]*configschema.Attribute{
+                                               "volume_type": {
                                                        Type:     cty.String,
                                                        Optional: true,
                                                        Computed: true,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/internal/terraform/context_test.go 
new/terraform-1.2.5/internal/terraform/context_test.go
--- old/terraform-1.2.4/internal/terraform/context_test.go      2022-06-29 
19:05:59.000000000 +0200
+++ new/terraform-1.2.5/internal/terraform/context_test.go      2022-07-13 
12:14:18.000000000 +0200
@@ -68,6 +68,22 @@
                },
 
                {
+                       "prerelease doesn't match with inequality",
+                       "",
+                       "0.8.0",
+                       "> 0.7.0-beta",
+                       true,
+               },
+
+               {
+                       "prerelease doesn't match with equality",
+                       "",
+                       "0.7.0",
+                       "0.7.0-beta",
+                       true,
+               },
+
+               {
                        "module matches",
                        "context-required-version-module",
                        "0.5.0",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/internal/terraform/version_required.go 
new/terraform-1.2.5/internal/terraform/version_required.go
--- old/terraform-1.2.4/internal/terraform/version_required.go  2022-06-29 
19:05:59.000000000 +0200
+++ new/terraform-1.2.5/internal/terraform/version_required.go  2022-07-13 
12:14:18.000000000 +0200
@@ -27,6 +27,29 @@
        module := config.Module
 
        for _, constraint := range module.CoreVersionConstraints {
+               // Before checking if the constraints are met, check that we 
are not using any prerelease fields as these
+               // are not currently supported.
+               var prereleaseDiags tfdiags.Diagnostics
+               for _, required := range constraint.Required {
+                       if required.Prerelease() {
+                               prereleaseDiags = 
prereleaseDiags.Append(&hcl.Diagnostic{
+                                       Severity: hcl.DiagError,
+                                       Summary:  "Invalid required_version 
constraint",
+                                       Detail: fmt.Sprintf(
+                                               "Prerelease version constraints 
are not supported: %s. Remove the prerelease information from the constraint. 
Prerelease versions of terraform will match constraints using their version 
core only.",
+                                               required.String()),
+                                       Subject: constraint.DeclRange.Ptr(),
+                               })
+                       }
+               }
+
+               if len(prereleaseDiags) > 0 {
+                       // There were some prerelease fields in the 
constraints. Don't check the constraints as they will
+                       // fail, and populate the diagnostics for these 
constraints with the prerelease diagnostics.
+                       diags = diags.Append(prereleaseDiags)
+                       continue
+               }
+
                if !constraint.Required.Check(tfversion.SemVer) {
                        switch {
                        case len(config.Path) == 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/version/version.go 
new/terraform-1.2.5/version/version.go
--- old/terraform-1.2.4/version/version.go      2022-06-29 19:05:59.000000000 
+0200
+++ new/terraform-1.2.5/version/version.go      2022-07-13 12:14:18.000000000 
+0200
@@ -11,7 +11,7 @@
 )
 
 // The main version number that is being run at the moment.
-var Version = "1.2.4"
+var Version = "1.2.5"
 
 // A pre-release marker for the version. If this is "" (empty string)
 // then it means that it is a final release. Otherwise, this is a pre-release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/website/docs/cli/commands/fmt.mdx 
new/terraform-1.2.5/website/docs/cli/commands/fmt.mdx
--- old/terraform-1.2.4/website/docs/cli/commands/fmt.mdx       2022-06-29 
19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/cli/commands/fmt.mdx       2022-07-13 
12:14:18.000000000 +0200
@@ -45,12 +45,10 @@
 
 ## Usage
 
-Usage: `terraform fmt [options] [DIR]`
+Usage: `terraform fmt [options] [TARGET]`
 
 By default, `fmt` scans the current directory for configuration files. If
-the `dir` argument is provided then it will scan that given directory
-instead. If `dir` is a single dash (`-`) then `fmt` will read from standard
-input (STDIN).
+you provide a directory for the `target` argument, then `fmt` will scan that 
directory instead. If you provide a file, then `fmt` will process just that 
file. If you provide a single dash (`-`), then `fmt` will read from standard 
input (STDIN).
 
 The command-line flags are all optional. The list of available flags are:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/website/docs/cli/install/apt.mdx 
new/terraform-1.2.5/website/docs/cli/install/apt.mdx
--- old/terraform-1.2.4/website/docs/cli/install/apt.mdx        2022-06-29 
19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/cli/install/apt.mdx        2022-07-13 
12:14:18.000000000 +0200
@@ -27,34 +27,45 @@
 
 ## Repository Configuration
 
-The Terraform packages are signed using a private key controlled by HashiCorp,
-so in most situations the first step would be to configure your system to trust
-that HashiCorp key for package authentication. For example:
-
-```bash
-wget -qO - terraform.gpg https://apt.releases.hashicorp.com/gpg | sudo gpg 
--dearmor -o /usr/share/keyrings/terraform-archive-keyring.gpg
-```
-
-After registering the key, you can add the official HashiCorp repository to
-your system:
-
-```bash
-sudo echo "deb [arch=$(dpkg --print-architecture) 
signed-by=/usr/share/keyrings/terraform-archive-keyring.gpg] 
https://apt.releases.hashicorp.com $(lsb_release -cs) main" > 
/etc/apt/sources.list.d/terraform.list
-```
-
-The above command line uses the following sub-shell commands:
-
-* `dpkg --print-architecture` to determine your system's primary APT
-  architecture/ABI, such as `amd64`.
-* `lsb_release -cs` to find the distribution release codename for your current
-  system, such as `buster`, `groovy`, or `sid`.
-
-To install Terraform from the new repository:
-
-```bash
-sudo apt update
-sudo apt install terraform
-```
+The Terraform packages are signed using a private key controlled by HashiCorp, 
so you must configure your system to trust that HashiCorp key for package 
authentication.
+
+To configure your repository:
+
+1. Download the signing key to a new keyring.
+
+   ```bash
+   $ wget -O- https://apt.releases.hashicorp.com/gpg | \
+       gpg --dearmor | \
+       sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
+
+1. Verify the key's fingerprint.
+
+   ```bash
+   $ gpg --no-default-keyring \
+       --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
+       --fingerprint
+   ```
+   The fingerprint must match `E8A0 32E0 94D8 EB4E A189 D270 DA41 8C88 A321 
9F7B`. You can also verify the key on [Security at 
HashiCorp](https://www.hashicorp.com/security) under **Linux Package Checksum 
Verification**.
+
+1. Add the official HashiCorp repository to your system. The `lsb_release -cs` 
command finds the distribution release codename for your current system, such 
as `buster`, `groovy`, or `sid`.
+
+   ```bash
+   $ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
+       https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
+       sudo tee /etc/apt/sources.list.d/hashicorp.list
+   ```
+
+1. Download the package information from HashiCorp.
+
+  ```bash
+  $ sudo apt update
+  ```
+
+1. Install Terraform from the new repository.
+
+   ```bash
+   $ sudo apt install terraform
+   ```
 
 ## Supported Architectures
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terraform-1.2.4/website/docs/docs/glossary.mdx 
new/terraform-1.2.5/website/docs/docs/glossary.mdx
--- old/terraform-1.2.4/website/docs/docs/glossary.mdx  2022-06-29 
19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/docs/glossary.mdx  2022-07-13 
12:14:18.000000000 +0200
@@ -12,8 +12,8 @@
 <div style={{ columnWidth: '14em' }}>
 
 - [API](#api)
-- [Apply (noun)](#apply-noun-)
-- [Apply (verb)](#apply-verb-)
+- [Apply (noun)](#apply-noun)
+- [Apply (verb)](#apply-verb)
 - [Argument](#argument)
 - [Attribute](#attribute)
 - [Backend](#backend)
@@ -48,16 +48,16 @@
 - [Output Values](#output-values)
 - [OSS](#oss)
 - [Permissions](#permissions)
-- [Plan (verb)](#plan-verb-)
-- [Plan (noun, 1)](#plan-noun-1-)
+- [Plan (verb)](#plan-verb)
+- [Plan (noun, 1)](#plan-noun-1)
 - [Plan File](#plan-file)
 - [Policy](#policy)
 - [Policy Check](#policy-check)
 - [Policy Set](#policy-set)
 - [Private Terraform Registry](#private-terraform-registry)
-- [Private Terraform Enterprise (PTFE)](#private-terraform-enterprise-ptfe-)
+- [Private Terraform Enterprise (PTFE)](#private-terraform-enterprise-ptfe)
 - [(Terraform) Provider](#terraform-provider)
-- [Pull Request (PR)](#pull-request-pr-)
+- [Pull Request (PR)](#pull-request-pr)
 - [Queue](#queue)
 - [(Terraform) Registry](#terraform-registry)
 - [Remote Operations](#remote-operations)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/website/docs/docs/terraform-tools.mdx 
new/terraform-1.2.5/website/docs/docs/terraform-tools.mdx
--- old/terraform-1.2.4/website/docs/docs/terraform-tools.mdx   2022-06-29 
19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/docs/terraform-tools.mdx   2022-07-13 
12:14:18.000000000 +0200
@@ -11,7 +11,7 @@
 
 |Name | Maintainer |Description| Tutorial |
 |-----|------------|-----------|----------|
-|[Cloud Development Kit for Terraform (CDKTF)](/docs/cdktf/index.html)| 
HashiCorp | Use familiar programming languages to define and provision 
infrastructure. CDKTF currently supports TypeScript, Python, Java, C#, and Go 
(experimental).| [Write CDK for Terraform 
configurations](https://learn.hashicorp.com/collections/terraform/cdktf) |
+|[Cloud Development Kit for Terraform (CDKTF)](/cdktf)| HashiCorp | Use 
familiar programming languages to define and provision infrastructure. CDKTF 
currently supports TypeScript, Python, Java, C#, and Go (experimental).| [Write 
CDK for Terraform 
configurations](https://learn.hashicorp.com/collections/terraform/cdktf) |
 |[Visual Studio Code 
Extension](https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform)
 | HashiCorp | Enable syntax highlighting and other editing features in VS Code 
using the Terraform Language Server.| |
 |[Language Server](https://github.com/hashicorp/terraform-ls) | HashiCorp | 
Add support for the Terraform configuration language to editors that use the 
[Language Server 
Protocol](https://microsoft.github.io/language-server-protocol/), like Sublime 
Text, vim, emacs, etc.| |
 |[console](https://www.terraform.io/docs/cli/commands/console.html) | 
HashiCorp | Evaluate Terraform expressions and explore your Terraform project's 
state. The console helps you develop and debug your configuration, especially 
when working with complex state data and Terraform expressions.| [Develop 
Configuration with the 
Console](https://learn.hashicorp.com/tutorials/terraform/console) |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/website/docs/language/functions/format.mdx 
new/terraform-1.2.5/website/docs/language/functions/format.mdx
--- old/terraform-1.2.4/website/docs/language/functions/format.mdx      
2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/language/functions/format.mdx      
2022-07-13 12:14:18.000000000 +0200
@@ -7,7 +7,7 @@
 
 # `format` Function
 
-`format` produces a string by formatting a number of other values according
+The `format` function produces a string by formatting a number of other values 
according
 to a specification string. It is similar to the `printf` function in C, and
 other similar functions in other programming languages.
 
@@ -25,7 +25,7 @@
 ```
 
 Simple format verbs like `%s` and `%d` behave similarly to template
-interpolation syntax, which is often more readable:
+interpolation syntax, which is often more readable.
 
 ```
 > format("Hello, %s!", var.name)
@@ -34,8 +34,24 @@
 Hello, Valentina!
 ```
 
-The `format` function is therefore more useful when you use more complex format
-specifications, as described in the following section.
+The formatting verb `%#v` accepts a value of any type and presents it using 
JSON encoding, similar to jsonencode. This can be useful for describing the 
values given to a module in [custom condition 
check](/language/expressions/custom-conditions#error-messages) error messages.
+
+```
+> format("%#v", "hello")
+"\"hello\""
+> format("%#v", true)
+"true"
+> format("%#v", 1)
+"1"
+> format("%#v", {a = 1})
+"{\"a\":1}"
+> format("%#v", [true])
+"[true]"
+> format("%#v", null)
+"null"
+```
+
+The `format` function is most useful when you use more complex format 
specifications.
 
 ## Specification Syntax
 
@@ -45,13 +61,25 @@
 consecutive arguments and formatted as directed, as long as each given argument
 is convertible to the type required by the format verb.
 
-The specification may contain the following verbs:
+By default, `%` sequences consume successive arguments starting with the first.
+Introducing a `[n]` sequence immediately before the verb letter, where `n` is a
+decimal integer, explicitly chooses a particular value argument by its
+one-based index. Subsequent calls without an explicit index will then proceed
+with `n`+1, `n`+2, etc.
+
+The function produces an error if the format string requests an impossible
+conversion or access more arguments than are given. An error is produced also
+for an unsupported format verb.
+
+### Verbs
+
+The specification may contain the following verbs.
 
 | Verb  | Result                                                               
                     |
 | ----- | 
-----------------------------------------------------------------------------------------
 |
 | `%%`  | Literal percent sign, consuming no value.                            
                     |
-| `%v`  | Default formatting based on the value type, as described below.      
                     |
-| `%#v` | JSON serialization of the value, as with `jsonencode`.               
                     |
+| `%v`  | Default formatting based on the [value type](#default-format-verbs). 
Accepts all types, including items of `null`, `list`, and `map` types.          
                 |
+| `%#v` | JSON serialization of the value, as with `jsonencode`. Accepts all 
types, including items of `null`, `list`, and `map` types.  |
 | `%t`  | Convert to boolean and produce `true` or `false`.                    
                     |
 | `%b`  | Convert to integer number and produce binary representation.         
                     |
 | `%d`  | Convert to integer number and produce decimal representation.        
                     |
@@ -66,7 +94,9 @@
 | `%s`  | Convert to string and insert the string's characters.                
                     |
 | `%q`  | Convert to string and produce a JSON quoted string representation.   
                     |
 
-When `%v` is used, one of the following format verbs is chosen based on the 
value type:
+### Default Format Verbs
+
+When `%v` is used, Terraform chooses the appropriate format verb based on the 
value type.
 
 | Type      | Verb  |
 | --------- | ----- |
@@ -75,14 +105,14 @@
 | `bool`    | `%t`  |
 | any other | `%#v` |
 
-Null values produce the string `null` if formatted with `%v` or `%#v`, and
-cause an error for other verbs.
+Null values produce the string `null` if formatted with `%v` or `%#v`, and 
cause an error for other verbs.
+
+### Width Modifier
+
+Use a width modifier with an optional decimal number immediately
+preceding the verb letter to specify how many characters will be used to 
represent the value. You can specify precision after the (optional) width with 
a period (`.`) followed by a decimal number. If width or precision are omitted, 
Terraform selects default values based on the given value.
 
-A width modifier can be included with an optional decimal number immediately
-preceding the verb letter, to specify how many characters will be used to
-represent the value. Precision can be specified after the (optional) width
-with a period (`.`) followed by a decimal number. If width or precision are
-omitted then default values are selected based on the given value. For example:
+The following examples demonstrate example use cases for the width modifier.
 
 | Sequence | Result                       |
 | -------- | ---------------------------- |
@@ -91,8 +121,13 @@
 | `%.2f`   | Default width, precision 2.  |
 | `%9.2f`  | Width 9, precision 2.        |
 
-The following additional symbols can be used immediately after the `%` symbol
-to set additional flags:
+-> **Note:** Width and precision modifiers with non-numeric types such as
+strings (`%s`) are interpreted differently. Setting either width or precision 
to
+zero is the same as not including them at all.
+
+### Additional Format Options
+
+Use the following symbols immediately after the `%` symbol to set additional 
formatting requirements.
 
 | Symbol | Result                                                         |
 | ------ | -------------------------------------------------------------- |
@@ -101,19 +136,6 @@
 | `-`    | Pad the width with spaces on the right rather than the left.   |
 | `0`    | Pad the width with leading zeros rather than spaces.           |
 
-By default, `%` sequences consume successive arguments starting with the first.
-Introducing a `[n]` sequence immediately before the verb letter, where `n` is a
-decimal integer, explicitly chooses a particular value argument by its
-one-based index. Subsequent calls without an explicit index will then proceed
-with `n`+1, `n`+2, etc.
-
-The function produces an error if the format string requests an impossible
-conversion or access more arguments than are given. An error is produced also
-for an unsupported format verb.
-
--> **Note:** Width and precision modifiers with non-numeric types such as
-strings (`%s`) are interpreted differently. Setting either width or precision 
to
-zero is the same as not including them at all.
 
 ## Related Functions
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/website/docs/language/resources/provisioners/remote-exec.mdx
 
new/terraform-1.2.5/website/docs/language/resources/provisioners/remote-exec.mdx
--- 
old/terraform-1.2.4/website/docs/language/resources/provisioners/remote-exec.mdx
    2022-06-29 19:05:59.000000000 +0200
+++ 
new/terraform-1.2.5/website/docs/language/resources/provisioners/remote-exec.mdx
    2022-07-13 12:14:18.000000000 +0200
@@ -48,8 +48,9 @@
 
 The following arguments are supported:
 
-* `inline` - This is a list of command strings. They are executed in the order
-  they are provided. This cannot be provided with `script` or `scripts`.
+* `inline` - This is a list of command strings. The provisioner uses a default
+  shell unless you specify a shell as the first command (eg., `#!/bin/bash`). 
+  You cannot provide this with `script` or `scripts`.
 
 * `script` - This is a path (relative or absolute) to a local script that will
   be copied to the remote resource and then executed. This cannot be provided
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/website/docs/language/settings/backends/artifactory.mdx 
new/terraform-1.2.5/website/docs/language/settings/backends/artifactory.mdx
--- old/terraform-1.2.4/website/docs/language/settings/backends/artifactory.mdx 
2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/language/settings/backends/artifactory.mdx 
2022-07-13 12:14:18.000000000 +0200
@@ -3,7 +3,9 @@
 description: Terraform can store state in artifactory.
 ---
 
-# artifactory
+# artifactory (deprecated)
+
+-> **Note:** The `artifactory` backend is deprecated and will be removed in a 
future Terraform release.
 
 Stores the state as an artifact in a given repository in
 [Artifactory](https://www.jfrog.com/artifactory/).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/website/docs/language/settings/backends/etcd.mdx 
new/terraform-1.2.5/website/docs/language/settings/backends/etcd.mdx
--- old/terraform-1.2.4/website/docs/language/settings/backends/etcd.mdx        
2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/language/settings/backends/etcd.mdx        
2022-07-13 12:14:18.000000000 +0200
@@ -3,7 +3,9 @@
 description: Terraform can store state remotely in etcd 2.x.
 ---
 
-# etcd
+# etcd (deprecated)
+
+-> **Note:** The `etcd` backend is deprecated and will be removed in a future 
Terraform release.
 
 Stores the state in [etcd 
2.x](https://coreos.com/etcd/docs/latest/v2/README.html) at a given path.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/website/docs/language/settings/backends/etcdv3.mdx 
new/terraform-1.2.5/website/docs/language/settings/backends/etcdv3.mdx
--- old/terraform-1.2.4/website/docs/language/settings/backends/etcdv3.mdx      
2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/language/settings/backends/etcdv3.mdx      
2022-07-13 12:14:18.000000000 +0200
@@ -3,7 +3,9 @@
 description: Terraform can store state remotely in etcd 3.x.
 ---
 
-# etcdv3
+# etcdv3 (deprecated)
+
+-> **Note:** The `etcdv3` backend is deprecated and will be removed in a 
future Terraform release.
 
 Stores the state in the [etcd](https://etcd.io/) KV store with a given prefix.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/website/docs/language/settings/backends/manta.mdx 
new/terraform-1.2.5/website/docs/language/settings/backends/manta.mdx
--- old/terraform-1.2.4/website/docs/language/settings/backends/manta.mdx       
2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/language/settings/backends/manta.mdx       
2022-07-13 12:14:18.000000000 +0200
@@ -3,7 +3,9 @@
 description: Terraform can store state in manta.
 ---
 
-# manta
+# manta (deprecated)
+
+-> **Note:** The `manta` backend is deprecated and will be removed in a future 
Terraform release.
 
 Stores the state as an artifact in [Manta](https://www.joyent.com/manta).
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/website/docs/language/settings/backends/swift.mdx 
new/terraform-1.2.5/website/docs/language/settings/backends/swift.mdx
--- old/terraform-1.2.4/website/docs/language/settings/backends/swift.mdx       
2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/language/settings/backends/swift.mdx       
2022-07-13 12:14:18.000000000 +0200
@@ -3,7 +3,9 @@
 description: Terraform can store state remotely in Swift.
 ---
 
-# swift
+# swift (deprecated)
+
+-> **Note:** The `swift` backend is deprecated and will be removed in a future 
Terraform release.
 
 Stores the state as an artifact in 
[Swift](http://docs.openstack.org/developer/swift/latest/).
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terraform-1.2.4/website/docs/language/settings/terraform-cloud.mdx 
new/terraform-1.2.5/website/docs/language/settings/terraform-cloud.mdx
--- old/terraform-1.2.4/website/docs/language/settings/terraform-cloud.mdx      
2022-06-29 19:05:59.000000000 +0200
+++ new/terraform-1.2.5/website/docs/language/settings/terraform-cloud.mdx      
2022-07-13 12:14:18.000000000 +0200
@@ -29,7 +29,7 @@
 }
 ```
 
-If you do not specify the `hostname`, it defaults to `app.terraform.io` for 
Terraform Cloud. For Terraform Enterprise installations, include the `hostname` 
configuration argument.  
+If you do not specify the `hostname`, it defaults to `app.terraform.io` for 
Terraform Cloud. For Terraform Enterprise installations, include the 
[hostname](/cli/cloud/settings#hostname) configuration argument.  
 
 You cannot use the CLI integration and a [state 
backend](/language/settings/backends) in the same configuration; they are 
mutually exclusive. A configuration can only provide one `cloud` block and the 
`cloud` block cannot refer to named values like input variables, locals, or 
data source attributes.
 
Binary files old/terraform-1.2.4/website/img/docs/concrete-plan.png and 
new/terraform-1.2.5/website/img/docs/concrete-plan.png differ

++++++ terraform.obsinfo ++++++
--- /var/tmp/diff_new_pack.0sT0wg/_old  2022-07-18 18:37:48.830107142 +0200
+++ /var/tmp/diff_new_pack.0sT0wg/_new  2022-07-18 18:37:48.830107142 +0200
@@ -1,5 +1,5 @@
 name: terraform
-version: 1.2.4
-mtime: 1656522359
-commit: 9cc7dbd4f514431cee31155663c16d4f7f77f979
+version: 1.2.5
+mtime: 1657707258
+commit: 5139b2c096c474e8b077a3c92a0b132ae322a80d
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/terraform/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.terraform.new.1523/vendor.tar.gz differ: char 5, 
line 1

Reply via email to