Upgrade hashicorp/consul-template dependency (#15092)
* Includes sprig template functions * Includes improvements to writeTo template function * Add sprig functions test, improve failure message
This commit is contained in:
parent
358f0f1e4b
commit
b30e7d3545
|
@ -0,0 +1,3 @@
|
|||
```release-note:improvement
|
||||
agent: Upgrade hashicorp/consul-template version for sprig template functions and improved writeTo function
|
||||
```
|
|
@ -675,7 +675,7 @@ func TestLoadConfigFile_Template(t *testing.T) {
|
|||
expectedTemplates: []*ctconfig.TemplateConfig{
|
||||
{
|
||||
Backup: pointerutil.BoolPtr(true),
|
||||
Command: pointerutil.StringPtr("restart service foo"),
|
||||
Command: []string{"restart service foo"},
|
||||
CommandTimeout: pointerutil.TimeDurationPtr("60s"),
|
||||
Contents: pointerutil.StringPtr("{{ keyOrDefault \"service/redis/maxconns@east-aws\" \"5\" }}"),
|
||||
CreateDestDirs: pointerutil.BoolPtr(true),
|
||||
|
@ -701,7 +701,7 @@ func TestLoadConfigFile_Template(t *testing.T) {
|
|||
Destination: pointerutil.StringPtr("/path/on/disk/where/template/will/render.txt"),
|
||||
ErrMissingKey: pointerutil.BoolPtr(false),
|
||||
CreateDestDirs: pointerutil.BoolPtr(true),
|
||||
Command: pointerutil.StringPtr("restart service foo"),
|
||||
Command: []string{"restart service foo"},
|
||||
Perms: pointerutil.FileModePtr(0o600),
|
||||
},
|
||||
{
|
||||
|
@ -786,7 +786,7 @@ func TestLoadConfigFile_Template_NoSinks(t *testing.T) {
|
|||
expectedTemplates: []*ctconfig.TemplateConfig{
|
||||
{
|
||||
Backup: pointerutil.BoolPtr(true),
|
||||
Command: pointerutil.StringPtr("restart service foo"),
|
||||
Command: []string{"restart service foo"},
|
||||
CommandTimeout: pointerutil.TimeDurationPtr("60s"),
|
||||
Contents: pointerutil.StringPtr("{{ keyOrDefault \"service/redis/maxconns@east-aws\" \"5\" }}"),
|
||||
CreateDestDirs: pointerutil.BoolPtr(true),
|
||||
|
@ -812,7 +812,7 @@ func TestLoadConfigFile_Template_NoSinks(t *testing.T) {
|
|||
Destination: pointerutil.StringPtr("/path/on/disk/where/template/will/render.txt"),
|
||||
ErrMissingKey: pointerutil.BoolPtr(false),
|
||||
CreateDestDirs: pointerutil.BoolPtr(true),
|
||||
Command: pointerutil.StringPtr("restart service foo"),
|
||||
Command: []string{"restart service foo"},
|
||||
Perms: pointerutil.FileModePtr(0o600),
|
||||
},
|
||||
{
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
@ -229,6 +230,7 @@ func TestServerRun(t *testing.T) {
|
|||
|
||||
testCases := map[string]struct {
|
||||
templateMap map[string]*templateTest
|
||||
expectedValues *secretRender
|
||||
expectError bool
|
||||
exitOnRetryFailure bool
|
||||
}{
|
||||
|
@ -318,6 +320,22 @@ func TestServerRun(t *testing.T) {
|
|||
expectError: true,
|
||||
exitOnRetryFailure: true,
|
||||
},
|
||||
"with sprig functions": {
|
||||
templateMap: map[string]*templateTest{
|
||||
"render_01": {
|
||||
template: &ctconfig.TemplateConfig{
|
||||
Contents: pointerutil.StringPtr(templateContentsWithSprigFunctions),
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedValues: &secretRender{
|
||||
Username: "APPUSER",
|
||||
Password: "passphrase",
|
||||
Version: "3",
|
||||
},
|
||||
expectError: false,
|
||||
exitOnRetryFailure: true,
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range testCases {
|
||||
|
@ -379,13 +397,15 @@ func TestServerRun(t *testing.T) {
|
|||
|
||||
// verify test file exists and has the content we're looking for
|
||||
var fileCount int
|
||||
var errs []string
|
||||
for _, template := range templatesToRender {
|
||||
if template.Destination == nil {
|
||||
t.Fatal("nil template destination")
|
||||
}
|
||||
content, err := os.ReadFile(*template.Destination)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
errs = append(errs, err.Error())
|
||||
continue
|
||||
}
|
||||
fileCount++
|
||||
|
||||
|
@ -393,12 +413,22 @@ func TestServerRun(t *testing.T) {
|
|||
if err := json.Unmarshal(content, &secret); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if secret.Username != "appuser" || secret.Password != "password" || secret.Version != "3" {
|
||||
t.Fatalf("secret didn't match: %#v", secret)
|
||||
var expectedValues secretRender
|
||||
if tc.expectedValues != nil {
|
||||
expectedValues = *tc.expectedValues
|
||||
} else {
|
||||
expectedValues = secretRender{
|
||||
Username: "appuser",
|
||||
Password: "password",
|
||||
Version: "3",
|
||||
}
|
||||
}
|
||||
if secret != expectedValues {
|
||||
t.Fatalf("secret didn't match, expected: %#v, got: %#v", expectedValues, secret)
|
||||
}
|
||||
}
|
||||
if fileCount != len(templatesToRender) {
|
||||
t.Fatalf("mismatch file to template: (%d) / (%d)", fileCount, len(templatesToRender))
|
||||
if len(errs) != 0 {
|
||||
t.Fatalf("Failed to find the expected files. Expected %d, got %d\n\t%s", len(templatesToRender), fileCount, strings.Join(errs, "\n\t"))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -529,3 +559,13 @@ var templateContentsPermDenied = `
|
|||
}
|
||||
{{ end }}
|
||||
`
|
||||
|
||||
var templateContentsWithSprigFunctions = `
|
||||
{{ with secret "kv/myapp/config"}}
|
||||
{
|
||||
{{ if .Data.data.username}}"username":"{{ .Data.data.username | sprig_upper }}",{{ end }}
|
||||
{{ if .Data.data.password }}"password":"{{ .Data.data.password | sprig_replace "word" "phrase" }}",{{ end }}
|
||||
{{ if .Data.metadata.version}}"version":"{{ .Data.metadata.version }}"{{ end }}
|
||||
}
|
||||
{{ end }}
|
||||
`
|
||||
|
|
2
go.mod
2
go.mod
|
@ -55,7 +55,7 @@ require (
|
|||
github.com/google/go-github v17.0.0+incompatible
|
||||
github.com/google/go-metrics-stackdriver v0.2.0
|
||||
github.com/hashicorp/cap v0.1.1
|
||||
github.com/hashicorp/consul-template v0.27.2-0.20211014231529-4ff55381f1c4
|
||||
github.com/hashicorp/consul-template v0.28.1-0.20220415203157-ebf2f3dfe745
|
||||
github.com/hashicorp/consul/api v1.12.0
|
||||
github.com/hashicorp/errwrap v1.1.0
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2
|
||||
|
|
9
go.sum
9
go.sum
|
@ -638,8 +638,6 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe
|
|||
github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
|
||||
github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
|
||||
github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
|
||||
github.com/gocql/gocql v0.0.0-20210401103645-80ab1e13e309 h1:8MHuCGYDXh0skFrLumkCMlt9C29hxhqNx39+Haemeqw=
|
||||
github.com/gocql/gocql v0.0.0-20210401103645-80ab1e13e309/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY=
|
||||
github.com/gocql/gocql v1.0.0 h1:UnbTERpP72VZ/viKE1Q1gPtmLvyTZTvuAstvSRydw/c=
|
||||
github.com/gocql/gocql v1.0.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
|
||||
github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
|
||||
|
@ -702,7 +700,6 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
|
|||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
|
@ -804,8 +801,8 @@ github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc
|
|||
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
|
||||
github.com/hashicorp/cap v0.1.1 h1:GjO4+9+H0wv/89YoEsxeVc2jIizL19r5v5l2lpaH8Kg=
|
||||
github.com/hashicorp/cap v0.1.1/go.mod h1:VfBvK2ULRyqsuqAnjgZl7HJ7/CGMC7ro4H5eXiZuun8=
|
||||
github.com/hashicorp/consul-template v0.27.2-0.20211014231529-4ff55381f1c4 h1:Heoq6IaSKwqOzAJMDg33LRu0GmNxVswQkIcREBFQD2E=
|
||||
github.com/hashicorp/consul-template v0.27.2-0.20211014231529-4ff55381f1c4/go.mod h1:cAi5bOqno7Ao5sFHu7O80wMOPnqcF5ADrTApWU4Lqx4=
|
||||
github.com/hashicorp/consul-template v0.28.1-0.20220415203157-ebf2f3dfe745 h1:91lxOf6Uo92mXbCR7s9IcHk2iqOngdZrqsvH4gZHqcs=
|
||||
github.com/hashicorp/consul-template v0.28.1-0.20220415203157-ebf2f3dfe745/go.mod h1:324C5f8AHp6JqhyfZcX4JsguFdNkKIpZvjZyeCf5W4w=
|
||||
github.com/hashicorp/consul/api v1.4.0/go.mod h1:xc8u05kyMa3Wjr9eEAsIAo3dg8+LywT5E/Cl7cNS5nU=
|
||||
github.com/hashicorp/consul/api v1.12.0 h1:k3y1FYv6nuKyNTqj6w9gXOx5r5CfLj/k/euUeBXj1OY=
|
||||
github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0=
|
||||
|
@ -1012,6 +1009,7 @@ github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKe
|
|||
github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87 h1:xixZ2bWeofWV68J+x6AzmKuVM/JWCQwkWm6GW/MUR6I=
|
||||
github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4=
|
||||
github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw=
|
||||
github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
||||
github.com/huaweicloud/golangsdk v0.0.0-20200304081349-45ec0797f2a4/go.mod h1:WQBcHRNX9shz3928lWEvstQJtAtYI7ks6XlgtRT9Tcw=
|
||||
|
@ -1144,7 +1142,6 @@ github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:A
|
|||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
|
||||
|
|
Loading…
Reference in New Issue