commit
						1eeca8ee03
					
				|  | @ -0,0 +1,29 @@ | |||
| run: | ||||
|   deadline: 10m | ||||
| linters-settings: | ||||
|   errcheck: | ||||
|     check-blank: false | ||||
|     ignore: fmt:.*,io/ioutil:^Read.*,Write | ||||
| 
 | ||||
| linters: | ||||
|   enable-all: true | ||||
|   disable: | ||||
|     - funlen | ||||
|     - gocognit | ||||
|     - godox | ||||
|     - gomnd | ||||
|     - gochecknoglobals | ||||
|     - gochecknoinits | ||||
|     - lll | ||||
|     - prealloc | ||||
|     - wsl | ||||
|     - gocyclo | ||||
|     - scopelint | ||||
|     - dupl | ||||
|     - gosec | ||||
|     - maligned | ||||
|     - testpackage | ||||
|     - goerr113 | ||||
|     - nakedret | ||||
|     - nestif | ||||
|     - godot | ||||
							
								
								
									
										6
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										6
									
								
								Makefile
								
								
								
								
							|  | @ -136,13 +136,13 @@ fmt: ## Verifies all files have been `gofmt`ed | |||
| 	@go fmt $(PACKAGES) | ||||
| 
 | ||||
| .PHONY: lint | ||||
| HAS_GOLINT := $(shell which golint) | ||||
| HAS_GOLINT := $(shell which golangci-lint) | ||||
| lint: ## Verifies `golint` passes
 | ||||
| 	@echo "+ $@" | ||||
| ifndef HAS_GOLINT | ||||
| 	go get -u golang.org/x/lint/golint | ||||
| 	go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.26.0 | ||||
| endif | ||||
| 	@golint $(PACKAGES) | ||||
| 	@golangci-lint run | ||||
| 
 | ||||
| .PHONY: goimports | ||||
| HAS_GOIMPORTS := $(shell which goimports) | ||||
|  |  | |||
|  | @ -13,10 +13,10 @@ import ( | |||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/apis" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/notifications" | ||||
| 	e "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/notifications/event" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/event" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/log" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/version" | ||||
|  | @ -119,7 +119,7 @@ func main() { | |||
| 		fatal(errors.Wrap(err, "failed to create Kubernetes client set"), *debug) | ||||
| 	} | ||||
| 
 | ||||
| 	if( resources.IsRouteAPIAvailable(clientSet) ) { | ||||
| 	if resources.IsRouteAPIAvailable(clientSet) { | ||||
| 		log.Log.Info("Route API found: Route creation will be performed") | ||||
| 	} | ||||
| 	c := make(chan e.Event) | ||||
|  |  | |||
							
								
								
									
										3
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										3
									
								
								go.mod
								
								
								
								
							|  | @ -13,13 +13,14 @@ require ( | |||
| 	github.com/go-logr/zapr v0.1.1 | ||||
| 	github.com/go-openapi/spec v0.19.4 | ||||
| 	github.com/golang/mock v1.3.1 | ||||
| 	github.com/golangci/golangci-lint v1.26.0 // indirect | ||||
| 	github.com/mailgun/mailgun-go/v3 v3.6.0 | ||||
| 	github.com/openshift/api v3.9.1-0.20190924102528-32369d4db2ad+incompatible | ||||
| 	github.com/operator-framework/operator-sdk v0.17.0 | ||||
| 	github.com/pkg/errors v0.9.1 | ||||
| 	github.com/robfig/cron v1.2.0 | ||||
| 	github.com/spf13/pflag v1.0.5 | ||||
| 	github.com/stretchr/testify v1.4.0 | ||||
| 	github.com/stretchr/testify v1.5.1 | ||||
| 	go.uber.org/zap v1.14.1 | ||||
| 	golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect | ||||
| 	golang.org/x/net v0.0.0-20200226121028-0de0cce0169b | ||||
|  |  | |||
							
								
								
									
										178
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										178
									
								
								go.sum
								
								
								
								
							|  | @ -26,9 +26,12 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L | |||
| github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= | ||||
| github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= | ||||
| github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||||
| github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= | ||||
| github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||||
| github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= | ||||
| github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= | ||||
| github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157 h1:hY39LwQHh+1kaovmIjOrlqnXNX6tygSRfLkkK33IkZU= | ||||
| github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= | ||||
| github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= | ||||
| github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= | ||||
| github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= | ||||
|  | @ -50,6 +53,8 @@ github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEY | |||
| github.com/NYTimes/gziphandler v1.0.1/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= | ||||
| github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= | ||||
| github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= | ||||
| github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= | ||||
| github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= | ||||
| github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= | ||||
| github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= | ||||
| github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= | ||||
|  | @ -59,6 +64,7 @@ github.com/Rican7/retry v0.1.0/go.mod h1:FgOROf8P5bebcC1DS0PdOQiqGUridaZvikzUmkF | |||
| github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= | ||||
| github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= | ||||
| github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= | ||||
| github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= | ||||
| github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||
| github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||
| github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | ||||
|  | @ -91,6 +97,8 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dR | |||
| github.com/bndr/gojenkins v0.0.0-20181125150310-de43c03cf849 h1:nV1eKvUlIKhH4/atJIT9tpClzSRTs7TIHS/dRY1EQCw= | ||||
| github.com/bndr/gojenkins v0.0.0-20181125150310-de43c03cf849/go.mod h1:J2FxlujWW87NJJrdysyctcDllRVYUONGGlHX16134P4= | ||||
| github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= | ||||
| github.com/bombsimon/wsl/v3 v3.0.0 h1:w9f49xQatuaeTJFaNP4SpiWSR5vfT6IstPtM62JjcqA= | ||||
| github.com/bombsimon/wsl/v3 v3.0.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= | ||||
| github.com/brancz/gojsontoyaml v0.0.0-20190425155809-e8bd32d46b3d/go.mod h1:IyUJYN1gvWjtLF5ZuygmxbnsAyP3aJS6cHzIuZY50B0= | ||||
| github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= | ||||
| github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= | ||||
|  | @ -155,6 +163,8 @@ github.com/coreos/prometheus-operator v0.35.1 h1:Cl/0axMpifGsKTNMwQB5PWciOSkNFa/ | |||
| github.com/coreos/prometheus-operator v0.35.1/go.mod h1:XHYZUStZWcwd1yk/1DjZv/fywqKIyAJ6pSwvIr+v9BQ= | ||||
| github.com/coreos/rkt v1.30.0/go.mod h1:O634mlH6U7qk87poQifK6M2rsFNt+FyUTWNMnP1hF1U= | ||||
| github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= | ||||
| github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= | ||||
| github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= | ||||
| github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= | ||||
| github.com/cznic/b v0.0.0-20180115125044-35e9bbe41f07/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8= | ||||
| github.com/cznic/fileutil v0.0.0-20180108211300-6a051e75936f/go.mod h1:8S58EK26zhXSxzv7NQFpnliaOQsmDUxvoQO3rt154Vg= | ||||
|  | @ -235,10 +245,12 @@ github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqL | |||
| github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= | ||||
| github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= | ||||
| github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= | ||||
| github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= | ||||
| github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= | ||||
| github.com/fatih/structtag v1.1.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= | ||||
| github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= | ||||
| github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= | ||||
| github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= | ||||
| github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||||
| github.com/fsouza/fake-gcs-server v1.7.0/go.mod h1:5XIRs4YvwNbNoz+1JF8j6KLAyDh7RHGAyAK3EP2EsNk= | ||||
| github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= | ||||
|  | @ -254,9 +266,13 @@ github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy | |||
| github.com/go-bindata/go-bindata v3.1.2+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= | ||||
| github.com/go-chi/chi v4.0.0+incompatible h1:SiLLEDyAkqNnw+T/uDTf3aFB9T4FTrwMpuYrgaRcnW4= | ||||
| github.com/go-chi/chi v4.0.0+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= | ||||
| github.com/go-critic/go-critic v0.4.1 h1:4DTQfT1wWwLg/hzxwD9bkdhDQrdJtxe6DUTadPlrIeE= | ||||
| github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= | ||||
| github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= | ||||
| github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | ||||
| github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | ||||
| github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0= | ||||
| github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= | ||||
| github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= | ||||
| github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | ||||
| github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= | ||||
|  | @ -264,6 +280,7 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7 | |||
| github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= | ||||
| github.com/go-logr/zapr v0.1.1 h1:qXBXPDdNncunGs7XeEpsJt8wCjYBygluzfdLO0G5baE= | ||||
| github.com/go-logr/zapr v0.1.1/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= | ||||
| github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= | ||||
| github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= | ||||
| github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | ||||
| github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | ||||
|  | @ -308,6 +325,27 @@ github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6m | |||
| github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= | ||||
| github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= | ||||
| github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | ||||
| github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= | ||||
| github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= | ||||
| github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8= | ||||
| github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= | ||||
| github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= | ||||
| github.com/go-toolsmith/astequal v1.0.0 h1:4zxD8j3JRFNyLN46lodQuqz3xdKSrur7U/sr0SDS/gQ= | ||||
| github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= | ||||
| github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= | ||||
| github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= | ||||
| github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= | ||||
| github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= | ||||
| github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= | ||||
| github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= | ||||
| github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= | ||||
| github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= | ||||
| github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= | ||||
| github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= | ||||
| github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= | ||||
| github.com/go-toolsmith/typep v1.0.0 h1:zKymWyA1TRYvqYrYDrfEMZULyrhcnGY3x7LDKU2XQaA= | ||||
| github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= | ||||
| github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= | ||||
| github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= | ||||
| github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= | ||||
| github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU= | ||||
|  | @ -316,10 +354,13 @@ github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8z | |||
| github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= | ||||
| github.com/gobuffalo/packr v1.30.1/go.mod h1:ljMyFO2EcrnzsHsN99cvbq055Y9OhRrIaviy289eRuk= | ||||
| github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= | ||||
| github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= | ||||
| github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= | ||||
| github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0= | ||||
| github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= | ||||
| github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= | ||||
| github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= | ||||
| github.com/gofrs/flock v0.7.1 h1:DP+LD/t0njgoPBvT5MJLeliUIVQR03hiKR6vezdwHlc= | ||||
| github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= | ||||
| github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= | ||||
| github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | ||||
|  | @ -352,6 +393,36 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y | |||
| 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/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= | ||||
| github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= | ||||
| github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= | ||||
| github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= | ||||
| github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 h1:YYWNAGTKWhKpcLLt7aSj/odlKrSrelQwlovBpDuf19w= | ||||
| github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= | ||||
| github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw= | ||||
| github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= | ||||
| github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 h1:pe9JHs3cHHDQgOFXJJdYkK6fLz2PWyYtP4hthoCMvs8= | ||||
| github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= | ||||
| github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee h1:J2XAy40+7yz70uaOiMbNnluTg7gyQhtGqLQncQh+4J8= | ||||
| github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= | ||||
| github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= | ||||
| github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= | ||||
| github.com/golangci/golangci-lint v1.26.0 h1:CLLGRSA9BLMiNvsWPXHioYAdfIx9tkgdVWyA6bIdYCo= | ||||
| github.com/golangci/golangci-lint v1.26.0/go.mod h1:tefbO6RcigFzvTnDC+Y51kntVGgkuCAVsC+mnfbPruc= | ||||
| github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI= | ||||
| github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= | ||||
| github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= | ||||
| github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= | ||||
| github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= | ||||
| github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= | ||||
| github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770 h1:EL/O5HGrF7Jaq0yNhBLucz9hTuRzj2LdwGBOaENgxIk= | ||||
| github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= | ||||
| github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 h1:leSNB7iYzLYSSx3J/s5sVf4Drkc68W2wm4Ixh/mr0us= | ||||
| github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= | ||||
| github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0 h1:HVfrLniijszjS1aiNg8JbBMO2+E1WIQ+j/gL4SQqGPg= | ||||
| github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= | ||||
| github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= | ||||
| github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= | ||||
| github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= | ||||
| github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= | ||||
| github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= | ||||
|  | @ -396,6 +467,8 @@ github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z | |||
| github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | ||||
| github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | ||||
| github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= | ||||
| github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3 h1:JVnpOZS+qxli+rgVl98ILOXVNbW+kb5wcxeGx8ShUIw= | ||||
| github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= | ||||
| github.com/gosuri/uitable v0.0.1/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= | ||||
| github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= | ||||
| github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 h1:6TSoaYExHper8PYsJu23GWVNOyYRCSnIFyxKgLSZ54w= | ||||
|  | @ -424,6 +497,7 @@ github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+ | |||
| github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | ||||
| github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= | ||||
| github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= | ||||
| github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= | ||||
| github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= | ||||
| github.com/heketi/heketi v9.0.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= | ||||
| github.com/heketi/rest v0.0.0-20180404230133-aa6a65207413/go.mod h1:BeS3M108VzVlmAue3lv2WcGuPAX94/KN63MUURzbYSI= | ||||
|  | @ -446,10 +520,15 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt | |||
| github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= | ||||
| github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= | ||||
| github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= | ||||
| github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a h1:GmsqmapfzSJkm28dhRoHz2tLRbJmqhU86IPgBtN3mmk= | ||||
| github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s= | ||||
| github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3 h1:jNYPNLe3d8smommaoQlK7LOA5ESyUJJ+Wf79ZtA7Vp4= | ||||
| github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= | ||||
| github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= | ||||
| github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= | ||||
| github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= | ||||
| github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= | ||||
| github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= | ||||
| github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= | ||||
| github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= | ||||
| github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= | ||||
|  | @ -469,7 +548,11 @@ github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46s | |||
| github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= | ||||
| github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= | ||||
| github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= | ||||
| github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= | ||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||
| github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= | ||||
| github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= | ||||
| github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | ||||
| github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | ||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= | ||||
|  | @ -479,7 +562,9 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN | |||
| github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||||
| github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||||
| github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= | ||||
| github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= | ||||
| github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | ||||
| github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= | ||||
| github.com/kshvakov/clickhouse v1.3.5/go.mod h1:DMzX7FxRymoNkVgizH0DWAL8Cur7wHLgx3MUnGwJqpE= | ||||
| github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= | ||||
| github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= | ||||
|  | @ -487,12 +572,14 @@ github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= | |||
| github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= | ||||
| github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= | ||||
| github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= | ||||
| github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= | ||||
| github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= | ||||
| github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= | ||||
| github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= | ||||
| github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= | ||||
| github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= | ||||
| github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | ||||
| github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= | ||||
| github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | ||||
| github.com/mailgun/mailgun-go/v3 v3.6.0 h1:oQWhyDTFjSiuO6vx1PRlfLZ7Fu+oK0Axn0UTREh3k/g= | ||||
| github.com/mailgun/mailgun-go/v3 v3.6.0/go.mod h1:E81I5Agcfi/u1szdehi6p6ttdRX/UD3Rq2SrUzwyFIU= | ||||
|  | @ -505,22 +592,30 @@ github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM | |||
| github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= | ||||
| github.com/maorfr/helm-plugin-utils v0.0.0-20181205064038-588190cb5e3b/go.mod h1:p3gwmRSFqbWw6plBpR0sKl3n3vpu8kX70gvCJKMvvCA= | ||||
| github.com/maorfr/helm-plugin-utils v0.0.0-20200216074820-36d2fcf6ae86/go.mod h1:p3gwmRSFqbWw6plBpR0sKl3n3vpu8kX70gvCJKMvvCA= | ||||
| github.com/maratori/testpackage v1.0.1 h1:QtJ5ZjqapShm0w5DosRjg0PRlSdAdlx+W6cCKoALdbQ= | ||||
| github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= | ||||
| github.com/markbates/inflect v1.0.4 h1:5fh1gzTFhfae06u3hzHYO9xe3l3v3nW5Pwt3naLTP5g= | ||||
| github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= | ||||
| github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= | ||||
| github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= | ||||
| github.com/martinlindhe/base36 v1.0.0/go.mod h1:+AtEs8xrBpCeYgSLoY/aJ6Wf37jtBuR0s35750M27+8= | ||||
| github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb h1:RHba4YImhrUVQDHUCe2BNSOz4tVy2yGyXhvYDvxGgeE= | ||||
| github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= | ||||
| github.com/mattbaird/jsonpatch v0.0.0-20171005235357-81af80346b1a/go.mod h1:M1qoD/MqPgTZIk0EWKB38wE28ACRfVcn+cU08jyArI0= | ||||
| github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= | ||||
| github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= | ||||
| github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= | ||||
| github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= | ||||
| github.com/mattn/go-isatty v0.0.6/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= | ||||
| github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= | ||||
| github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= | ||||
| github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= | ||||
| github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= | ||||
| github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= | ||||
| github.com/mattn/go-shellwords v1.0.9/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= | ||||
| github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= | ||||
| github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= | ||||
| github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= | ||||
| github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= | ||||
| github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= | ||||
| github.com/maxbrunsfeld/counterfeiter/v6 v6.2.1/go.mod h1:F9YacGpnZbLQMzuPI0rR6op21YvNu/RjL705LJJpM3k= | ||||
|  | @ -537,9 +632,11 @@ github.com/mistifyio/go-zfs v2.1.1+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfv | |||
| github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= | ||||
| github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= | ||||
| github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | ||||
| github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= | ||||
| github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= | ||||
| github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= | ||||
| github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= | ||||
| github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= | ||||
| github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= | ||||
| github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= | ||||
| github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= | ||||
|  | @ -553,16 +650,22 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb | |||
| github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= | ||||
| github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= | ||||
| github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= | ||||
| github.com/mozilla/tls-observatory v0.0.0-20200220173314-aae45faa4006/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= | ||||
| github.com/mrunalp/fileutils v0.0.0-20160930181131-4ee1cc9a8058/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= | ||||
| github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | ||||
| github.com/munnerz/goautoneg v0.0.0-20190414153302-2ae31c8b6b30/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | ||||
| github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= | ||||
| github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | ||||
| github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= | ||||
| github.com/nakabonne/nestif v0.3.0 h1:+yOViDGhg8ygGrmII72nV9B/zGxY188TYpfolntsaPw= | ||||
| github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c= | ||||
| github.com/nakagami/firebirdsql v0.0.0-20190310045651-3c02a58cfed8/go.mod h1:86wM1zFnC6/uDBfZGNwB65O+pR2OFi5q/YQaEUid1qA= | ||||
| github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= | ||||
| github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= | ||||
| github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= | ||||
| github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= | ||||
| github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= | ||||
| github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= | ||||
| github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= | ||||
| github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= | ||||
| github.com/onsi/ginkgo v1.4.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
|  | @ -570,10 +673,13 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W | |||
| github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= | ||||
| github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= | ||||
| github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | ||||
| github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | ||||
| github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | ||||
| github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= | ||||
| github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= | ||||
| github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= | ||||
| github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= | ||||
| github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= | ||||
|  | @ -616,9 +722,11 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 | |||
| github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= | ||||
| github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= | ||||
| github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= | ||||
| github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= | ||||
| github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= | ||||
| github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= | ||||
| github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= | ||||
| github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= | ||||
| github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= | ||||
| github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= | ||||
| github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | ||||
|  | @ -677,6 +785,7 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx | |||
| github.com/prometheus/prometheus v2.3.2+incompatible/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= | ||||
| github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= | ||||
| github.com/prometheus/tsdb v0.8.0/go.mod h1:fSI0j+IUQrDd7+ZtR9WKIGtoYAYAJUKcKhYLG25tN4g= | ||||
| github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= | ||||
| github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= | ||||
| github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= | ||||
| github.com/robfig/cron v0.0.0-20170526150127-736158dc09e1/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= | ||||
|  | @ -694,11 +803,19 @@ github.com/rubenv/sql-migrate v0.0.0-20191025130928-9355dd04f4b3/go.mod h1:WS0rl | |||
| github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= | ||||
| github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= | ||||
| github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= | ||||
| github.com/ryancurrah/gomodguard v1.0.4 h1:oCreMAt9GuFXDe9jW4HBpc3GjdX3R/sUEcLAGh1zPx8= | ||||
| github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE= | ||||
| github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= | ||||
| github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= | ||||
| github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= | ||||
| github.com/securego/gosec v0.0.0-20200316084457-7da9f46445fd h1:qB+l4fYZsH78xORC1aqVS0zNmgkQp4rkj2rvfxQMtzc= | ||||
| github.com/securego/gosec v0.0.0-20200316084457-7da9f46445fd/go.mod h1:NurAFZsWJAEZjogSwdVPlHkOZB3DOAU7gsPP8VFZCHc= | ||||
| github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= | ||||
| github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= | ||||
| github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= | ||||
| github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= | ||||
| github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= | ||||
| github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= | ||||
| github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= | ||||
| github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= | ||||
| github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= | ||||
|  | @ -709,17 +826,22 @@ github.com/sirupsen/logrus v1.5.0 h1:1N5EYkVAPEywqZRJd7cwnRtCb6xJx7NH3T3WUTF980Q | |||
| github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo= | ||||
| github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | ||||
| github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | ||||
| github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | ||||
| github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= | ||||
| github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= | ||||
| github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs= | ||||
| github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= | ||||
| github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | ||||
| github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= | ||||
| github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= | ||||
| github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= | ||||
| github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= | ||||
| github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | ||||
| github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | ||||
| github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | ||||
| github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= | ||||
| github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= | ||||
| github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= | ||||
| github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= | ||||
| github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= | ||||
| github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | ||||
|  | @ -729,24 +851,49 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= | |||
| github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= | ||||
| github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= | ||||
| github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= | ||||
| github.com/spf13/viper v1.6.1 h1:VPZzIkznI1YhVMRi6vNFLHSwhnhReBfgTxIPccpfdZk= | ||||
| github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= | ||||
| github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= | ||||
| github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||
| github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||
| github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= | ||||
| github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= | ||||
| github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | ||||
| github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||||
| github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= | ||||
| github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= | ||||
| github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= | ||||
| github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= | ||||
| github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= | ||||
| github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= | ||||
| github.com/syndtr/gocapability v0.0.0-20160928074757-e7cb7fa329f4/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= | ||||
| github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= | ||||
| github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2 h1:Xr9gkxfOP0KQWXKNqmwe8vEeSUiUj4Rlee9CMVX2ZUQ= | ||||
| github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= | ||||
| github.com/tetafro/godot v0.3.3 h1:uJjg8N+Ee10rAnaqJGet1WeI0YW4fiX9pKbwqnsqH6k= | ||||
| github.com/tetafro/godot v0.3.3/go.mod h1:pT6/T8+h6//L/LwQcFc4C0xpfy1euZwzS1sHdrFCms0= | ||||
| github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= | ||||
| github.com/tidwall/pretty v0.0.0-20180105212114-65a9db5fad51/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= | ||||
| github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q= | ||||
| github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= | ||||
| github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | ||||
| github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | ||||
| github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa h1:RC4maTWLKKwb7p1cnoygsbKIgNlJqSYBeAFON3Ar8As= | ||||
| github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= | ||||
| github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= | ||||
| github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= | ||||
| github.com/ultraware/funlen v0.0.2 h1:Av96YVBwwNSe4MLR7iI/BIa3VyI7/djnto/pK3Uxbdo= | ||||
| github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= | ||||
| github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= | ||||
| github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= | ||||
| github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= | ||||
| github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= | ||||
| github.com/uudashr/gocognit v1.0.1 h1:MoG2fZ0b/Eo7NXoIwCVFLG5JED3qgQz5/NEE+rOsjPs= | ||||
| github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= | ||||
| github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= | ||||
| github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= | ||||
| github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= | ||||
| github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= | ||||
| github.com/vishvananda/netlink v0.0.0-20171020171820-b2de5d10e38e/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= | ||||
| github.com/vishvananda/netns v0.0.0-20171111001504-be1fbeda1936/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= | ||||
| github.com/vmware/govmomi v0.20.1/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= | ||||
|  | @ -825,6 +972,7 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl | |||
| golang.org/x/lint v0.0.0-20190409202823-959b441ac422 h1:QzoH/1pFpZguR8NrRHLcO6jKqfv2zpuSqZLgdm7ZmjI= | ||||
| golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | ||||
| golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | ||||
| golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= | ||||
| golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= | ||||
| golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | ||||
| golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= | ||||
|  | @ -836,6 +984,7 @@ golang.org/x/net v0.0.0-20180112015858-5ccada7d0a7b/go.mod h1:mL1N/T3taQHkDXs73r | |||
| golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
|  | @ -862,6 +1011,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL | |||
| golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271 h1:N66aaryRB3Ax92gH0v3hp1QYZ3zWWCCUR/j8Ifh45Ss= | ||||
| golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
|  | @ -911,6 +1061,7 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w | |||
| golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20191028164358-195ce5e7f934 h1:u/E0NqCIWRDAo9WCFo6Ko49njPFDLSd3z+X1HgWDMpE= | ||||
| golang.org/x/sys v0.0.0-20191028164358-195ce5e7f934/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU= | ||||
|  | @ -926,34 +1077,49 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqG | |||
| golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/tools v0.0.0-20170824195420-5d2fd3ccab98/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20190213015956-f7e1b50d2251/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= | ||||
| golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= | ||||
| golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||
| golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||
| golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||
| golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||
| golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||
| golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||
| golang.org/x/tools v0.0.0-20190425222832-ad9eeb80039a/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||
| golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||
| golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||
| golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||
| golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||
| golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||
| golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||
| golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= | ||||
| golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= | ||||
| golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191018212557-ed542cd5b28a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191030203535-5e247c9ad0a0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20200115044656-831fdb1e1868/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200210192313-1ace956b0e17 h1:a/Fd23DJvg1CaeDH0dYHahE+hCI0v9rFgxSNIThoUcM= | ||||
| golang.org/x/tools v0.0.0-20200210192313-1ace956b0e17/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200228224639-71482053b885/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= | ||||
| golang.org/x/tools v0.0.0-20200327195553-82bb89366a1e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= | ||||
| golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||
| golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||
| golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b h1:zSzQJAznWxAh9fZxiPy2FZo+ZZEYoYFYYDYdOrU7AaM= | ||||
| golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||
| golang.org/x/tools v0.0.0-20200504022951-6b6965ac5dd1 h1:C8rdnd6KieI73Z2Av0sS0t4kW+geIH/M8kNX8Hmvn9E= | ||||
|  | @ -1011,6 +1177,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 | |||
| gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= | ||||
| gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= | ||||
| gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= | ||||
|  | @ -1023,6 +1190,8 @@ gopkg.in/imdario/mergo.v0 v0.3.7/go.mod h1:9qPP6AGrlC1G2PTNXko614FwGZvorN7MiBU0E | |||
| gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= | ||||
| gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | ||||
| gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= | ||||
| gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= | ||||
| gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
| gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= | ||||
| gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= | ||||
| gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473/go.mod h1:N1eN2tsCx0Ydtgjl4cqmbRCsY4/+z4cYDeqwZTk6zog= | ||||
|  | @ -1054,6 +1223,7 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh | |||
| honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| honnef.co/go/tools v0.0.1-2019.2.2/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= | ||||
| honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= | ||||
| honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= | ||||
| k8s.io/api v0.0.0-20191016110408-35e52d86657a h1:VVUE9xTCXP6KUPMf92cQmN88orz600ebexcRRaBTepQ= | ||||
| k8s.io/api v0.0.0-20191016110408-35e52d86657a/go.mod h1:/L5qH+AD540e7Cetbui1tuJeXdmNhO8jM6VkXeDdDhQ= | ||||
|  | @ -1109,6 +1279,12 @@ k8s.io/utils v0.0.0-20190801114015-581e00157fb1 h1:+ySTxfHnfzZb9ys375PXNlLhkJPLK | |||
| k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= | ||||
| k8s.io/utils v0.0.0-20191010214722-8d271d903fe4 h1:Gi+/O1saihwDqnlmC8Vhv1M5Sp4+rbOmK9TbsLn8ZEA= | ||||
| k8s.io/utils v0.0.0-20191010214722-8d271d903fe4/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= | ||||
| mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= | ||||
| mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= | ||||
| mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= | ||||
| mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= | ||||
| mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f h1:Cq7MalBHYACRd6EesksG1Q8EoIAKOsiZviGKbOLIej4= | ||||
| mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= | ||||
| rsc.io/letsencrypt v0.0.1/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= | ||||
| rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= | ||||
| sigs.k8s.io/controller-runtime v0.4.0 h1:wATM6/m+3w8lj8FXNaO6Fs/rq/vqoOjO1Q116Z9NPsg= | ||||
|  | @ -1121,4 +1297,6 @@ sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:I | |||
| sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= | ||||
| sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= | ||||
| sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | ||||
| sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 h1:JPJh2pk3+X4lXAkZIk2RuE/7/FoK9maXw+TNPJhVS/c= | ||||
| sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= | ||||
| vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ import ( | |||
| 	"github.com/pkg/errors" | ||||
| ) | ||||
| 
 | ||||
| // Render executes a parsed template (go-template) with configuration from data
 | ||||
| // Render executes a parsed template (go-template) with configuration from data.
 | ||||
| func Render(template *template.Template, data interface{}) (string, error) { | ||||
| 	var buffer bytes.Buffer | ||||
| 	if err := template.Execute(&buffer, data); err != nil { | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ import ( | |||
| 	time2 "github.com/jenkinsci/kubernetes-operator/internal/time" | ||||
| ) | ||||
| 
 | ||||
| // ErrTimeout is used when the set timeout has been reached
 | ||||
| // ErrTimeout is used when the set timeout has been reached.
 | ||||
| type ErrTimeout struct { | ||||
| 	text  string | ||||
| 	cause error | ||||
|  | @ -18,7 +18,7 @@ func (e *ErrTimeout) Error() string { | |||
| 	return fmt.Sprintf("%s: %s", e.text, e.cause.Error()) | ||||
| } | ||||
| 
 | ||||
| // Cause returns the error that caused ErrTimeout
 | ||||
| // Cause returns the error that caused ErrTimeout.
 | ||||
| func (e *ErrTimeout) Cause() error { | ||||
| 	return e.cause | ||||
| } | ||||
|  | @ -28,7 +28,7 @@ func (e *ErrTimeout) Format(s fmt.State, verb rune) { | |||
| 	errors.Format(e.cause, s, verb) | ||||
| } | ||||
| 
 | ||||
| // Until keeps trying until timeout or there is a result or an error
 | ||||
| // Until keeps trying until timeout or there is a result or an error.
 | ||||
| func Until(something func() (end bool, err error), tick, timeout time.Duration) error { | ||||
| 	counter := 0 | ||||
| 	tickChan := time2.Every(tick) | ||||
|  | @ -42,7 +42,7 @@ func Until(something func() (end bool, err error), tick, timeout time.Duration) | |||
| 			if end { | ||||
| 				return err | ||||
| 			} | ||||
| 			counter = counter + 1 | ||||
| 			counter++ | ||||
| 		case <-timeoutChan: | ||||
| 			return &ErrTimeout{ | ||||
| 				text:  fmt.Sprintf("timed out after: %s, tries: %d", timeout, counter), | ||||
|  |  | |||
|  | @ -7,10 +7,10 @@ import ( | |||
| 	"k8s.io/apimachinery/pkg/runtime" | ||||
| ) | ||||
| 
 | ||||
| // AddToSchemes may be used to add all resources defined in the project to a Scheme
 | ||||
| // AddToSchemes may be used to add all resources defined in the project to a Scheme.
 | ||||
| var AddToSchemes runtime.SchemeBuilder | ||||
| 
 | ||||
| // AddToScheme adds all Resources to the Scheme
 | ||||
| // AddToScheme adds all Resources to the Scheme.
 | ||||
| func AddToScheme(s *runtime.Scheme) error { | ||||
| 	return AddToSchemes.AddToScheme(s) | ||||
| } | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ import ( | |||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| ) | ||||
| 
 | ||||
| // JenkinsSpec defines the desired state of the Jenkins
 | ||||
| // JenkinsSpec defines the desired state of the Jenkins.
 | ||||
| // +k8s:openapi-gen=true
 | ||||
| type JenkinsSpec struct { | ||||
| 	// Master represents Jenkins master pod properties and Jenkins plugins.
 | ||||
|  | @ -92,7 +92,7 @@ type ServiceAccount struct { | |||
| 	Annotations map[string]string `json:"annotations,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // NotificationLevel defines the level of a Notification
 | ||||
| // NotificationLevel defines the level of a Notification.
 | ||||
| type NotificationLevel string | ||||
| 
 | ||||
| const ( | ||||
|  | @ -103,7 +103,7 @@ const ( | |||
| 	NotificationLevelInfo NotificationLevel = "info" | ||||
| ) | ||||
| 
 | ||||
| // Notification is a service configuration used to send notifications about Jenkins status
 | ||||
| // Notification is a service configuration used to send notifications about Jenkins status.
 | ||||
| type Notification struct { | ||||
| 	LoggingLevel NotificationLevel `json:"level"` | ||||
| 	Verbose      bool              `json:"verbose"` | ||||
|  | @ -114,13 +114,13 @@ type Notification struct { | |||
| 	SMTP         *SMTP             `json:"smtp,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // Slack is handler for Slack notification channel
 | ||||
| // Slack is handler for Slack notification channel.
 | ||||
| type Slack struct { | ||||
| 	// The web hook URL to Slack App
 | ||||
| 	WebHookURLSecretKeySelector SecretKeySelector `json:"webHookURLSecretKeySelector"` | ||||
| } | ||||
| 
 | ||||
| // SMTP is handler for sending emails via this protocol
 | ||||
| // SMTP is handler for sending emails via this protocol.
 | ||||
| type SMTP struct { | ||||
| 	UsernameSecretKeySelector SecretKeySelector `json:"usernameSecretKeySelector"` | ||||
| 	PasswordSecretKeySelector SecretKeySelector `json:"passwordSecretKeySelector"` | ||||
|  | @ -131,13 +131,13 @@ type SMTP struct { | |||
| 	To                        string            `json:"to"` | ||||
| } | ||||
| 
 | ||||
| // MicrosoftTeams is handler for Microsoft MicrosoftTeams notification channel
 | ||||
| // MicrosoftTeams is handler for Microsoft MicrosoftTeams notification channel.
 | ||||
| type MicrosoftTeams struct { | ||||
| 	// The web hook URL to MicrosoftTeams App
 | ||||
| 	WebHookURLSecretKeySelector SecretKeySelector `json:"webHookURLSecretKeySelector"` | ||||
| } | ||||
| 
 | ||||
| // Mailgun is handler for Mailgun email service notification channel
 | ||||
| // Mailgun is handler for Mailgun email service notification channel.
 | ||||
| type Mailgun struct { | ||||
| 	Domain                  string            `json:"domain"` | ||||
| 	APIKeySecretKeySelector SecretKeySelector `json:"apiKeySecretKeySelector"` | ||||
|  | @ -153,7 +153,7 @@ type SecretKeySelector struct { | |||
| 	Key string `json:"key"` | ||||
| } | ||||
| 
 | ||||
| // Container defines Kubernetes container attributes
 | ||||
| // Container defines Kubernetes container attributes.
 | ||||
| type Container struct { | ||||
| 	// Name of the container specified as a DNS_LABEL.
 | ||||
| 	// Each container in a pod must have a unique name (DNS_LABEL).
 | ||||
|  | @ -244,7 +244,7 @@ type Container struct { | |||
| 	SecurityContext *corev1.SecurityContext `json:"securityContext,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // Plugin defines Jenkins plugin
 | ||||
| // Plugin defines Jenkins plugin.
 | ||||
| type Plugin struct { | ||||
| 	// Name is the name of Jenkins plugin
 | ||||
| 	Name string `json:"name"` | ||||
|  | @ -255,7 +255,7 @@ type Plugin struct { | |||
| } | ||||
| 
 | ||||
| // JenkinsMaster defines the Jenkins master pod attributes and plugins,
 | ||||
| // every single change requires a Jenkins master pod restart
 | ||||
| // every single change requires a Jenkins master pod restart.
 | ||||
| type JenkinsMaster struct { | ||||
| 	// Annotations is an unstructured key value map stored with a resource that may be
 | ||||
| 	// set by external tools to store and retrieve arbitrary metadata. They are not
 | ||||
|  | @ -510,14 +510,14 @@ type Jenkins struct { | |||
| 
 | ||||
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | ||||
| 
 | ||||
| // JenkinsList contains a list of Jenkins
 | ||||
| // JenkinsList contains a list of Jenkins.
 | ||||
| type JenkinsList struct { | ||||
| 	metav1.TypeMeta `json:",inline"` | ||||
| 	metav1.ListMeta `json:"metadata,omitempty"` | ||||
| 	Items           []Jenkins `json:"items"` | ||||
| } | ||||
| 
 | ||||
| // JenkinsCredentialType defines type of Jenkins credential used to seed job mechanism
 | ||||
| // JenkinsCredentialType defines type of Jenkins credential used to seed job mechanism.
 | ||||
| type JenkinsCredentialType string | ||||
| 
 | ||||
| const ( | ||||
|  | @ -531,7 +531,7 @@ const ( | |||
| 	ExternalCredentialType JenkinsCredentialType = "external" | ||||
| ) | ||||
| 
 | ||||
| // AllowedJenkinsCredentialMap contains all allowed Jenkins credentials types
 | ||||
| // AllowedJenkinsCredentialMap contains all allowed Jenkins credentials types.
 | ||||
| var AllowedJenkinsCredentialMap = map[string]string{ | ||||
| 	string(NoJenkinsCredentialCredentialType): "", | ||||
| 	string(BasicSSHCredentialType):            "", | ||||
|  | @ -540,7 +540,7 @@ var AllowedJenkinsCredentialMap = map[string]string{ | |||
| } | ||||
| 
 | ||||
| // SeedJob defines configuration for seed job
 | ||||
| // More info: https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-seed-jobs-and-pipelines
 | ||||
| // More info: https://github.com/jenkinsci/kubernetes-operator/blob/master/docs/getting-started.md#configure-seed-jobs-and-pipelines.
 | ||||
| type SeedJob struct { | ||||
| 	// ID is the unique seed job name
 | ||||
| 	ID string `json:"id,omitempty"` | ||||
|  | @ -598,13 +598,13 @@ type SeedJob struct { | |||
| 	UnstableOnDeprecation bool `json:"unstableOnDeprecation"` | ||||
| } | ||||
| 
 | ||||
| // Handler defines a specific action that should be taken
 | ||||
| // Handler defines a specific action that should be taken.
 | ||||
| type Handler struct { | ||||
| 	// Exec specifies the action to take.
 | ||||
| 	Exec *corev1.ExecAction `json:"exec,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // Backup defines configuration of Jenkins backup
 | ||||
| // Backup defines configuration of Jenkins backup.
 | ||||
| type Backup struct { | ||||
| 	// ContainerName is the container name responsible for backup operation
 | ||||
| 	ContainerName string `json:"containerName"` | ||||
|  | @ -620,7 +620,7 @@ type Backup struct { | |||
| 	MakeBackupBeforePodDeletion bool `json:"makeBackupBeforePodDeletion"` | ||||
| } | ||||
| 
 | ||||
| // Restore defines configuration of Jenkins backup restore operation
 | ||||
| // Restore defines configuration of Jenkins backup restore operation.
 | ||||
| type Restore struct { | ||||
| 	// ContainerName is the container name responsible for restore backup operation
 | ||||
| 	ContainerName string `json:"containerName"` | ||||
|  | @ -633,7 +633,7 @@ type Restore struct { | |||
| 	RecoveryOnce uint64 `json:"recoveryOnce,omitempty"` | ||||
| } | ||||
| 
 | ||||
| // AppliedGroovyScript is the applied groovy script in Jenkins by the operator
 | ||||
| // AppliedGroovyScript is the applied groovy script in Jenkins by the operator.
 | ||||
| type AppliedGroovyScript struct { | ||||
| 	// ConfigurationType is the name of the configuration type(base-groovy, user-groovy, user-casc)
 | ||||
| 	ConfigurationType string `json:"configurationType"` | ||||
|  | @ -645,28 +645,28 @@ type AppliedGroovyScript struct { | |||
| 	Hash string `json:"hash"` | ||||
| } | ||||
| 
 | ||||
| // SecretRef is reference to Kubernetes secret
 | ||||
| // SecretRef is reference to Kubernetes secret.
 | ||||
| type SecretRef struct { | ||||
| 	Name string `json:"name"` | ||||
| } | ||||
| 
 | ||||
| // ConfigMapRef is reference to Kubernetes ConfigMap
 | ||||
| // ConfigMapRef is reference to Kubernetes ConfigMap.
 | ||||
| type ConfigMapRef struct { | ||||
| 	Name string `json:"name"` | ||||
| } | ||||
| 
 | ||||
| // Customization defines configuration of Jenkins customization
 | ||||
| // Customization defines configuration of Jenkins customization.
 | ||||
| type Customization struct { | ||||
| 	Secret         SecretRef      `json:"secret"` | ||||
| 	Configurations []ConfigMapRef `json:"configurations"` | ||||
| } | ||||
| 
 | ||||
| // GroovyScripts defines configuration of Jenkins customization via groovy scripts
 | ||||
| // GroovyScripts defines configuration of Jenkins customization via groovy scripts.
 | ||||
| type GroovyScripts struct { | ||||
| 	Customization `json:",inline"` | ||||
| } | ||||
| 
 | ||||
| // ConfigurationAsCode defines configuration of Jenkins customization via Configuration as Code Jenkins plugin
 | ||||
| // ConfigurationAsCode defines configuration of Jenkins customization via Configuration as Code Jenkins plugin.
 | ||||
| type ConfigurationAsCode struct { | ||||
| 	Customization `json:",inline"` | ||||
| } | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ var ( | |||
| 	regex         = regexp.MustCompile("(<application-desc main-class=\"hudson.remoting.jnlp.Main\"><argument>)(?P<secret>[a-z0-9]*)") | ||||
| ) | ||||
| 
 | ||||
| // Jenkins defines Jenkins API
 | ||||
| // Jenkins defines Jenkins API.
 | ||||
| type Jenkins interface { | ||||
| 	GenerateToken(userName, tokenName string) (*UserToken, error) | ||||
| 	Info() (*gojenkins.ExecutorResponse, error) | ||||
|  | @ -62,7 +62,7 @@ type jenkins struct { | |||
| 	gojenkins.Jenkins | ||||
| } | ||||
| 
 | ||||
| // JenkinsAPIConnectionSettings is struct that handle information about Jenkins API connection
 | ||||
| // JenkinsAPIConnectionSettings is struct that handle information about Jenkins API connection.
 | ||||
| type JenkinsAPIConnectionSettings struct { | ||||
| 	Hostname    string | ||||
| 	Port        int | ||||
|  | @ -86,7 +86,7 @@ func (t *setBearerToken) RoundTrip(r *http.Request) (*http.Response, error) { | |||
| 	return t.transport().RoundTrip(r) | ||||
| } | ||||
| 
 | ||||
| // CreateOrUpdateJob creates or updates a job from config
 | ||||
| // CreateOrUpdateJob creates or updates a job from config.
 | ||||
| func (jenkins *jenkins) CreateOrUpdateJob(config, jobName string) (job *gojenkins.Job, created bool, err error) { | ||||
| 	// create or update
 | ||||
| 	job, err = jenkins.GetJob(jobName) | ||||
|  | @ -102,7 +102,7 @@ func (jenkins *jenkins) CreateOrUpdateJob(config, jobName string) (job *gojenkin | |||
| 	return job, false, errors.WithStack(err) | ||||
| } | ||||
| 
 | ||||
| // BuildJenkinsAPIUrl returns Jenkins API URL
 | ||||
| // BuildJenkinsAPIUrl returns Jenkins API URL.
 | ||||
| func (j JenkinsAPIConnectionSettings) BuildJenkinsAPIUrl(serviceName string, serviceNamespace string, servicePort int32, serviceNodePort int32) string { | ||||
| 	if j.Hostname == "" && j.Port == 0 { | ||||
| 		return fmt.Sprintf("http://%s.%s:%d", serviceName, serviceNamespace, servicePort) | ||||
|  | @ -115,7 +115,7 @@ func (j JenkinsAPIConnectionSettings) BuildJenkinsAPIUrl(serviceName string, ser | |||
| 	return fmt.Sprintf("http://%s:%d", j.Hostname, j.Port) | ||||
| } | ||||
| 
 | ||||
| // Validate validates jenkins API connection settings
 | ||||
| // Validate validates jenkins API connection settings.
 | ||||
| func (j JenkinsAPIConnectionSettings) Validate() error { | ||||
| 	if j.Port > 0 && j.UseNodePort { | ||||
| 		return errors.New("can't use service port and nodePort both. Please use port or nodePort") | ||||
|  | @ -132,12 +132,12 @@ func (j JenkinsAPIConnectionSettings) Validate() error { | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // NewUserAndPasswordAuthorization creates Jenkins API client with user and password authorization
 | ||||
| // NewUserAndPasswordAuthorization creates Jenkins API client with user and password authorization.
 | ||||
| func NewUserAndPasswordAuthorization(url, userName, passwordOrToken string) (Jenkins, error) { | ||||
| 	return newClient(url, userName, passwordOrToken) | ||||
| } | ||||
| 
 | ||||
| // NewBearerTokenAuthorization creates Jenkins API client with bearer token authorization
 | ||||
| // NewBearerTokenAuthorization creates Jenkins API client with bearer token authorization.
 | ||||
| func NewBearerTokenAuthorization(url, token string) (Jenkins, error) { | ||||
| 	return newClient(url, "", token) | ||||
| } | ||||
|  | @ -194,10 +194,11 @@ func isNotFoundError(err error) bool { | |||
| 
 | ||||
| func (jenkins *jenkins) GetNodeSecret(name string) (string, error) { | ||||
| 	var content string | ||||
| 	_, err := jenkins.Requester.GetXML(fmt.Sprintf("/computer/%s/slave-agent.jnlp", name), &content, nil) | ||||
| 	r, err := jenkins.Requester.GetXML(fmt.Sprintf("/computer/%s/slave-agent.jnlp", name), &content, nil) | ||||
| 	if err != nil { | ||||
| 		return "", errors.WithStack(err) | ||||
| 	} | ||||
| 	defer r.Body.Close() | ||||
| 
 | ||||
| 	match := regex.FindStringSubmatch(content) | ||||
| 	if match == nil { | ||||
|  |  | |||
|  | @ -5,9 +5,10 @@ | |||
| package client | ||||
| 
 | ||||
| import ( | ||||
| 	"reflect" | ||||
| 
 | ||||
| 	"github.com/bndr/gojenkins" | ||||
| 	"github.com/golang/mock/gomock" | ||||
| 	"reflect" | ||||
| ) | ||||
| 
 | ||||
| // MockJenkins is a mock of Jenkins interface
 | ||||
|  |  | |||
|  | @ -48,6 +48,7 @@ func (jenkins *jenkins) executeScript(script string, verifier string) (string, e | |||
| 	if err != nil { | ||||
| 		return "", errors.Wrapf(err, "couldn't execute groovy script, logs '%s'", output) | ||||
| 	} | ||||
| 	defer r.Body.Close() | ||||
| 
 | ||||
| 	if r.StatusCode != http.StatusOK { | ||||
| 		return output, errors.Errorf("invalid status code '%d', logs '%s'", r.StatusCode, output) | ||||
|  |  | |||
|  | @ -11,6 +11,8 @@ import ( | |||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| const script = "some groovy code" | ||||
| 
 | ||||
| func Test_ExecuteScript(t *testing.T) { | ||||
| 	verifier := "verifier-text" | ||||
| 	t.Run("logs have verifier text", func(t *testing.T) { | ||||
|  | @ -34,7 +36,6 @@ func Test_ExecuteScript(t *testing.T) { | |||
| 			BasicAuth: &gojenkins.BasicAuth{Username: "unused", Password: "unused"}, | ||||
| 		} | ||||
| 
 | ||||
| 		script := "some groovy code" | ||||
| 		logs, err := jenkinsClient.executeScript(script, verifier) | ||||
| 		assert.NoError(t, err, logs) | ||||
| 	}) | ||||
|  | @ -60,7 +61,6 @@ func Test_ExecuteScript(t *testing.T) { | |||
| 			BasicAuth: &gojenkins.BasicAuth{Username: "unused", Password: "unused"}, | ||||
| 		} | ||||
| 
 | ||||
| 		script := "some groovy code" | ||||
| 		logs, err := jenkinsClient.executeScript(script, verifier) | ||||
| 		assert.EqualError(t, err, "script execution failed", logs) | ||||
| 		assert.Equal(t, response, logs) | ||||
|  | @ -82,7 +82,6 @@ func Test_ExecuteScript(t *testing.T) { | |||
| 			BasicAuth: &gojenkins.BasicAuth{Username: "unused", Password: "unused"}, | ||||
| 		} | ||||
| 
 | ||||
| 		script := "some groovy code" | ||||
| 		logs, err := jenkinsClient.executeScript(script, verifier) | ||||
| 		assert.EqualError(t, err, "invalid status code '500', logs ''", logs) | ||||
| 	}) | ||||
|  |  | |||
|  | @ -35,10 +35,10 @@ func (jenkins *jenkins) GenerateToken(userName, tokenName string) (*UserToken, e | |||
| 	endpoint := token.base | ||||
| 	data := map[string]string{"newTokenName": tokenName} | ||||
| 	r, err := jenkins.Requester.Post(endpoint, nil, token.raw, data) | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrap(err, "couldn't generate API token") | ||||
| 	} | ||||
| 	defer r.Body.Close() | ||||
| 
 | ||||
| 	if r.StatusCode == http.StatusOK { | ||||
| 		if token.raw.Status == "ok" { | ||||
|  |  | |||
|  | @ -200,7 +200,7 @@ func triggerBackup(ticker *time.Ticker, k8sClient k8s.Client, logger logr.Logger | |||
| 			logger.V(log.VWarn).Info(fmt.Sprintf("backup trigger, error when fetching CR: %s", err)) | ||||
| 		} | ||||
| 		if jenkins.Status.LastBackup == jenkins.Status.PendingBackup { | ||||
| 			jenkins.Status.PendingBackup = jenkins.Status.PendingBackup + 1 | ||||
| 			jenkins.Status.PendingBackup++ | ||||
| 			err = k8sClient.Update(context.TODO(), jenkins) | ||||
| 			if err != nil { | ||||
| 				logger.V(log.VWarn).Info(fmt.Sprintf("backup trigger, error when updating CR: %s", err)) | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ import ( | |||
| func (r *ReconcileJenkinsBaseConfiguration) compareContainers(expected corev1.Container, actual corev1.Container) (messages []string, verbose []string) { | ||||
| 	if !reflect.DeepEqual(expected.Args, actual.Args) { | ||||
| 		messages = append(messages, "Arguments have changed") | ||||
| 		verbose = append(messages, fmt.Sprintf("Arguments have changed to '%+v' in container '%s'", expected.Args, expected.Name)) | ||||
| 		verbose = append(verbose, fmt.Sprintf("Arguments have changed to '%+v' in container '%s'", expected.Args, expected.Name)) | ||||
| 	} | ||||
| 	if !reflect.DeepEqual(expected.Command, actual.Command) { | ||||
| 		messages = append(messages, "Command has changed") | ||||
|  |  | |||
|  | @ -194,7 +194,7 @@ func (r *ReconcileJenkinsBaseConfiguration) ensureJenkinsMasterPod(meta metav1.O | |||
| 		} | ||||
| 		if r.Configuration.Jenkins.Spec.Backup.MakeBackupBeforePodDeletion && !r.Configuration.Jenkins.Status.BackupDoneBeforePodDeletion { | ||||
| 			if r.Configuration.Jenkins.Status.LastBackup == r.Configuration.Jenkins.Status.PendingBackup { | ||||
| 				r.Configuration.Jenkins.Status.PendingBackup = r.Configuration.Jenkins.Status.PendingBackup + 1 | ||||
| 				r.Configuration.Jenkins.Status.PendingBackup++ | ||||
| 			} | ||||
| 			if err = backupAndRestore.Backup(true); err != nil { | ||||
| 				return reconcile.Result{}, err | ||||
|  |  | |||
|  | @ -4,13 +4,13 @@ import ( | |||
| 	"context" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/bndr/gojenkins" | ||||
| 	"github.com/golang/mock/gomock" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/log" | ||||
| 	"github.com/bndr/gojenkins" | ||||
| 	"github.com/golang/mock/gomock" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	corev1 "k8s.io/api/core/v1" | ||||
| 	rbacv1 "k8s.io/api/rbac/v1" | ||||
|  | @ -21,7 +21,6 @@ import ( | |||
| 	"sigs.k8s.io/controller-runtime/pkg/client/fake" | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| func TestCompareContainerVolumeMounts(t *testing.T) { | ||||
| 	t.Run("happy with service account", func(t *testing.T) { | ||||
| 		expectedContainer := corev1.Container{ | ||||
|  |  | |||
|  | @ -172,12 +172,12 @@ GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class).useScript | |||
| GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class).save() | ||||
| ` | ||||
| 
 | ||||
| // GetBaseConfigurationConfigMapName returns name of Kubernetes config map used to base configuration
 | ||||
| // GetBaseConfigurationConfigMapName returns name of Kubernetes config map used to base configuration.
 | ||||
| func GetBaseConfigurationConfigMapName(jenkins *v1alpha2.Jenkins) string { | ||||
| 	return fmt.Sprintf("%s-base-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name) | ||||
| } | ||||
| 
 | ||||
| // NewBaseConfigurationConfigMap builds Kubernetes config map used to base configuration
 | ||||
| // NewBaseConfigurationConfigMap builds Kubernetes config map used to base configuration.
 | ||||
| func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) (*corev1.ConfigMap, error) { | ||||
| 	meta.Name = GetBaseConfigurationConfigMapName(jenkins) | ||||
| 	jenkinsServiceFQDN, err := GetJenkinsHTTPServiceFQDN(jenkins) | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| package resources | ||||
| 
 | ||||
| import ( | ||||
| 	"k8s.io/api/rbac/v1" | ||||
| 	v1 "k8s.io/api/rbac/v1" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| ) | ||||
| 
 | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ import ( | |||
| 
 | ||||
| //RouteKind the kind name for route
 | ||||
| const RouteKind = "Route" | ||||
| 
 | ||||
| var isRouteAPIAvailable = false | ||||
| var routeAPIChecked = false | ||||
| 
 | ||||
|  | @ -18,19 +19,19 @@ var  routeAPIChecked = false | |||
| func UpdateRoute(actual routev1.Route, jenkins *v1alpha2.Jenkins) routev1.Route { | ||||
| 	actualTargetService := actual.Spec.To | ||||
| 	serviceName := GetJenkinsHTTPServiceName(jenkins) | ||||
| 	if( actualTargetService.Name != serviceName ) { | ||||
| 	if actualTargetService.Name != serviceName { | ||||
| 		actual.Spec.To.Name = serviceName | ||||
| 	} | ||||
| 	port := jenkins.Spec.Service.Port | ||||
| 	if( actual.Spec.Port.TargetPort.IntVal != port){ | ||||
| 	if actual.Spec.Port.TargetPort.IntVal != port { | ||||
| 		actual.Spec.Port.TargetPort = intstr.FromInt(int(port)) | ||||
| 	} | ||||
| 	return actual | ||||
| } | ||||
| 
 | ||||
| //IsRouteAPIAvailable tells if the Route API is installed and discoverable
 | ||||
| func IsRouteAPIAvailable(clientSet *kubernetes.Clientset) (bool) { | ||||
| 	if (routeAPIChecked){ | ||||
| func IsRouteAPIAvailable(clientSet *kubernetes.Clientset) bool { | ||||
| 	if routeAPIChecked { | ||||
| 		return isRouteAPIAvailable | ||||
| 	} | ||||
| 	gv := schema.GroupVersion{ | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ package resources | |||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" | ||||
| 	"github.com/operator-framework/operator-sdk/pkg/k8sutil" | ||||
|  | @ -12,6 +13,7 @@ import ( | |||
| 	"net" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| //ServiceKind the kind name for Service
 | ||||
| const ServiceKind = "Service" | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| package resources | ||||
| 
 | ||||
| import ( | ||||
| 	"k8s.io/api/core/v1" | ||||
| 	v1 "k8s.io/api/core/v1" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| ) | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ package base | |||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" | ||||
| 	"k8s.io/apimachinery/pkg/util/intstr" | ||||
| 
 | ||||
|  |  | |||
|  | @ -21,6 +21,8 @@ import ( | |||
| 	logf "sigs.k8s.io/controller-runtime/pkg/log/zap" | ||||
| ) | ||||
| 
 | ||||
| const defaultNamespace = "default" | ||||
| 
 | ||||
| func TestValidatePlugins(t *testing.T) { | ||||
| 	log.SetupLogger(true) | ||||
| 	baseReconcileLoop := New(configuration.Configuration{}, log.Log, client.JenkinsAPIConnectionSettings{}) | ||||
|  | @ -557,7 +559,6 @@ func TestValidateContainerVolumeMounts(t *testing.T) { | |||
| } | ||||
| 
 | ||||
| func TestValidateConfigMapVolume(t *testing.T) { | ||||
| 	namespace := "default" | ||||
| 	t.Run("optional", func(t *testing.T) { | ||||
| 		optional := true | ||||
| 		volume := corev1.Volume{ | ||||
|  | @ -580,8 +581,8 @@ func TestValidateConfigMapVolume(t *testing.T) { | |||
| 	}) | ||||
| 	t.Run("happy, required", func(t *testing.T) { | ||||
| 		optional := false | ||||
| 		configMap := corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: "configmap-name"}} | ||||
| 		jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} | ||||
| 		configMap := corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Namespace: defaultNamespace, Name: "configmap-name"}} | ||||
| 		jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: defaultNamespace}} | ||||
| 		volume := corev1.Volume{ | ||||
| 			Name: "volume-name", | ||||
| 			VolumeSource: corev1.VolumeSource{ | ||||
|  | @ -608,8 +609,8 @@ func TestValidateConfigMapVolume(t *testing.T) { | |||
| 	}) | ||||
| 	t.Run("missing configmap", func(t *testing.T) { | ||||
| 		optional := false | ||||
| 		configMap := corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: "configmap-name"}} | ||||
| 		jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} | ||||
| 		configMap := corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Namespace: defaultNamespace, Name: "configmap-name"}} | ||||
| 		jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: defaultNamespace}} | ||||
| 		volume := corev1.Volume{ | ||||
| 			Name: "volume-name", | ||||
| 			VolumeSource: corev1.VolumeSource{ | ||||
|  | @ -636,7 +637,6 @@ func TestValidateConfigMapVolume(t *testing.T) { | |||
| } | ||||
| 
 | ||||
| func TestValidateSecretVolume(t *testing.T) { | ||||
| 	namespace := "default" | ||||
| 	t.Run("optional", func(t *testing.T) { | ||||
| 		optional := true | ||||
| 		volume := corev1.Volume{ | ||||
|  | @ -659,8 +659,8 @@ func TestValidateSecretVolume(t *testing.T) { | |||
| 	}) | ||||
| 	t.Run("happy, required", func(t *testing.T) { | ||||
| 		optional := false | ||||
| 		secret := corev1.Secret{ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: "secret-name"}} | ||||
| 		jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} | ||||
| 		secret := corev1.Secret{ObjectMeta: metav1.ObjectMeta{Namespace: defaultNamespace, Name: "secret-name"}} | ||||
| 		jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: defaultNamespace}} | ||||
| 		volume := corev1.Volume{ | ||||
| 			Name: "volume-name", | ||||
| 			VolumeSource: corev1.VolumeSource{ | ||||
|  | @ -685,8 +685,8 @@ func TestValidateSecretVolume(t *testing.T) { | |||
| 	}) | ||||
| 	t.Run("missing secret", func(t *testing.T) { | ||||
| 		optional := false | ||||
| 		secret := corev1.Secret{ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: "secret-name"}} | ||||
| 		jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} | ||||
| 		secret := corev1.Secret{ObjectMeta: metav1.ObjectMeta{Namespace: defaultNamespace, Name: "secret-name"}} | ||||
| 		jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: defaultNamespace}} | ||||
| 		volume := corev1.Volume{ | ||||
| 			Name: "volume-name", | ||||
| 			VolumeSource: corev1.VolumeSource{ | ||||
|  | @ -710,12 +710,11 @@ func TestValidateSecretVolume(t *testing.T) { | |||
| } | ||||
| 
 | ||||
| func TestValidateCustomization(t *testing.T) { | ||||
| 	namespace := "default" | ||||
| 	secretName := "secretName" | ||||
| 	configMapName := "configmap-name" | ||||
| 	jenkins := &v1alpha2.Jenkins{ | ||||
| 		ObjectMeta: metav1.ObjectMeta{ | ||||
| 			Namespace: namespace, | ||||
| 			Namespace: defaultNamespace, | ||||
| 		}, | ||||
| 	} | ||||
| 	t.Run("empty", func(t *testing.T) { | ||||
|  | @ -739,7 +738,7 @@ func TestValidateCustomization(t *testing.T) { | |||
| 		secret := &corev1.Secret{ | ||||
| 			ObjectMeta: metav1.ObjectMeta{ | ||||
| 				Name:      secretName, | ||||
| 				Namespace: namespace, | ||||
| 				Namespace: defaultNamespace, | ||||
| 			}, | ||||
| 		} | ||||
| 		fakeClient := fake.NewFakeClient() | ||||
|  | @ -764,13 +763,13 @@ func TestValidateCustomization(t *testing.T) { | |||
| 		configMap := &corev1.ConfigMap{ | ||||
| 			ObjectMeta: metav1.ObjectMeta{ | ||||
| 				Name:      configMapName, | ||||
| 				Namespace: namespace, | ||||
| 				Namespace: defaultNamespace, | ||||
| 			}, | ||||
| 		} | ||||
| 		secret := &corev1.Secret{ | ||||
| 			ObjectMeta: metav1.ObjectMeta{ | ||||
| 				Name:      secretName, | ||||
| 				Namespace: namespace, | ||||
| 				Namespace: defaultNamespace, | ||||
| 			}, | ||||
| 		} | ||||
| 		fakeClient := fake.NewFakeClient() | ||||
|  | @ -797,7 +796,7 @@ func TestValidateCustomization(t *testing.T) { | |||
| 		configMap := &corev1.ConfigMap{ | ||||
| 			ObjectMeta: metav1.ObjectMeta{ | ||||
| 				Name:      configMapName, | ||||
| 				Namespace: namespace, | ||||
| 				Namespace: defaultNamespace, | ||||
| 			}, | ||||
| 		} | ||||
| 		fakeClient := fake.NewFakeClient() | ||||
|  | @ -822,7 +821,7 @@ func TestValidateCustomization(t *testing.T) { | |||
| 		secret := &corev1.Secret{ | ||||
| 			ObjectMeta: metav1.ObjectMeta{ | ||||
| 				Name:      secretName, | ||||
| 				Namespace: namespace, | ||||
| 				Namespace: defaultNamespace, | ||||
| 			}, | ||||
| 		} | ||||
| 		fakeClient := fake.NewFakeClient() | ||||
|  |  | |||
|  | @ -7,10 +7,10 @@ import ( | |||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" | ||||
| 	jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/notifications/event" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/notifications/reason" | ||||
| 	jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" | ||||
| 	stackerr "github.com/pkg/errors" | ||||
| 	corev1 "k8s.io/api/core/v1" | ||||
| 	"k8s.io/apimachinery/pkg/api/errors" | ||||
|  | @ -189,7 +189,7 @@ func (c *Configuration) getJenkinsAPIUrl() (string, error) { | |||
| 	} | ||||
| 	jenkinsURL := c.JenkinsAPIConnectionSettings.BuildJenkinsAPIUrl(service.Name, service.Namespace, service.Spec.Ports[0].Port, service.Spec.Ports[0].NodePort) | ||||
| 	if prefix, ok := GetJenkinsOpts(*c.Jenkins)["prefix"]; ok { | ||||
| 		jenkinsURL = jenkinsURL + prefix | ||||
| 		jenkinsURL += prefix | ||||
| 	} | ||||
| 	return jenkinsURL, nil | ||||
| } | ||||
|  |  | |||
|  | @ -2,9 +2,10 @@ package seedjobs | |||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"k8s.io/apimachinery/pkg/api/errors" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"k8s.io/apimachinery/pkg/api/errors" | ||||
| 
 | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" | ||||
| 	jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" | ||||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration" | ||||
|  | @ -24,6 +25,8 @@ import ( | |||
| 	logf "sigs.k8s.io/controller-runtime/pkg/log/zap" | ||||
| ) | ||||
| 
 | ||||
| const agentSecret = "test-secret" | ||||
| 
 | ||||
| func jenkinsCustomResource() *v1alpha2.Jenkins { | ||||
| 	return &v1alpha2.Jenkins{ | ||||
| 		ObjectMeta: metav1.ObjectMeta{ | ||||
|  | @ -81,7 +84,6 @@ func TestEnsureSeedJobs(t *testing.T) { | |||
| 		err = fakeClient.Create(ctx, jenkins) | ||||
| 		assert.NoError(t, err) | ||||
| 
 | ||||
| 		agentSecret := "test-secret" | ||||
| 		testNode := &gojenkins.Node{ | ||||
| 			Raw: &gojenkins.NodeResponse{ | ||||
| 				DisplayName: AgentName, | ||||
|  | @ -123,7 +125,6 @@ func TestEnsureSeedJobs(t *testing.T) { | |||
| 		ctx := context.TODO() | ||||
| 		defer ctrl.Finish() | ||||
| 
 | ||||
| 		agentSecret := "test-secret" | ||||
| 		jenkins := jenkinsCustomResource() | ||||
| 		jenkins.Spec.SeedJobs = []v1alpha2.SeedJob{} | ||||
| 
 | ||||
|  | @ -174,7 +175,6 @@ func TestCreateAgent(t *testing.T) { | |||
| 		ctx := context.TODO() | ||||
| 		defer ctrl.Finish() | ||||
| 
 | ||||
| 		agentSecret := "test-secret" | ||||
| 		jenkins := jenkinsCustomResource() | ||||
| 
 | ||||
| 		jenkinsClient := jenkinsclient.NewMockJenkins(ctrl) | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ import ( | |||
| 	"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" | ||||
| 	stackerr "github.com/pkg/errors" | ||||
| 	"github.com/robfig/cron" | ||||
| 	"k8s.io/api/core/v1" | ||||
| 	v1 "k8s.io/api/core/v1" | ||||
| 	apierrors "k8s.io/apimachinery/pkg/api/errors" | ||||
| 	"k8s.io/apimachinery/pkg/types" | ||||
| ) | ||||
|  |  | |||
|  | @ -20,9 +20,10 @@ import ( | |||
| 	"sigs.k8s.io/controller-runtime/pkg/client/fake" | ||||
| ) | ||||
| 
 | ||||
| const configurationType = "test-conf-type" | ||||
| 
 | ||||
| func TestGroovy_EnsureSingle(t *testing.T) { | ||||
| 	log.SetupLogger(true) | ||||
| 	configurationType := "test-conf-type" | ||||
| 	emptyCustomization := v1alpha2.Customization{} | ||||
| 	hash := "hash" | ||||
| 	groovyScript := "groovy-script" | ||||
|  | @ -246,7 +247,6 @@ func TestGroovy_EnsureSingle(t *testing.T) { | |||
| 		assert.Equal(t, thirdGroovyScriptHash, jenkins.Status.AppliedGroovyScripts[2].Hash) | ||||
| 		assert.Equal(t, source, jenkins.Status.AppliedGroovyScripts[2].Source) | ||||
| 		assert.Equal(t, thirdGroovyScriptName, jenkins.Status.AppliedGroovyScripts[2].Name) | ||||
| 
 | ||||
| 	}) | ||||
| 	t.Run("execute two groovy scripts with same names in two config maps", func(t *testing.T) { | ||||
| 		jenkins := &v1alpha2.Jenkins{ | ||||
|  | @ -349,7 +349,6 @@ func TestGroovy_EnsureSingle(t *testing.T) { | |||
| 
 | ||||
| func TestGroovy_Ensure(t *testing.T) { | ||||
| 	log.SetupLogger(true) | ||||
| 	configurationType := "test-conf-type" | ||||
| 	groovyScript := "groovy-script" | ||||
| 	groovyScriptName := "groovy-script-name.groovy" | ||||
| 	ctx := context.TODO() | ||||
|  | @ -615,7 +614,6 @@ func TestGroovy_Ensure(t *testing.T) { | |||
| func TestGroovy_isGroovyScriptAlreadyApplied(t *testing.T) { | ||||
| 	log.SetupLogger(true) | ||||
| 	emptyCustomization := v1alpha2.Customization{} | ||||
| 	configurationType := "test-conf-type" | ||||
| 
 | ||||
| 	t.Run("found", func(t *testing.T) { | ||||
| 		jenkins := &v1alpha2.Jenkins{ | ||||
|  |  | |||
|  | @ -51,7 +51,7 @@ func Add(mgr manager.Manager, jenkinsAPIConnectionSettings jenkinsclient.Jenkins | |||
| 	return add(mgr, reconciler) | ||||
| } | ||||
| 
 | ||||
| // newReconciler returns a new reconcile.Reconciler
 | ||||
| // newReconciler returns a new reconcile.Reconciler.
 | ||||
| func newReconciler(mgr manager.Manager, jenkinsAPIConnectionSettings jenkinsclient.JenkinsAPIConnectionSettings, clientSet kubernetes.Clientset, config rest.Config, notificationEvents *chan event.Event) reconcile.Reconciler { | ||||
| 	return &ReconcileJenkins{ | ||||
| 		client:                       mgr.GetClient(), | ||||
|  | @ -63,7 +63,7 @@ func newReconciler(mgr manager.Manager, jenkinsAPIConnectionSettings jenkinsclie | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // add adds a new Controller to mgr with r as the reconcile.Reconciler
 | ||||
| // add adds a new Controller to mgr with r as the reconcile.Reconciler.
 | ||||
| func add(mgr manager.Manager, r reconcile.Reconciler) error { | ||||
| 	// Create a new controller
 | ||||
| 	c, err := controller.New("jenkins-controller", mgr, controller.Options{Reconciler: r}) | ||||
|  | @ -111,7 +111,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { | |||
| 
 | ||||
| var _ reconcile.Reconciler = &ReconcileJenkins{} | ||||
| 
 | ||||
| // ReconcileJenkins reconciles a Jenkins object
 | ||||
| // ReconcileJenkins reconciles a Jenkins object.
 | ||||
| type ReconcileJenkins struct { | ||||
| 	client                       client.Client | ||||
| 	scheme                       *runtime.Scheme | ||||
|  | @ -121,7 +121,7 @@ type ReconcileJenkins struct { | |||
| 	notificationEvents           *chan event.Event | ||||
| } | ||||
| 
 | ||||
| // Reconcile it's a main reconciliation loop which maintain desired state based on Jenkins.Spec
 | ||||
| // Reconcile it's a main reconciliation loop which maintain desired state based on Jenkins.Spec.
 | ||||
| func (r *ReconcileJenkins) Reconcile(request reconcile.Request) (reconcile.Result, error) { | ||||
| 	reconcileFailLimit := uint64(10) | ||||
| 	logger := r.buildLogger(request.Name) | ||||
|  | @ -167,11 +167,9 @@ func (r *ReconcileJenkins) Reconcile(request reconcile.Request) (reconcile.Resul | |||
| 
 | ||||
| 		if log.Debug { | ||||
| 			logger.V(log.VWarn).Info(fmt.Sprintf("Reconcile loop failed: %+v", err)) | ||||
| 		} else { | ||||
| 			if err.Error() != fmt.Sprintf("Operation cannot be fulfilled on jenkins.jenkins.io \"%s\": the object has been modified; please apply your changes to the latest version and try again", request.Name) { | ||||
| 		} else if err.Error() != fmt.Sprintf("Operation cannot be fulfilled on jenkins.jenkins.io \"%s\": the object has been modified; please apply your changes to the latest version and try again", request.Name) { | ||||
| 			logger.V(log.VWarn).Info(fmt.Sprintf("Reconcile loop failed: %s", err)) | ||||
| 		} | ||||
| 		} | ||||
| 
 | ||||
| 		if groovyErr, ok := err.(*jenkinsclient.GroovyScriptExecutionFailed); ok { | ||||
| 			*r.notificationEvents <- event.Event{ | ||||
|  |  | |||
|  | @ -8,13 +8,13 @@ import ( | |||
| // Phase defines the context where notification has been generated: base or user.
 | ||||
| type Phase string | ||||
| 
 | ||||
| // StatusColor is useful for better UX
 | ||||
| // StatusColor is useful for better UX.
 | ||||
| type StatusColor string | ||||
| 
 | ||||
| // LoggingLevel is type for selecting different logging levels
 | ||||
| // LoggingLevel is type for selecting different logging levels.
 | ||||
| type LoggingLevel string | ||||
| 
 | ||||
| // Event contains event details which will be sent as a notification
 | ||||
| // Event contains event details which will be sent as a notification.
 | ||||
| type Event struct { | ||||
| 	Jenkins v1alpha2.Jenkins | ||||
| 	Phase   Phase | ||||
|  |  | |||
|  | @ -30,11 +30,12 @@ const ( | |||
| 
 | ||||
| // NotificationTitle converts NotificationLevel enum to string
 | ||||
| func NotificationTitle(event event.Event) string { | ||||
| 	if event.Level == v1alpha2.NotificationLevelInfo { | ||||
| 	switch event.Level { | ||||
| 	case v1alpha2.NotificationLevelInfo: | ||||
| 		return InfoTitleText | ||||
| 	} else if event.Level == v1alpha2.NotificationLevelWarning { | ||||
| 	case v1alpha2.NotificationLevelWarning: | ||||
| 		return WarnTitleText | ||||
| 	} else { | ||||
| 	default: | ||||
| 		return "" | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -11,66 +11,66 @@ const ( | |||
| 	HumanSource Source = "human" | ||||
| ) | ||||
| 
 | ||||
| // Reason is interface that let us know why operator sent notification
 | ||||
| // Reason is interface that let us know why operator sent notification.
 | ||||
| type Reason interface { | ||||
| 	Short() []string | ||||
| 	Verbose() []string | ||||
| 	HasMessages() bool | ||||
| } | ||||
| 
 | ||||
| // Undefined is base or untraceable reason
 | ||||
| // Undefined is base or untraceable reason.
 | ||||
| type Undefined struct { | ||||
| 	source  Source | ||||
| 	short   []string | ||||
| 	verbose []string | ||||
| } | ||||
| 
 | ||||
| // PodRestart defines the reason why Jenkins master pod restarted
 | ||||
| // PodRestart defines the reason why Jenkins master pod restarted.
 | ||||
| type PodRestart struct { | ||||
| 	Undefined | ||||
| } | ||||
| 
 | ||||
| // PodCreation informs that pod is being created
 | ||||
| // PodCreation informs that pod is being created.
 | ||||
| type PodCreation struct { | ||||
| 	Undefined | ||||
| } | ||||
| 
 | ||||
| // ReconcileLoopFailed defines the reason why the reconcile loop failed
 | ||||
| // ReconcileLoopFailed defines the reason why the reconcile loop failed.
 | ||||
| type ReconcileLoopFailed struct { | ||||
| 	Undefined | ||||
| } | ||||
| 
 | ||||
| // GroovyScriptExecutionFailed defines the reason why the groovy script execution failed
 | ||||
| // GroovyScriptExecutionFailed defines the reason why the groovy script execution failed.
 | ||||
| type GroovyScriptExecutionFailed struct { | ||||
| 	Undefined | ||||
| } | ||||
| 
 | ||||
| // BaseConfigurationFailed defines the reason why base configuration phase failed
 | ||||
| // BaseConfigurationFailed defines the reason why base configuration phase failed.
 | ||||
| type BaseConfigurationFailed struct { | ||||
| 	Undefined | ||||
| } | ||||
| 
 | ||||
| // BaseConfigurationComplete informs that base configuration is valid and complete
 | ||||
| // BaseConfigurationComplete informs that base configuration is valid and complete.
 | ||||
| type BaseConfigurationComplete struct { | ||||
| 	Undefined | ||||
| } | ||||
| 
 | ||||
| // UserConfigurationFailed defines the reason why user configuration phase failed
 | ||||
| // UserConfigurationFailed defines the reason why user configuration phase failed.
 | ||||
| type UserConfigurationFailed struct { | ||||
| 	Undefined | ||||
| } | ||||
| 
 | ||||
| // UserConfigurationComplete informs that user configuration is valid and complete
 | ||||
| // UserConfigurationComplete informs that user configuration is valid and complete.
 | ||||
| type UserConfigurationComplete struct { | ||||
| 	Undefined | ||||
| } | ||||
| 
 | ||||
| // NewUndefined returns new instance of Undefined
 | ||||
| // NewUndefined returns new instance of Undefined.
 | ||||
| func NewUndefined(source Source, short []string, verbose ...string) *Undefined { | ||||
| 	return &Undefined{source: source, short: short, verbose: checkIfVerboseEmpty(short, verbose)} | ||||
| } | ||||
| 
 | ||||
| // NewPodRestart returns new instance of PodRestart
 | ||||
| // NewPodRestart returns new instance of PodRestart.
 | ||||
| func NewPodRestart(source Source, short []string, verbose ...string) *PodRestart { | ||||
| 	restartPodMessage := fmt.Sprintf("Jenkins master pod restarted by %s:", source) | ||||
| 	if len(short) == 1 { | ||||
|  | @ -94,7 +94,7 @@ func NewPodRestart(source Source, short []string, verbose ...string) *PodRestart | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NewPodCreation returns new instance of PodCreation
 | ||||
| // NewPodCreation returns new instance of PodCreation.
 | ||||
| func NewPodCreation(source Source, short []string, verbose ...string) *PodCreation { | ||||
| 	return &PodCreation{ | ||||
| 		Undefined{ | ||||
|  | @ -105,7 +105,7 @@ func NewPodCreation(source Source, short []string, verbose ...string) *PodCreati | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NewReconcileLoopFailed returns new instance of ReconcileLoopFailed
 | ||||
| // NewReconcileLoopFailed returns new instance of ReconcileLoopFailed.
 | ||||
| func NewReconcileLoopFailed(source Source, short []string, verbose ...string) *ReconcileLoopFailed { | ||||
| 	return &ReconcileLoopFailed{ | ||||
| 		Undefined{ | ||||
|  | @ -116,7 +116,7 @@ func NewReconcileLoopFailed(source Source, short []string, verbose ...string) *R | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NewGroovyScriptExecutionFailed returns new instance of GroovyScriptExecutionFailed
 | ||||
| // NewGroovyScriptExecutionFailed returns new instance of GroovyScriptExecutionFailed.
 | ||||
| func NewGroovyScriptExecutionFailed(source Source, short []string, verbose ...string) *GroovyScriptExecutionFailed { | ||||
| 	return &GroovyScriptExecutionFailed{ | ||||
| 		Undefined{ | ||||
|  | @ -127,7 +127,7 @@ func NewGroovyScriptExecutionFailed(source Source, short []string, verbose ...st | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NewBaseConfigurationFailed returns new instance of BaseConfigurationFailed
 | ||||
| // NewBaseConfigurationFailed returns new instance of BaseConfigurationFailed.
 | ||||
| func NewBaseConfigurationFailed(source Source, short []string, verbose ...string) *BaseConfigurationFailed { | ||||
| 	return &BaseConfigurationFailed{ | ||||
| 		Undefined{ | ||||
|  | @ -138,7 +138,7 @@ func NewBaseConfigurationFailed(source Source, short []string, verbose ...string | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NewBaseConfigurationComplete returns new instance of BaseConfigurationComplete
 | ||||
| // NewBaseConfigurationComplete returns new instance of BaseConfigurationComplete.
 | ||||
| func NewBaseConfigurationComplete(source Source, short []string, verbose ...string) *BaseConfigurationComplete { | ||||
| 	return &BaseConfigurationComplete{ | ||||
| 		Undefined{ | ||||
|  | @ -149,7 +149,7 @@ func NewBaseConfigurationComplete(source Source, short []string, verbose ...stri | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NewUserConfigurationFailed returns new instance of UserConfigurationFailed
 | ||||
| // NewUserConfigurationFailed returns new instance of UserConfigurationFailed.
 | ||||
| func NewUserConfigurationFailed(source Source, short []string, verbose ...string) *UserConfigurationFailed { | ||||
| 	return &UserConfigurationFailed{ | ||||
| 		Undefined{ | ||||
|  | @ -160,7 +160,7 @@ func NewUserConfigurationFailed(source Source, short []string, verbose ...string | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NewUserConfigurationComplete returns new instance of UserConfigurationComplete
 | ||||
| // NewUserConfigurationComplete returns new instance of UserConfigurationComplete.
 | ||||
| func NewUserConfigurationComplete(source Source, short []string, verbose ...string) *UserConfigurationComplete { | ||||
| 	return &UserConfigurationComplete{ | ||||
| 		Undefined{ | ||||
|  | @ -171,20 +171,20 @@ func NewUserConfigurationComplete(source Source, short []string, verbose ...stri | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Source is enum type that informs us what triggered notification
 | ||||
| // Source is enum type that informs us what triggered notification.
 | ||||
| type Source string | ||||
| 
 | ||||
| // Short is list of reasons
 | ||||
| // Short is list of reasons.
 | ||||
| func (p Undefined) Short() []string { | ||||
| 	return p.short | ||||
| } | ||||
| 
 | ||||
| // Verbose is list of reasons with details
 | ||||
| // Verbose is list of reasons with details.
 | ||||
| func (p Undefined) Verbose() []string { | ||||
| 	return p.verbose | ||||
| } | ||||
| 
 | ||||
| // HasMessages checks if there is any message
 | ||||
| // HasMessages checks if there is any message.
 | ||||
| func (p Undefined) HasMessages() bool { | ||||
| 	return len(p.short) > 0 || len(p.verbose) > 0 | ||||
| } | ||||
|  |  | |||
|  | @ -59,7 +59,6 @@ func TestUndefined_HasMessages(t *testing.T) { | |||
| 		podRestart := NewUndefined(KubernetesSource, []string{}, []string{}...) | ||||
| 		assert.False(t, podRestart.HasMessages()) | ||||
| 	}) | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func TestPodRestartPrepend(t *testing.T) { | ||||
|  |  | |||
|  | @ -19,12 +19,12 @@ import ( | |||
| 	k8sclient "sigs.k8s.io/controller-runtime/pkg/client" | ||||
| ) | ||||
| 
 | ||||
| // Provider is the communication service handler
 | ||||
| // Provider is the communication service handler.
 | ||||
| type Provider interface { | ||||
| 	Send(event event.Event) error | ||||
| } | ||||
| 
 | ||||
| // Listen listens for incoming events and send it as notifications
 | ||||
| // Listen listens for incoming events and send it as notifications.
 | ||||
| func Listen(events chan event.Event, k8sEvent k8sevent.Recorder, k8sClient k8sclient.Client) { | ||||
| 	httpClient := http.Client{} | ||||
| 	for e := range events { | ||||
|  | @ -44,16 +44,16 @@ func Listen(events chan event.Event, k8sEvent k8sevent.Recorder, k8sClient k8scl | |||
| 		for _, notificationConfig := range e.Jenkins.Spec.Notifications { | ||||
| 			var err error | ||||
| 			var provider Provider | ||||
| 
 | ||||
| 			if notificationConfig.Slack != nil { | ||||
| 			switch { | ||||
| 			case notificationConfig.Slack != nil: | ||||
| 				provider = slack.New(k8sClient, notificationConfig, httpClient) | ||||
| 			} else if notificationConfig.Teams != nil { | ||||
| 			case notificationConfig.Teams != nil: | ||||
| 				provider = msteams.New(k8sClient, notificationConfig, httpClient) | ||||
| 			} else if notificationConfig.Mailgun != nil { | ||||
| 			case notificationConfig.Mailgun != nil: | ||||
| 				provider = mailgun.New(k8sClient, notificationConfig) | ||||
| 			} else if notificationConfig.SMTP != nil { | ||||
| 			case notificationConfig.SMTP != nil: | ||||
| 				provider = smtp.New(k8sClient, notificationConfig) | ||||
| 			} else { | ||||
| 			default: | ||||
| 				logger.V(log.VWarn).Info(fmt.Sprintf("Unknown notification service `%+v`", notificationConfig)) | ||||
| 				continue | ||||
| 			} | ||||
|  |  | |||
|  | @ -23,25 +23,25 @@ const ( | |||
| 	defaultColor = "#c8c8c8" | ||||
| ) | ||||
| 
 | ||||
| // Slack is a Slack notification service
 | ||||
| // Slack is a Slack notification service.
 | ||||
| type Slack struct { | ||||
| 	httpClient http.Client | ||||
| 	k8sClient  k8sclient.Client | ||||
| 	config     v1alpha2.Notification | ||||
| } | ||||
| 
 | ||||
| // New returns instance of Slack
 | ||||
| // New returns instance of Slack.
 | ||||
| func New(k8sClient k8sclient.Client, config v1alpha2.Notification, httpClient http.Client) *Slack { | ||||
| 	return &Slack{k8sClient: k8sClient, config: config, httpClient: httpClient} | ||||
| } | ||||
| 
 | ||||
| // Message is representation of json message
 | ||||
| // Message is representation of json message.
 | ||||
| type Message struct { | ||||
| 	Text        string       `json:"text"` | ||||
| 	Attachments []Attachment `json:"attachments"` | ||||
| } | ||||
| 
 | ||||
| // Attachment is representation of json attachment
 | ||||
| // Attachment is representation of json attachment.
 | ||||
| type Attachment struct { | ||||
| 	Fallback string            `json:"fallback"` | ||||
| 	Color    event.StatusColor `json:"color"` | ||||
|  | @ -117,7 +117,7 @@ func (s Slack) generateMessage(e event.Event) Message { | |||
| 	return sm | ||||
| } | ||||
| 
 | ||||
| // Send is function for sending directly to API
 | ||||
| // Send is function for sending directly to API.
 | ||||
| func (s Slack) Send(e event.Event) error { | ||||
| 	secret := &corev1.Secret{} | ||||
| 	selector := s.config.Slack.WebHookURLSecretKeySelector | ||||
|  |  | |||
|  | @ -47,13 +47,13 @@ const ( | |||
| </html>` | ||||
| ) | ||||
| 
 | ||||
| // SMTP is Simple Mail Transport Protocol used for sending emails
 | ||||
| // SMTP is Simple Mail Transport Protocol used for sending emails.
 | ||||
| type SMTP struct { | ||||
| 	k8sClient k8sclient.Client | ||||
| 	config    v1alpha2.Notification | ||||
| } | ||||
| 
 | ||||
| // New returns instance of SMTP
 | ||||
| // New returns instance of SMTP.
 | ||||
| func New(k8sClient k8sclient.Client, config v1alpha2.Notification) *SMTP { | ||||
| 	return &SMTP{k8sClient: k8sClient, config: config} | ||||
| } | ||||
|  | @ -83,7 +83,7 @@ func (s SMTP) generateMessage(e event.Event) *gomail.Message { | |||
| 	return message | ||||
| } | ||||
| 
 | ||||
| // Send is function for sending notification by SMTP server
 | ||||
| // Send is function for sending notification by SMTP server.
 | ||||
| func (s SMTP) Send(e event.Event) error { | ||||
| 	usernameSecret := &corev1.Secret{} | ||||
| 	passwordSecret := &corev1.Secret{} | ||||
|  |  | |||
|  | @ -37,6 +37,8 @@ const ( | |||
| 	fromHeader    = "From" | ||||
| 	toHeader      = "To" | ||||
| 	subjectHeader = "Subject" | ||||
| 
 | ||||
| 	nilConst = "nil" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
|  | @ -106,11 +108,12 @@ func (s *testSession) Data(r io.Reader) error { | |||
| 	} | ||||
| 
 | ||||
| 	for i := range headers { | ||||
| 		if headers[i][1] == fromHeader && headers[i][2] != testFrom { | ||||
| 		switch { | ||||
| 		case headers[i][1] == fromHeader && headers[i][2] != testFrom: | ||||
| 			return fmt.Errorf("`From` header is not equal: '%s', expected '%s'", headers[i][2], testFrom) | ||||
| 		} else if headers[i][1] == toHeader && headers[i][2] != testTo { | ||||
| 		case headers[i][1] == toHeader && headers[i][2] != testTo: | ||||
| 			return fmt.Errorf("`To` header is not equal: '%s', expected '%s'", headers[i][2], testTo) | ||||
| 		} else if headers[i][1] == subjectHeader && headers[i][2] != testSubject { | ||||
| 		case headers[i][1] == subjectHeader && headers[i][2] != testSubject: | ||||
| 			return fmt.Errorf("`Subject` header is not equal: '%s', expected '%s'", headers[i][2], testSubject) | ||||
| 		} | ||||
| 	} | ||||
|  | @ -242,13 +245,13 @@ func TestGenerateMessage(t *testing.T) { | |||
| 	}) | ||||
| 
 | ||||
| 	t.Run("with nils", func(t *testing.T) { | ||||
| 		crName := "nil" | ||||
| 		crName := nilConst | ||||
| 		phase := event.PhaseBase | ||||
| 		level := v1alpha2.NotificationLevelInfo | ||||
| 		res := reason.NewUndefined(reason.KubernetesSource, []string{"nil"}, []string{"nil"}...) | ||||
| 		res := reason.NewUndefined(reason.KubernetesSource, []string{nilConst}, []string{nilConst}...) | ||||
| 
 | ||||
| 		from := "nil" | ||||
| 		to := "nil" | ||||
| 		from := nilConst | ||||
| 		to := nilConst | ||||
| 
 | ||||
| 		e := event.Event{ | ||||
| 			Jenkins: v1alpha2.Jenkins{ | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ const ( | |||
| 	workflowJobPlugin                   = "workflow-job:2.38" | ||||
| ) | ||||
| 
 | ||||
| // basePluginsList contains plugins to install by operator
 | ||||
| // basePluginsList contains plugins to install by operator.
 | ||||
| var basePluginsList = []Plugin{ | ||||
| 	Must(New(kubernetesPlugin)), | ||||
| 	Must(New(workflowJobPlugin)), | ||||
|  | @ -21,7 +21,7 @@ var basePluginsList = []Plugin{ | |||
| 	Must(New(kubernetesCredentialsProviderPlugin)), | ||||
| } | ||||
| 
 | ||||
| // BasePlugins returns list of plugins to install by operator
 | ||||
| // BasePlugins returns list of plugins to install by operator.
 | ||||
| func BasePlugins() []Plugin { | ||||
| 	return basePluginsList | ||||
| } | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ import ( | |||
| 	"github.com/pkg/errors" | ||||
| ) | ||||
| 
 | ||||
| // Plugin represents jenkins plugin
 | ||||
| // Plugin represents jenkins plugin.
 | ||||
| type Plugin struct { | ||||
| 	Name                     string `json:"name"` | ||||
| 	Version                  string `json:"version"` | ||||
|  | @ -29,7 +29,7 @@ var ( | |||
| 	DownloadURLPattern = regexp.MustCompile(`https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)`) | ||||
| ) | ||||
| 
 | ||||
| // New creates plugin from string, for example "name-of-plugin:0.0.1"
 | ||||
| // New creates plugin from string, for example "name-of-plugin:0.0.1".
 | ||||
| func New(nameWithVersion string) (*Plugin, error) { | ||||
| 	val := strings.SplitN(nameWithVersion, ":", 2) | ||||
| 	if val == nil || len(val) != 2 { | ||||
|  | @ -48,7 +48,7 @@ func New(nameWithVersion string) (*Plugin, error) { | |||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| // NewPlugin creates plugin from name and version, for example "name-of-plugin:0.0.1"
 | ||||
| // NewPlugin creates plugin from name and version, for example "name-of-plugin:0.0.1".
 | ||||
| func NewPlugin(name, version, downloadURL string) (*Plugin, error) { | ||||
| 	if err := validatePlugin(name, version, downloadURL); err != nil { | ||||
| 		return nil, err | ||||
|  | @ -76,7 +76,7 @@ func validatePlugin(name, version, downloadURL string) error { | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // Must returns plugin from pointer and throws panic when error is set
 | ||||
| // Must returns plugin from pointer and throws panic when error is set.
 | ||||
| func Must(plugin *Plugin, err error) Plugin { | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
|  | @ -85,7 +85,7 @@ func Must(plugin *Plugin, err error) Plugin { | |||
| 	return *plugin | ||||
| } | ||||
| 
 | ||||
| // VerifyDependencies checks if all plugins have compatible versions
 | ||||
| // VerifyDependencies checks if all plugins have compatible versions.
 | ||||
| func VerifyDependencies(values ...map[Plugin][]Plugin) []string { | ||||
| 	var messages []string | ||||
| 	// key - plugin name, value array of versions
 | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ import ( | |||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/pkg/errors" | ||||
| 	"k8s.io/api/core/v1" | ||||
| 	v1 "k8s.io/api/core/v1" | ||||
| 	"k8s.io/apimachinery/pkg/runtime" | ||||
| 	"k8s.io/client-go/kubernetes" | ||||
| 	"k8s.io/client-go/kubernetes/scheme" | ||||
|  |  | |||
|  | @ -9,10 +9,10 @@ import ( | |||
| 	logf "sigs.k8s.io/controller-runtime/pkg/log" | ||||
| ) | ||||
| 
 | ||||
| // Log represents global logger
 | ||||
| // Log represents global logger.
 | ||||
| var Log = logf.Log.WithName("controller-jenkins") | ||||
| 
 | ||||
| // Debug indicates that debug level is set
 | ||||
| // Debug indicates that debug level is set.
 | ||||
| var Debug bool | ||||
| 
 | ||||
| const ( | ||||
|  | @ -43,7 +43,7 @@ func fatalIfErr(err error, f func(format string, v ...interface{})) { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // SetupLogger setups global logger
 | ||||
| // SetupLogger setups global logger.
 | ||||
| func SetupLogger(debug bool) { | ||||
| 	Debug = debug | ||||
| 	logf.SetLogger(zapLogger(debug)) | ||||
|  |  | |||
|  | @ -22,13 +22,15 @@ import ( | |||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| ) | ||||
| 
 | ||||
| const e2e = "e2e" | ||||
| 
 | ||||
| func TestConfiguration(t *testing.T) { | ||||
| 	t.Parallel() | ||||
| 	namespace, ctx := setupTest(t) | ||||
| 
 | ||||
| 	defer showLogsAndCleanup(t, ctx) | ||||
| 
 | ||||
| 	jenkinsCRName := "e2e" | ||||
| 	jenkinsCRName := e2e | ||||
| 	numberOfExecutors := 6 | ||||
| 	numberOfExecutorsEnvName := "NUMBER_OF_EXECUTORS" | ||||
| 	systemMessage := "Configuration as Code integration works!!!" | ||||
|  | @ -207,7 +209,7 @@ unclassified: | |||
| func createDefaultLimitsForContainersInNamespace(t *testing.T, namespace string) { | ||||
| 	limitRange := &corev1.LimitRange{ | ||||
| 		ObjectMeta: metav1.ObjectMeta{ | ||||
| 			Name:      "e2e", | ||||
| 			Name:      e2e, | ||||
| 			Namespace: namespace, | ||||
| 		}, | ||||
| 		Spec: corev1.LimitRangeSpec{ | ||||
|  |  | |||
|  | @ -76,7 +76,7 @@ func loadSeedJobsConfig(t *testing.T) seedJobsConfig { | |||
| 	assert.NoError(t, err) | ||||
| 
 | ||||
| 	var result seedJobsConfig | ||||
| 	err = json.Unmarshal([]byte(byteValue), &result) | ||||
| 	err = json.Unmarshal(byteValue, &result) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.NotEmpty(t, result.SeedJobs) | ||||
| 	return result | ||||
|  | @ -95,7 +95,7 @@ func createKubernetesCredentialsProviderSecret(t *testing.T, namespace string, c | |||
| 				"jenkins.io/credentials-description": "credentials from Kubernetes " + config.ID, | ||||
| 			}, | ||||
| 			Labels: map[string]string{ | ||||
| 				seedjobs.JenkinsCredentialTypeLabelName: string(config.CredentialID), | ||||
| 				seedjobs.JenkinsCredentialTypeLabelName: config.CredentialID, | ||||
| 			}, | ||||
| 		}, | ||||
| 		StringData: map[string]string{ | ||||
|  |  | |||
|  | @ -3,5 +3,5 @@ package version | |||
| // Version indicates which version of the binary is running.
 | ||||
| var Version string | ||||
| 
 | ||||
| // GitCommit indicates which git hash the binary was built off of
 | ||||
| // GitCommit indicates which git hash the binary was built off of.
 | ||||
| var GitCommit string | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue