Add templating package
This commit is contained in:
		
							parent
							
								
									d73972c1f7
								
							
						
					
					
						commit
						55ccdc8131
					
				
							
								
								
									
										5
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										5
									
								
								go.mod
								
								
								
								
							|  | @ -9,6 +9,9 @@ require ( | |||
| 	github.com/Azure/azure-event-hubs-go/v3 v3.3.7 | ||||
| 	github.com/Azure/azure-sdk-for-go v53.4.0+incompatible // indirect | ||||
| 	github.com/Azure/go-amqp v0.13.6 // indirect | ||||
| 	github.com/Masterminds/goutils v1.1.1 // indirect | ||||
| 	github.com/Masterminds/semver v1.5.0 // indirect | ||||
| 	github.com/Masterminds/sprig v2.22.0+incompatible | ||||
| 	github.com/fluxcd/notification-controller/api v0.15.0 | ||||
| 	github.com/fluxcd/pkg/apis/meta v0.10.0 | ||||
| 	github.com/fluxcd/pkg/runtime v0.12.0 | ||||
|  | @ -16,8 +19,10 @@ require ( | |||
| 	github.com/go-logr/logr v0.4.0 | ||||
| 	github.com/google/go-github/v32 v32.1.0 | ||||
| 	github.com/hashicorp/go-retryablehttp v0.6.8 | ||||
| 	github.com/huandu/xstrings v1.3.2 // indirect | ||||
| 	github.com/ktrysmt/go-bitbucket v0.6.5 | ||||
| 	github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 | ||||
| 	github.com/mitchellh/copystructure v1.2.0 // indirect | ||||
| 	github.com/mitchellh/mapstructure v1.4.1 // indirect | ||||
| 	github.com/onsi/ginkgo v1.16.4 | ||||
| 	github.com/onsi/gomega v1.13.0 | ||||
|  |  | |||
							
								
								
									
										12
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										12
									
								
								go.sum
								
								
								
								
							|  | @ -89,6 +89,12 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym | |||
| github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= | ||||
| github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= | ||||
| github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= | ||||
| github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= | ||||
| github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= | ||||
| github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= | ||||
| github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= | ||||
| github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= | ||||
| github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= | ||||
| github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= | ||||
| github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= | ||||
| github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= | ||||
|  | @ -338,6 +344,8 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m | |||
| github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= | ||||
| github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= | ||||
| github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | ||||
| 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/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | ||||
| github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= | ||||
| github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= | ||||
|  | @ -426,6 +434,8 @@ github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHS | |||
| github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= | ||||
| github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= | ||||
| github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= | ||||
| github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= | ||||
| github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= | ||||
| github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | ||||
| github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= | ||||
| github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | ||||
|  | @ -437,6 +447,8 @@ github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:F | |||
| github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= | ||||
| github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= | ||||
| github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||
| github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= | ||||
| github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= | ||||
| github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= | ||||
| github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= | ||||
| github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||||
|  |  | |||
|  | @ -0,0 +1,56 @@ | |||
| package template | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 
 | ||||
| 	"github.com/Masterminds/sprig" | ||||
| 	"html/template" | ||||
| 
 | ||||
| 	"github.com/fluxcd/pkg/runtime/events" | ||||
| ) | ||||
| 
 | ||||
| type templateData struct { | ||||
| 	InvolvedObject templateInvolvedObject | ||||
| 	Message        string | ||||
| 	Reason         string | ||||
| 	Metadata       templateMetadata | ||||
| } | ||||
| 
 | ||||
| type templateMetadata struct { | ||||
| 	Revision string | ||||
| } | ||||
| 
 | ||||
| type templateInvolvedObject struct { | ||||
| 	APIVersion string | ||||
| 	Kind       string | ||||
| 	Name       string | ||||
| 	Namespace  string | ||||
| } | ||||
| 
 | ||||
| func templateString(event events.Event, tmplString string) (string, error) { | ||||
| 	revString, ok := event.Metadata["revision"] | ||||
| 	if !ok { | ||||
| 		revString = "" | ||||
| 	} | ||||
| 
 | ||||
| 	data := templateData{ | ||||
| 		InvolvedObject: templateInvolvedObject{ | ||||
| 			APIVersion: event.InvolvedObject.APIVersion, | ||||
| 			Kind:       event.InvolvedObject.Kind, | ||||
| 			Namespace:  event.InvolvedObject.Namespace, | ||||
| 			Name:       event.InvolvedObject.Name, | ||||
| 		}, | ||||
| 		Message: event.Message, | ||||
| 		Reason:  event.Reason, | ||||
| 		Metadata: templateMetadata{ | ||||
| 			Revision: revString, | ||||
| 		}, | ||||
| 	} | ||||
| 	tmpl, err := template.New("base").Funcs(sprig.FuncMap()).Parse(tmplString) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	var result bytes.Buffer | ||||
| 	err = tmpl.Execute(&result, data) | ||||
| 	return result.String(), nil | ||||
| } | ||||
|  | @ -0,0 +1,28 @@ | |||
| package template | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/fluxcd/pkg/runtime/events" | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	corev1 "k8s.io/api/core/v1" | ||||
| ) | ||||
| 
 | ||||
| func TestBasic(t *testing.T) { | ||||
| 	event := events.Event{ | ||||
| 		Reason: "Test reason", | ||||
| 		InvolvedObject: corev1.ObjectReference{ | ||||
| 			APIVersion: "apps/v1", | ||||
| 			Kind:       "Deployment", | ||||
| 			Namespace:  "foo", | ||||
| 			Name:       "bar", | ||||
| 		}, | ||||
| 		Metadata: map[string]string{ | ||||
| 			"revision": "abcd123", | ||||
| 		}, | ||||
| 	} | ||||
| 	tmplString := "{{ .Reason }} - {{ .InvolvedObject.APIVersion }}/{{ .InvolvedObject.Kind }}/{{ .InvolvedObject.Namespace }}/{{ .InvolvedObject.Name }} - {{ .Metadata.Revision }}" | ||||
| 	result, err := templateString(event, tmplString) | ||||
| 	require.NoError(t, err) | ||||
| 	require.Equal(t, "Test reason - apps/v1/Deployment/foo/bar - abcd123", result) | ||||
| } | ||||
		Loading…
	
		Reference in New Issue