-
Notifications
You must be signed in to change notification settings - Fork 21
/
provider.go
69 lines (55 loc) · 1.62 KB
/
provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package tfupdate
import (
"github.com/hashicorp/hcl2/hclwrite"
"github.com/pkg/errors"
"github.com/zclconf/go-cty/cty"
)
// ProviderUpdater is a updater implementation which updates the provider version constraint.
type ProviderUpdater struct {
name string
version string
}
// NewProviderUpdater is a factory method which returns an ProviderUpdater instance.
func NewProviderUpdater(name string, version string) (Updater, error) {
if len(name) == 0 {
return nil, errors.Errorf("failed to new provider updater. name is required.")
}
if len(version) == 0 {
return nil, errors.Errorf("failed to new provider updater. version is required.")
}
return &ProviderUpdater{
name: name,
version: version,
}, nil
}
// Update updates the provider version constraint.
// Note that this method will rewrite the AST passed as an argument.
func (u *ProviderUpdater) Update(f *hclwrite.File) error {
if err := u.updateTerraformBlock(f); err != nil {
return err
}
if err := u.updateProviderBlock(f); err != nil {
return err
}
return nil
}
func (u *ProviderUpdater) updateTerraformBlock(f *hclwrite.File) error {
tf := f.Body().FirstMatchingBlock("terraform", []string{})
if tf == nil {
return nil
}
p := tf.Body().FirstMatchingBlock("required_providers", []string{})
if p == nil {
return nil
}
p.Body().SetAttributeValue(u.name, cty.StringVal(u.version))
return nil
}
func (u *ProviderUpdater) updateProviderBlock(f *hclwrite.File) error {
p := f.Body().FirstMatchingBlock("provider", []string{u.name})
if p == nil {
return nil
}
p.Body().SetAttributeValue("version", cty.StringVal(u.version))
return nil
}