terraform: ResourceConfig.DeepCopy
This implements DeepCopy, still need to implement Equals to make this more useful. Coming in the next commit but this still has its own full functionality + tests.
This commit is contained in:
parent
99e706b502
commit
56901e5cfd
|
@ -7,6 +7,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/config"
|
"github.com/hashicorp/terraform/config"
|
||||||
|
"github.com/mitchellh/copystructure"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ResourceProvisionerConfig is used to pair a provisioner
|
// ResourceProvisionerConfig is used to pair a provisioner
|
||||||
|
@ -93,6 +94,25 @@ func NewResourceConfig(c *config.RawConfig) *ResourceConfig {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopy performs a deep copy of the configuration. This makes it safe
|
||||||
|
// to modify any of the structures that are part of the resource config without
|
||||||
|
// affecting the original configuration.
|
||||||
|
func (c *ResourceConfig) DeepCopy() *ResourceConfig {
|
||||||
|
// Copy, this will copy all the exported attributes
|
||||||
|
copy, err := copystructure.Config{Lock: true}.Copy(c)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Force the type
|
||||||
|
result := copy.(*ResourceConfig)
|
||||||
|
|
||||||
|
// For the raw configuration, we can just use its own copy method
|
||||||
|
result.raw = c.raw.Copy()
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
// CheckSet checks that the given list of configuration keys is
|
// CheckSet checks that the given list of configuration keys is
|
||||||
// properly set. If not, errors are returned for each unset key.
|
// properly set. If not, errors are returned for each unset key.
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package terraform
|
package terraform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -212,6 +213,19 @@ func TestResourceConfigGet(t *testing.T) {
|
||||||
if !reflect.DeepEqual(v, tc.Value) {
|
if !reflect.DeepEqual(v, tc.Value) {
|
||||||
t.Fatalf("%d bad: %#v", i, v)
|
t.Fatalf("%d bad: %#v", i, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we have vars, we don't test copying
|
||||||
|
if len(tc.Vars) > 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test copying
|
||||||
|
t.Run(fmt.Sprintf("copy-%d", i), func(t *testing.T) {
|
||||||
|
copy := rc.DeepCopy()
|
||||||
|
if !reflect.DeepEqual(copy, rc) {
|
||||||
|
t.Fatalf("bad:\n\n%#v\n\n%#v", copy, rc)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue