From 68495c93eb0b2e49c6a2cac93cd0837d8a3d38b2 Mon Sep 17 00:00:00 2001 From: Phillip Wittrock Date: Thu, 3 Jun 2021 18:13:37 -0700 Subject: [PATCH] Refactor `kubebuilder alpha config-gen` to use embed --- go.mod | 7 +- go.sum | 76 +++++++---- .../config-gen/cert-generation-filter.go | 21 ++-- .../alpha/config-gen/cert-manager-patches.go | 39 ------ pkg/cli/alpha/config-gen/cmd.go | 118 +++++++++++------- pkg/cli/alpha/config-gen/component-filter.go | 2 +- pkg/cli/alpha/config-gen/configgen_test.go | 2 +- .../config-gen/controller-manager-patches.go | 39 ------ pkg/cli/alpha/config-gen/crd-patches.go | 40 ------ .../examples/advancedextension/main.go | 24 ++-- .../examples/basicextension/main.go | 34 +++-- pkged.go | 12 -- 12 files changed, 158 insertions(+), 256 deletions(-) delete mode 100644 pkg/cli/alpha/config-gen/cert-manager-patches.go delete mode 100644 pkg/cli/alpha/config-gen/controller-manager-patches.go delete mode 100644 pkg/cli/alpha/config-gen/crd-patches.go delete mode 100644 pkged.go diff --git a/go.mod b/go.mod index 0c7bdaffe3d..334d16a15eb 100644 --- a/go.mod +++ b/go.mod @@ -7,21 +7,18 @@ require ( github.com/go-logr/logr v0.3.0 // indirect github.com/gobuffalo/flect v0.2.2 github.com/joelanford/go-apidiff v0.1.0 - // TODO: remove this in favor of embed once using 1.16 - github.com/markbates/pkger v0.17.1 // for `kubebuilder alpha config-gen` github.com/onsi/ginkgo v1.15.0 github.com/onsi/gomega v1.10.5 github.com/spf13/afero v1.2.2 github.com/spf13/cobra v1.1.1 github.com/spf13/pflag v1.0.5 golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e - // for `kubebuilder alpha config-gen` - gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect k8s.io/api v0.20.2 // indirect k8s.io/apiextensions-apiserver v0.20.1 // indirect k8s.io/apimachinery v0.20.2 // for `kubebuilder alpha config-gen` k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 // indirect + sigs.k8s.io/controller-runtime v0.8.3 // for `kubebuilder alpha config-gen` sigs.k8s.io/controller-tools v0.3.0 // for `kubebuilder alpha config-gen` - sigs.k8s.io/kustomize/kyaml v0.10.10 // for `kubebuilder alpha config-gen` + sigs.k8s.io/kustomize/kyaml v0.10.20 // for `kubebuilder alpha config-gen` sigs.k8s.io/yaml v1.2.0 ) diff --git a/go.sum b/go.sum index 38c9525ac2a..6674807f102 100644 --- a/go.sum +++ b/go.sum @@ -23,7 +23,6 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5EvSCJcmH3dT9luvxzu8iGAE= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= @@ -47,7 +46,6 @@ github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -64,7 +62,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -77,6 +74,7 @@ github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:l github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= @@ -84,7 +82,9 @@ github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnweb github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -124,7 +124,6 @@ github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustmop/soup v1.1.2-0.20190516214245-38228baa104e/go.mod h1:CgNC6SGbT+Xb8wGGvzilttZL1mc5sQ/5KkcxsZttMIk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= @@ -133,9 +132,10 @@ github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -161,6 +161,7 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7 github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.3.0 h1:q4c+kbcR0d5rSurhBR8dIgieOaYpXtsdTYfx22Cu6rs= github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= 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= @@ -194,13 +195,10 @@ github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsd github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/spec v0.19.5 h1:Xm0Ao53uqnk9QE/LlYV5DEU09UAgpliA85QoT9LzqPw= -github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= @@ -210,15 +208,11 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= github.com/gobuffalo/flect v0.2.2 h1:PAVD7sp0KOdfswjAw9BpLCU9hXo7wFSzgpQ+zNeks/A= github.com/gobuffalo/flect v0.2.2/go.mod h1:vmkQwuZYhN5Pc4ljYQZzP+1sq+NEkK+lh20jmEmX3jc= -github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI= -github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= @@ -228,6 +222,7 @@ github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -272,12 +267,15 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -304,6 +302,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= @@ -312,6 +312,8 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10 h1:6q5mVkdH/vYmqngx7kZQTjJ5HRsx+ImorDIEQ+beJgc= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -337,7 +339,6 @@ github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT 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/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49 h1:o/c0aWEP/m6n61xlYW2QP4t9424qlJOsxugn5Zds2Rg= github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= github.com/kisom/goutils v1.1.0/go.mod h1:+UBTfd78habUYWFbNWTJNG+jNG/i/lGURakr4A/yNRw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -353,7 +354,6 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28/go.mod h1:T/T7jsxVqf9k/zYOqbgNAsANsjxTd1Yq3htjDhQ1H0c= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU= github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -364,8 +364,6 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= 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/markbates/pkger v0.17.1 h1:/MKEtWqtc0mZvu9OinB9UzVN9iYCwLWuyUv4Bw+PCno= -github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -373,9 +371,9 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -394,7 +392,6 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8= @@ -411,6 +408,7 @@ github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.15.0 h1:1V1NfVQR87RtWAgp1lv9JZJ5Jap+XFGKPi00andXGi4= github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= @@ -418,11 +416,11 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.5 h1:7n6FEkpFmfCoo2t+YYqXH0evK+a9ICQz0xcAy9dYcaQ= github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulmach/orb v0.1.3/go.mod h1:VFlX/8C+IQ1p6FTRRKzKoOPJnvEtA5G0Veuqwbu//Vk= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= @@ -438,22 +436,25 @@ github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prY github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/qri-io/starlib v0.4.2-0.20200213133954-ff2e8cd5ef8d/go.mod h1:7DPO4domFU579Ga6E61sB9VFNaniPVwJP5C4bBCu3wA= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -492,14 +493,15 @@ github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/y github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= 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.2.3-0.20181224173747-660f15d67dbb/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= @@ -543,12 +545,17 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.starlark.net v0.0.0-20190528202925-30ae18b8564f/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -603,7 +610,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -645,6 +651,7 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -694,6 +701,7 @@ golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -711,6 +719,7 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -739,6 +748,9 @@ golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191004183538-27eeabb02079/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/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-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -764,6 +776,8 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.1.0 h1:Phva6wqu+xR//Njw6iorylFFgn/z547tw5Ne3HZPQ+k= +gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -850,10 +864,10 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= @@ -881,10 +895,14 @@ k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= +k8s.io/client-go v0.20.2 h1:uuf+iIAbfnCSw8IGAv/Rg0giM+2bOzHLOsbbrwrdhNQ= +k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE= k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= k8s.io/code-generator v0.20.1/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= +k8s.io/component-base v0.20.2 h1:LMmu5I0pLtwjpp5009KLuMGFqSc2S2isGw8t1hpYKLE= +k8s.io/component-base v0.20.2/go.mod h1:pzFtCiwe/ASD0iV7ySMu8SYVJjCapNM9bjvk7ptpKh0= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -899,6 +917,8 @@ k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e h1:KLHHjkdQFomZy8+06csTWZ0m1343QqxZhR2LJ1OxCYM= +k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 h1:0T5IaWHO3sJTEmCP6mUlBvMukxPKUQWqiI/YuiBNMiQ= @@ -908,10 +928,12 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/controller-runtime v0.8.3 h1:GMHvzjTmaWHQB8HadW+dIvBoJuLvZObYJ5YoZruPRao= +sigs.k8s.io/controller-runtime v0.8.3/go.mod h1:U/l+DUopBc1ecfRZ5aviA9JDmGFQKvLf5YkZNx2e0sU= sigs.k8s.io/controller-tools v0.3.0 h1:y3YD99XOyWaXkiF1kd41uRvfp/64teWcrEZFuHxPhJ4= sigs.k8s.io/controller-tools v0.3.0/go.mod h1:enhtKGfxZD1GFEoMgP8Fdbu+uKQ/cq1/WGJhdVChfvI= -sigs.k8s.io/kustomize/kyaml v0.10.10 h1:caAxDDkaXZp+0kDsZVik4leFJV8LCy09PdVqpaoNeF4= -sigs.k8s.io/kustomize/kyaml v0.10.10/go.mod h1:K9yg1k/HB/6xNOf5VH3LhTo1DK9/5ykSZO5uIv+Y/1k= +sigs.k8s.io/kustomize/kyaml v0.10.20 h1:L9JNKvJfCBpmYFr4tP0igpfj/pXP7nW2aXOWNtF5k1g= +sigs.k8s.io/kustomize/kyaml v0.10.20/go.mod h1:TYWhGwW9vjoRh3rWqBwB/ZOXyEGRVWe7Ggc3+KZIO+c= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8= diff --git a/pkg/cli/alpha/config-gen/cert-generation-filter.go b/pkg/cli/alpha/config-gen/cert-generation-filter.go index da1a2fe23bd..09a0121b3d9 100644 --- a/pkg/cli/alpha/config-gen/cert-generation-filter.go +++ b/pkg/cli/alpha/config-gen/cert-generation-filter.go @@ -48,13 +48,12 @@ func (c CertFilter) Filter(input []*yaml.RNode) ([]*yaml.RNode, error) { return nil, err } - s := &framework.Selector{ + matches, err := (&framework.Selector{ Kinds: []string{ "ValidatingWebhookConfiguration", "MutatingWebhookConfiguration", }, - } - matches, err := s.GetMatches(&framework.ResourceList{Items: input}) + }).Filter(input) if err != nil { return nil, err } @@ -82,17 +81,13 @@ func (c CertFilter) Filter(input []*yaml.RNode) ([]*yaml.RNode, error) { } } - s = &framework.Selector{ - Filter: func(n *yaml.RNode) bool { - // Allow-list conversion webhooks - m, _ := n.GetMeta() - if m.Kind != "CustomResourceDefinition" { - return true - } - return c.Spec.Webhooks.Conversions[m.Name] + matches, err = (&framework.Selector{ + Kinds: []string{"CustomResourceDefinition"}, + ResourceMatcher: func(m *yaml.RNode) bool { + meta, _ := m.GetMeta() + return c.Spec.Webhooks.Conversions[meta.Name] }, - } - matches, err = s.GetMatches(&framework.ResourceList{Items: input}) + }).Filter(input) if err != nil { return nil, err } diff --git a/pkg/cli/alpha/config-gen/cert-manager-patches.go b/pkg/cli/alpha/config-gen/cert-manager-patches.go deleted file mode 100644 index 0f4c2436709..00000000000 --- a/pkg/cli/alpha/config-gen/cert-manager-patches.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package configgen - -import ( - "github.com/markbates/pkger" - "sigs.k8s.io/kustomize/kyaml/fn/framework" -) - -// CertManagerPatchTemplate returns the PatchTemplate for cert-manager -func CertManagerPatchTemplate(_ *KubebuilderConfigGen) framework.PT { - return framework.PT{ - // keep casting -- required by pkger to find the directory - Dir: pkger.Dir("/pkg/cli/alpha/config-gen/templates/patches/cert-manager"), - Selector: func() *framework.Selector { - return &framework.Selector{ - Kinds: []string{ - "CustomResourceDefinition", - "ValidatingWebhookConfiguration", - "MutatingWebhookConfiguration", - }, - } - }, - } -} diff --git a/pkg/cli/alpha/config-gen/cmd.go b/pkg/cli/alpha/config-gen/cmd.go index d9ec54aeb35..76d0eea84f2 100644 --- a/pkg/cli/alpha/config-gen/cmd.go +++ b/pkg/cli/alpha/config-gen/cmd.go @@ -17,6 +17,10 @@ limitations under the License. package configgen import ( + // required to make sure the controller-tools is initialized fully + _ "sigs.k8s.io/controller-runtime/pkg/scheme" + + "embed" "fmt" "io/ioutil" "log" @@ -24,68 +28,90 @@ import ( "path/filepath" "strings" - // TODO: switch to embed - "github.com/markbates/pkger" "github.com/spf13/cobra" - - // import pkged files - _ "sigs.k8s.io/kubebuilder/v3" "sigs.k8s.io/kustomize/kyaml/fn/framework" + "sigs.k8s.io/kustomize/kyaml/fn/framework/command" + "sigs.k8s.io/kustomize/kyaml/fn/framework/parser" "sigs.k8s.io/kustomize/kyaml/kio" "sigs.k8s.io/kustomize/kyaml/yaml" ) -// NewCommand returns a new cobra command -func NewCommand() *cobra.Command { - kp := &KubebuilderConfigGen{} - - // legacy kustomize function support - legacyPlugin := os.Getenv("KUSTOMIZE_PLUGIN_CONFIG_STRING") - err := yaml.Unmarshal([]byte(legacyPlugin), kp) - if err != nil { - log.Fatal(err) - } - - // Eager check to make sure pkged templates are found. - err = pkger.Walk("/pkg/cli/alpha/config-gen/templates/resources", func(_ string, _ os.FileInfo, err error) error { - return err - }) - if err != nil { - // this shouldn't fail if it was compiled correctly - log.Fatal(err) - } +// TemplateFS contains the templates used by config-gen +//go:embed templates/resources/* templates/patches/* +var TemplateFS embed.FS - c := framework.TemplateCommand{ - API: kp, +func buildProcessor(value *KubebuilderConfigGen) framework.ResourceListProcessor { + return framework.TemplateProcessor{ + MergeResources: true, - MergeResources: true, // apply additional inputs as patches - - // these are run before the templates PreProcessFilters: []kio.Filter{ // run controller-gen libraries to generate configuration from code - ControllerGenFilter{KubebuilderConfigGen: kp}, + ControllerGenFilter{KubebuilderConfigGen: value}, // inject generated certificates - CertFilter{KubebuilderConfigGen: kp}, + CertFilter{KubebuilderConfigGen: value}, }, - // generate resources - // keep casting -- required by pkger to find the directory - TemplatesFn: framework.TemplatesFromDir(pkger.Dir("/pkg/cli/alpha/config-gen/templates/resources")), - - // patch resources - PatchTemplatesFn: framework.PatchTemplatesFromDir( - CRDPatchTemplate(kp), - CertManagerPatchTemplate(kp), - ControllerManagerPatchTemplate(kp), - ), + ResourceTemplates: []framework.ResourceTemplate{{ + Templates: parser.TemplateFiles(filepath.Join("templates", "resources")).FromFS(TemplateFS), + }}, + PatchTemplates: []framework.PatchTemplate{ + &framework.ResourcePatchTemplate{ + Selector: &framework.Selector{ + Kinds: []string{"CustomResourceDefinition"}, + ResourceMatcher: func(m *yaml.RNode) bool { + meta, _ := m.GetMeta() + return value.Spec.Webhooks.Conversions[meta.Name] + }, + }, + Templates: parser.TemplateFiles(filepath.Join("templates", "patches", "crd")).FromFS(TemplateFS), + }, + &framework.ResourcePatchTemplate{ + Selector: &framework.Selector{ + TemplateData: value, + Kinds: []string{"Deployment"}, + Names: []string{"controller-manager"}, + Namespaces: []string{"{{ .Namespace }}"}, + Labels: map[string]string{"control-plane": "controller-manager"}, + }, + Templates: parser.TemplateFiles(filepath.Join("templates", "patches", "controller-manager")).FromFS(TemplateFS), + }, + &framework.ResourcePatchTemplate{ + Selector: &framework.Selector{ + Kinds: []string{ + "CustomResourceDefinition", + "ValidatingWebhookConfiguration", + "MutatingWebhookConfiguration", + }, + }, + Templates: parser.TemplateFiles(filepath.Join("templates", "patches", "cert-manager")).FromFS(TemplateFS), + }, + }, - // perform final modifications PostProcessFilters: []kio.Filter{ - // sort the resources - ComponentFilter{KubebuilderConfigGen: kp}, - SortFilter{KubebuilderConfigGen: kp}, + ComponentFilter{KubebuilderConfigGen: value}, + SortFilter{KubebuilderConfigGen: value}, }, - }.GetCommand() + TemplateData: value, + } +} + +func buildCmd() *cobra.Command { + kp := &KubebuilderConfigGen{} + + // legacy kustomize function support + legacyPlugin := os.Getenv("KUSTOMIZE_PLUGIN_CONFIG_STRING") + err := yaml.Unmarshal([]byte(legacyPlugin), kp) + if err != nil { + log.Fatal(err) + } + + cmd := command.Build(buildProcessor(kp), command.StandaloneEnabled, false) + return cmd +} + +// NewCommand returns a new cobra command +func NewCommand() *cobra.Command { + c := buildCmd() if os.Getenv("KUSTOMIZE_FUNCTION") == "true" { // run as part of kustomize -- read from stdin diff --git a/pkg/cli/alpha/config-gen/component-filter.go b/pkg/cli/alpha/config-gen/component-filter.go index 0f0a8d6ae6b..7a96cd4564b 100644 --- a/pkg/cli/alpha/config-gen/component-filter.go +++ b/pkg/cli/alpha/config-gen/component-filter.go @@ -40,7 +40,7 @@ func (cf ComponentFilter) Filter(input []*yaml.RNode) ([]*yaml.RNode, error) { Names: []string{"manager-config"}, Namespaces: []string{cf.Namespace}, } - matches, err := s.GetMatches(&framework.ResourceList{Items: input}) + matches, err := s.Filter(input) if err != nil { return nil, err } diff --git a/pkg/cli/alpha/config-gen/configgen_test.go b/pkg/cli/alpha/config-gen/configgen_test.go index db33b8244c4..f66649eb69a 100644 --- a/pkg/cli/alpha/config-gen/configgen_test.go +++ b/pkg/cli/alpha/config-gen/configgen_test.go @@ -24,7 +24,7 @@ import ( ) func TestNewCommand(t *testing.T) { - test := frameworktestutil.ResultsChecker{ + test := frameworktestutil.CommandResultsChecker{ Command: configgen.NewCommand, // Uncomment this line to update the testdata directory // UpdateExpectedFromActual: true, diff --git a/pkg/cli/alpha/config-gen/controller-manager-patches.go b/pkg/cli/alpha/config-gen/controller-manager-patches.go deleted file mode 100644 index 7548ba9a820..00000000000 --- a/pkg/cli/alpha/config-gen/controller-manager-patches.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package configgen - -import ( - "github.com/markbates/pkger" - "sigs.k8s.io/kustomize/kyaml/fn/framework" -) - -// ControllerManagerPatchTemplate returns the PatchTemplate for controller-manager -func ControllerManagerPatchTemplate(kp *KubebuilderConfigGen) framework.PT { - return framework.PT{ - // keep casting -- required by pkger to find the directory - Dir: pkger.Dir("/pkg/cli/alpha/config-gen/templates/patches/controller-manager"), - Selector: func() *framework.Selector { - return &framework.Selector{ - Kinds: []string{"Deployment"}, - Namespaces: []string{kp.Namespace}, - Names: []string{"controller-manager"}, - Labels: map[string]string{"control-plane": "controller-manager"}, - TemplatizeValues: true, - } - }, - } -} diff --git a/pkg/cli/alpha/config-gen/crd-patches.go b/pkg/cli/alpha/config-gen/crd-patches.go deleted file mode 100644 index 02d9aba0116..00000000000 --- a/pkg/cli/alpha/config-gen/crd-patches.go +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package configgen - -import ( - "github.com/markbates/pkger" - "sigs.k8s.io/kustomize/kyaml/fn/framework" - "sigs.k8s.io/kustomize/kyaml/yaml" -) - -// CRDPatchTemplate returns the PatchTemplate for crd -func CRDPatchTemplate(kp *KubebuilderConfigGen) framework.PT { - return framework.PT{ - // keep casting -- required by pkger to find the directory - Dir: pkger.Dir("/pkg/cli/alpha/config-gen/templates/patches/crd"), - Selector: func() *framework.Selector { - return &framework.Selector{ - Kinds: []string{"CustomResourceDefinition"}, - Filter: func(r *yaml.RNode) bool { - m, _ := r.GetMeta() - return kp.Spec.Webhooks.Conversions[m.Name] - }, - } - }, - } -} diff --git a/pkg/cli/alpha/config-gen/examples/advancedextension/main.go b/pkg/cli/alpha/config-gen/examples/advancedextension/main.go index bc38d73fc50..ea2b65ee3a6 100644 --- a/pkg/cli/alpha/config-gen/examples/advancedextension/main.go +++ b/pkg/cli/alpha/config-gen/examples/advancedextension/main.go @@ -21,6 +21,8 @@ import ( "os" "sigs.k8s.io/kustomize/kyaml/fn/framework" + "sigs.k8s.io/kustomize/kyaml/fn/framework/command" + "sigs.k8s.io/kustomize/kyaml/kio" "sigs.k8s.io/kustomize/kyaml/yaml" ) @@ -31,20 +33,15 @@ type API struct { // Advanced function for transforming kubebuilder output by looking at the resources and modifying them. func main() { api := &API{} - - // setup command to modify resources - c := framework.TemplateCommand{ - API: api, - // process all the parsed resources - PreProcess: func(rl *framework.ResourceList) error { - - // select the Deployment with the controller-manager name + c := framework.SimpleProcessor{ + Config: api, + Filter: kio.FilterFunc(func(r []*yaml.RNode) ([]*yaml.RNode, error) { matches, err := (&framework.Selector{ Kinds: []string{"Deployment"}, Names: []string{"controller-manager"}, - }).GetMatches(rl) + }).Filter(r) if err != nil { - return err + return nil, err } // set the replicas on all matching resources @@ -55,11 +52,12 @@ func main() { // set the value yaml.Set(yaml.NewScalarRNode(fmt.Sprintf("%d", api.Replicas)))) } - return nil - }, + return matches, nil + }), } - if err := c.GetCommand().Execute(); err != nil { + cmd := command.Build(&c, command.StandaloneEnabled, false) + if err := cmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } diff --git a/pkg/cli/alpha/config-gen/examples/basicextension/main.go b/pkg/cli/alpha/config-gen/examples/basicextension/main.go index e1ee271501f..d09a8fbae4f 100644 --- a/pkg/cli/alpha/config-gen/examples/basicextension/main.go +++ b/pkg/cli/alpha/config-gen/examples/basicextension/main.go @@ -19,9 +19,10 @@ package main import ( "fmt" "os" - "text/template" "sigs.k8s.io/kustomize/kyaml/fn/framework" + "sigs.k8s.io/kustomize/kyaml/fn/framework/command" + "sigs.k8s.io/kustomize/kyaml/fn/framework/parser" ) type API struct { @@ -31,29 +32,22 @@ type API struct { // Simple function for transforming kubebuilder output by patching the replicas field. // This is a very basic example that applies patches statically based on the input func main() { - api := &API{} - - // setup command to apply patches - c := framework.TemplateCommand{ - API: api, - PatchTemplatesFn: func(*framework.ResourceList) ([]framework.PatchTemplate, error) { - // Configure patches using the API input - return []framework.PatchTemplate{ - { - Template: template.Must(template.New("").Parse(` + c := framework.TemplateProcessor{ + TemplateData: &API{}, + PatchTemplates: []framework.PatchTemplate{&framework.ResourcePatchTemplate{ + Selector: &framework.Selector{ + Kinds: []string{"Deployment"}, + Names: []string{"controller-manager"}, + }, + Templates: parser.TemplateStrings(` spec: replicas: {{.Replicas}} -`)), - Selector: &framework.Selector{ - Kinds: []string{"Deployment"}, - Names: []string{"controller-manager"}, - }, - }, - }, nil - }, +`), + }}, } - if err := c.GetCommand().Execute(); err != nil { + cmd := command.Build(&c, command.StandaloneEnabled, false) + if err := cmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } diff --git a/pkged.go b/pkged.go deleted file mode 100644 index 70a6fb240ee..00000000000 --- a/pkged.go +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by pkger; DO NOT EDIT. - -// +build !skippkger - -package kubebuilder - -import ( - "github.com/markbates/pkger" - "github.com/markbates/pkger/pkging/mem" -) - -var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffec5d6b73a2ccf2ff2a5bbcce46869b62d579114c445c358f26723bf5d45330104087cb11f0766abffbbf18103151a3bbd9a4eafca9ad8dccd033cc8deee9df7437ff25bce0258c89f67f89d873e2db792bbef5c2c63c356d33f590652f1a4b3abb7bef2d8836d198c6f6226e442b2f4916219c379cb0112f60e34459e28690fc285c247f19894bb4cf3de2861819be4db489c3e2f72124dac45f069c1b8efdad72ef1b0c83c4f082f85b34776cebdb8b87ecf81b0cfdc843b6f5cd0b92f05be2dadf9cf09be905c6c2b3e35be2867836168e9d9ce84934771a96b15879c13f866f71cca96edd1ac40d3109c313f51037c4d048a04bb4ff4ddc127fdf104f89816ca29d2c52bb484c6c230e03a24d0461f2cd0be2c44059abcd34f9662c0d0f1926b2bf79c137fcc06fd080ae4ddc1062d8cd7a99d56b85f0163f09f73ebbfc7b37d6f8bee3256e6adec2d06ff8c6626e1a891d67fdc3837afa66f6d70b9c866ffb5985f776846b33d3172f7b98b949ec98b821b2615ed871dc7841466257339cad17e1349e1c7bd1405e9c1419f61a5f2d36511296170d23af314f402f7271138bb455bd69c5c63e61c3c3a445b12ce0df6434bc20b11781811ab6b5321656fc9a0c212f4a3cb8cf717da3922a8b2f8cc04a130f1db915a76682ecfd0ddf62f789ac5c2505994aa2da81d835c0418a62b983340ba84afad523135419a7354bf287a97d5b7d0386af481bd1dc5b1337841dc0d0f202a772d930e20054d3a611db1c739093bd5c9b6a8e6b576b6bccb2855e4947b69f25178b709135e4c54f0e57a4139ae9cb8b81c2866b2fecb3abf5fc527eb7787554a2f892f7e2a277c7f64ddbbaf82dbb842e4e2c3c69ae11bbc54f032e209d2d88b20fd9bb6920a79a05a3b49a7cf193385c24d5acc04e928501ed6a5e18e3c9a966452142d5f4eb220bfb05d930415e72901d7b8183ec17e439eec153e34d0c0d841af6da8676b03c762b0df09a2cf3133b4e5078d0bb34888d17dbb58d5c526006e5850d2f2c5ed39cdccf244ffed3303d677f99c4bbebe215f53ddf2e7e1a7e8a122f32f060e18cffa461625bd1c20b928c371337446027f9df869b2451e512ffd98d6a99b96b76919731c36811624698a5d3457607cf7218e381c9787bdef6eca791c9b7225d8c36be72ec75545e34e24d9018d9b82dd220c9bb535cedd7ba91843ee6776fee1443f5263fde64cd2a964e9c2c6088e72c4e165ee0e05b9b00163ffbea8b99246e88a22569e0c1d0aa5c35d2e4057087e9164e66134bdc104b3bb0c245c309911138b7e1c269ac1b3b41e11ad03528f232aa28441b4093ec3bd4f8277b8f2ea5dbf1c773c4e96269ef84ce193a776ebd9ca7782b6fce10bfd3e36cc959419cfdf7ed38369c53d51d2c6a27c52fcdbb74d1225c6fde21a41a6e64c0f9192acf0a8c33b717617a72a2e24d5c30bf6377b377af11db305dd80dd3b3bc457a72343169b23082f8255cf8e788766b38abf012ba20abefef1be2d98e93725f17a408e559e5562ecf1a8656d6c8f67f894b76d243c30b76dbcd5fddb78be130b4ae2fd970c25b3fb47005b2bd883dbccb05b780257efefc7943bce41d3da76db4f13e1c22af61a0c8351a300c5e3ce7bb63078dc4f62394cbc76c836dc70d682f92efbe1118d976a09d6b33d9af65278687f093825caf38a0bc21626f6b136d9ebb21fc8c29b529c034991603188073fec14cab4d502405be93f477403d93ad36d36ad3e42d4583162059067c275b6d3263415efc8f958d733ee419bfcc34267b49b401d76c36290ae029b4b374abd9bc2146c80be6449bbe21a42024da14dba469a6c5df1053cf22da2c096e0831bba2c81b626265159137c45f86f50f74c27f48a2fd6ff206fffbfb86b8cb5a1a4736cc9ef994fd000eb02cd76c02f28618c5590e0d7892a4418bf979430c2fa02f7bf8f386e85c492f788bc4bdac0cc7365986fe79433c959321a010ce63dc5d01cdf34962c8ec4e17194e7e43b403fc3b88236361e3cb7171998dcbdf78a1b9f97aa8d5d65a6dadd5d65a6dadd5d65a6dadd5d65a6dadd5d65a6dadd5d65a6dbd466d2d385ad68bb973a13af0cb3aeccf1bc23212633782995a1324fb67ef9f801bf607b4e88611046162245e18dcee286f37868fceabd7274bed546dd06ced746d26536b8f2bd9806bd34c9ba66e29866e019e21d9374af68b81e277b46c9a06ad56a96583032d9b273f50cbe659ae49ef345a8e62298a6bb6e8d35a76464f951af0ae8ba7b5ec93f45768d92d12d074b3d4b2f13cecd4ecd657aad9d926fcb5aabd5fdff9cd5c91ae6ac07b1d76afb0e6ef4aa1af16ebe35061adaaa139f52b5695eb8c7b4e5633b78f676ea7594bc9f5089b8e1d43d11c5d7d700668b4d295612a53b26788fcd2a087e998923796887c4319b996283f9bb4bcd1a8692af7d04a7fbaf3b4ecfe03704dbf1be8aae4493dc0777c802cb13bd7d489fbe8848e247653d3e7494d9d4426c56e715ee7cec1653b20d114d6d5297933f0d17240a1d4f0e599d50133ed09f8d0e79347efcec9da3998b3aea9c85b287667fa93c0bf3cf14d7b73973efbdd244f83adaef6294361838132423018ffc8cae90a3bc7ed72fef52fe2d3787c18248b10217b71215efa96be64e51cf94bb029d5a201c5d3bf0d9bb2870c1dfc49d814b000f017c3a6450f2f864df7f49733748a6c019e67f60c9d236bdcb4c64d6bdcb4c64d6bdcb4c64d6bdcb4c64d6bdcb4c64d6bdcb4c64dffc7a185b71aead7a0a76fdad120c177234ddceff8d5b806463d5770a77eb30c7b09924ab759a6cdf2b73cc3b6289ea65a1f8ea4521fa878b79a34c7ec945cbe45514c0b70a7f5ee1647f27c49beebe169bdfb24fd157a3745d22c49967a379e861a48ad81d4afe27667b9cc5b44d5f47952eab0cf50946783f9686906938d49ad635ded8f4ac4730e90d5eb471a3d4c2722da6a4a3fd6a75d6089ee18fa3c63ab80ef041895e53ade9d63897202c5b56b89539c963ac236ab7f87a84a1d6166522ca92928d5d5fe769f7f974822eb9aca9493c40468fe34817edfd53660859f332ee91c494489a658e8d113028d965243692d0d5af674a50f0c653dd755294f3f818de677670355d898b4cb3e06da6a309ba6c3bb6a5ddd8d4e0f8bb6e6ff074f77dee0096c756504a03f4d4c116d2d514e074a77aef7fa08d2437ed8615683d95d3abc0f99d1fd782b39953a3ba423796462a9c2d6eaf591a690bcd19b90f03e5c0eb60f9bd1a628fb1c32c37b6735d8483ff665ef12a923250365bdd4e9c912d293b9aef6377fa9938da54cbd23eda4fe7a7e581d3cbf272c6130a98e2d6e9346f1a9257623d397375391df58f7a1f3783f2687ab2add9d63fadd447f0e1ddce6def0c7fe7942aa29201bf71211afb64753fb01dc8647fa52aea1445326733823d7c3194cf3317ce01eefef9861e7d818c8295e6f4f20d6b3b157a54457d648a3279149315e27489a9228a77a47e05fc6e15722e70d92fabeb24d370ce7f155d2fd64b19d6c6758ee42d9ceb60177dbe438a6c5737f40b6d37f4eb6d38064d9b3b21d006e475ef6f09c6c3f417f856c67298a244129dbf134d4b2bd96ed5f27db4fb28ab792fdd839e944615dcd5f230973cb682f957b1364aa42aca913b4931890169056e1e455c951e5f0ef4904984999de6be97ab003189b749f7cf4eed84c8a56e9a44e5937ad2bfdd0a4f8c5401d2118e8083a87120bf6fa4b4be46726b5e2a4eee47e5a95f03d7d69f6e4449f82a5a5b0e41b0925e6f953b14b1af7a133a02709ecf08bc7de30b176e3b7c9cf6db39d05a4e48de5a354df8099aef64978427ae2b3e3bb57edf465577fe053b337e7a41e96e8655b2c9f8f2d05a013e38b9f7530b6943c83be4c3ebe1a0b5d947d4d9563eb012c7571ca49f7e3cdf0753b8ab2cf455b8ff433c9db1f35ed8d804c7fecbca8e48faf94b03cff1d867e140676905c2362cf94dbcb5870898c65da806db3d42d001c07489ee13f5cc6327f4ec63224d7e4c11919dba4d9d2b0a8ece119197b8afe0a19dba2289e6d55642ca8656c2d63bf50c69ee115a785ec38138ebdfed214d708ce4b43a32c3f81229fea0a4b6634ba8f82c17ca7d2dc6186ba17b402a92b60658a5d527f2e04406faf56e7aa2a56d15d4361110caa42952c858ea974d34c353e1090a755dc4c10fb860279adda07c497c25ca5464bd3d7237dc3b29a02e24335f33dc1ba53e7cb3149b4621c5e09fac4a4e5d4ea0aae253a9cd4e1f10601fa7c6c8a591b76e5fb2fbbf28300b9a6b2aa3e2f1b2fa0a1a20ef100ce7829c705f1bb3ea7b6d24dcc52300a9449ad81a9c8272089f37dd8e53d2bddd56b81fc666ebc72dcbfd0f86b61bd63edb5b07ed72996062d96fb7de3ae439f589efd93c65d14db6c9e51445f09b0bc83e4c5c65d7bfacb85240d48aed96ad53eb1b56d576ddb55db76d5b65db56d576ddb55db76d5b65db56d576ddb55db76fdff416b16d61719732dac8c609977f81ae4f964a9d26eab495f7cb6cb825b40b13c4f51a0f9e1b833f7e770671670806c9d3ddb65418923ef7a78f66cf738fd352a758b64786e6fb7954d438d3bd7b8f3a771b2d30ce537cf7231eca923188c2293624a0b2cabd7772d510eece7d029eb29ce2dcbb33f72141b8a9c5a0f05e4bb0d7fd8749c4822f225515e979662c8429aef2e4d2ad90ee623048349a4fb68a6a91334a57800fd111aa0090bc5a923f91364791286baf75069b76329ecdc14a79cd44b9a59bd96d8252db5f0e57d1809180e0d92e6e04940666f8470ba845b878e25ba11dc0811dcdc79aac878524fdeeacad8d1d4a1a33d092b53ecce74c55d9ae204416fe598f424d4d53e6da823248988947a56648a2b47f3a70ef4e5ffe8ca88c4e58379563792c4eecad89d357b826fd292a3f97264fad0d1fcb56bfa715c6d8f16c8599da84ff791245a4b436103a937594abd11b23a426475f2f375e809005228d537026988d337fec552c75d424f5899f40499c124d294756c3f09aed4135c4b1c85f95cb04bab53d683cf85074a094f4795e302771cc8a92eaed1a327dceb5b723fa6c5796ee53c7863f968561e3d54cedf212db81a55ced56325efa08e33e7f591464dab742b4d9d848fdedd121f3bf85f70cebcb0e3305dc03cf2e46909be27db896c9afa354f67966e72cdb707c6d762e19918ab0aeee69f03c35b7c8ba6af081099f7f072307c4f7f85e4666886a99c18e3d9a8d1f01a0dafd1f01a0dafd1f01a0dafd1f01a0dafd1f01a0dafd1f01a0dff5fc490f60ae9a762e1e5631b7bf7c2ef0bd3805705843c5b74a760731c7521264eb749f6966d8226c7d0f4c7db62b7fe1c26ce5134db3a8789b37c8bdd91973d3c83899fa2bf42b366c91660f69a359e861a13af31f14fe267ef30963fe8bcec775786bc87cca55edfd39461aaa9326988fcc65023d712d1d2f4d8c5636f889d8dadd9c30f8342a97e1f3a636a0d203d4110f597a638fd612a32a92913d7121f30fcbeb3fedd8787c4b069027bfda5dd9b27d0e7637d1c6d2c658d5d7f064f820b45d4833e0f606fc849ddd8cbdb22a7968861f6ac9da9b175b7031f2d2544fe903ac24657474b4bedcf7435b7f41e3c09a44925c80cfac8f211b2e8614647e96adf83dbd05136fd19f465d712a79e3a0e130c794fad8d49cbabe2be6ba993d0a4fb91ed774943e1d3811f3370c346e6a66f65cf80bebccdc36deeaca64907d2b287c3638add59960fe9cb9e3f78227f68aa10c9bebc81145a9ab3d0c91dc0d933ede0a9e1385a180a3b7ff4847bb3276f2d51de4cb3319df623d39f44a60f7f6d4e947d799c96fb489f614bfdfdfcdc5fd0c655e848621299fe98931e46b1a58e485ded3f99d41a5db13eb696d2c7c714c51ad9f5f9390f273a42636534c356f477d9f37656eb13a4fb5d60f6c63f2e85f3074f64f2e98ed57b36508d0e7bd559fbe972a5153b495e186f9a6dd3fc6d8b0414dd04fcc7c79bfec8af3af16c93298fc3199a6b7274ab7936de74932ec39e945d3c176ffa04fd155b8b2668e5a15b9ef6f3506f2deaadc5676d2dcef0863f1c66da1b3a323e4ed697a6b85e5af9916da2296ca4fbf2d6ea0df7aed59ee04abd1132452d81140a4c5f9e4b22da425a46d013eea79ee09afed8d19ef2235f43d1238dea92fa53768ff9216d8491898f9f274b8d96135d6149491cb9a62778fa93e067b241ef08aed51142ab37c964fc724065b4c3f458986bdc76b2fbf43c478f936de8c86277a353320937c27df6fce7d29be96e35983dac257114eaca6821892e69f584eda3d75aea223f831bf6f51135de43e90ab3c4de6eea881cd0131752c97640cb2b9deebbba988d139fc95f6477d8d012419c8d21f4eeb27e7ad9bec1288ebf0db19bea94bc7db38f137178ed64ef75f566bfd087f408e8aa74f9fe8092633d18453ac522bd03a25df94b656bc5db6fab2b6b7f5accf3a327345f4eec818e8620a7b575c72ff7140726186f439b177b814a9bb2b5b93b9a377d9894aeea62257cf941ff2b21cd0fcc4d262924f3fbbbfddf6b57f26c6f32088e8e470a697d56ec558f990ca4c743aab35bcbcfd66cb1eff6d8d8a4462ef6e4dbbd2f68b757bbabecbd8a7b8577de6e8ecfcce95657461b5d9d3c9e0c43e0e521002a26294599b1635128363b426ad2e3dccca4d747ba8f185d19c7526f14997e6e8ad2a787b92eb3f3302ccc500c3adbcbf289a146a8e391c960fc5526128d5f72bb7fcfe79eba34ae0dc3b729eab6450192a100fdd1716d58f223bffef10ae76935791a9cf3b9679b5ce9435ff6f01cce7382fef2cd18036892e3f631eba83aae4dbd19fbd4cdd825fef5b9d1e1bbe8ce6869aac2d2f42b468b1bb66bfa5dcf14a74efea18fd7e8ce81e4cccb90c0857751a2ab135717bba4868de0de06b6192805fdea524999d1ad5dcd97e3d237bef44b5fe13079a63f7de5ab2eed772c4e5491e217fab3df878ee44947b4f84ff02daf4ef2ebd00a57dacd9f2f5d7e7684a69a171e16706d006e798e26499a62dffaa4ffae10f9c82f8ebc12227c93e6b0c67dda80be592200650fcf1ad01fa7bf4288302c4d57bed39ccf432d456a29f27952e41d16b117276f142a5558c14345f0415785d8a411569a4f2a5027d9f4a789834accb6113245796689fc66176ec454baa446b9434de923b3f7266ccc85cfc8eaee2328ae238dea6e1fbdbbf589a8aeafc46511ea44ec7abab23e8c3c7aedf3af8b3f373329ac1ccf5f473b1d946163aa91450517fad69bc8a88327808a6d43628ab2ab8b99b897635d196130bf1aeac55080abef95fc77b62879a4da43ff852321610ec2eaf4112cfc285e85d4c9d64f642ae875a89d7c8c680164f335bc1792c3f03a5939804c85dfd8cfa133dc0a2363fc262eddda523020c5bd2d3b5a5959b9e7bb95f9aa1c5e070a58c260ce49f7d2ea5999efe3d989f2c654505a7c53ad07fdee4c9705047db4d4bb238443e6f4869c74ffb0da2bb8e4a53e2f2e1491a2abfd6d363f8f9e507d9fcb43918377d9bbbb18a879df9741880fdf33a10c593450b37bec41d96a84e46a4cc4c193b02ae21f92a3fb22d26e6f92ad51647585250cc69cd4dbf9dbc449eea791c758c4c08532224d5a3ad78683504a1510aedc22e6fe20936c4ccbf1ff7387ab95ed77773f9e47013875b4d29451d687fd37f48abcddfbb47f8f6412fa68062ba013beff8a1f9561ae3a38d4569ac769ac84bef2f640db9939dbad8d1c482dfca8e09188ca56019aeea22def232a63001069f4640967bf220b72b0f0d3c347ed25b0652f6d1446be1d24bbb8a4df631b2eecab50a28b6b296123faa28fc6d26d966cb3e096a4388e6518e6e361a33ff7a9031e507c13bbb49e848d5a7b17d85d07cfa146c7c9afd8ef375986e2f83d6844d75f8cadb7fb9fb8ddbf984d1c41913ec075f5b50a51b5ff9916a1744f9fbbbc15dfbb4fbf5eba1da9a052a4d91ba60625b33bb138a527aed59377fd19e8ea7cb785c1b41ade5e1ca5bd1fe76ac9578b924c16c49101ed6b24c7a942253604980b050568b3cc2dc33314cd50e0e305c59f8b9bcf531cc7600fcad376a4a0242f7b78d68ef438fd15a282679b74256e3e9e865a54d4a2e2b344c529be701a10aa72f3aa92f196a3ff0e7873fc24becae53f91e3468bd0b713d74eaffa58c9c952a5733c7f693c1bba4df3b7140368966bb6980fe7b97f2e8e3acf907c8b3bf3fdef164782d260aeece1d9ef901da7bf9ce7b2a04903c0eebde2f93a9e4dcd733f91e79e640cbf72a85b41950ac46fba8b4e32054bd347a4491fdf969b0a9f1aea6409f1d739d89949f79189cddbf8e4c064aa449ee49149b19125f29be3dbf74b10fd774e073c90e8ea646328a3ed4029db7f29827812bdab989221d39fac4c0aa515f436c923c6e060eae5f34b64b757208b85a9de093431d1d4c9cc787825f4ae45d1bed674e95a1fb5338e69806c5d2add9836e06f01437134c9311f7fd8fc9111d05f4937966c82b39e691cc996d2aaece159e9769cfe0ae94637c916dddc6b14781e6af1568bb7cf126f67fdd1bece67a96a135bb10f5633262c7b59fd86c2069d00a79f7445c3f564ed9dd0fda5a5de5de2eb960998e36d1dbfabd15485e006fb3b0523a0f911d268fc71caa4b4cddd0b6441a346f86b22d53e979fb4bad846f943fcc9721fad0beca90ffa7ce4f8389f93e9e576e2811ce77e7c6465be84d2c65af2a4533e7f85359895686a2ed82d5fde6841793fd0d5f18ffccb26eb08d2c575cfc2e1e57675147e79c53d79a58b5d12cf778774a0d82535ca29ea98205394b37baffd077f141ff1f44ef909eebe98622add15dcf0db220460d547b0788685f2cfa8918ea50a736ce35e1c9de20dcaddf5cfd6551d99c1e4d8f8947dc7c7a3bfe91bfa9beff4b18f9ebef14dbc784d7d940f63f7702d9f3a9e1d646d5626d9bb5f98aa64e3f4357ce0bd0d67be0db0ebe06f75f0b73af85b1dfcad0efe56077fab83bfd5c1dfeae06f75f0b73af85b1dfced5a44eae7ff010000ffff010000ffff5a3234d444bb0000`)))