diff --git a/go.mod b/go.mod index 02d1256..7671946 100644 --- a/go.mod +++ b/go.mod @@ -11,13 +11,18 @@ require ( github.com/fluxcd/source-controller/api v0.12.2 github.com/go-logr/logr v0.4.0 github.com/golang/protobuf v1.4.3 - github.com/onsi/ginkgo v1.14.1 + github.com/kr/text v0.2.0 // indirect + github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect + github.com/onsi/ginkgo v1.14.2 github.com/onsi/gomega v1.10.2 github.com/prometheus/client_golang v1.7.1 github.com/twitchtv/twirp v7.1.0+incompatible + golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3 // indirect google.golang.org/protobuf v1.25.0 + gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect k8s.io/api v0.20.4 k8s.io/apimachinery v0.20.4 k8s.io/client-go v0.20.4 sigs.k8s.io/controller-runtime v0.8.3 + sigs.k8s.io/kustomize/kstatus v0.0.2 ) diff --git a/go.sum b/go.sum index 2e36a63..2b7aaec 100644 --- a/go.sum +++ b/go.sum @@ -24,28 +24,40 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= 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= github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= 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/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/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= 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= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= 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= @@ -53,6 +65,7 @@ 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= +github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= 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/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= @@ -64,31 +77,43 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 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/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= 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/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= 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= 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= @@ -113,6 +138,8 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -125,22 +152,56 @@ github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTg github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v0.2.0 h1:v6Ji8yBW77pva6NkJKQdHLAJKrIJKRHz0RXwPqCHSR4= 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= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +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/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/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= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= 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.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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= @@ -151,6 +212,8 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -174,6 +237,7 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -190,16 +254,23 @@ 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.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= 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= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= @@ -229,12 +300,15 @@ 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.6/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/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -248,13 +322,17 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= @@ -278,6 +356,7 @@ github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/f github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 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= @@ -285,34 +364,45 @@ github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8m github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.4.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.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.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 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4= github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M= +github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +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.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs= github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= 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= @@ -323,19 +413,23 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: 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.0.0-20181126121408-4724e9255275/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-20181204211112-1dc9a6cbc91a/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/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= 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= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -345,12 +439,14 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= 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/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/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -358,11 +454,13 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= 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/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 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/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -374,9 +472,13 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/twitchtv/twirp v7.1.0+incompatible h1:3fNSDoSPyq+fTrifIvGue9XM/tptzuhiGY83rxPVNUg= github.com/twitchtv/twirp v7.1.0+incompatible/go.mod h1:RRJoFSAmTEh2weEqWtpPE3vFK5YBhA6bqp2l1kfCC5A= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -385,33 +487,44 @@ 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.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= 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 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= 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 v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.9.1/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= go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= 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= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= @@ -442,9 +555,12 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB 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-20180112015858-5ccada7d0a7b/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= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -452,6 +568,7 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -459,8 +576,10 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -469,6 +588,7 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -483,6 +603,9 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180117170059-2c42eef0765b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -490,8 +613,11 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -502,6 +628,7 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190911201528-7ad0cfa0b7b5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -520,8 +647,10 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20171227012246-e19ae1496984/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -535,8 +664,10 @@ golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjTo 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= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/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-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-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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -573,15 +704,20 @@ golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8= golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3 h1:DywqrEscRX7O2phNjkT0L6lhHKGBoMLCNX+XcAe7t6s= +golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= 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= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= 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= @@ -640,11 +776,13 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +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/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -654,6 +792,7 @@ gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.0.0/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= 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= @@ -673,51 +812,84 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= +k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.2/go.mod h1:d7n6Ehyzx+S+cE3VhTGfVNNqtGc/oL9DCdYYahlurV8= k8s.io/api v0.20.4 h1:xZjKidCirayzX6tHONRQyTNDVIR55TYVqgATqo6ZULY= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= +k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY= k8s.io/apiextensions-apiserver v0.20.1/go.mod h1:ntnrZV+6a3dB504qwC5PN/Yg9PBiDNt1EVqbW2kORVk= k8s.io/apiextensions-apiserver v0.20.2/go.mod h1:F6TXp389Xntt+LUq3vw6HFOLttPa0V8821ogLGwb6Zs= k8s.io/apiextensions-apiserver v0.20.4 h1:VO/Y5PwBdznMIctX/vvgSNhxffikEmcLC/V1bpbhHhU= k8s.io/apiextensions-apiserver v0.20.4/go.mod h1:Hzebis/9c6Io5yzHp24Vg4XOkTp1ViMwKP/6gmpsfA4= +k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4= +k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.4 h1:vhxQ0PPUUU2Ns1b9r4/UFp13UPs8cw2iOoTjnY9faa0= k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.2/go.mod h1:2nKd93WyMhZx4Hp3RfgH2K5PhwyTrprrkWYnI7id7jA= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= +k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90/go.mod h1:J69/JveO6XESwVgG53q3Uz5OSfgsv4uxpScmmyYOOlk= +k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE= k8s.io/client-go v0.20.4 h1:85crgh1IotNkLpKYKZHVNI1JT86nr/iDCvq2iWKsql4= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= +k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE= k8s.io/code-generator v0.20.1/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= k8s.io/code-generator v0.20.2/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= k8s.io/code-generator v0.20.4/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= +k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.2/go.mod h1:pzFtCiwe/ASD0iV7ySMu8SYVJjCapNM9bjvk7ptpKh0= k8s.io/component-base v0.20.4 h1:gdvPs4G11e99meQnW4zN+oYOjH8qkLz1sURrAzvKWqc= k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= 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-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd h1:sOHNzJIkytDF6qadMNKhhDRpc6ODik8lVC6nOur7B2c= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/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= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= 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.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/controller-runtime v0.4.0/go.mod h1:ApC79lpY3PHW9xj/w9pj+lYkLgwAAUZwfXkME1Lajns= 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/kustomize/kstatus v0.0.2 h1:7GoHi/Vq7rIAS8AQONlfcdaCpVXY0HqzNhU5us7dToA= +sigs.k8s.io/kustomize/kstatus v0.0.2/go.mod h1:6qUKWLy4+yGExtjbs+fibz2tOBZG7413yx2NHyAzIU0= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca h1:6dsH6AYQWbyZmtttJNe8Gq1cXOeS1BdV3eW37zHilAQ= +sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/pkg/clustersserver/clustersserver.go b/pkg/clustersserver/clustersserver.go index 4e7069f..fd4554b 100644 --- a/pkg/clustersserver/clustersserver.go +++ b/pkg/clustersserver/clustersserver.go @@ -15,10 +15,14 @@ import ( pb "github.com/fluxcd/webui/pkg/rpc/clusters" "github.com/fluxcd/webui/pkg/util" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/kustomize/kstatus/status" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -150,23 +154,60 @@ func doReconcileAnnotations(annotations map[string]string) { } } -func convertKustomization(kustomization kustomizev1.Kustomization) (*pb.Kustomization, error) { - reconcileRequestAt := kustomization.Annotations[meta.ReconcileRequestAnnotation] +func addSnapshots(out []*pb.GroupVersionKind, collection []schema.GroupVersionKind) []*pb.GroupVersionKind { + for _, gvk := range collection { + out = append(out, &pb.GroupVersionKind{ + Group: gvk.Group, + Version: gvk.Version, + Kind: gvk.Kind, + }) + } + return out +} + +func convertKustomization(kustomization kustomizev1.Kustomization, namespace string) (*pb.Kustomization, error) { + reconcileRequestAt := kustomization.Annotations[meta.ReconcileRequestAnnotation] reconcileAt := kustomization.Annotations[meta.ReconcileAtAnnotation] k := &pb.Kustomization{ - Name: kustomization.Name, - Namespace: kustomization.Namespace, - TargetNamespace: kustomization.Spec.TargetNamespace, - Path: kustomization.Spec.Path, - SourceRef: kustomization.Spec.SourceRef.Name, - SourceRefKind: getSourceTypeEnum(kustomization.Spec.SourceRef.Kind), - Conditions: mapConditions(kustomization.Status.Conditions), - Interval: kustomization.Spec.Interval.Duration.String(), - Prune: kustomization.Spec.Prune, - ReconcileRequestAt: reconcileRequestAt, - ReconcileAt: reconcileAt, + Name: kustomization.Name, + Namespace: kustomization.Namespace, + TargetNamespace: kustomization.Spec.TargetNamespace, + Path: kustomization.Spec.Path, + SourceRef: kustomization.Spec.SourceRef.Name, + SourceRefKind: getSourceTypeEnum(kustomization.Spec.SourceRef.Kind), + Conditions: mapConditions(kustomization.Status.Conditions), + Interval: kustomization.Spec.Interval.Duration.String(), + Prune: kustomization.Spec.Prune, + ReconcileRequestAt: reconcileRequestAt, + ReconcileAt: reconcileAt, + Snapshots: []*pb.SnapshotEntry{}, + LastAppliedRevision: kustomization.Status.LastAppliedRevision, + LastAttemptedRevision: kustomization.Status.LastAttemptedRevision, + } + kinds := []*pb.GroupVersionKind{} + + // The current test environment does not append a Snapshot, + // so check for it here. Should only be nil in tests. + if kustomization.Status.Snapshot != nil { + for ns, gvks := range kustomization.Status.Snapshot.NamespacedKinds() { + kinds = addSnapshots(kinds, gvks) + + k.Snapshots = append(k.Snapshots, &pb.SnapshotEntry{ + Namespace: ns, + Kinds: kinds, + }) + } + + for _, gvk := range kustomization.Status.Snapshot.NonNamespacedKinds() { + kinds = addSnapshots(kinds, []schema.GroupVersionKind{gvk}) + + k.Snapshots = append(k.Snapshots, &pb.SnapshotEntry{ + Namespace: "", + Kinds: kinds, + }) + } } return k, nil @@ -188,7 +229,7 @@ func (s *Server) ListKustomizations(ctx context.Context, msg *pb.ListKustomizati k := []*pb.Kustomization{} for _, kustomization := range result.Items { - m, err := convertKustomization(kustomization) + m, err := convertKustomization(kustomization, msg.Namespace) if err != nil { return nil, err } @@ -200,6 +241,118 @@ func (s *Server) ListKustomizations(ctx context.Context, msg *pb.ListKustomizati } +const KustomizeNameKey string = "kustomize.toolkit.fluxcd.io/name" +const KustomizeNamespaceKey string = "kustomize.toolkit.fluxcd.io/namespace" + +func (s *Server) GetReconciledObjects(ctx context.Context, msg *pb.GetReconciledObjectsReq) (*pb.GetReconciledObjectsRes, error) { + c, err := s.getClient(msg.ContextName) + + if err != nil { + return nil, fmt.Errorf("could not create client: %w", err) + } + + result := []unstructured.Unstructured{} + + for _, gvk := range msg.Kinds { + list := unstructured.UnstructuredList{} + + list.SetGroupVersionKind(schema.GroupVersionKind{ + Group: gvk.Group, + Kind: gvk.Kind, + Version: gvk.Version, + }) + + opts := client.MatchingLabels{ + KustomizeNameKey: msg.KustomizationName, + KustomizeNamespaceKey: msg.KustomizationNamespace, + } + + if err := c.List(ctx, &list, opts); err != nil { + return nil, fmt.Errorf("could not get unstructured list: %s\n", err) + } + + result = append(result, list.Items...) + + } + + objects := []*pb.UnstructuredObject{} + for _, obj := range result { + res, err := status.Compute(&obj) + + if err != nil { + return nil, fmt.Errorf("could not get status for %s: %w", obj.GetName(), err) + } + + objects = append(objects, &pb.UnstructuredObject{ + GroupVersionKind: &pb.GroupVersionKind{ + Group: obj.GetObjectKind().GroupVersionKind().Group, + Version: obj.GetObjectKind().GroupVersionKind().GroupVersion().Version, + Kind: obj.GetKind(), + }, + Name: obj.GetName(), + Namespace: obj.GetNamespace(), + Status: res.Status.String(), + Uid: string(obj.GetUID()), + }) + } + return &pb.GetReconciledObjectsRes{Objects: objects}, nil +} + +func (s *Server) GetChildObjects(ctx context.Context, msg *pb.GetChildObjectsReq) (*pb.GetChildObjectsRes, error) { + c, err := s.getClient(msg.ContextName) + + if err != nil { + return nil, fmt.Errorf("could not create client: %w", err) + } + + list := unstructured.UnstructuredList{} + + list.SetGroupVersionKind(schema.GroupVersionKind{ + Group: msg.GroupVersionKind.Group, + Version: msg.GroupVersionKind.Version, + Kind: msg.GroupVersionKind.Kind, + }) + + if err := c.List(ctx, &list, namespaceOpts("default")); err != nil { + return nil, fmt.Errorf("could not get unstructured object: %s\n", err) + } + + objects := []*pb.UnstructuredObject{} + +Items: + for _, obj := range list.Items { + + refs := obj.GetOwnerReferences() + + for _, ref := range refs { + if ref.UID != types.UID(msg.ParentUid) { + // This is not the child we are looking for. + // Skip the rest of the operations in the outer loop + continue Items + } + } + + res, err := status.Compute(&obj) + + if err != nil { + return nil, fmt.Errorf("could not get status for %s: %w", obj.GetName(), err) + } + objects = append(objects, &pb.UnstructuredObject{ + GroupVersionKind: &pb.GroupVersionKind{ + Group: obj.GetObjectKind().GroupVersionKind().Group, + Version: obj.GetObjectKind().GroupVersionKind().GroupVersion().Version, + Kind: obj.GetKind(), + }, + Name: obj.GetName(), + Namespace: obj.GetNamespace(), + Status: res.Status.String(), + Uid: string(obj.GetUID()), + }) + } + + return &pb.GetChildObjectsRes{Objects: objects}, nil +} + func kindToSourceType(kind string) pb.Source_Type { switch kind { case "Git": @@ -414,7 +567,7 @@ func (s *Server) SyncKustomization(ctx context.Context, msg *pb.SyncKustomizatio return nil, err } - k, err := convertKustomization(kustomization) + k, err := convertKustomization(kustomization, msg.Namespace) if err != nil { return nil, err diff --git a/pkg/rpc/clusters/clusters.pb.go b/pkg/rpc/clusters/clusters.pb.go index b0b9700..b17e0e2 100644 --- a/pkg/rpc/clusters/clusters.pb.go +++ b/pkg/rpc/clusters/clusters.pb.go @@ -69,7 +69,7 @@ func (x Source_Type) Number() protoreflect.EnumNumber { // Deprecated: Use Source_Type.Descriptor instead. func (Source_Type) EnumDescriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{11, 0} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{13, 0} } type Context struct { @@ -385,28 +385,149 @@ func (x *Condition) GetTimestamp() string { return "" } +type GroupVersionKind struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *GroupVersionKind) Reset() { + *x = GroupVersionKind{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupVersionKind) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupVersionKind) ProtoMessage() {} + +func (x *GroupVersionKind) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupVersionKind.ProtoReflect.Descriptor instead. +func (*GroupVersionKind) Descriptor() ([]byte, []int) { + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{6} +} + +func (x *GroupVersionKind) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *GroupVersionKind) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *GroupVersionKind) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +type SnapshotEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` + Kinds []*GroupVersionKind `protobuf:"bytes,2,rep,name=kinds,proto3" json:"kinds,omitempty"` +} + +func (x *SnapshotEntry) Reset() { + *x = SnapshotEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SnapshotEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SnapshotEntry) ProtoMessage() {} + +func (x *SnapshotEntry) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SnapshotEntry.ProtoReflect.Descriptor instead. +func (*SnapshotEntry) Descriptor() ([]byte, []int) { + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{7} +} + +func (x *SnapshotEntry) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *SnapshotEntry) GetKinds() []*GroupVersionKind { + if x != nil { + return x.Kinds + } + return nil +} + type Kustomization struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` - TargetNamespace string `protobuf:"bytes,3,opt,name=targetNamespace,proto3" json:"targetNamespace,omitempty"` - Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` - SourceRef string `protobuf:"bytes,5,opt,name=sourceRef,proto3" json:"sourceRef,omitempty"` - Conditions []*Condition `protobuf:"bytes,6,rep,name=conditions,proto3" json:"conditions,omitempty"` - Interval string `protobuf:"bytes,7,opt,name=interval,proto3" json:"interval,omitempty"` - Prune bool `protobuf:"varint,8,opt,name=prune,proto3" json:"prune,omitempty"` - ReconcileRequestAt string `protobuf:"bytes,9,opt,name=reconcileRequestAt,proto3" json:"reconcileRequestAt,omitempty"` - ReconcileAt string `protobuf:"bytes,10,opt,name=reconcileAt,proto3" json:"reconcileAt,omitempty"` - SourceRefKind Source_Type `protobuf:"varint,11,opt,name=sourceRefKind,proto3,enum=clusters.Source_Type" json:"sourceRefKind,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + TargetNamespace string `protobuf:"bytes,3,opt,name=targetNamespace,proto3" json:"targetNamespace,omitempty"` + Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` + SourceRef string `protobuf:"bytes,5,opt,name=sourceRef,proto3" json:"sourceRef,omitempty"` + Conditions []*Condition `protobuf:"bytes,6,rep,name=conditions,proto3" json:"conditions,omitempty"` + Interval string `protobuf:"bytes,7,opt,name=interval,proto3" json:"interval,omitempty"` + Prune bool `protobuf:"varint,8,opt,name=prune,proto3" json:"prune,omitempty"` + ReconcileRequestAt string `protobuf:"bytes,9,opt,name=reconcileRequestAt,proto3" json:"reconcileRequestAt,omitempty"` + ReconcileAt string `protobuf:"bytes,10,opt,name=reconcileAt,proto3" json:"reconcileAt,omitempty"` + SourceRefKind Source_Type `protobuf:"varint,11,opt,name=sourceRefKind,proto3,enum=clusters.Source_Type" json:"sourceRefKind,omitempty"` + Snapshots []*SnapshotEntry `protobuf:"bytes,12,rep,name=snapshots,proto3" json:"snapshots,omitempty"` + LastAppliedRevision string `protobuf:"bytes,13,opt,name=lastAppliedRevision,proto3" json:"lastAppliedRevision,omitempty"` + LastAttemptedRevision string `protobuf:"bytes,14,opt,name=lastAttemptedRevision,proto3" json:"lastAttemptedRevision,omitempty"` } func (x *Kustomization) Reset() { *x = Kustomization{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[6] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -419,7 +540,7 @@ func (x *Kustomization) String() string { func (*Kustomization) ProtoMessage() {} func (x *Kustomization) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[6] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -432,7 +553,7 @@ func (x *Kustomization) ProtoReflect() protoreflect.Message { // Deprecated: Use Kustomization.ProtoReflect.Descriptor instead. func (*Kustomization) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{6} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{8} } func (x *Kustomization) GetName() string { @@ -512,6 +633,27 @@ func (x *Kustomization) GetSourceRefKind() Source_Type { return Source_Git } +func (x *Kustomization) GetSnapshots() []*SnapshotEntry { + if x != nil { + return x.Snapshots + } + return nil +} + +func (x *Kustomization) GetLastAppliedRevision() string { + if x != nil { + return x.LastAppliedRevision + } + return "" +} + +func (x *Kustomization) GetLastAttemptedRevision() string { + if x != nil { + return x.LastAttemptedRevision + } + return "" +} + type ListKustomizationsReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -524,7 +666,7 @@ type ListKustomizationsReq struct { func (x *ListKustomizationsReq) Reset() { *x = ListKustomizationsReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[7] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -537,7 +679,7 @@ func (x *ListKustomizationsReq) String() string { func (*ListKustomizationsReq) ProtoMessage() {} func (x *ListKustomizationsReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[7] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -550,7 +692,7 @@ func (x *ListKustomizationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListKustomizationsReq.ProtoReflect.Descriptor instead. func (*ListKustomizationsReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{7} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{9} } func (x *ListKustomizationsReq) GetContextName() string { @@ -578,7 +720,7 @@ type ListKustomizationsRes struct { func (x *ListKustomizationsRes) Reset() { *x = ListKustomizationsRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[8] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -591,7 +733,7 @@ func (x *ListKustomizationsRes) String() string { func (*ListKustomizationsRes) ProtoMessage() {} func (x *ListKustomizationsRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[8] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -604,7 +746,7 @@ func (x *ListKustomizationsRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListKustomizationsRes.ProtoReflect.Descriptor instead. func (*ListKustomizationsRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{8} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{10} } func (x *ListKustomizationsRes) GetKustomizations() []*Kustomization { @@ -628,7 +770,7 @@ type GitRepositoryRef struct { func (x *GitRepositoryRef) Reset() { *x = GitRepositoryRef{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[9] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -641,7 +783,7 @@ func (x *GitRepositoryRef) String() string { func (*GitRepositoryRef) ProtoMessage() {} func (x *GitRepositoryRef) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[9] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -654,7 +796,7 @@ func (x *GitRepositoryRef) ProtoReflect() protoreflect.Message { // Deprecated: Use GitRepositoryRef.ProtoReflect.Descriptor instead. func (*GitRepositoryRef) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{9} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{11} } func (x *GitRepositoryRef) GetBranch() string { @@ -700,7 +842,7 @@ type Artifact struct { func (x *Artifact) Reset() { *x = Artifact{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[10] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -713,7 +855,7 @@ func (x *Artifact) String() string { func (*Artifact) ProtoMessage() {} func (x *Artifact) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[10] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -726,7 +868,7 @@ func (x *Artifact) ProtoReflect() protoreflect.Message { // Deprecated: Use Artifact.ProtoReflect.Descriptor instead. func (*Artifact) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{10} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{12} } func (x *Artifact) GetChecksum() string { @@ -787,7 +929,7 @@ type Source struct { func (x *Source) Reset() { *x = Source{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[11] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -800,7 +942,7 @@ func (x *Source) String() string { func (*Source) ProtoMessage() {} func (x *Source) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[11] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -813,7 +955,7 @@ func (x *Source) ProtoReflect() protoreflect.Message { // Deprecated: Use Source.ProtoReflect.Descriptor instead. func (*Source) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{11} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{13} } func (x *Source) GetName() string { @@ -920,7 +1062,7 @@ type ListSourcesReq struct { func (x *ListSourcesReq) Reset() { *x = ListSourcesReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[12] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -933,7 +1075,7 @@ func (x *ListSourcesReq) String() string { func (*ListSourcesReq) ProtoMessage() {} func (x *ListSourcesReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[12] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -946,7 +1088,7 @@ func (x *ListSourcesReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListSourcesReq.ProtoReflect.Descriptor instead. func (*ListSourcesReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{12} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{14} } func (x *ListSourcesReq) GetContextName() string { @@ -981,7 +1123,7 @@ type ListSourcesRes struct { func (x *ListSourcesRes) Reset() { *x = ListSourcesRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[13] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -994,7 +1136,7 @@ func (x *ListSourcesRes) String() string { func (*ListSourcesRes) ProtoMessage() {} func (x *ListSourcesRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[13] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1007,7 +1149,7 @@ func (x *ListSourcesRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListSourcesRes.ProtoReflect.Descriptor instead. func (*ListSourcesRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{13} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{15} } func (x *ListSourcesRes) GetSources() []*Source { @@ -1031,7 +1173,7 @@ type SyncSourceReq struct { func (x *SyncSourceReq) Reset() { *x = SyncSourceReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[14] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1044,7 +1186,7 @@ func (x *SyncSourceReq) String() string { func (*SyncSourceReq) ProtoMessage() {} func (x *SyncSourceReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[14] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1057,7 +1199,7 @@ func (x *SyncSourceReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncSourceReq.ProtoReflect.Descriptor instead. func (*SyncSourceReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{14} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{16} } func (x *SyncSourceReq) GetContextName() string { @@ -1099,7 +1241,7 @@ type SyncSourceRes struct { func (x *SyncSourceRes) Reset() { *x = SyncSourceRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[15] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1112,7 +1254,7 @@ func (x *SyncSourceRes) String() string { func (*SyncSourceRes) ProtoMessage() {} func (x *SyncSourceRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[15] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1125,7 +1267,7 @@ func (x *SyncSourceRes) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncSourceRes.ProtoReflect.Descriptor instead. func (*SyncSourceRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{15} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{17} } func (x *SyncSourceRes) GetSource() *Source { @@ -1149,7 +1291,7 @@ type SyncKustomizationReq struct { func (x *SyncKustomizationReq) Reset() { *x = SyncKustomizationReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[16] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1162,7 +1304,7 @@ func (x *SyncKustomizationReq) String() string { func (*SyncKustomizationReq) ProtoMessage() {} func (x *SyncKustomizationReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[16] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1175,7 +1317,7 @@ func (x *SyncKustomizationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncKustomizationReq.ProtoReflect.Descriptor instead. func (*SyncKustomizationReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{16} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{18} } func (x *SyncKustomizationReq) GetContextName() string { @@ -1217,7 +1359,7 @@ type SyncKustomizationRes struct { func (x *SyncKustomizationRes) Reset() { *x = SyncKustomizationRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[17] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1230,7 +1372,7 @@ func (x *SyncKustomizationRes) String() string { func (*SyncKustomizationRes) ProtoMessage() {} func (x *SyncKustomizationRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[17] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1243,7 +1385,7 @@ func (x *SyncKustomizationRes) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncKustomizationRes.ProtoReflect.Descriptor instead. func (*SyncKustomizationRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{17} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{19} } func (x *SyncKustomizationRes) GetKustomization() *Kustomization { @@ -1272,7 +1414,7 @@ type HelmRelease struct { func (x *HelmRelease) Reset() { *x = HelmRelease{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[18] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1285,7 +1427,7 @@ func (x *HelmRelease) String() string { func (*HelmRelease) ProtoMessage() {} func (x *HelmRelease) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[18] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1298,7 +1440,7 @@ func (x *HelmRelease) ProtoReflect() protoreflect.Message { // Deprecated: Use HelmRelease.ProtoReflect.Descriptor instead. func (*HelmRelease) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{18} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{20} } func (x *HelmRelease) GetName() string { @@ -1376,7 +1518,7 @@ type ListHelmReleasesReq struct { func (x *ListHelmReleasesReq) Reset() { *x = ListHelmReleasesReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[19] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1389,7 +1531,7 @@ func (x *ListHelmReleasesReq) String() string { func (*ListHelmReleasesReq) ProtoMessage() {} func (x *ListHelmReleasesReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[19] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1402,7 +1544,7 @@ func (x *ListHelmReleasesReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHelmReleasesReq.ProtoReflect.Descriptor instead. func (*ListHelmReleasesReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{19} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{21} } func (x *ListHelmReleasesReq) GetContextName() string { @@ -1430,7 +1572,7 @@ type ListHelmReleasesRes struct { func (x *ListHelmReleasesRes) Reset() { *x = ListHelmReleasesRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[20] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1443,7 +1585,7 @@ func (x *ListHelmReleasesRes) String() string { func (*ListHelmReleasesRes) ProtoMessage() {} func (x *ListHelmReleasesRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[20] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1456,7 +1598,7 @@ func (x *ListHelmReleasesRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHelmReleasesRes.ProtoReflect.Descriptor instead. func (*ListHelmReleasesRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{20} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{22} } func (x *ListHelmReleasesRes) GetHelmReleases() []*HelmRelease { @@ -1479,7 +1621,7 @@ type SyncHelmReleaseReq struct { func (x *SyncHelmReleaseReq) Reset() { *x = SyncHelmReleaseReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[21] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1492,7 +1634,7 @@ func (x *SyncHelmReleaseReq) String() string { func (*SyncHelmReleaseReq) ProtoMessage() {} func (x *SyncHelmReleaseReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[21] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1505,7 +1647,7 @@ func (x *SyncHelmReleaseReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncHelmReleaseReq.ProtoReflect.Descriptor instead. func (*SyncHelmReleaseReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{21} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{23} } func (x *SyncHelmReleaseReq) GetContextName() string { @@ -1540,7 +1682,7 @@ type SyncHelmReleaseRes struct { func (x *SyncHelmReleaseRes) Reset() { *x = SyncHelmReleaseRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[22] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1553,7 +1695,7 @@ func (x *SyncHelmReleaseRes) String() string { func (*SyncHelmReleaseRes) ProtoMessage() {} func (x *SyncHelmReleaseRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[22] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1566,7 +1708,7 @@ func (x *SyncHelmReleaseRes) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncHelmReleaseRes.ProtoReflect.Descriptor instead. func (*SyncHelmReleaseRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{22} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{24} } func (x *SyncHelmReleaseRes) GetHelmrelease() *HelmRelease { @@ -1588,7 +1730,7 @@ type Container struct { func (x *Container) Reset() { *x = Container{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[23] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1601,7 +1743,7 @@ func (x *Container) String() string { func (*Container) ProtoMessage() {} func (x *Container) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[23] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1614,7 +1756,7 @@ func (x *Container) ProtoReflect() protoreflect.Message { // Deprecated: Use Container.ProtoReflect.Descriptor instead. func (*Container) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{23} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{25} } func (x *Container) GetName() string { @@ -1642,7 +1784,7 @@ type PodTemplate struct { func (x *PodTemplate) Reset() { *x = PodTemplate{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[24] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1655,7 +1797,7 @@ func (x *PodTemplate) String() string { func (*PodTemplate) ProtoMessage() {} func (x *PodTemplate) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[24] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1668,7 +1810,7 @@ func (x *PodTemplate) ProtoReflect() protoreflect.Message { // Deprecated: Use PodTemplate.ProtoReflect.Descriptor instead. func (*PodTemplate) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{24} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{26} } func (x *PodTemplate) GetContainers() []*Container { @@ -1693,7 +1835,7 @@ type Workload struct { func (x *Workload) Reset() { *x = Workload{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[25] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1706,7 +1848,7 @@ func (x *Workload) String() string { func (*Workload) ProtoMessage() {} func (x *Workload) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[25] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1719,7 +1861,7 @@ func (x *Workload) ProtoReflect() protoreflect.Message { // Deprecated: Use Workload.ProtoReflect.Descriptor instead. func (*Workload) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{25} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{27} } func (x *Workload) GetName() string { @@ -1769,7 +1911,7 @@ type ListWorkloadsReq struct { func (x *ListWorkloadsReq) Reset() { *x = ListWorkloadsReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[26] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1782,7 +1924,7 @@ func (x *ListWorkloadsReq) String() string { func (*ListWorkloadsReq) ProtoMessage() {} func (x *ListWorkloadsReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[26] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1795,7 +1937,7 @@ func (x *ListWorkloadsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkloadsReq.ProtoReflect.Descriptor instead. func (*ListWorkloadsReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{26} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{28} } func (x *ListWorkloadsReq) GetContextName() string { @@ -1823,7 +1965,7 @@ type ListWorkloadsRes struct { func (x *ListWorkloadsRes) Reset() { *x = ListWorkloadsRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[27] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1836,7 +1978,7 @@ func (x *ListWorkloadsRes) String() string { func (*ListWorkloadsRes) ProtoMessage() {} func (x *ListWorkloadsRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[27] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1849,7 +1991,7 @@ func (x *ListWorkloadsRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkloadsRes.ProtoReflect.Descriptor instead. func (*ListWorkloadsRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{27} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{29} } func (x *ListWorkloadsRes) GetWorkloads() []*Workload { @@ -1872,7 +2014,7 @@ type ListKustomizationChildrenReq struct { func (x *ListKustomizationChildrenReq) Reset() { *x = ListKustomizationChildrenReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[28] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1885,7 +2027,7 @@ func (x *ListKustomizationChildrenReq) String() string { func (*ListKustomizationChildrenReq) ProtoMessage() {} func (x *ListKustomizationChildrenReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[28] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1898,7 +2040,7 @@ func (x *ListKustomizationChildrenReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListKustomizationChildrenReq.ProtoReflect.Descriptor instead. func (*ListKustomizationChildrenReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{28} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{30} } func (x *ListKustomizationChildrenReq) GetContextName() string { @@ -1933,7 +2075,7 @@ type ListKustomizationChildrenRes struct { func (x *ListKustomizationChildrenRes) Reset() { *x = ListKustomizationChildrenRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[29] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1946,7 +2088,7 @@ func (x *ListKustomizationChildrenRes) String() string { func (*ListKustomizationChildrenRes) ProtoMessage() {} func (x *ListKustomizationChildrenRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[29] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1959,7 +2101,7 @@ func (x *ListKustomizationChildrenRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListKustomizationChildrenRes.ProtoReflect.Descriptor instead. func (*ListKustomizationChildrenRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{29} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{31} } func (x *ListKustomizationChildrenRes) GetWorkloads() []*Workload { @@ -1984,7 +2126,7 @@ type Event struct { func (x *Event) Reset() { *x = Event{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[30] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1997,7 +2139,7 @@ func (x *Event) String() string { func (*Event) ProtoMessage() {} func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[30] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2010,7 +2152,7 @@ func (x *Event) ProtoReflect() protoreflect.Message { // Deprecated: Use Event.ProtoReflect.Descriptor instead. func (*Event) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{30} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{32} } func (x *Event) GetType() string { @@ -2060,7 +2202,7 @@ type ListEventsReq struct { func (x *ListEventsReq) Reset() { *x = ListEventsReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[31] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2073,7 +2215,7 @@ func (x *ListEventsReq) String() string { func (*ListEventsReq) ProtoMessage() {} func (x *ListEventsReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[31] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2086,7 +2228,7 @@ func (x *ListEventsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEventsReq.ProtoReflect.Descriptor instead. func (*ListEventsReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{31} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{33} } func (x *ListEventsReq) GetContextName() string { @@ -2114,7 +2256,7 @@ type ListEventsRes struct { func (x *ListEventsRes) Reset() { *x = ListEventsRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[32] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2127,7 +2269,7 @@ func (x *ListEventsRes) String() string { func (*ListEventsRes) ProtoMessage() {} func (x *ListEventsRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[32] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2140,7 +2282,7 @@ func (x *ListEventsRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEventsRes.ProtoReflect.Descriptor instead. func (*ListEventsRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{32} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{34} } func (x *ListEventsRes) GetEvents() []*Event { @@ -2150,6 +2292,313 @@ func (x *ListEventsRes) GetEvents() []*Event { return nil } +type GetReconciledObjectsReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ContextName string `protobuf:"bytes,1,opt,name=contextName,proto3" json:"contextName,omitempty"` + KustomizationName string `protobuf:"bytes,2,opt,name=kustomizationName,proto3" json:"kustomizationName,omitempty"` + KustomizationNamespace string `protobuf:"bytes,3,opt,name=kustomizationNamespace,proto3" json:"kustomizationNamespace,omitempty"` + Kinds []*GroupVersionKind `protobuf:"bytes,4,rep,name=kinds,proto3" json:"kinds,omitempty"` +} + +func (x *GetReconciledObjectsReq) Reset() { + *x = GetReconciledObjectsReq{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetReconciledObjectsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetReconciledObjectsReq) ProtoMessage() {} + +func (x *GetReconciledObjectsReq) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetReconciledObjectsReq.ProtoReflect.Descriptor instead. +func (*GetReconciledObjectsReq) Descriptor() ([]byte, []int) { + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{35} +} + +func (x *GetReconciledObjectsReq) GetContextName() string { + if x != nil { + return x.ContextName + } + return "" +} + +func (x *GetReconciledObjectsReq) GetKustomizationName() string { + if x != nil { + return x.KustomizationName + } + return "" +} + +func (x *GetReconciledObjectsReq) GetKustomizationNamespace() string { + if x != nil { + return x.KustomizationNamespace + } + return "" +} + +func (x *GetReconciledObjectsReq) GetKinds() []*GroupVersionKind { + if x != nil { + return x.Kinds + } + return nil +} + +type UnstructuredObject struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupVersionKind *GroupVersionKind `protobuf:"bytes,2,opt,name=groupVersionKind,proto3" json:"groupVersionKind,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Namespace string `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` + Uid string `protobuf:"bytes,5,opt,name=uid,proto3" json:"uid,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *UnstructuredObject) Reset() { + *x = UnstructuredObject{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnstructuredObject) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnstructuredObject) ProtoMessage() {} + +func (x *UnstructuredObject) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnstructuredObject.ProtoReflect.Descriptor instead. +func (*UnstructuredObject) Descriptor() ([]byte, []int) { + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{36} +} + +func (x *UnstructuredObject) GetGroupVersionKind() *GroupVersionKind { + if x != nil { + return x.GroupVersionKind + } + return nil +} + +func (x *UnstructuredObject) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UnstructuredObject) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *UnstructuredObject) GetUid() string { + if x != nil { + return x.Uid + } + return "" +} + +func (x *UnstructuredObject) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type GetReconciledObjectsRes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Objects []*UnstructuredObject `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` +} + +func (x *GetReconciledObjectsRes) Reset() { + *x = GetReconciledObjectsRes{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetReconciledObjectsRes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetReconciledObjectsRes) ProtoMessage() {} + +func (x *GetReconciledObjectsRes) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetReconciledObjectsRes.ProtoReflect.Descriptor instead. +func (*GetReconciledObjectsRes) Descriptor() ([]byte, []int) { + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{37} +} + +func (x *GetReconciledObjectsRes) GetObjects() []*UnstructuredObject { + if x != nil { + return x.Objects + } + return nil +} + +type GetChildObjectsReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ContextName string `protobuf:"bytes,1,opt,name=contextName,proto3" json:"contextName,omitempty"` + GroupVersionKind *GroupVersionKind `protobuf:"bytes,2,opt,name=groupVersionKind,proto3" json:"groupVersionKind,omitempty"` + ParentUid string `protobuf:"bytes,3,opt,name=parentUid,proto3" json:"parentUid,omitempty"` +} + +func (x *GetChildObjectsReq) Reset() { + *x = GetChildObjectsReq{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChildObjectsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChildObjectsReq) ProtoMessage() {} + +func (x *GetChildObjectsReq) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetChildObjectsReq.ProtoReflect.Descriptor instead. +func (*GetChildObjectsReq) Descriptor() ([]byte, []int) { + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{38} +} + +func (x *GetChildObjectsReq) GetContextName() string { + if x != nil { + return x.ContextName + } + return "" +} + +func (x *GetChildObjectsReq) GetGroupVersionKind() *GroupVersionKind { + if x != nil { + return x.GroupVersionKind + } + return nil +} + +func (x *GetChildObjectsReq) GetParentUid() string { + if x != nil { + return x.ParentUid + } + return "" +} + +type GetChildObjectsRes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Objects []*UnstructuredObject `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` +} + +func (x *GetChildObjectsRes) Reset() { + *x = GetChildObjectsRes{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChildObjectsRes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChildObjectsRes) ProtoMessage() {} + +func (x *GetChildObjectsRes) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetChildObjectsRes.ProtoReflect.Descriptor instead. +func (*GetChildObjectsRes) Descriptor() ([]byte, []int) { + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{39} +} + +func (x *GetChildObjectsRes) GetObjects() []*UnstructuredObject { + if x != nil { + return x.Objects + } + return nil +} + var File_pkg_rpc_clusters_clusters_proto protoreflect.FileDescriptor var file_pkg_rpc_clusters_clusters_proto_rawDesc = []byte{ @@ -2182,289 +2631,366 @@ var file_pkg_rpc_clusters_clusters_proto_rawDesc = []byte{ 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x22, 0x93, 0x03, 0x0a, 0x0d, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x66, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x75, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x70, 0x72, 0x75, 0x6e, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x74, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x41, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, - 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x0d, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x66, 0x4b, 0x69, 0x6e, 0x64, 0x22, 0x57, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4b, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x22, 0x58, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x6b, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4b, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6b, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6c, 0x0a, 0x10, 0x47, 0x69, - 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x66, 0x12, 0x16, - 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6d, 0x76, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x08, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x61, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x8a, 0x04, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x66, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x2c, 0x0a, 0x11, 0x67, 0x69, 0x74, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x67, 0x69, 0x74, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, - 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x22, 0x30, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x69, - 0x74, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x10, 0x01, 0x12, - 0x08, 0x0a, 0x04, 0x48, 0x65, 0x6c, 0x6d, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x68, 0x61, - 0x72, 0x74, 0x10, 0x03, 0x22, 0x87, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3c, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x12, 0x2a, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xa6, 0x01, 0x0a, - 0x0d, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x20, - 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x70, 0x22, 0x56, 0x0a, 0x10, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5f, 0x0a, 0x0d, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x6b, 0x69, 0x6e, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, + 0x69, 0x6e, 0x64, 0x52, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x22, 0xb2, 0x04, 0x0a, 0x0d, 0x4b, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, - 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x39, 0x0a, 0x0d, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x22, 0xa4, 0x01, 0x0a, 0x14, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6b, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, - 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x55, 0x0a, 0x14, 0x53, 0x79, 0x6e, 0x63, 0x4b, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, - 0x3d, 0x0a, 0x0d, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2e, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0d, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, - 0x02, 0x0a, 0x0b, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, - 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x33, - 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x55, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x4c, 0x69, - 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x68, 0x65, 0x6c, 0x6d, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, - 0x0c, 0x68, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x22, 0x7e, 0x0a, - 0x12, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x68, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x65, - 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, - 0x12, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x52, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x68, 0x65, 0x6c, 0x6d, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, - 0x0b, 0x68, 0x65, 0x6c, 0x6d, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x09, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x22, 0x42, 0x0a, 0x0b, 0x50, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, + 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x70, + 0x72, 0x75, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x70, 0x72, 0x75, 0x6e, + 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, + 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x41, 0x74, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, + 0x65, 0x41, 0x74, 0x12, 0x3b, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, + 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x4b, 0x69, 0x6e, 0x64, + 0x12, 0x35, 0x0a, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x0c, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x65, + 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x15, 0x6c, 0x61, 0x73, + 0x74, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x65, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x74, + 0x74, 0x65, 0x6d, 0x70, 0x74, 0x65, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x57, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x58, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, + 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0e, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x6c, 0x0a, 0x10, 0x47, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x10, + 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x22, 0x8c, 0x01, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x61, 0x73, + 0x74, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x61, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, + 0x8a, 0x04, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, + 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, + 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x66, 0x52, + 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x67, 0x69, 0x74, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x11, 0x67, 0x69, 0x74, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, + 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x08, 0x61, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x22, 0x30, 0x0a, 0x04, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x69, 0x74, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x65, 0x6c, 0x6d, 0x10, + 0x02, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x68, 0x61, 0x72, 0x74, 0x10, 0x03, 0x22, 0x87, 0x01, 0x0a, + 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x35, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3c, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x07, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x0d, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x6b, 0x75, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x39, 0x0a, + 0x0d, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x12, 0x28, + 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x14, 0x53, 0x79, 0x6e, + 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, + 0x55, 0x0a, 0x14, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x6b, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x02, 0x0a, 0x0b, 0x48, 0x65, 0x6c, 0x6d, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x55, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x68, 0x65, 0x6c, + 0x6d, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x6c, 0x6d, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x0c, 0x68, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x22, 0x7e, 0x0a, 0x12, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x6c, + 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x68, + 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x12, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x6c, + 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x68, + 0x65, 0x6c, 0x6d, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x6c, 0x6d, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x0b, 0x68, 0x65, 0x6c, 0x6d, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x42, 0x0a, 0x0b, 0x50, + 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, + 0xe7, 0x01, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, + 0x0a, 0x14, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x6b, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x70, 0x6f, 0x64, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x50, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x70, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x22, 0x52, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x44, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x09, 0x77, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x1c, - 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, - 0x0a, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, - 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x4b, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x22, 0x50, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, - 0x6e, 0x52, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x09, 0x77, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x4f, 0x0a, 0x0d, - 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, + 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x37, 0x0a, 0x0b, 0x70, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2e, 0x50, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x70, 0x6f, + 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x52, 0x0a, 0x10, 0x4c, 0x69, 0x73, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x38, 0x0a, - 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x27, - 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, - 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x32, 0xcb, 0x05, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x19, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x18, 0x4c, 0x69, - 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x44, 0x0a, + 0x10, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, 0x65, + 0x73, 0x12, 0x30, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, + 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x50, 0x0a, 0x1c, + 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x09, + 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22, 0x83, + 0x01, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x22, 0x4f, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x38, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0xd3, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, + 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6b, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x6b, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x05, + 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x46, 0x0a, 0x10, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, + 0x6e, 0x64, 0x52, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x51, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x75, 0x72, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x10, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, + 0x6e, 0x64, 0x52, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, + 0x69, 0x64, 0x22, 0x4c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x32, 0xf8, 0x06, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x44, 0x0a, + 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x12, 0x19, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, + 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x52, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x0b, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x18, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, - 0x53, 0x0a, 0x11, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, + 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x12, 0x56, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x12, 0x18, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x11, 0x53, 0x79, 0x6e, 0x63, + 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x50, 0x0a, + 0x10, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, + 0x3e, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, + 0x3e, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, - 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x73, 0x42, 0x12, 0x5a, 0x10, 0x70, 0x6b, 0x67, 0x2f, 0x72, 0x70, 0x63, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x12, + 0x4d, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, + 0x6e, 0x63, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x12, 0x5c, + 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, + 0x69, 0x6c, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x42, 0x12, 0x5a, 0x10, 0x70, + 0x6b, 0x67, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2480,7 +3006,7 @@ func file_pkg_rpc_clusters_clusters_proto_rawDescGZIP() []byte { } var file_pkg_rpc_clusters_clusters_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pkg_rpc_clusters_clusters_proto_msgTypes = make([]protoimpl.MessageInfo, 33) +var file_pkg_rpc_clusters_clusters_proto_msgTypes = make([]protoimpl.MessageInfo, 40) var file_pkg_rpc_clusters_clusters_proto_goTypes = []interface{}{ (Source_Type)(0), // 0: clusters.Source.Type (*Context)(nil), // 1: clusters.Context @@ -2489,79 +3015,97 @@ var file_pkg_rpc_clusters_clusters_proto_goTypes = []interface{}{ (*ListNamespacesForContextReq)(nil), // 4: clusters.ListNamespacesForContextReq (*ListNamespacesForContextRes)(nil), // 5: clusters.ListNamespacesForContextRes (*Condition)(nil), // 6: clusters.Condition - (*Kustomization)(nil), // 7: clusters.Kustomization - (*ListKustomizationsReq)(nil), // 8: clusters.ListKustomizationsReq - (*ListKustomizationsRes)(nil), // 9: clusters.ListKustomizationsRes - (*GitRepositoryRef)(nil), // 10: clusters.GitRepositoryRef - (*Artifact)(nil), // 11: clusters.Artifact - (*Source)(nil), // 12: clusters.Source - (*ListSourcesReq)(nil), // 13: clusters.ListSourcesReq - (*ListSourcesRes)(nil), // 14: clusters.ListSourcesRes - (*SyncSourceReq)(nil), // 15: clusters.SyncSourceReq - (*SyncSourceRes)(nil), // 16: clusters.SyncSourceRes - (*SyncKustomizationReq)(nil), // 17: clusters.SyncKustomizationReq - (*SyncKustomizationRes)(nil), // 18: clusters.SyncKustomizationRes - (*HelmRelease)(nil), // 19: clusters.HelmRelease - (*ListHelmReleasesReq)(nil), // 20: clusters.ListHelmReleasesReq - (*ListHelmReleasesRes)(nil), // 21: clusters.ListHelmReleasesRes - (*SyncHelmReleaseReq)(nil), // 22: clusters.SyncHelmReleaseReq - (*SyncHelmReleaseRes)(nil), // 23: clusters.SyncHelmReleaseRes - (*Container)(nil), // 24: clusters.Container - (*PodTemplate)(nil), // 25: clusters.PodTemplate - (*Workload)(nil), // 26: clusters.Workload - (*ListWorkloadsReq)(nil), // 27: clusters.ListWorkloadsReq - (*ListWorkloadsRes)(nil), // 28: clusters.ListWorkloadsRes - (*ListKustomizationChildrenReq)(nil), // 29: clusters.ListKustomizationChildrenReq - (*ListKustomizationChildrenRes)(nil), // 30: clusters.ListKustomizationChildrenRes - (*Event)(nil), // 31: clusters.Event - (*ListEventsReq)(nil), // 32: clusters.ListEventsReq - (*ListEventsRes)(nil), // 33: clusters.ListEventsRes + (*GroupVersionKind)(nil), // 7: clusters.GroupVersionKind + (*SnapshotEntry)(nil), // 8: clusters.SnapshotEntry + (*Kustomization)(nil), // 9: clusters.Kustomization + (*ListKustomizationsReq)(nil), // 10: clusters.ListKustomizationsReq + (*ListKustomizationsRes)(nil), // 11: clusters.ListKustomizationsRes + (*GitRepositoryRef)(nil), // 12: clusters.GitRepositoryRef + (*Artifact)(nil), // 13: clusters.Artifact + (*Source)(nil), // 14: clusters.Source + (*ListSourcesReq)(nil), // 15: clusters.ListSourcesReq + (*ListSourcesRes)(nil), // 16: clusters.ListSourcesRes + (*SyncSourceReq)(nil), // 17: clusters.SyncSourceReq + (*SyncSourceRes)(nil), // 18: clusters.SyncSourceRes + (*SyncKustomizationReq)(nil), // 19: clusters.SyncKustomizationReq + (*SyncKustomizationRes)(nil), // 20: clusters.SyncKustomizationRes + (*HelmRelease)(nil), // 21: clusters.HelmRelease + (*ListHelmReleasesReq)(nil), // 22: clusters.ListHelmReleasesReq + (*ListHelmReleasesRes)(nil), // 23: clusters.ListHelmReleasesRes + (*SyncHelmReleaseReq)(nil), // 24: clusters.SyncHelmReleaseReq + (*SyncHelmReleaseRes)(nil), // 25: clusters.SyncHelmReleaseRes + (*Container)(nil), // 26: clusters.Container + (*PodTemplate)(nil), // 27: clusters.PodTemplate + (*Workload)(nil), // 28: clusters.Workload + (*ListWorkloadsReq)(nil), // 29: clusters.ListWorkloadsReq + (*ListWorkloadsRes)(nil), // 30: clusters.ListWorkloadsRes + (*ListKustomizationChildrenReq)(nil), // 31: clusters.ListKustomizationChildrenReq + (*ListKustomizationChildrenRes)(nil), // 32: clusters.ListKustomizationChildrenRes + (*Event)(nil), // 33: clusters.Event + (*ListEventsReq)(nil), // 34: clusters.ListEventsReq + (*ListEventsRes)(nil), // 35: clusters.ListEventsRes + (*GetReconciledObjectsReq)(nil), // 36: clusters.GetReconciledObjectsReq + (*UnstructuredObject)(nil), // 37: clusters.UnstructuredObject + (*GetReconciledObjectsRes)(nil), // 38: clusters.GetReconciledObjectsRes + (*GetChildObjectsReq)(nil), // 39: clusters.GetChildObjectsReq + (*GetChildObjectsRes)(nil), // 40: clusters.GetChildObjectsRes } var file_pkg_rpc_clusters_clusters_proto_depIdxs = []int32{ 1, // 0: clusters.ListContextsRes.contexts:type_name -> clusters.Context - 6, // 1: clusters.Kustomization.conditions:type_name -> clusters.Condition - 0, // 2: clusters.Kustomization.sourceRefKind:type_name -> clusters.Source.Type - 7, // 3: clusters.ListKustomizationsRes.kustomizations:type_name -> clusters.Kustomization - 10, // 4: clusters.Source.reference:type_name -> clusters.GitRepositoryRef - 0, // 5: clusters.Source.type:type_name -> clusters.Source.Type - 6, // 6: clusters.Source.conditions:type_name -> clusters.Condition - 11, // 7: clusters.Source.artifact:type_name -> clusters.Artifact - 0, // 8: clusters.ListSourcesReq.sourceType:type_name -> clusters.Source.Type - 12, // 9: clusters.ListSourcesRes.sources:type_name -> clusters.Source - 0, // 10: clusters.SyncSourceReq.sourceType:type_name -> clusters.Source.Type - 12, // 11: clusters.SyncSourceRes.source:type_name -> clusters.Source - 7, // 12: clusters.SyncKustomizationRes.kustomization:type_name -> clusters.Kustomization - 6, // 13: clusters.HelmRelease.conditions:type_name -> clusters.Condition - 19, // 14: clusters.ListHelmReleasesRes.helm_releases:type_name -> clusters.HelmRelease - 19, // 15: clusters.SyncHelmReleaseRes.helmrelease:type_name -> clusters.HelmRelease - 24, // 16: clusters.PodTemplate.containers:type_name -> clusters.Container - 25, // 17: clusters.Workload.podTemplate:type_name -> clusters.PodTemplate - 26, // 18: clusters.ListWorkloadsRes.workloads:type_name -> clusters.Workload - 26, // 19: clusters.ListKustomizationChildrenRes.workloads:type_name -> clusters.Workload - 31, // 20: clusters.ListEventsRes.events:type_name -> clusters.Event - 2, // 21: clusters.Clusters.ListContexts:input_type -> clusters.ListContextsReq - 4, // 22: clusters.Clusters.ListNamespacesForContext:input_type -> clusters.ListNamespacesForContextReq - 8, // 23: clusters.Clusters.ListKustomizations:input_type -> clusters.ListKustomizationsReq - 13, // 24: clusters.Clusters.ListSources:input_type -> clusters.ListSourcesReq - 17, // 25: clusters.Clusters.SyncKustomization:input_type -> clusters.SyncKustomizationReq - 20, // 26: clusters.Clusters.ListHelmReleases:input_type -> clusters.ListHelmReleasesReq - 32, // 27: clusters.Clusters.ListEvents:input_type -> clusters.ListEventsReq - 15, // 28: clusters.Clusters.SyncSource:input_type -> clusters.SyncSourceReq - 22, // 29: clusters.Clusters.SyncHelmRelease:input_type -> clusters.SyncHelmReleaseReq - 3, // 30: clusters.Clusters.ListContexts:output_type -> clusters.ListContextsRes - 5, // 31: clusters.Clusters.ListNamespacesForContext:output_type -> clusters.ListNamespacesForContextRes - 9, // 32: clusters.Clusters.ListKustomizations:output_type -> clusters.ListKustomizationsRes - 14, // 33: clusters.Clusters.ListSources:output_type -> clusters.ListSourcesRes - 18, // 34: clusters.Clusters.SyncKustomization:output_type -> clusters.SyncKustomizationRes - 21, // 35: clusters.Clusters.ListHelmReleases:output_type -> clusters.ListHelmReleasesRes - 33, // 36: clusters.Clusters.ListEvents:output_type -> clusters.ListEventsRes - 16, // 37: clusters.Clusters.SyncSource:output_type -> clusters.SyncSourceRes - 23, // 38: clusters.Clusters.SyncHelmRelease:output_type -> clusters.SyncHelmReleaseRes - 30, // [30:39] is the sub-list for method output_type - 21, // [21:30] is the sub-list for method input_type - 21, // [21:21] is the sub-list for extension type_name - 21, // [21:21] is the sub-list for extension extendee - 0, // [0:21] is the sub-list for field type_name + 7, // 1: clusters.SnapshotEntry.kinds:type_name -> clusters.GroupVersionKind + 6, // 2: clusters.Kustomization.conditions:type_name -> clusters.Condition + 0, // 3: clusters.Kustomization.sourceRefKind:type_name -> clusters.Source.Type + 8, // 4: clusters.Kustomization.snapshots:type_name -> clusters.SnapshotEntry + 9, // 5: clusters.ListKustomizationsRes.kustomizations:type_name -> clusters.Kustomization + 12, // 6: clusters.Source.reference:type_name -> clusters.GitRepositoryRef + 0, // 7: clusters.Source.type:type_name -> clusters.Source.Type + 6, // 8: clusters.Source.conditions:type_name -> clusters.Condition + 13, // 9: clusters.Source.artifact:type_name -> clusters.Artifact + 0, // 10: clusters.ListSourcesReq.sourceType:type_name -> clusters.Source.Type + 14, // 11: clusters.ListSourcesRes.sources:type_name -> clusters.Source + 0, // 12: clusters.SyncSourceReq.sourceType:type_name -> clusters.Source.Type + 14, // 13: clusters.SyncSourceRes.source:type_name -> clusters.Source + 9, // 14: clusters.SyncKustomizationRes.kustomization:type_name -> clusters.Kustomization + 6, // 15: clusters.HelmRelease.conditions:type_name -> clusters.Condition + 21, // 16: clusters.ListHelmReleasesRes.helm_releases:type_name -> clusters.HelmRelease + 21, // 17: clusters.SyncHelmReleaseRes.helmrelease:type_name -> clusters.HelmRelease + 26, // 18: clusters.PodTemplate.containers:type_name -> clusters.Container + 27, // 19: clusters.Workload.podTemplate:type_name -> clusters.PodTemplate + 28, // 20: clusters.ListWorkloadsRes.workloads:type_name -> clusters.Workload + 28, // 21: clusters.ListKustomizationChildrenRes.workloads:type_name -> clusters.Workload + 33, // 22: clusters.ListEventsRes.events:type_name -> clusters.Event + 7, // 23: clusters.GetReconciledObjectsReq.kinds:type_name -> clusters.GroupVersionKind + 7, // 24: clusters.UnstructuredObject.groupVersionKind:type_name -> clusters.GroupVersionKind + 37, // 25: clusters.GetReconciledObjectsRes.objects:type_name -> clusters.UnstructuredObject + 7, // 26: clusters.GetChildObjectsReq.groupVersionKind:type_name -> clusters.GroupVersionKind + 37, // 27: clusters.GetChildObjectsRes.objects:type_name -> clusters.UnstructuredObject + 2, // 28: clusters.Clusters.ListContexts:input_type -> clusters.ListContextsReq + 4, // 29: clusters.Clusters.ListNamespacesForContext:input_type -> clusters.ListNamespacesForContextReq + 10, // 30: clusters.Clusters.ListKustomizations:input_type -> clusters.ListKustomizationsReq + 15, // 31: clusters.Clusters.ListSources:input_type -> clusters.ListSourcesReq + 19, // 32: clusters.Clusters.SyncKustomization:input_type -> clusters.SyncKustomizationReq + 22, // 33: clusters.Clusters.ListHelmReleases:input_type -> clusters.ListHelmReleasesReq + 34, // 34: clusters.Clusters.ListEvents:input_type -> clusters.ListEventsReq + 17, // 35: clusters.Clusters.SyncSource:input_type -> clusters.SyncSourceReq + 24, // 36: clusters.Clusters.SyncHelmRelease:input_type -> clusters.SyncHelmReleaseReq + 36, // 37: clusters.Clusters.GetReconciledObjects:input_type -> clusters.GetReconciledObjectsReq + 39, // 38: clusters.Clusters.GetChildObjects:input_type -> clusters.GetChildObjectsReq + 3, // 39: clusters.Clusters.ListContexts:output_type -> clusters.ListContextsRes + 5, // 40: clusters.Clusters.ListNamespacesForContext:output_type -> clusters.ListNamespacesForContextRes + 11, // 41: clusters.Clusters.ListKustomizations:output_type -> clusters.ListKustomizationsRes + 16, // 42: clusters.Clusters.ListSources:output_type -> clusters.ListSourcesRes + 20, // 43: clusters.Clusters.SyncKustomization:output_type -> clusters.SyncKustomizationRes + 23, // 44: clusters.Clusters.ListHelmReleases:output_type -> clusters.ListHelmReleasesRes + 35, // 45: clusters.Clusters.ListEvents:output_type -> clusters.ListEventsRes + 18, // 46: clusters.Clusters.SyncSource:output_type -> clusters.SyncSourceRes + 25, // 47: clusters.Clusters.SyncHelmRelease:output_type -> clusters.SyncHelmReleaseRes + 38, // 48: clusters.Clusters.GetReconciledObjects:output_type -> clusters.GetReconciledObjectsRes + 40, // 49: clusters.Clusters.GetChildObjects:output_type -> clusters.GetChildObjectsRes + 39, // [39:50] is the sub-list for method output_type + 28, // [28:39] is the sub-list for method input_type + 28, // [28:28] is the sub-list for extension type_name + 28, // [28:28] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name } func init() { file_pkg_rpc_clusters_clusters_proto_init() } @@ -2643,7 +3187,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Kustomization); i { + switch v := v.(*GroupVersionKind); i { case 0: return &v.state case 1: @@ -2655,7 +3199,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListKustomizationsReq); i { + switch v := v.(*SnapshotEntry); i { case 0: return &v.state case 1: @@ -2667,7 +3211,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListKustomizationsRes); i { + switch v := v.(*Kustomization); i { case 0: return &v.state case 1: @@ -2679,7 +3223,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GitRepositoryRef); i { + switch v := v.(*ListKustomizationsReq); i { case 0: return &v.state case 1: @@ -2691,7 +3235,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Artifact); i { + switch v := v.(*ListKustomizationsRes); i { case 0: return &v.state case 1: @@ -2703,7 +3247,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Source); i { + switch v := v.(*GitRepositoryRef); i { case 0: return &v.state case 1: @@ -2715,7 +3259,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListSourcesReq); i { + switch v := v.(*Artifact); i { case 0: return &v.state case 1: @@ -2727,7 +3271,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListSourcesRes); i { + switch v := v.(*Source); i { case 0: return &v.state case 1: @@ -2739,7 +3283,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncSourceReq); i { + switch v := v.(*ListSourcesReq); i { case 0: return &v.state case 1: @@ -2751,7 +3295,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncSourceRes); i { + switch v := v.(*ListSourcesRes); i { case 0: return &v.state case 1: @@ -2763,7 +3307,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncKustomizationReq); i { + switch v := v.(*SyncSourceReq); i { case 0: return &v.state case 1: @@ -2775,7 +3319,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncKustomizationRes); i { + switch v := v.(*SyncSourceRes); i { case 0: return &v.state case 1: @@ -2787,7 +3331,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HelmRelease); i { + switch v := v.(*SyncKustomizationReq); i { case 0: return &v.state case 1: @@ -2799,7 +3343,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHelmReleasesReq); i { + switch v := v.(*SyncKustomizationRes); i { case 0: return &v.state case 1: @@ -2811,7 +3355,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHelmReleasesRes); i { + switch v := v.(*HelmRelease); i { case 0: return &v.state case 1: @@ -2823,7 +3367,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncHelmReleaseReq); i { + switch v := v.(*ListHelmReleasesReq); i { case 0: return &v.state case 1: @@ -2835,7 +3379,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncHelmReleaseRes); i { + switch v := v.(*ListHelmReleasesRes); i { case 0: return &v.state case 1: @@ -2847,7 +3391,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Container); i { + switch v := v.(*SyncHelmReleaseReq); i { case 0: return &v.state case 1: @@ -2859,7 +3403,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PodTemplate); i { + switch v := v.(*SyncHelmReleaseRes); i { case 0: return &v.state case 1: @@ -2871,7 +3415,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Workload); i { + switch v := v.(*Container); i { case 0: return &v.state case 1: @@ -2883,7 +3427,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkloadsReq); i { + switch v := v.(*PodTemplate); i { case 0: return &v.state case 1: @@ -2895,7 +3439,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkloadsRes); i { + switch v := v.(*Workload); i { case 0: return &v.state case 1: @@ -2907,7 +3451,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListKustomizationChildrenReq); i { + switch v := v.(*ListWorkloadsReq); i { case 0: return &v.state case 1: @@ -2919,7 +3463,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListKustomizationChildrenRes); i { + switch v := v.(*ListWorkloadsRes); i { case 0: return &v.state case 1: @@ -2931,7 +3475,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Event); i { + switch v := v.(*ListKustomizationChildrenReq); i { case 0: return &v.state case 1: @@ -2943,7 +3487,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEventsReq); i { + switch v := v.(*ListKustomizationChildrenRes); i { case 0: return &v.state case 1: @@ -2955,6 +3499,30 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Event); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_rpc_clusters_clusters_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListEventsReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_rpc_clusters_clusters_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListEventsRes); i { case 0: return &v.state @@ -2966,6 +3534,66 @@ func file_pkg_rpc_clusters_clusters_proto_init() { return nil } } + file_pkg_rpc_clusters_clusters_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetReconciledObjectsReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_rpc_clusters_clusters_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnstructuredObject); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_rpc_clusters_clusters_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetReconciledObjectsRes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_rpc_clusters_clusters_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChildObjectsReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_rpc_clusters_clusters_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChildObjectsRes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -2973,7 +3601,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_rpc_clusters_clusters_proto_rawDesc, NumEnums: 1, - NumMessages: 33, + NumMessages: 40, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/rpc/clusters/clusters.proto b/pkg/rpc/clusters/clusters.proto index 23a48d7..bd3b97a 100644 --- a/pkg/rpc/clusters/clusters.proto +++ b/pkg/rpc/clusters/clusters.proto @@ -13,6 +13,8 @@ service Clusters { rpc ListEvents (ListEventsReq) returns (ListEventsRes); rpc SyncSource (SyncSourceReq) returns (SyncSourceRes); rpc SyncHelmRelease (SyncHelmReleaseReq) returns (SyncHelmReleaseRes); + rpc GetReconciledObjects(GetReconciledObjectsReq) returns (GetReconciledObjectsRes); + rpc GetChildObjects(GetChildObjectsReq) returns (GetChildObjectsRes); } message Context { @@ -44,6 +46,17 @@ message Condition { string timestamp = 5; } +message GroupVersionKind { + string group = 1; + string kind = 2; + string version = 3; +} + +message SnapshotEntry { + string namespace = 1; + repeated GroupVersionKind kinds =2; +} + message Kustomization { string name = 1; string namespace = 2; @@ -56,6 +69,10 @@ message Kustomization { string reconcileRequestAt = 9; string reconcileAt = 10; Source.Type sourceRefKind = 11; + repeated SnapshotEntry snapshots = 12; + string lastAppliedRevision = 13; + string lastAttemptedRevision = 14; + } message ListKustomizationsReq { @@ -220,3 +237,33 @@ message ListEventsReq { message ListEventsRes { repeated Event events = 1; } + + +message GetReconciledObjectsReq { + string contextName = 1; + string kustomizationName = 2; + string kustomizationNamespace = 3; + repeated GroupVersionKind kinds = 4; +} + +message UnstructuredObject { + GroupVersionKind groupVersionKind = 2; + string name = 3; + string namespace = 4; + string uid = 5; + string status = 6; +} + +message GetReconciledObjectsRes { + repeated UnstructuredObject objects = 1; +} + +message GetChildObjectsReq { + string contextName = 1; + GroupVersionKind groupVersionKind = 2; + string parentUid = 3; +} + +message GetChildObjectsRes { + repeated UnstructuredObject objects = 1; +} diff --git a/pkg/rpc/clusters/clusters.twirp.go b/pkg/rpc/clusters/clusters.twirp.go index 1dbcb82..95db54a 100644 --- a/pkg/rpc/clusters/clusters.twirp.go +++ b/pkg/rpc/clusters/clusters.twirp.go @@ -57,6 +57,10 @@ type Clusters interface { SyncSource(context.Context, *SyncSourceReq) (*SyncSourceRes, error) SyncHelmRelease(context.Context, *SyncHelmReleaseReq) (*SyncHelmReleaseRes, error) + + GetReconciledObjects(context.Context, *GetReconciledObjectsReq) (*GetReconciledObjectsRes, error) + + GetChildObjects(context.Context, *GetChildObjectsReq) (*GetChildObjectsRes, error) } // ======================== @@ -65,7 +69,7 @@ type Clusters interface { type clustersProtobufClient struct { client HTTPClient - urls [9]string + urls [11]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -85,7 +89,7 @@ func NewClustersProtobufClient(baseURL string, client HTTPClient, opts ...twirp. // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(clientOpts.PathPrefix(), "clusters", "Clusters") - urls := [9]string{ + urls := [11]string{ serviceURL + "ListContexts", serviceURL + "ListNamespacesForContext", serviceURL + "ListKustomizations", @@ -95,6 +99,8 @@ func NewClustersProtobufClient(baseURL string, client HTTPClient, opts ...twirp. serviceURL + "ListEvents", serviceURL + "SyncSource", serviceURL + "SyncHelmRelease", + serviceURL + "GetReconciledObjects", + serviceURL + "GetChildObjects", } return &clustersProtobufClient{ @@ -519,13 +525,105 @@ func (c *clustersProtobufClient) callSyncHelmRelease(ctx context.Context, in *Sy return out, nil } +func (c *clustersProtobufClient) GetReconciledObjects(ctx context.Context, in *GetReconciledObjectsReq) (*GetReconciledObjectsRes, error) { + ctx = ctxsetters.WithPackageName(ctx, "clusters") + ctx = ctxsetters.WithServiceName(ctx, "Clusters") + ctx = ctxsetters.WithMethodName(ctx, "GetReconciledObjects") + caller := c.callGetReconciledObjects + if c.interceptor != nil { + caller = func(ctx context.Context, req *GetReconciledObjectsReq) (*GetReconciledObjectsRes, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*GetReconciledObjectsReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*GetReconciledObjectsReq) when calling interceptor") + } + return c.callGetReconciledObjects(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*GetReconciledObjectsRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*GetReconciledObjectsRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *clustersProtobufClient) callGetReconciledObjects(ctx context.Context, in *GetReconciledObjectsReq) (*GetReconciledObjectsRes, error) { + out := new(GetReconciledObjectsRes) + ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[9], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + +func (c *clustersProtobufClient) GetChildObjects(ctx context.Context, in *GetChildObjectsReq) (*GetChildObjectsRes, error) { + ctx = ctxsetters.WithPackageName(ctx, "clusters") + ctx = ctxsetters.WithServiceName(ctx, "Clusters") + ctx = ctxsetters.WithMethodName(ctx, "GetChildObjects") + caller := c.callGetChildObjects + if c.interceptor != nil { + caller = func(ctx context.Context, req *GetChildObjectsReq) (*GetChildObjectsRes, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*GetChildObjectsReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*GetChildObjectsReq) when calling interceptor") + } + return c.callGetChildObjects(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*GetChildObjectsRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*GetChildObjectsRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *clustersProtobufClient) callGetChildObjects(ctx context.Context, in *GetChildObjectsReq) (*GetChildObjectsRes, error) { + out := new(GetChildObjectsRes) + ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[10], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + // ==================== // Clusters JSON Client // ==================== type clustersJSONClient struct { client HTTPClient - urls [9]string + urls [11]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -545,7 +643,7 @@ func NewClustersJSONClient(baseURL string, client HTTPClient, opts ...twirp.Clie // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(clientOpts.PathPrefix(), "clusters", "Clusters") - urls := [9]string{ + urls := [11]string{ serviceURL + "ListContexts", serviceURL + "ListNamespacesForContext", serviceURL + "ListKustomizations", @@ -555,6 +653,8 @@ func NewClustersJSONClient(baseURL string, client HTTPClient, opts ...twirp.Clie serviceURL + "ListEvents", serviceURL + "SyncSource", serviceURL + "SyncHelmRelease", + serviceURL + "GetReconciledObjects", + serviceURL + "GetChildObjects", } return &clustersJSONClient{ @@ -979,6 +1079,98 @@ func (c *clustersJSONClient) callSyncHelmRelease(ctx context.Context, in *SyncHe return out, nil } +func (c *clustersJSONClient) GetReconciledObjects(ctx context.Context, in *GetReconciledObjectsReq) (*GetReconciledObjectsRes, error) { + ctx = ctxsetters.WithPackageName(ctx, "clusters") + ctx = ctxsetters.WithServiceName(ctx, "Clusters") + ctx = ctxsetters.WithMethodName(ctx, "GetReconciledObjects") + caller := c.callGetReconciledObjects + if c.interceptor != nil { + caller = func(ctx context.Context, req *GetReconciledObjectsReq) (*GetReconciledObjectsRes, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*GetReconciledObjectsReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*GetReconciledObjectsReq) when calling interceptor") + } + return c.callGetReconciledObjects(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*GetReconciledObjectsRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*GetReconciledObjectsRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *clustersJSONClient) callGetReconciledObjects(ctx context.Context, in *GetReconciledObjectsReq) (*GetReconciledObjectsRes, error) { + out := new(GetReconciledObjectsRes) + ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[9], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + +func (c *clustersJSONClient) GetChildObjects(ctx context.Context, in *GetChildObjectsReq) (*GetChildObjectsRes, error) { + ctx = ctxsetters.WithPackageName(ctx, "clusters") + ctx = ctxsetters.WithServiceName(ctx, "Clusters") + ctx = ctxsetters.WithMethodName(ctx, "GetChildObjects") + caller := c.callGetChildObjects + if c.interceptor != nil { + caller = func(ctx context.Context, req *GetChildObjectsReq) (*GetChildObjectsRes, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*GetChildObjectsReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*GetChildObjectsReq) when calling interceptor") + } + return c.callGetChildObjects(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*GetChildObjectsRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*GetChildObjectsRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *clustersJSONClient) callGetChildObjects(ctx context.Context, in *GetChildObjectsReq) (*GetChildObjectsRes, error) { + out := new(GetChildObjectsRes) + ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[10], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + // ======================= // Clusters Server Handler // ======================= @@ -1090,6 +1282,12 @@ func (s *clustersServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) case "SyncHelmRelease": s.serveSyncHelmRelease(ctx, resp, req) return + case "GetReconciledObjects": + s.serveGetReconciledObjects(ctx, resp, req) + return + case "GetChildObjects": + s.serveGetChildObjects(ctx, resp, req) + return default: msg := fmt.Sprintf("no handler for path %q", req.URL.Path) s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) @@ -2672,6 +2870,356 @@ func (s *clustersServer) serveSyncHelmReleaseProtobuf(ctx context.Context, resp callResponseSent(ctx, s.hooks) } +func (s *clustersServer) serveGetReconciledObjects(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + header := req.Header.Get("Content-Type") + i := strings.Index(header, ";") + if i == -1 { + i = len(header) + } + switch strings.TrimSpace(strings.ToLower(header[:i])) { + case "application/json": + s.serveGetReconciledObjectsJSON(ctx, resp, req) + case "application/protobuf": + s.serveGetReconciledObjectsProtobuf(ctx, resp, req) + default: + msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) + twerr := badRouteError(msg, req.Method, req.URL.Path) + s.writeError(ctx, resp, twerr) + } +} + +func (s *clustersServer) serveGetReconciledObjectsJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "GetReconciledObjects") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + reqContent := new(GetReconciledObjectsReq) + unmarshaler := jsonpb.Unmarshaler{AllowUnknownFields: true} + if err = unmarshaler.Unmarshal(req.Body, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the json request could not be decoded")) + return + } + + handler := s.Clusters.GetReconciledObjects + if s.interceptor != nil { + handler = func(ctx context.Context, req *GetReconciledObjectsReq) (*GetReconciledObjectsRes, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*GetReconciledObjectsReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*GetReconciledObjectsReq) when calling interceptor") + } + return s.Clusters.GetReconciledObjects(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*GetReconciledObjectsRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*GetReconciledObjectsRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *GetReconciledObjectsRes + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *GetReconciledObjectsRes and nil error while calling GetReconciledObjects. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + var buf bytes.Buffer + marshaler := &jsonpb.Marshaler{OrigName: true, EmitDefaults: !s.jsonSkipDefaults} + if err = marshaler.Marshal(&buf, respContent); err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + respBytes := buf.Bytes() + resp.Header().Set("Content-Type", "application/json") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *clustersServer) serveGetReconciledObjectsProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "GetReconciledObjects") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + buf, err := ioutil.ReadAll(req.Body) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to read request body")) + return + } + reqContent := new(GetReconciledObjectsReq) + if err = proto.Unmarshal(buf, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) + return + } + + handler := s.Clusters.GetReconciledObjects + if s.interceptor != nil { + handler = func(ctx context.Context, req *GetReconciledObjectsReq) (*GetReconciledObjectsRes, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*GetReconciledObjectsReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*GetReconciledObjectsReq) when calling interceptor") + } + return s.Clusters.GetReconciledObjects(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*GetReconciledObjectsRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*GetReconciledObjectsRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *GetReconciledObjectsRes + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *GetReconciledObjectsRes and nil error while calling GetReconciledObjects. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + respBytes, err := proto.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/protobuf") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *clustersServer) serveGetChildObjects(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + header := req.Header.Get("Content-Type") + i := strings.Index(header, ";") + if i == -1 { + i = len(header) + } + switch strings.TrimSpace(strings.ToLower(header[:i])) { + case "application/json": + s.serveGetChildObjectsJSON(ctx, resp, req) + case "application/protobuf": + s.serveGetChildObjectsProtobuf(ctx, resp, req) + default: + msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) + twerr := badRouteError(msg, req.Method, req.URL.Path) + s.writeError(ctx, resp, twerr) + } +} + +func (s *clustersServer) serveGetChildObjectsJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "GetChildObjects") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + reqContent := new(GetChildObjectsReq) + unmarshaler := jsonpb.Unmarshaler{AllowUnknownFields: true} + if err = unmarshaler.Unmarshal(req.Body, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the json request could not be decoded")) + return + } + + handler := s.Clusters.GetChildObjects + if s.interceptor != nil { + handler = func(ctx context.Context, req *GetChildObjectsReq) (*GetChildObjectsRes, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*GetChildObjectsReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*GetChildObjectsReq) when calling interceptor") + } + return s.Clusters.GetChildObjects(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*GetChildObjectsRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*GetChildObjectsRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *GetChildObjectsRes + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *GetChildObjectsRes and nil error while calling GetChildObjects. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + var buf bytes.Buffer + marshaler := &jsonpb.Marshaler{OrigName: true, EmitDefaults: !s.jsonSkipDefaults} + if err = marshaler.Marshal(&buf, respContent); err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + respBytes := buf.Bytes() + resp.Header().Set("Content-Type", "application/json") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *clustersServer) serveGetChildObjectsProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "GetChildObjects") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + buf, err := ioutil.ReadAll(req.Body) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to read request body")) + return + } + reqContent := new(GetChildObjectsReq) + if err = proto.Unmarshal(buf, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) + return + } + + handler := s.Clusters.GetChildObjects + if s.interceptor != nil { + handler = func(ctx context.Context, req *GetChildObjectsReq) (*GetChildObjectsRes, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*GetChildObjectsReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*GetChildObjectsReq) when calling interceptor") + } + return s.Clusters.GetChildObjects(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*GetChildObjectsRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*GetChildObjectsRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *GetChildObjectsRes + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *GetChildObjectsRes and nil error while calling GetChildObjects. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + respBytes, err := proto.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/protobuf") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + func (s *clustersServer) ServiceDescriptor() ([]byte, int) { return twirpFileDescriptor0, 0 } @@ -3234,97 +3782,115 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error) } var twirpFileDescriptor0 = []byte{ - // 1463 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdd, 0x72, 0xdc, 0xc4, - 0x12, 0x3e, 0xeb, 0xfd, 0xd3, 0xf6, 0x7a, 0xed, 0x75, 0xc7, 0x49, 0x94, 0x3d, 0x4e, 0xe2, 0x52, - 0x9d, 0x03, 0x0b, 0x15, 0x9c, 0x94, 0x53, 0x81, 0x00, 0x09, 0x29, 0xc7, 0x81, 0x50, 0x15, 0x12, - 0x82, 0x92, 0x10, 0x8a, 0x1b, 0x4a, 0xd1, 0x8e, 0xbd, 0x2a, 0xaf, 0x7e, 0x32, 0x33, 0xeb, 0x60, - 0x2e, 0xb8, 0xe1, 0x82, 0x2a, 0x8a, 0x3b, 0x5e, 0x81, 0xe2, 0x01, 0x78, 0x0d, 0x1e, 0x84, 0xd7, - 0xa0, 0xe6, 0x47, 0xd2, 0x48, 0xbb, 0x5a, 0x5c, 0xae, 0xbd, 0x53, 0x7f, 0xdd, 0x3d, 0xea, 0xee, - 0xf9, 0xba, 0x67, 0x24, 0xb8, 0x9a, 0x1c, 0x1d, 0x5e, 0xa7, 0x89, 0x7f, 0xdd, 0x9f, 0x4c, 0x19, - 0x27, 0x94, 0x65, 0x0f, 0x3b, 0x09, 0x8d, 0x79, 0x8c, 0x56, 0x2a, 0x3b, 0x97, 0xa1, 0xbd, 0x1f, - 0x47, 0x9c, 0x7c, 0xcf, 0x11, 0xa1, 0x11, 0x79, 0x21, 0xb1, 0x6b, 0xdb, 0xb5, 0x61, 0xc7, 0x95, - 0xcf, 0xce, 0x06, 0xac, 0x7f, 0x11, 0x30, 0xae, 0x4d, 0x98, 0x4b, 0x5e, 0x3b, 0xe3, 0x32, 0xc4, - 0xf0, 0x2d, 0x58, 0xf3, 0xa7, 0x94, 0x92, 0x28, 0x45, 0xf5, 0x1a, 0x25, 0x14, 0xdf, 0x03, 0xcb, - 0xd7, 0x6e, 0xf6, 0xca, 0x76, 0x7d, 0xd8, 0xdd, 0xdd, 0xd8, 0xc9, 0x22, 0xd3, 0x46, 0x6e, 0x66, - 0xe2, 0xdc, 0x83, 0xff, 0x8a, 0x37, 0x3d, 0xf1, 0x42, 0xc2, 0x12, 0xcf, 0x27, 0xec, 0xb3, 0x98, - 0xa6, 0x56, 0xe4, 0x35, 0x6e, 0x43, 0x57, 0x9b, 0x3e, 0xc9, 0xc3, 0x36, 0x21, 0xe7, 0xee, 0xa2, - 0x05, 0x18, 0x5e, 0x01, 0x88, 0x32, 0x95, 0x5d, 0xdb, 0xae, 0x0f, 0x3b, 0xae, 0x81, 0x38, 0x3f, - 0xd7, 0xa0, 0xb3, 0x1f, 0x47, 0xa3, 0x80, 0x07, 0x71, 0x24, 0xca, 0xc3, 0x4f, 0x92, 0xac, 0x3c, - 0xe2, 0x19, 0x2f, 0x40, 0x8b, 0x71, 0x8f, 0x4f, 0x45, 0x3a, 0x02, 0xd5, 0x92, 0xc0, 0x29, 0xf1, - 0x58, 0x1c, 0xd9, 0x75, 0x85, 0x2b, 0x09, 0x6d, 0x68, 0x87, 0x84, 0x31, 0xef, 0x90, 0xd8, 0x0d, - 0xa9, 0x48, 0x45, 0xdc, 0x82, 0x0e, 0x0f, 0x42, 0xc2, 0xb8, 0x17, 0x26, 0x76, 0x53, 0xea, 0x72, - 0xc0, 0xf9, 0xad, 0x0e, 0xbd, 0x47, 0x53, 0xc6, 0xe3, 0x30, 0xf8, 0xc1, 0x4b, 0xa3, 0x29, 0x6f, - 0x96, 0x58, 0x23, 0x8b, 0x5e, 0x07, 0x94, 0x03, 0x38, 0x84, 0x75, 0xee, 0xd1, 0x43, 0x92, 0x97, - 0x43, 0x07, 0x57, 0x86, 0xc5, 0xda, 0x89, 0xc7, 0xc7, 0x3a, 0x44, 0xf9, 0x2c, 0xd6, 0x66, 0xf1, - 0x94, 0xfa, 0xc4, 0x25, 0x07, 0x69, 0x7c, 0x19, 0x80, 0x37, 0x01, 0xfc, 0xb4, 0x50, 0xcc, 0x6e, - 0xc9, 0xad, 0x3d, 0x57, 0xd8, 0x5a, 0xa5, 0x73, 0x0d, 0x33, 0x1c, 0x80, 0x15, 0x44, 0x9c, 0xd0, - 0x63, 0x6f, 0x62, 0xb7, 0xe5, 0x8a, 0x99, 0x8c, 0x9b, 0xd0, 0x4c, 0xe8, 0x34, 0x22, 0xb6, 0xb5, - 0x5d, 0x1b, 0x5a, 0xae, 0x12, 0x70, 0x07, 0x90, 0x12, 0x3f, 0x8e, 0xfc, 0x60, 0x42, 0x5c, 0xf2, - 0x7a, 0x4a, 0x18, 0xdf, 0xe3, 0x76, 0x47, 0xfa, 0xce, 0xd1, 0x08, 0x86, 0x64, 0xe8, 0x1e, 0xb7, - 0x41, 0x31, 0xc4, 0x80, 0xf0, 0x63, 0xe8, 0x65, 0x59, 0x3c, 0x0a, 0xa2, 0x91, 0xdd, 0xdd, 0xae, - 0x0d, 0xd7, 0x76, 0xcf, 0xe7, 0xb1, 0x3f, 0x93, 0xea, 0x9d, 0xe7, 0x27, 0x09, 0x71, 0x8b, 0xb6, - 0xce, 0x4b, 0x38, 0x2f, 0xe8, 0x55, 0xd8, 0x18, 0x76, 0x2a, 0x66, 0x2e, 0xde, 0x2a, 0xe7, 0x9b, - 0xf9, 0x0b, 0x33, 0xbc, 0x07, 0x6b, 0x47, 0x05, 0x50, 0xb2, 0xb6, 0xbb, 0x7b, 0x31, 0x8f, 0xb7, - 0xe0, 0xe4, 0x96, 0xcc, 0x9d, 0x09, 0xf4, 0x1f, 0x06, 0xdc, 0x25, 0x49, 0xcc, 0x02, 0x1e, 0xd3, - 0x13, 0xb1, 0x79, 0x17, 0xa0, 0xf5, 0x8a, 0x7a, 0x91, 0x3f, 0xd6, 0x81, 0x6a, 0x09, 0xfb, 0x50, - 0xe7, 0xde, 0xa1, 0x8e, 0x4e, 0x3c, 0x4a, 0xba, 0x93, 0xf0, 0x98, 0xd0, 0x94, 0xd6, 0x4a, 0x12, - 0xb8, 0x1f, 0x87, 0x61, 0xc0, 0x35, 0x65, 0xb4, 0xe4, 0xfc, 0x5a, 0x03, 0x6b, 0x8f, 0xf2, 0xe0, - 0xc0, 0xf3, 0xb9, 0xd8, 0x6e, 0x7f, 0x4c, 0xfc, 0x23, 0x36, 0x0d, 0xf5, 0x8b, 0x32, 0x19, 0x1d, - 0x58, 0x9d, 0x78, 0x8c, 0x4f, 0x93, 0x91, 0xc7, 0x89, 0xc7, 0xe5, 0x3b, 0x9b, 0x6e, 0x01, 0xcb, - 0x58, 0x59, 0x37, 0x58, 0x39, 0x00, 0x8b, 0x92, 0xe3, 0x80, 0x05, 0x71, 0xa4, 0x5f, 0x9d, 0xc9, - 0x22, 0xfc, 0x29, 0x9d, 0x68, 0xae, 0x8a, 0x47, 0xe7, 0x97, 0x06, 0xb4, 0xd4, 0x76, 0xce, 0x6d, - 0x1f, 0xed, 0xb0, 0x92, 0x39, 0xe0, 0x6d, 0xe8, 0x50, 0x72, 0x40, 0x28, 0x89, 0x74, 0xb3, 0x74, - 0x77, 0x07, 0x79, 0xa5, 0xcb, 0x85, 0x74, 0x73, 0x63, 0x7c, 0x47, 0x0f, 0x8b, 0xc6, 0x22, 0x3a, - 0xa9, 0x19, 0x32, 0x00, 0x2b, 0xa1, 0xf1, 0x71, 0x30, 0x22, 0x54, 0x07, 0x9b, 0xc9, 0x62, 0x42, - 0xbd, 0x9a, 0xfa, 0x47, 0x84, 0xcb, 0x60, 0x5b, 0x52, 0x6b, 0x20, 0x6a, 0xce, 0x1c, 0x8a, 0xec, - 0xdb, 0xe9, 0x9c, 0x11, 0x52, 0x91, 0x5e, 0x56, 0x79, 0x12, 0x5c, 0x83, 0x8d, 0xc3, 0x80, 0x07, - 0x61, 0x32, 0x21, 0x21, 0x89, 0xb8, 0xa4, 0x86, 0xee, 0xa2, 0x59, 0x85, 0x98, 0x59, 0x62, 0x10, - 0xc5, 0xd3, 0xb4, 0x81, 0x52, 0x11, 0xff, 0x07, 0x3d, 0x46, 0x7c, 0x4a, 0xb8, 0x4b, 0x0e, 0x24, - 0xd1, 0xbb, 0x52, 0x5f, 0x04, 0x4b, 0xb3, 0x61, 0xf5, 0x74, 0xb3, 0x61, 0x07, 0x2c, 0x4f, 0x13, - 0xc7, 0xee, 0xc9, 0xc2, 0x63, 0xee, 0x92, 0x52, 0xca, 0xcd, 0x6c, 0x9c, 0x1b, 0xd0, 0x10, 0x25, - 0xc5, 0x36, 0xd4, 0x1f, 0x06, 0xbc, 0xff, 0x1f, 0x04, 0x68, 0xdd, 0x97, 0x75, 0xea, 0xd7, 0xd0, - 0x82, 0xc6, 0xe7, 0x64, 0x12, 0xf6, 0x57, 0xb0, 0x03, 0xcd, 0xfd, 0xb1, 0x47, 0x79, 0xbf, 0x2e, - 0x86, 0xfb, 0x9a, 0x68, 0x32, 0xb5, 0x21, 0xcb, 0x68, 0x5b, 0xbc, 0x05, 0xa0, 0x06, 0x84, 0x08, - 0x45, 0xf2, 0xa5, 0x72, 0xeb, 0x0d, 0x43, 0xe7, 0x4e, 0x29, 0x10, 0x86, 0xef, 0x42, 0x5b, 0xe9, - 0xd3, 0xfe, 0xee, 0x97, 0x57, 0x71, 0x53, 0x03, 0xe7, 0x8f, 0x1a, 0xf4, 0x9e, 0x9d, 0x44, 0xbe, - 0xc6, 0x97, 0x90, 0xc6, 0x95, 0x34, 0x0d, 0xe9, 0xae, 0xda, 0xcd, 0x40, 0x4a, 0x69, 0x36, 0x4e, - 0x9b, 0xe6, 0x87, 0xc5, 0x38, 0x19, 0x0e, 0xa1, 0xa5, 0xd4, 0x32, 0xc4, 0x79, 0x49, 0x6a, 0xbd, - 0xf3, 0x7b, 0x0d, 0x36, 0x85, 0x6f, 0x71, 0xb6, 0x2d, 0x21, 0xd5, 0x6b, 0xb0, 0x51, 0x18, 0x90, - 0x46, 0xc6, 0xb3, 0x0a, 0x51, 0x98, 0x37, 0x01, 0x1f, 0xab, 0xe0, 0x64, 0xe2, 0x96, 0x6b, 0x20, - 0xce, 0x8b, 0xb9, 0x51, 0x32, 0xbc, 0x0b, 0xbd, 0xc2, 0x62, 0x3a, 0xdf, 0xca, 0xa1, 0x5d, 0xb4, - 0x76, 0xfe, 0x5c, 0x81, 0xae, 0xe0, 0xaf, 0x4b, 0x26, 0xc4, 0x63, 0xe4, 0x0c, 0x47, 0xbf, 0x79, - 0xd2, 0xd6, 0x4b, 0x27, 0xed, 0x16, 0x74, 0x7c, 0xd1, 0x12, 0x32, 0x75, 0x7d, 0xb0, 0x67, 0x80, - 0x68, 0xfe, 0x63, 0x42, 0xe5, 0x7c, 0x55, 0xd3, 0x27, 0x15, 0x73, 0x96, 0xc8, 0x63, 0xb3, 0x6d, - 0xb2, 0x44, 0x20, 0x25, 0x16, 0x59, 0x33, 0x2c, 0x1a, 0xc2, 0x7a, 0x2e, 0xa9, 0xb8, 0xd5, 0x08, - 0x2a, 0xc3, 0x67, 0x1a, 0x20, 0xce, 0x0b, 0x38, 0x27, 0x9a, 0xca, 0xa8, 0xdb, 0x52, 0x4e, 0xe6, - 0xaf, 0xe6, 0x2d, 0xcb, 0xf0, 0x23, 0xe8, 0x8d, 0xc9, 0x24, 0xfc, 0x8e, 0x6a, 0x4c, 0xb7, 0xad, - 0xd1, 0x15, 0x86, 0x87, 0xbb, 0x3a, 0x36, 0xdc, 0x9d, 0x1f, 0x01, 0x05, 0x6b, 0x4c, 0x83, 0x25, - 0x30, 0x7b, 0x08, 0xeb, 0xc6, 0x5b, 0x0c, 0x5e, 0x97, 0x61, 0xe7, 0xf1, 0x9c, 0xf7, 0x33, 0xfc, - 0x00, 0xba, 0xc2, 0x50, 0x27, 0xa4, 0x19, 0x5b, 0x91, 0x8f, 0x69, 0xe9, 0xdc, 0x92, 0x77, 0x66, - 0xee, 0x05, 0x11, 0xa1, 0x73, 0xa9, 0xba, 0x09, 0xcd, 0x20, 0x14, 0x37, 0x60, 0x15, 0xb3, 0x12, - 0x9c, 0xfb, 0xd0, 0x7d, 0x1a, 0x8f, 0x9e, 0x93, 0x30, 0x99, 0x78, 0x3c, 0xdd, 0x73, 0xb5, 0x4a, - 0x5a, 0xcd, 0xe2, 0x9e, 0x2b, 0x9d, 0x6b, 0x98, 0x39, 0x7f, 0xd7, 0xc0, 0x7a, 0x19, 0xd3, 0xa3, - 0x49, 0xec, 0x8d, 0xce, 0xd0, 0x25, 0xbb, 0xb0, 0x79, 0x54, 0x6c, 0xdd, 0x03, 0xa3, 0x6e, 0x73, - 0x75, 0x78, 0x07, 0x2e, 0xcd, 0xc3, 0xd5, 0x1b, 0xd4, 0x8d, 0xa4, 0xda, 0x40, 0x14, 0x39, 0xc9, - 0x93, 0x96, 0xdd, 0x57, 0x28, 0xb2, 0x51, 0x11, 0xd7, 0xb4, 0x74, 0x5c, 0xe8, 0x0b, 0x1a, 0xa6, - 0xc9, 0x2e, 0x85, 0xda, 0x0f, 0x66, 0xd6, 0x64, 0x78, 0x03, 0x3a, 0x6f, 0x52, 0x59, 0xef, 0x82, - 0x71, 0x0e, 0xa7, 0xa6, 0x6e, 0x6e, 0x24, 0x8e, 0xa3, 0xad, 0x99, 0xbb, 0xeb, 0xfe, 0x38, 0x98, - 0x8c, 0x28, 0x39, 0xe5, 0xc8, 0x9e, 0x3b, 0x94, 0x57, 0xaa, 0x86, 0xf2, 0xfb, 0x70, 0xe1, 0x51, - 0x19, 0x34, 0xbf, 0x6e, 0x2a, 0xb4, 0xce, 0xd3, 0x85, 0x71, 0x9e, 0x25, 0xf5, 0x9f, 0x6a, 0xd0, - 0xfc, 0xf4, 0x98, 0x44, 0xbc, 0xea, 0x53, 0x51, 0x7f, 0x12, 0xae, 0x54, 0x7d, 0x12, 0xd6, 0x17, - 0x7c, 0x12, 0x36, 0xe4, 0x8d, 0x38, 0x07, 0xe4, 0x5d, 0x5c, 0x1d, 0x44, 0x4d, 0x7d, 0x17, 0x57, - 0x87, 0xd0, 0x97, 0xd0, 0x13, 0x79, 0xc9, 0x40, 0x96, 0xc2, 0x8b, 0xdb, 0xc5, 0x05, 0x19, 0xbe, - 0x0d, 0x2d, 0x22, 0x05, 0x5d, 0x96, 0xf5, 0xbc, 0x2c, 0xd2, 0xc8, 0xd5, 0xea, 0xdd, 0xbf, 0x9a, - 0x60, 0xed, 0x6b, 0x15, 0x3e, 0x80, 0x55, 0xf3, 0xb7, 0x01, 0x5e, 0xca, 0xbd, 0x4a, 0x7f, 0x18, - 0x06, 0x95, 0x2a, 0x86, 0x63, 0xb0, 0xab, 0xbe, 0xe8, 0xf1, 0xff, 0x45, 0xb7, 0x8a, 0xdf, 0x06, - 0x83, 0x53, 0x99, 0x31, 0xfc, 0x1a, 0x70, 0xf6, 0x1b, 0x0c, 0xaf, 0x16, 0x9d, 0x67, 0x3e, 0xfd, - 0x06, 0xff, 0x62, 0xc0, 0x70, 0x0f, 0xba, 0xc6, 0x6d, 0x0f, 0xed, 0xa2, 0x7d, 0x7e, 0x1b, 0x1d, - 0x54, 0x69, 0x18, 0x3e, 0x83, 0x8d, 0x99, 0x7b, 0x06, 0x5e, 0x31, 0x6e, 0x4f, 0x73, 0xae, 0x4a, - 0x83, 0xc5, 0x7a, 0x86, 0x4f, 0x55, 0xfb, 0x9b, 0x27, 0x1b, 0x5e, 0x2e, 0x86, 0x50, 0x3a, 0x4c, - 0x07, 0x0b, 0xd5, 0x0c, 0x3f, 0x01, 0xc8, 0x89, 0x83, 0x17, 0x8b, 0xc6, 0x19, 0x3f, 0x07, 0x15, - 0x0a, 0xe9, 0x9f, 0x5f, 0x18, 0x4d, 0xff, 0xc2, 0x75, 0x77, 0x50, 0xa1, 0x60, 0xf8, 0x18, 0xd6, - 0x4b, 0x07, 0x1b, 0x6e, 0x15, 0x6d, 0x8b, 0x67, 0xee, 0x60, 0x91, 0x96, 0xdd, 0xc7, 0x6f, 0xfb, - 0xe5, 0xdf, 0x6a, 0xaf, 0x5a, 0xf2, 0x77, 0xda, 0xcd, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc8, - 0xd2, 0xc8, 0x01, 0x71, 0x13, 0x00, 0x00, + // 1754 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xdd, 0x72, 0x1b, 0x49, + 0x15, 0x46, 0xd6, 0xff, 0x91, 0x65, 0xcb, 0x27, 0x4e, 0x32, 0x2b, 0xbc, 0x59, 0xd3, 0xc5, 0x8f, + 0xa0, 0x16, 0x6f, 0xca, 0x4b, 0x96, 0x05, 0x76, 0xd9, 0x72, 0xbc, 0xbb, 0xa6, 0x2a, 0xfb, 0x93, + 0x8c, 0xe3, 0x84, 0xa2, 0xa8, 0x4a, 0x8d, 0x47, 0x6d, 0x69, 0x90, 0xe6, 0x27, 0xdd, 0x2d, 0x07, + 0x73, 0xc1, 0x0d, 0x17, 0x54, 0x51, 0x3c, 0x02, 0x97, 0x14, 0x0f, 0x90, 0x2b, 0xde, 0x83, 0x87, + 0xe0, 0x15, 0xb8, 0xa4, 0xba, 0xa7, 0x67, 0xa6, 0x67, 0x34, 0xa3, 0x38, 0x2e, 0xdd, 0xe9, 0xfc, + 0x75, 0x9f, 0x73, 0xfa, 0x3b, 0x67, 0x4e, 0xb7, 0xe0, 0xbd, 0x68, 0x36, 0xf9, 0x80, 0x45, 0xee, + 0x07, 0xee, 0x7c, 0xc1, 0x05, 0x65, 0x3c, 0xfd, 0x71, 0x10, 0xb1, 0x50, 0x84, 0xd8, 0x49, 0x68, + 0xf2, 0x2e, 0xb4, 0x8f, 0xc3, 0x40, 0xd0, 0x3f, 0x0a, 0x44, 0x68, 0x04, 0x8e, 0x4f, 0xad, 0xda, + 0x7e, 0x6d, 0xd4, 0xb5, 0xd5, 0x6f, 0xb2, 0x03, 0xdb, 0x5f, 0x79, 0x5c, 0x68, 0x15, 0x6e, 0xd3, + 0x97, 0x64, 0x5a, 0x64, 0x71, 0xfc, 0x21, 0x6c, 0xb9, 0x0b, 0xc6, 0x68, 0x90, 0x70, 0xf5, 0x1a, + 0x05, 0x2e, 0xfe, 0x14, 0x3a, 0xae, 0x36, 0xb3, 0x36, 0xf6, 0xeb, 0xa3, 0xde, 0xe1, 0xce, 0x41, + 0xea, 0x99, 0x56, 0xb2, 0x53, 0x15, 0xf2, 0x19, 0x7c, 0x57, 0xee, 0xf4, 0x8d, 0xe3, 0x53, 0x1e, + 0x39, 0x2e, 0xe5, 0x5f, 0x86, 0x2c, 0xd1, 0xa2, 0x2f, 0x71, 0x1f, 0x7a, 0x5a, 0xf5, 0x9b, 0xcc, + 0x6d, 0x93, 0x45, 0x3e, 0x5d, 0xb5, 0x00, 0xc7, 0x7b, 0x00, 0x41, 0x2a, 0xb2, 0x6a, 0xfb, 0xf5, + 0x51, 0xd7, 0x36, 0x38, 0xe4, 0xaf, 0x35, 0xe8, 0x1e, 0x87, 0xc1, 0xd8, 0x13, 0x5e, 0x18, 0xc8, + 0xf4, 0x88, 0xab, 0x28, 0x4d, 0x8f, 0xfc, 0x8d, 0x77, 0xa0, 0xc5, 0x85, 0x23, 0x16, 0x32, 0x1c, + 0xc9, 0xd5, 0x94, 0xe4, 0x33, 0xea, 0xf0, 0x30, 0xb0, 0xea, 0x31, 0x3f, 0xa6, 0xd0, 0x82, 0xb6, + 0x4f, 0x39, 0x77, 0x26, 0xd4, 0x6a, 0x28, 0x41, 0x42, 0xe2, 0x1e, 0x74, 0x85, 0xe7, 0x53, 0x2e, + 0x1c, 0x3f, 0xb2, 0x9a, 0x4a, 0x96, 0x31, 0xc8, 0x33, 0x18, 0x9c, 0xb0, 0x70, 0x11, 0x3d, 0xa3, + 0x8c, 0x7b, 0x61, 0xf0, 0xc8, 0x0b, 0xc6, 0xb8, 0x0b, 0xcd, 0x89, 0xe4, 0x69, 0x87, 0x62, 0x42, + 0x7a, 0x39, 0xf3, 0x82, 0xb1, 0xf6, 0x47, 0xfd, 0x96, 0xbb, 0x5e, 0xc6, 0x86, 0xda, 0x9d, 0x84, + 0x24, 0x2f, 0xa0, 0x7f, 0x1a, 0x38, 0x11, 0x9f, 0x86, 0xe2, 0x8b, 0x40, 0xb0, 0x2b, 0xe9, 0x46, + 0x9a, 0x00, 0xbd, 0x70, 0xc6, 0xc0, 0xfb, 0xd0, 0x94, 0x0b, 0x26, 0x87, 0x37, 0xcc, 0x0e, 0xaf, + 0xe8, 0x9d, 0x1d, 0x2b, 0x92, 0xd7, 0x0d, 0xe8, 0x3f, 0x5a, 0x70, 0x11, 0xfa, 0xde, 0x9f, 0x9c, + 0x24, 0x8d, 0x45, 0x94, 0xe5, 0x77, 0xdd, 0x28, 0xee, 0x3a, 0x82, 0x6d, 0xe1, 0xb0, 0x09, 0xcd, + 0xce, 0x51, 0x87, 0x51, 0x64, 0xcb, 0xb5, 0x23, 0x47, 0x4c, 0x75, 0x6e, 0xd5, 0x6f, 0xb9, 0x36, + 0x0f, 0x17, 0xcc, 0xa5, 0x36, 0xbd, 0x48, 0x12, 0x9b, 0x32, 0xf0, 0x43, 0x00, 0x37, 0x39, 0x61, + 0x6e, 0xb5, 0x54, 0x58, 0xb7, 0x72, 0x98, 0x8c, 0x65, 0xb6, 0xa1, 0x86, 0x43, 0xe8, 0x78, 0x81, + 0xa0, 0xec, 0xd2, 0x99, 0x5b, 0x6d, 0xb5, 0x62, 0x4a, 0xcb, 0x53, 0x89, 0xd8, 0x22, 0xa0, 0x56, + 0x67, 0xbf, 0x36, 0xea, 0xd8, 0x31, 0x81, 0x07, 0x80, 0x8c, 0xba, 0x61, 0xe0, 0x7a, 0x73, 0x6a, + 0xd3, 0x97, 0x0b, 0xca, 0xc5, 0x91, 0xb0, 0xba, 0xca, 0xb6, 0x44, 0x22, 0xa1, 0x9d, 0x72, 0x8f, + 0x84, 0x05, 0x31, 0xb4, 0x0d, 0x16, 0xfe, 0x0a, 0xfa, 0x69, 0x14, 0x32, 0xe1, 0x56, 0x6f, 0xbf, + 0x36, 0xda, 0x3a, 0xbc, 0x9d, 0xf9, 0x7e, 0xaa, 0xc4, 0x07, 0x4f, 0xaf, 0x22, 0x6a, 0xe7, 0x75, + 0xf1, 0x01, 0x74, 0xb9, 0x3e, 0x76, 0x6e, 0x6d, 0xaa, 0xa0, 0xef, 0x1a, 0x86, 0x26, 0x22, 0xec, + 0x4c, 0x13, 0xef, 0xc3, 0xad, 0xb9, 0xc3, 0xc5, 0x51, 0x14, 0xcd, 0x3d, 0x3a, 0xb6, 0xe9, 0xa5, + 0xa7, 0x30, 0xd5, 0x57, 0xde, 0x95, 0x89, 0xf0, 0x67, 0x70, 0x5b, 0xb1, 0x85, 0xa0, 0x7e, 0x24, + 0x0c, 0x9b, 0x2d, 0x65, 0x53, 0x2e, 0x24, 0xcf, 0xe1, 0xb6, 0x2c, 0xdb, 0x1c, 0x6e, 0xf8, 0xb5, + 0x2a, 0x7e, 0x35, 0x92, 0xc8, 0x6f, 0xcb, 0x17, 0xe6, 0xf8, 0x19, 0x6c, 0xcd, 0x72, 0x4c, 0xd5, + 0x0d, 0x72, 0x59, 0xc9, 0x19, 0xd9, 0x05, 0x75, 0x32, 0x87, 0xc1, 0x89, 0x27, 0x6c, 0x1a, 0x85, + 0xdc, 0x13, 0x21, 0xbb, 0x92, 0xd8, 0xba, 0x03, 0xad, 0x73, 0xe6, 0x04, 0xee, 0x54, 0x3b, 0xaa, + 0x29, 0x1c, 0x40, 0x5d, 0x38, 0x13, 0xed, 0x9d, 0xfc, 0xa9, 0xda, 0x08, 0xf5, 0x2f, 0x29, 0x4b, + 0xda, 0x45, 0x4c, 0x49, 0xbe, 0x1b, 0xfa, 0xbe, 0x27, 0x34, 0xa2, 0x35, 0x45, 0xfe, 0x5e, 0x83, + 0xce, 0x11, 0x13, 0xde, 0x85, 0xe3, 0x0a, 0x89, 0x46, 0x77, 0x4a, 0xdd, 0x19, 0x5f, 0xf8, 0x7a, + 0xa3, 0x94, 0x46, 0x02, 0x9b, 0x32, 0xc5, 0x8b, 0x68, 0xec, 0x08, 0xea, 0x08, 0xb5, 0x67, 0xd3, + 0xce, 0xf1, 0xd2, 0xa2, 0xa9, 0x1b, 0x45, 0x33, 0x84, 0x0e, 0x4b, 0x8e, 0x2a, 0xde, 0x3a, 0xa5, + 0xa5, 0xfb, 0x0b, 0x36, 0xd7, 0xa5, 0x24, 0x7f, 0x92, 0xbf, 0x35, 0xa0, 0x15, 0xa3, 0xad, 0xb4, + 0xba, 0xb5, 0xc1, 0x46, 0x6a, 0x80, 0x1f, 0x43, 0x97, 0xd1, 0x0b, 0xca, 0x68, 0xa0, 0x6b, 0x39, + 0xdf, 0x4b, 0x0a, 0x89, 0xb4, 0x33, 0x65, 0xfc, 0xb1, 0x6e, 0xc2, 0x8d, 0x55, 0x68, 0x8f, 0x7b, + 0xf3, 0x10, 0x3a, 0x11, 0x0b, 0x2f, 0xbd, 0x31, 0x65, 0xda, 0xd9, 0x94, 0x96, 0x9d, 0xff, 0x7c, + 0xe1, 0xce, 0xa8, 0x50, 0xce, 0xb6, 0x94, 0xd4, 0xe0, 0xc4, 0xfd, 0x7b, 0x22, 0xa3, 0x6f, 0x27, + 0xfd, 0x5b, 0x52, 0x79, 0x78, 0x75, 0x8a, 0x8d, 0xea, 0x7d, 0xd8, 0x99, 0x78, 0xc2, 0xf3, 0xa3, + 0x39, 0xf5, 0x69, 0x20, 0x14, 0x34, 0x74, 0x91, 0x2f, 0x0b, 0x64, 0x57, 0x96, 0x0d, 0x3e, 0x5c, + 0x24, 0xf5, 0x9d, 0x90, 0xf8, 0x7d, 0xe8, 0x73, 0xea, 0x32, 0x2a, 0x6c, 0x7a, 0xa1, 0x80, 0xde, + 0x53, 0xf2, 0x3c, 0xb3, 0xd0, 0xba, 0x36, 0xaf, 0xd7, 0xba, 0x0e, 0xa0, 0xe3, 0x68, 0xe0, 0xa8, + 0xba, 0xed, 0x1d, 0x62, 0x66, 0x92, 0x40, 0xca, 0x4e, 0x75, 0xc8, 0x7d, 0x68, 0xc8, 0x94, 0x62, + 0x1b, 0xea, 0x27, 0x9e, 0x18, 0x7c, 0x07, 0x01, 0x5a, 0x0f, 0x55, 0x9e, 0x06, 0x35, 0xec, 0x40, + 0xe3, 0x37, 0x74, 0xee, 0x0f, 0x36, 0xb0, 0x0b, 0xcd, 0xe3, 0xa9, 0xc3, 0xc4, 0xa0, 0x2e, 0x3f, + 0x9a, 0x5b, 0xb2, 0xc8, 0xe2, 0x03, 0x59, 0x47, 0xd9, 0xe2, 0x03, 0x80, 0xb8, 0x7f, 0x49, 0x57, + 0x14, 0x5e, 0x2a, 0x8f, 0xde, 0x50, 0x24, 0x9f, 0x14, 0x1c, 0xe1, 0xf8, 0x13, 0x68, 0xc7, 0xf2, + 0xa4, 0xbe, 0x07, 0xc5, 0x55, 0xec, 0x44, 0x81, 0xfc, 0xab, 0x06, 0xfd, 0xd3, 0xab, 0xc0, 0xd5, + 0xfc, 0x35, 0x84, 0x71, 0x2f, 0x09, 0x43, 0x99, 0xc7, 0xe5, 0x66, 0x70, 0x0a, 0x61, 0x36, 0xae, + 0x1b, 0xe6, 0x2f, 0xf2, 0x7e, 0x72, 0x1c, 0x41, 0x2b, 0x16, 0x2b, 0x17, 0xcb, 0x82, 0xd4, 0x72, + 0xf2, 0xcf, 0x1a, 0xec, 0x4a, 0xdb, 0x7c, 0x6f, 0x5b, 0x43, 0xa8, 0xef, 0xc3, 0x4e, 0xae, 0x41, + 0x1a, 0x11, 0x2f, 0x0b, 0x64, 0x62, 0x5e, 0x79, 0x62, 0x1a, 0x3b, 0xa7, 0x02, 0xef, 0xd8, 0x06, + 0x87, 0x9c, 0x95, 0x7a, 0xc9, 0xf1, 0x53, 0xe8, 0xe7, 0x16, 0xd3, 0xf1, 0x56, 0x36, 0xed, 0xbc, + 0x36, 0x79, 0xbd, 0x01, 0x3d, 0x89, 0x5f, 0x9b, 0xce, 0xa9, 0xc3, 0xe9, 0x0d, 0x26, 0x13, 0x73, + 0x10, 0xa8, 0x17, 0x06, 0x81, 0x3d, 0xe8, 0xba, 0xb2, 0x24, 0x54, 0xe8, 0x7a, 0xee, 0x48, 0x19, + 0xe6, 0x48, 0xd6, 0xca, 0x8d, 0x64, 0x19, 0x4a, 0xd4, 0x57, 0xbd, 0x6d, 0xa2, 0x44, 0x7d, 0xbb, + 0xf3, 0x28, 0xea, 0x2c, 0xa1, 0x68, 0x04, 0xdb, 0x19, 0x15, 0xfb, 0x1d, 0xb7, 0xa0, 0x22, 0xfb, + 0x46, 0x0d, 0x84, 0x9c, 0xc1, 0x2d, 0x59, 0x54, 0x46, 0xde, 0xd6, 0xf2, 0x65, 0x7e, 0x52, 0xb6, + 0x2c, 0xc7, 0x5f, 0x42, 0x7f, 0x4a, 0xe7, 0xfe, 0x0b, 0xa6, 0x79, 0xba, 0x6c, 0x8d, 0xaa, 0x30, + 0x2c, 0xec, 0xcd, 0xa9, 0x61, 0x4e, 0xfe, 0x0c, 0x28, 0x51, 0x63, 0x2a, 0xac, 0x01, 0xd9, 0x23, + 0xd8, 0x36, 0x76, 0x31, 0x70, 0x5d, 0x64, 0x93, 0xaf, 0x4b, 0xf6, 0xe7, 0xf8, 0x73, 0xe8, 0x49, + 0x45, 0x1d, 0x90, 0x46, 0x6c, 0x45, 0x3c, 0xa6, 0x26, 0x79, 0xa0, 0xee, 0x22, 0xc2, 0xf1, 0x02, + 0xca, 0x4a, 0xa1, 0xba, 0x0b, 0x4d, 0xcf, 0x97, 0x37, 0x8b, 0xd8, 0xe7, 0x98, 0x20, 0x0f, 0xa1, + 0xf7, 0x38, 0x1c, 0x3f, 0xa5, 0x7e, 0x34, 0x77, 0x44, 0x72, 0xe6, 0xf1, 0x2a, 0x49, 0x36, 0xf3, + 0x67, 0x1e, 0xcb, 0x6c, 0x43, 0x8d, 0xfc, 0xb7, 0x06, 0x9d, 0xe7, 0x21, 0x9b, 0xcd, 0x43, 0x67, + 0x7c, 0x83, 0x2a, 0x39, 0x84, 0xdd, 0x59, 0xbe, 0x74, 0x2f, 0x8c, 0xbc, 0x95, 0xca, 0xf0, 0x13, + 0x78, 0xa7, 0x8c, 0x1f, 0xef, 0x10, 0x4f, 0x24, 0xd5, 0x0a, 0x32, 0xc9, 0x51, 0x16, 0xb4, 0xaa, + 0xbe, 0x5c, 0x92, 0x8d, 0x8c, 0xd8, 0xa6, 0x26, 0xb1, 0x61, 0x20, 0x61, 0x98, 0x04, 0xbb, 0x16, + 0x68, 0x7f, 0xbe, 0xb4, 0xa6, 0x9c, 0xa4, 0xbb, 0xaf, 0x12, 0x5a, 0x9f, 0x82, 0xf1, 0x1d, 0x4e, + 0x54, 0xed, 0x4c, 0x49, 0x7e, 0x8e, 0xf6, 0x96, 0x66, 0xd7, 0xe3, 0xa9, 0x37, 0x1f, 0x33, 0x7a, + 0xcd, 0x96, 0x5d, 0xda, 0x94, 0x37, 0xaa, 0x9a, 0xf2, 0x47, 0x70, 0xe7, 0x51, 0x91, 0x69, 0x5e, + 0xbe, 0x2a, 0xa4, 0xe4, 0xf1, 0x4a, 0x3f, 0x6f, 0x12, 0xfa, 0x5f, 0x6a, 0xd0, 0xfc, 0xe2, 0x92, + 0x06, 0xa2, 0xea, 0x0a, 0xae, 0xaf, 0xda, 0x1b, 0x55, 0x57, 0xed, 0xfa, 0x8a, 0xab, 0x76, 0x43, + 0x4d, 0xc4, 0x19, 0x43, 0xcd, 0xe2, 0xf1, 0x87, 0xa8, 0xa9, 0x67, 0xf1, 0xf8, 0x23, 0xf4, 0x2d, + 0xf4, 0x65, 0x5c, 0xca, 0x91, 0xb5, 0xe0, 0xe2, 0xe3, 0xfc, 0x82, 0x1c, 0x7f, 0x04, 0x2d, 0xaa, + 0x08, 0x9d, 0x96, 0xed, 0x2c, 0x2d, 0x4a, 0xc9, 0xd6, 0x62, 0xf2, 0x9f, 0x1a, 0xdc, 0x3d, 0x91, + 0x83, 0xa0, 0xbe, 0x0e, 0x8e, 0xbf, 0x3d, 0xff, 0x03, 0x75, 0xaf, 0xeb, 0xd5, 0x5b, 0xc3, 0x60, + 0xb6, 0x12, 0x06, 0xe5, 0xd2, 0xec, 0xa9, 0xa0, 0x71, 0xdd, 0xa7, 0x82, 0x7f, 0xd7, 0x00, 0xcf, + 0x02, 0x2e, 0xd8, 0xc2, 0x15, 0x0b, 0x96, 0x04, 0x85, 0x5f, 0xc2, 0x60, 0x52, 0xb0, 0x50, 0xde, + 0xae, 0x5e, 0x73, 0xc9, 0x26, 0xed, 0x5b, 0xf5, 0xaa, 0xbe, 0xd5, 0x28, 0xf6, 0x2d, 0x79, 0x6f, + 0xf1, 0xc6, 0xe9, 0x45, 0xc7, 0x1b, 0x1b, 0xcf, 0x3d, 0x2d, 0xf3, 0xb9, 0x87, 0x3c, 0xa9, 0x3a, + 0x0f, 0x8e, 0x1f, 0x41, 0x3b, 0x8c, 0x29, 0x7d, 0xaa, 0x7b, 0x99, 0xd7, 0xcb, 0xd1, 0xda, 0x89, + 0x32, 0xf9, 0x47, 0x0d, 0xf0, 0x84, 0x0a, 0x55, 0x39, 0x6f, 0x75, 0xbc, 0xeb, 0xca, 0xd7, 0x1e, + 0x74, 0x23, 0x87, 0xd1, 0x40, 0x9c, 0x79, 0x63, 0x9d, 0xb4, 0x8c, 0x41, 0xbe, 0x2a, 0xf1, 0xee, + 0xc6, 0xc1, 0x1e, 0xfe, 0xaf, 0x05, 0x9d, 0x63, 0xad, 0x88, 0x9f, 0xc3, 0xa6, 0xf9, 0xbe, 0x88, + 0xef, 0x64, 0x6b, 0x14, 0x9e, 0x22, 0x87, 0x95, 0x22, 0x8e, 0x53, 0xb0, 0xaa, 0x9e, 0xfe, 0xf0, + 0x07, 0x79, 0xb3, 0x8a, 0xf7, 0xc5, 0xe1, 0xb5, 0xd4, 0x38, 0x3e, 0x03, 0x5c, 0x7e, 0x54, 0xc0, + 0xf7, 0xf2, 0xc6, 0x4b, 0x6f, 0x19, 0xc3, 0x37, 0x28, 0x70, 0x3c, 0x82, 0x9e, 0x71, 0x7d, 0x41, + 0x2b, 0xaf, 0x9f, 0x5d, 0xaf, 0x86, 0x55, 0x12, 0x8e, 0xa7, 0xb0, 0xb3, 0x34, 0x38, 0xe3, 0x3d, + 0xe3, 0x3a, 0x50, 0x32, 0xfb, 0x0f, 0x57, 0xcb, 0x39, 0x3e, 0x8e, 0xbf, 0x67, 0xe6, 0xa8, 0x86, + 0xef, 0xe6, 0x5d, 0x28, 0x4c, 0x87, 0xc3, 0x95, 0x62, 0x8e, 0xbf, 0x06, 0xc8, 0x3a, 0x21, 0xde, + 0xcd, 0x2b, 0xa7, 0x0d, 0x77, 0x58, 0x21, 0x50, 0xf6, 0xd9, 0x0d, 0xc8, 0xb4, 0xcf, 0xdd, 0xdf, + 0x86, 0x15, 0x02, 0x8e, 0x5f, 0xc3, 0x76, 0x61, 0x52, 0xc3, 0xbd, 0xbc, 0x6e, 0x7e, 0x88, 0x1c, + 0xae, 0x92, 0x72, 0xfc, 0x3d, 0xec, 0x96, 0x75, 0x03, 0xfc, 0x9e, 0x51, 0x7f, 0xe5, 0xdd, 0x7b, + 0xf8, 0x46, 0x15, 0xe5, 0x6c, 0xa1, 0xf2, 0x4c, 0x67, 0x97, 0x5b, 0xc6, 0x70, 0x95, 0x94, 0x3f, + 0xc4, 0xdf, 0x0d, 0x8a, 0x7f, 0x16, 0x9c, 0xb7, 0xd4, 0x9f, 0x04, 0x1f, 0xfe, 0x3f, 0x00, 0x00, + 0xff, 0xff, 0x09, 0x86, 0xc9, 0xff, 0x47, 0x18, 0x00, 0x00, } diff --git a/ui/components/DataTable.tsx b/ui/components/DataTable.tsx index 77f3906..65f0b07 100644 --- a/ui/components/DataTable.tsx +++ b/ui/components/DataTable.tsx @@ -14,6 +14,7 @@ type Props = { className?: string; fields: { label: string; value: string | ((k: any) => string) }[]; rows: any[]; + sortFields: string[]; }; const EmptyRow = styled(TableRow)<{ colSpan: number }>` @@ -25,8 +26,10 @@ const EmptyRow = styled(TableRow)<{ colSpan: number }>` `; const Styled = (c) => styled(c)``; -function DataTable({ className, fields, rows }: Props) { - const r = _.map(rows, (r, i) => ( +function DataTable({ className, fields, rows, sortFields }: Props) { + const sorted = _.sortBy(rows, sortFields, "asc"); + + const r = _.map(sorted, (r, i) => ( {_.map(fields, (f) => ( diff --git a/ui/lib/hooks/kustomizations.ts b/ui/lib/hooks/kustomizations.ts index 29c79a1..23fd765 100644 --- a/ui/lib/hooks/kustomizations.ts +++ b/ui/lib/hooks/kustomizations.ts @@ -1,12 +1,36 @@ import _ from "lodash"; import { useContext, useEffect, useState } from "react"; import { AppContext } from "../../components/AppStateProvider"; -import { Kustomization, SyncKustomizationRes } from "../rpc/clusters"; +import { + GroupVersionKind, + Kustomization, + SyncKustomizationRes, + UnstructuredObject, +} from "../rpc/clusters"; import { notifyError, notifySuccess } from "../util"; import { formatAPINamespace } from "./app"; type KustomizationList = { [name: string]: Kustomization }; +// Kubernetes does not allow us to query children by parents. +// We keep a list of common parent-child relationships +// to look up children recursively. +export const PARENT_CHILD_LOOKUP = { + Deployment: { + group: "apps", + version: "v1", + kind: "Deployment", + children: [ + { + group: "apps", + version: "v1", + kind: "ReplicaSet", + children: [{ version: "v1", kind: "Pod" }], + }, + ], + }, +}; + export function useKustomizations( currentContext: string, currentNamespace: string @@ -59,5 +83,64 @@ export function useKustomizations( }) .catch((err) => notifyError(err.message)); - return { kustomizations, syncKustomization, loading }; + const getReconciledObjects = ( + kustomizationname: string, + kustomizationnamespace: string, + kinds: GroupVersionKind[] + ) => { + return clustersClient.getReconciledObjects({ + contextname: currentContext, + kustomizationname, + kustomizationnamespace, + kinds, + }); + }; + + const getChildObjects = ( + parentuid: string, + groupversionkind: GroupVersionKind + ) => + clustersClient.getChildObjects({ + parentuid, + groupversionkind, + }); + + // Kubernetes does not let us query by parent-child relationship. + // We need to get parent IDs and recursively pass them to children + // in order to build the whole reconciliation "tree". + const getChildrenRecursive = async ( + result: any, + object: UnstructuredObject, + lookup: any + ) => { + result.push(object); + + const k = lookup[object.groupversionkind.kind]; + + if (k && k.children) { + for (let i = 0; i < k.children.length; i++) { + const child: GroupVersionKind = k.children[i]; + + const res = await getChildObjects(object.uid, child); + + for (let q = 0; q < res.objects.length; q++) { + const c = res.objects[q]; + + // Dive down one level and update the lookup accordingly. + await getChildrenRecursive(result, c, { + [child.kind]: child, + }); + } + } + } + }; + + return { + kustomizations, + syncKustomization, + loading, + getReconciledObjects, + getChildObjects, + getChildrenRecursive, + }; } diff --git a/ui/lib/rpc/clusters.ts b/ui/lib/rpc/clusters.ts index 897b48f..0102a17 100644 --- a/ui/lib/rpc/clusters.ts +++ b/ui/lib/rpc/clusters.ts @@ -130,6 +130,69 @@ const JSONToCondition = (m: Condition | ConditionJSON): Condition => { }; +export interface GroupVersionKind { + group?: string; + kind?: string; + version?: string; +} + +interface GroupVersionKindJSON { + group?: string; + kind?: string; + version?: string; +} + + + +const GroupVersionKindToJSON = (m: GroupVersionKind): GroupVersionKindJSON => { + if (m === null) { + return null; + } + + return { + group: m.group, + kind: m.kind, + version: m.version, + }; +}; + + + +const JSONToGroupVersionKind = (m: GroupVersionKind | GroupVersionKindJSON): GroupVersionKind => { + if (m === null) { + return null; + } + return { + group: m.group, + kind: m.kind, + version: m.version, + }; +}; + + +export interface SnapshotEntry { + namespace?: string; + kinds?: GroupVersionKind[]; +} + +interface SnapshotEntryJSON { + namespace?: string; + kinds?: GroupVersionKindJSON[]; +} + + + +const JSONToSnapshotEntry = (m: SnapshotEntry | SnapshotEntryJSON): SnapshotEntry => { + if (m === null) { + return null; + } + return { + namespace: m.namespace, + kinds: (m.kinds as (GroupVersionKind | GroupVersionKindJSON)[]).map(JSONToGroupVersionKind), + }; +}; + + export interface Kustomization { name?: string; namespace?: string; @@ -142,6 +205,9 @@ export interface Kustomization { reconcilerequestat?: string; reconcileat?: string; sourcerefkind?: string; + snapshots?: SnapshotEntry[]; + lastappliedrevision?: string; + lastattemptedrevision?: string; } interface KustomizationJSON { @@ -156,6 +222,9 @@ interface KustomizationJSON { reconcileRequestAt?: string; reconcileAt?: string; sourceRefKind?: string; + snapshots?: SnapshotEntryJSON[]; + lastAppliedRevision?: string; + lastAttemptedRevision?: string; } @@ -176,6 +245,9 @@ const JSONToKustomization = (m: Kustomization | KustomizationJSON): Kustomizatio reconcilerequestat: (((m as Kustomization).reconcilerequestat) ? (m as Kustomization).reconcilerequestat : (m as KustomizationJSON).reconcileRequestAt), reconcileat: (((m as Kustomization).reconcileat) ? (m as Kustomization).reconcileat : (m as KustomizationJSON).reconcileAt), sourcerefkind: (((m as Kustomization).sourcerefkind) ? (m as Kustomization).sourcerefkind : (m as KustomizationJSON).sourceRefKind), + snapshots: (m.snapshots as (SnapshotEntry | SnapshotEntryJSON)[]).map(JSONToSnapshotEntry), + lastappliedrevision: (((m as Kustomization).lastappliedrevision) ? (m as Kustomization).lastappliedrevision : (m as KustomizationJSON).lastAppliedRevision), + lastattemptedrevision: (((m as Kustomization).lastattemptedrevision) ? (m as Kustomization).lastattemptedrevision : (m as KustomizationJSON).lastAttemptedRevision), }; }; @@ -778,6 +850,135 @@ const JSONToListEventsRes = (m: ListEventsRes | ListEventsResJSON): ListEventsRe }; +export interface GetReconciledObjectsReq { + contextname?: string; + kustomizationname?: string; + kustomizationnamespace?: string; + kinds?: GroupVersionKind[]; +} + +interface GetReconciledObjectsReqJSON { + contextName?: string; + kustomizationName?: string; + kustomizationNamespace?: string; + kinds?: GroupVersionKindJSON[]; +} + + + +const GetReconciledObjectsReqToJSON = (m: GetReconciledObjectsReq): GetReconciledObjectsReqJSON => { + if (m === null) { + return null; + } + + return { + contextName: m.contextname, + kustomizationName: m.kustomizationname, + kustomizationNamespace: m.kustomizationnamespace, + kinds: m.kinds.map(GroupVersionKindToJSON), + }; +}; + + +export interface UnstructuredObject { + groupversionkind?: GroupVersionKind; + name?: string; + namespace?: string; + uid?: string; + status?: string; +} + +interface UnstructuredObjectJSON { + groupVersionKind?: GroupVersionKindJSON; + name?: string; + namespace?: string; + uid?: string; + status?: string; +} + + + +const JSONToUnstructuredObject = (m: UnstructuredObject | UnstructuredObjectJSON): UnstructuredObject => { + if (m === null) { + return null; + } + return { + groupversionkind: JSONToGroupVersionKind((((m as UnstructuredObject).groupversionkind) ? (m as UnstructuredObject).groupversionkind : (m as UnstructuredObjectJSON).groupVersionKind)), + name: m.name, + namespace: m.namespace, + uid: m.uid, + status: m.status, + }; +}; + + +export interface GetReconciledObjectsRes { + objects?: UnstructuredObject[]; +} + +interface GetReconciledObjectsResJSON { + objects?: UnstructuredObjectJSON[]; +} + + + +const JSONToGetReconciledObjectsRes = (m: GetReconciledObjectsRes | GetReconciledObjectsResJSON): GetReconciledObjectsRes => { + if (m === null) { + return null; + } + return { + objects: (m.objects as (UnstructuredObject | UnstructuredObjectJSON)[]).map(JSONToUnstructuredObject), + }; +}; + + +export interface GetChildObjectsReq { + contextname?: string; + groupversionkind?: GroupVersionKind; + parentuid?: string; +} + +interface GetChildObjectsReqJSON { + contextName?: string; + groupVersionKind?: GroupVersionKindJSON; + parentUid?: string; +} + + + +const GetChildObjectsReqToJSON = (m: GetChildObjectsReq): GetChildObjectsReqJSON => { + if (m === null) { + return null; + } + + return { + contextName: m.contextname, + groupVersionKind: GroupVersionKindToJSON(m.groupversionkind), + parentUid: m.parentuid, + }; +}; + + +export interface GetChildObjectsRes { + objects?: UnstructuredObject[]; +} + +interface GetChildObjectsResJSON { + objects?: UnstructuredObjectJSON[]; +} + + + +const JSONToGetChildObjectsRes = (m: GetChildObjectsRes | GetChildObjectsResJSON): GetChildObjectsRes => { + if (m === null) { + return null; + } + return { + objects: (m.objects as (UnstructuredObject | UnstructuredObjectJSON)[]).map(JSONToUnstructuredObject), + }; +}; + + export interface Clusters { listContexts: (listContextsReq: ListContextsReq) => Promise; @@ -797,6 +998,10 @@ export interface Clusters { syncHelmRelease: (syncHelmReleaseReq: SyncHelmReleaseReq) => Promise; + getReconciledObjects: (getReconciledObjectsReq: GetReconciledObjectsReq) => Promise; + + getChildObjects: (getChildObjectsReq: GetChildObjectsReq) => Promise; + } export class DefaultClusters implements Clusters { @@ -947,5 +1152,35 @@ export class DefaultClusters implements Clusters { }); } + getReconciledObjects(getReconciledObjectsReq: GetReconciledObjectsReq): Promise { + const url = this.hostname + this.pathPrefix + "GetReconciledObjects"; + let body: GetReconciledObjectsReq | GetReconciledObjectsReqJSON = getReconciledObjectsReq; + if (!this.writeCamelCase) { + body = GetReconciledObjectsReqToJSON(getReconciledObjectsReq); + } + return this.fetch(createTwirpRequest(url, body, this.headersOverride)).then((resp) => { + if (!resp.ok) { + return throwTwirpError(resp); + } + + return resp.json().then(JSONToGetReconciledObjectsRes); + }); + } + + getChildObjects(getChildObjectsReq: GetChildObjectsReq): Promise { + const url = this.hostname + this.pathPrefix + "GetChildObjects"; + let body: GetChildObjectsReq | GetChildObjectsReqJSON = getChildObjectsReq; + if (!this.writeCamelCase) { + body = GetChildObjectsReqToJSON(getChildObjectsReq); + } + return this.fetch(createTwirpRequest(url, body, this.headersOverride)).then((resp) => { + if (!resp.ok) { + return throwTwirpError(resp); + } + + return resp.json().then(JSONToGetChildObjectsRes); + }); + } + } diff --git a/ui/lib/test-utils.tsx b/ui/lib/test-utils.tsx index 788c502..9f766fc 100644 --- a/ui/lib/test-utils.tsx +++ b/ui/lib/test-utils.tsx @@ -5,6 +5,9 @@ import { MemoryRouter } from "react-router"; import { ThemeProvider } from "styled-components"; import AppStateProvider from "../components/AppStateProvider"; import { + GetChildObjectsRes, + GetReconciledObjectsRes, + Kustomization, ListContextsRes, ListKustomizationsRes, ListNamespacesForContextRes, @@ -15,6 +18,8 @@ type ClientOverrides = { listContexts: ListContextsRes; listNamespacesForContext: ListNamespacesForContextRes; listKustomizations?: ListKustomizationsRes; + getReconciledObjects?: GetReconciledObjectsRes; + getChildObjects?: GetChildObjectsRes; }; export function withContext( @@ -46,3 +51,55 @@ export function withContext( ); } + +const k: Kustomization = { + name: "my-kustomization", + namespace: "default", + path: "/k8s", + sourceref: "my-source", + conditions: [], + interval: "1m", + prune: false, + reconcilerequestat: "", + reconcileat: "", + sourcerefkind: "Git", +}; + +export const stubbedClustersResponses = { + listContexts: { + contexts: [{ name: "my-context" }, { name: "other-context" }], + currentcontext: "other-context", + }, + listNamespacesForContext: { namespaces: ["default"] }, + listKustomizations: { + kustomizations: [k], + }, + getReconciledObjects: { + objects: [ + { + groupversionkind: { + group: "apps", + version: "v1", + kind: "Deployment", + }, + name: "reconciled-deployment", + namespace: "default", + status: "Current", + }, + ], + }, + getChildObjects: { + objects: [ + { + groupversionkind: { + group: "", + version: "v1", + kind: "Pod", + }, + name: "reconciled-deployment-abc", + namespace: "default", + status: "Current", + }, + ], + }, +}; diff --git a/ui/pages/KustomizationDetail.tsx b/ui/pages/KustomizationDetail.tsx index 5cf2793..1f97917 100644 --- a/ui/pages/KustomizationDetail.tsx +++ b/ui/pages/KustomizationDetail.tsx @@ -13,14 +13,18 @@ import { import _ from "lodash"; import * as React from "react"; import styled from "styled-components"; +import DataTable from "../components/DataTable"; import Flex from "../components/Flex"; import KeyValueTable from "../components/KeyValueTable"; import Link from "../components/Link"; import Page from "../components/Page"; import Panel from "../components/Panel"; import { useKubernetesContexts, useNavigation } from "../lib/hooks/app"; -import { useKustomizations } from "../lib/hooks/kustomizations"; -import { Kustomization } from "../lib/rpc/clusters"; +import { + PARENT_CHILD_LOOKUP, + useKustomizations, +} from "../lib/hooks/kustomizations"; +import { GroupVersionKind, Kustomization } from "../lib/rpc/clusters"; import { formatURL, PageRoute } from "../lib/util"; type Props = { @@ -36,11 +40,10 @@ const Styled = (c) => styled(c)` const infoFields = [ "sourceref", "namespace", - "reconcileat", "path", "interval", "prune", - "reconcilerequestat", + "lastappliedrevision", ]; const formatInfo = (detail: Kustomization) => @@ -51,13 +54,18 @@ const formatInfo = (detail: Kustomization) => function KustomizationDetail({ className }: Props) { const [syncing, setSyncing] = React.useState(false); + const [reconciledObjects, setReconciledObjects] = React.useState< + GroupVersionKind[] + >([]); const { query } = useNavigation(); const { currentContext, currentNamespace } = useKubernetesContexts(); - const { kustomizations, syncKustomization } = useKustomizations( - currentContext, - currentNamespace - ); + const { + kustomizations, + syncKustomization, + getReconciledObjects, + getChildrenRecursive, + } = useKustomizations(currentContext, currentNamespace); const kustomizationDetail = kustomizations[query.kustomizationId as string]; const handleSyncClicked = () => { @@ -68,6 +76,56 @@ function KustomizationDetail({ className }: Props) { }); }; + React.useEffect(() => { + if (!kustomizationDetail) { + return; + } + + const { snapshots, name, namespace } = kustomizationDetail; + + const kinds = _.reduce( + snapshots, + (r, e) => { + r = [...r, ...e.kinds]; + return r; + }, + [] + ); + + const uniq = _.uniqBy(kinds, "kind"); + + const getChildren = async () => { + const { objects } = await getReconciledObjects(name, namespace, uniq); + + const result = []; + for (let o = 0; o < objects.length; o++) { + const obj = objects[o]; + + await getChildrenRecursive(result, obj, PARENT_CHILD_LOOKUP); + } + + setReconciledObjects(_.flatten(result)); + }; + + let timeout; + function poll() { + timeout = setTimeout(async () => { + // Polling will stop if this errors. + // Also prevents sending a request before the previous request finishes. + await getChildren(); + poll(); + }, 5000); + } + + // Get children now, to avoid waiting for the first poll() setTimeout. + getChildren(); + // Start polling. + poll(); + + // Stop polling when the component unmounts + return () => clearTimeout(timeout); + }, [kustomizationDetail]); + if (!kustomizationDetail) { return null; } @@ -89,21 +147,9 @@ function KustomizationDetail({ className }: Props) { , "Source", ], - reconcileat: [ - ` ${new Date( - kustomizationDetail.reconcileat - ).toLocaleTimeString()} ${new Date( - kustomizationDetail.reconcileat - ).toLocaleDateString()}`, - "Last Reconcile", - ], - reconcilerequestat: [ - ` ${new Date( - kustomizationDetail.reconcilerequestat - ).toLocaleTimeString()} ${new Date( - kustomizationDetail.reconcilerequestat - ).toLocaleDateString()}`, - "Last Reconcile Request", + lastappliedrevision: [ + kustomizationDetail.lastappliedrevision, + "Applied Revision", ], }; @@ -137,7 +183,7 @@ function KustomizationDetail({ className }: Props) { @@ -174,6 +220,20 @@ function KustomizationDetail({ className }: Props) { + + + v.groupversionkind.kind }, + { label: "Name", value: "name" }, + { label: "Namespace", value: "namespace" }, + { label: "Status", value: "status" }, + ]} + rows={reconciledObjects} + /> + + ); } diff --git a/ui/pages/__tests__/KustomizationDetail.test.tsx b/ui/pages/__tests__/KustomizationDetail.test.tsx index cd6cdf1..9be696c 100644 --- a/ui/pages/__tests__/KustomizationDetail.test.tsx +++ b/ui/pages/__tests__/KustomizationDetail.test.tsx @@ -1,6 +1,5 @@ import { render, screen } from "@testing-library/react"; -import { Kustomization } from "../../lib/rpc/clusters"; -import { withContext } from "../../lib/test-utils"; +import { stubbedClustersResponses, withContext } from "../../lib/test-utils"; import KustomizationDetail from "../KustomizationDetail"; describe("KustomizationDetail", () => { @@ -14,31 +13,10 @@ describe("KustomizationDetail", () => { container = null; }); it("renders", async () => { - const k: Kustomization = { - name: "my-kustomization", - namespace: "default", - path: "/k8s", - sourceref: "my-source", - conditions: [], - interval: "1m", - prune: false, - reconcilerequestat: "", - reconcileat: "", - sourcerefkind: "Git", - }; const url = "/?context=my-context&namespace=default&kustomizationId=my-kustomization"; const tree = render( - withContext(KustomizationDetail, url, { - listContexts: { - contexts: [{ name: "my-context" }, { name: "other-context" }], - currentcontext: "other-context", - }, - listNamespacesForContext: { namespaces: ["default"] }, - listKustomizations: { - kustomizations: [k], - }, - }), + withContext(KustomizationDetail, url, stubbedClustersResponses), container ); diff --git a/ui/pages/__tests__/__snapshots__/KustomizationDetail.test.tsx.snap b/ui/pages/__tests__/__snapshots__/KustomizationDetail.test.tsx.snap index 1e72529..d91d7e2 100644 --- a/ui/pages/__tests__/__snapshots__/KustomizationDetail.test.tsx.snap +++ b/ui/pages/__tests__/__snapshots__/KustomizationDetail.test.tsx.snap @@ -7,10 +7,10 @@ Object {