diff --git a/cluster/cluster.go b/cluster/cluster.go index 3226e7e96..3a8b41bae 100644 --- a/cluster/cluster.go +++ b/cluster/cluster.go @@ -17,7 +17,7 @@ package cluster import ( - operator "github.com/minio/minio-operator/pkg/client/clientset/versioned" + operator "github.com/minio/operator/pkg/client/clientset/versioned" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" certutil "k8s.io/client-go/util/cert" diff --git a/docs/mcs_operator_mode.md b/docs/mcs_operator_mode.md index 9c33f3abb..1c8d34210 100644 --- a/docs/mcs_operator_mode.md +++ b/docs/mcs_operator_mode.md @@ -25,7 +25,7 @@ you can override this using `MCS_K8S_API_SERVER`, ie use the k8s cluster from `k ## Extract the Service account token and use it with MCS -For local development you can use the jwt associated to the `m3-sa` service account, you can get the token running +For local development you can use the jwt associated to the `mcs-sa` service account, you can get the token running the following command in your terminal: ``` diff --git a/go.mod b/go.mod index 46274dc85..77535746d 100644 --- a/go.mod +++ b/go.mod @@ -17,11 +17,10 @@ require ( github.com/jessevdk/go-flags v1.4.0 github.com/json-iterator/go v1.1.10 github.com/minio/cli v1.22.0 - github.com/minio/mc v0.0.0-20200719194630-c8a3b7bff08c - github.com/minio/minio v0.0.0-20200714163805-778e9c864f67 - github.com/minio/minio-go/v6 v6.0.58-0.20200612001654-a57fec8037ec - github.com/minio/minio-go/v7 v7.0.2-0.20200718235721-f0e2f3ae3678 - github.com/minio/minio-operator v0.0.0-20200713191021-de7c5283f7e5 + github.com/minio/mc v0.0.0-20200725183142-90d22b271f60 + github.com/minio/minio v0.0.0-20200725154241-abbf6ce6ccf8 + github.com/minio/minio-go/v7 v7.0.2-0.20200722162308-e0105ca08252 + github.com/minio/operator v0.0.0-20200725185636-4a625e4fbb31 github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect github.com/satori/go.uuid v1.2.0 github.com/stretchr/testify v1.6.1 diff --git a/go.sum b/go.sum index b80c98844..7456522d4 100644 --- a/go.sum +++ b/go.sum @@ -3,16 +3,12 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= -contrib.go.opencensus.io/exporter/ocagent v0.5.0 h1:TKXjQSRS0/cCDrP7KvkgU6SmILtF/yV2TOs/02K/WZQ= -contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0= git.apache.org/thrift.git v0.13.0 h1:/3bz5WZ+sqYArk7MBBBbDufMxKKOA56/6JO6psDpUDY= git.apache.org/thrift.git v0.13.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-storage-blob-go v0.8.0 h1:53qhf0Oxa0nOjgbDeeYPUeyiNmafAFEY95rZLK0Tj6o= github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= -github.com/Azure/go-autorest v11.7.1+incompatible h1:M2YZIajBBVekV86x0rr1443Lc1F/Ylxb9w+5EtSyX3Q= -github.com/Azure/go-autorest v11.7.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= @@ -69,8 +65,6 @@ github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4= -github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -87,26 +81,18 @@ github.com/colinmarc/hdfs/v2 v2.1.1 h1:x0hw/m+o3UE20Scso/KCkvYNc9Di39TBlCfGMkJ1/ github.com/colinmarc/hdfs/v2 v2.1.1/go.mod h1:M3x+k8UKKmxtFu++uAZ0OtDU8jR3jnaZIAc6yK4Ue0c= github.com/coredns/coredns v1.4.0 h1:RubBkYmkByUqZWWkjRHvNLnUHgkRVqAWgSMmRFvpE1A= github.com/coredns/coredns v1.4.0/go.mod h1:zASH/MVDgR6XZTbxvOnsZfffS+31vg6Ackf/wo1+AM0= -github.com/coreos/bbolt v1.3.3 h1:n6AiVyVRKQFNb6mJlwESEvvLoDyiTzXX7ORAUlkeBdY= -github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.12+incompatible h1:pAWNwdf7QiT1zfaWyqCtNZQWCLByQyA3JrSQyuYAqnQ= -github.com/coreos/etcd v3.3.12+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.0.0 h1:XJIw/+VlJ+87J+doOxznsAWIdmWuViOVhkQamW5YV28= github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 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 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/dchest/siphash v1.2.1 h1:4cLinnzVJDKxTCl9B01807Yiy+W7ZzVHj/KIroQRvT4= github.com/dchest/siphash v1.2.1/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -119,9 +105,8 @@ github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZ github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= -github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= @@ -135,9 +120,8 @@ github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb 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/etcd-io/gofail v0.0.0-20190801230047-ad7f989257ca/go.mod h1:49H/RkXP8pKaZy4h0d+NW16rSLhyVBt4o6VLJbmOqDE= +github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= -github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= @@ -145,17 +129,15 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.4.1 h1:Wv2VwvNn73pAdFIVUQRXYDFp31lXKbqblIXo/Q5GPSg= github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= -github.com/frankban/quicktest v1.7.2 h1:2QxQoC1TS09S7fhCPsrvqYdvP1H5M1P1ih5ABm3BTYk= -github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= -github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= 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-ini/ini v1.57.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-ldap/ldap v3.0.2+incompatible h1:kD5HQcAzlQ7yrhfn+h+MSABeAy/jAJhvIJ/QDllP44g= github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= @@ -231,8 +213,6 @@ github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2K github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= github.com/go-openapi/validate v0.19.10 h1:tG3SZ5DC5KF4cyt7nqLVcQXGj5A7mpaYkAcNPlDK+Yk= github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8= -github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= @@ -270,9 +250,8 @@ 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 h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -281,8 +260,6 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -318,20 +295,15 @@ github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsC github.com/googleapis/gnostic v0.1.0 h1:rVsPeBmXbYv4If/cumu1AzZPwV58q433hvONV1UEZoI= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20190328170749-bb2674552d8f h1:4Gslotqbs16iAg+1KR/XdabIfq8TlAWHdwS5QJFksLc= -github.com/gopherjs/gopherjs v0.0.0-20190328170749-bb2674552d8f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZsA= -github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U= -github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.5-0.20200711200521-98cb6bf42e08 h1:kPna6oIGlRXWmg/jkKfxbpvsl+0DHYnw1qQwN+6+gyA= github.com/gorilla/mux v1.7.5-0.20200711200521-98cb6bf42e08/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk= github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -339,8 +311,6 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de 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 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= @@ -350,9 +320,8 @@ github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVo github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.9.1 h1:9PZfAcVEvez4yhLH2TBU64/h/z4xlFI80cWXRrxuKuM= github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= @@ -377,8 +346,6 @@ github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/raft v1.1.1-0.20190703171940-f639636d18e0 h1:msEDtkZC3STZq6Pthlju+jKruuNHXCZAWhghDK47HcM= -github.com/hashicorp/raft v1.1.1-0.20190703171940-f639636d18e0/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= github.com/hashicorp/raft v1.1.2 h1:oxEL5DDeurYxLd3UbcY/hccgSPhLLpiBZ1YxtWEq59c= github.com/hashicorp/raft v1.1.2/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= @@ -390,9 +357,8 @@ github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKe github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf h1:WfD7VjIE6z8dIvMsI4/s+1qr5EL+zoIGev1BQj1eoJ8= github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf/go.mod h1:hyb9oH7vZsitZCiBt0ZvifOrB+qc8PS5IiilCIb87rg= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -422,7 +388,6 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.4/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.10.3 h1:OP96hzwJVBIHYU52pVTI6CczrxPvrGfgqF9N5eTO0Q8= @@ -438,8 +403,7 @@ github.com/klauspost/pgzip v1.2.1 h1:oIPZROsWuPHpOdMVWLuJZXwgjhrW8r1yEX8UqMyeNHM github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/readahead v1.3.1 h1:QqXNYvm+VvqYcbrRT4LojUciM0XrznFRIDrbHiJtu/0= github.com/klauspost/readahead v1.3.1/go.mod h1:AH9juHzNH7xqdqFHrMRSHeH2Ps+vFf+kblDqzPFiLJg= -github.com/klauspost/reedsolomon v1.9.3 h1:N/VzgeMfHmLc+KHMD1UL/tNkfXAt8FnUqlgXGIduwAY= -github.com/klauspost/reedsolomon v1.9.3/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4= +github.com/klauspost/reedsolomon v1.9.9 h1:qCL7LZlv17xMixl55nq2/Oa1Y86nfO8EqDfv2GHND54= github.com/klauspost/reedsolomon v1.9.9/go.mod h1:O7yFFHiQwDR6b2t63KPUpccPtNdp5ADgh1gg4fd12wo= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= @@ -455,10 +419,6 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kurin/blazer v0.5.4-0.20200327014341-8f90a40f8af7 h1:smZXPopqRVVywwzou4WYWvUbJvSAzIDFizfWElpmAqY= -github.com/kurin/blazer v0.5.4-0.20200327014341-8f90a40f8af7/go.mod h1:4FCXMUWo9DllR2Do4TtBd377ezyAJ51vB5uTBjt0pGU= -github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.7.0 h1:h93mCPfUSkaul3Ka/VG8uZdmW1uMHDGxzu0NWHuJmHY= github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -472,58 +432,43 @@ github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7 github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190805055040-f9202b1cfdeb h1:hXqqXzQtJbENrsb+rsIqkVqcg4FUJL0SQFGw08Dgivw= -github.com/mattn/go-ieproxy v0.0.0-20190805055040-f9202b1cfdeb/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-runewidth v0.0.2 h1:UnlwIPBGaTZfPQ6T1IGzPI0EkYAQmT9fAEJ/poFC63o= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.8 h1:1QYRAKU3lN5cRfLCkPU08hwvLJFhvjP6MqNMmQz6ZVI= github.com/miekg/dns v1.1.8/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/minio/cli v1.22.0 h1:VTQm7lmXm3quxO917X3p+el1l0Ca5X3S4PM2ruUYO68= github.com/minio/cli v1.22.0/go.mod h1:bYxnK0uS629N3Bq+AOZZ+6lwF77Sodk4+UL9vNuXhOY= -github.com/minio/gokrb5/v7 v7.2.5 h1:GPnlzrvEol/uJHouCEQ382Gd+w4in5s4wCTQ4umDki8= -github.com/minio/gokrb5/v7 v7.2.5/go.mod h1:z6fE6twrvMN004M+KRTHnmtfpxsBIztP0PVsak0/4f8= -github.com/minio/hdfs/v3 v3.0.1 h1:MMpqqS9CtuBTYrsMYZMWfDPmWemRf11zhcvj+mbKUYc= -github.com/minio/hdfs/v3 v3.0.1/go.mod h1:6ALh9HsAwG9xAXdpdrZJcSY0vR6z3K+9XIz6Y9pQG/c= github.com/minio/highwayhash v1.0.0 h1:iMSDhgUILCr0TNm8LWlSjF8N0ZIj2qbO8WHp6Q/J2BA= github.com/minio/highwayhash v1.0.0/go.mod h1:xQboMTeM9nY9v/LlAOxFctujiv5+Aq2hR5dxBpaMbdc= -github.com/minio/lsync v1.0.1 h1:AVvILxA976xc27hstd1oR+X9PQG0sPSom1MNb1ImfUs= -github.com/minio/lsync v1.0.1/go.mod h1:tCFzfo0dlvdGl70IT4IAK/5Wtgb0/BrTmo/jE8pArKA= -github.com/minio/mc v0.0.0-20200719194630-c8a3b7bff08c h1:BVDXukrJrwZLUj0ae3w1l+3xiJ+lLzpo3FO1wgZ8cds= -github.com/minio/mc v0.0.0-20200719194630-c8a3b7bff08c/go.mod h1:QqbU29yIpPVOGZwT2q3I8iMeXlKYGqe3XEaWdTq+H6k= +github.com/minio/mc v0.0.0-20200725183142-90d22b271f60 h1:LevaZ33nx+rUzRsuU7rVvqXUP7VCu2BQanhITw4Z9rA= +github.com/minio/mc v0.0.0-20200725183142-90d22b271f60/go.mod h1:Hvnyrb/NMM+pJ53JO/J3jxGtwPDYJh7K6c1D+RR2h2g= github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= -github.com/minio/minio v0.0.0-20200501124117-09571d03a531/go.mod h1:Vhlqz7Se0EgpgFiVxpvzF4Zz/h2LMx+EPKH96Aera5U= -github.com/minio/minio v0.0.0-20200714163805-778e9c864f67 h1:xMg87xvLhrw2jeE6xGx/uuFr2iIksfszITGdHhWURnA= -github.com/minio/minio v0.0.0-20200714163805-778e9c864f67/go.mod h1:0WThPBMICOt5eEGT3XyaUy0cxYmoGhmJEvvRbiVqbYU= -github.com/minio/minio-go/v6 v6.0.53 h1:8jzpwiOzZ5Iz7/goFWqNZRICbyWYShbb5rARjrnSCNI= -github.com/minio/minio-go/v6 v6.0.53/go.mod h1:DIvC/IApeHX8q1BAMVCXSXwpmrmM+I+iBvhvztQorfI= -github.com/minio/minio-go/v6 v6.0.55-0.20200424204115-7506d2996b22/go.mod h1:KQMM+/44DSlSGSQWSfRrAZ12FVMmpWNuX37i2AX0jfI= -github.com/minio/minio-go/v6 v6.0.58-0.20200612001654-a57fec8037ec h1:my1ShPzUyV5BSteRVdm/YoEhd4ycLImlN4xDX17pd8A= -github.com/minio/minio-go/v6 v6.0.58-0.20200612001654-a57fec8037ec/go.mod h1:5+R/nM9Pwrh0vqF+HbYYDQ84wdUFPyXHkrdT4AIkifM= -github.com/minio/minio-go/v7 v7.0.0-20200714085548-47e386e2cde8/go.mod h1:QTstSRgetEDVpqiEpFniLoCslH4d9cNAa4BtjuRQrwE= -github.com/minio/minio-go/v7 v7.0.2-0.20200718235721-f0e2f3ae3678 h1:vV6dhx+KI1YfQTqlYYUa2dh8MUhecITo1XXhFDTl6fU= -github.com/minio/minio-go/v7 v7.0.2-0.20200718235721-f0e2f3ae3678/go.mod h1:dJ80Mv2HeGkYLH1sqS/ksz07ON6csH3S6JUMSQ2zAns= -github.com/minio/minio-operator v0.0.0-20200713191021-de7c5283f7e5 h1:ycH+JjgYkiaO02XDk1UPXjyauXw1N4nKojod6Cw2tcw= -github.com/minio/minio-operator v0.0.0-20200713191021-de7c5283f7e5/go.mod h1:hNvWo/RuktTqhjKVnKmmZA8chdAxcPdi8jFJXZmioLI= -github.com/minio/parquet-go v0.0.0-20200414234858-838cfa8aae61 h1:pUSI/WKPdd77gcuoJkSzhJ4wdS8OMDOsOu99MtpXEQA= -github.com/minio/parquet-go v0.0.0-20200414234858-838cfa8aae61/go.mod h1:4trzEJ7N1nBTd5Tt7OCZT5SEin+WiAXpdJ/WgPkESA8= +github.com/minio/minio v0.0.0-20200722004956-c43da3005ae8/go.mod h1:Eu2KC2p+vW03rnYY/6R/D+QduPB7/j4kBaVA/EDLjWM= +github.com/minio/minio v0.0.0-20200723003940-b9be841fd222 h1:+XFGpEsqmA033nDX8LtjyPZy01Shivf6E2OL67WoGiE= +github.com/minio/minio v0.0.0-20200723003940-b9be841fd222/go.mod h1:Eu2KC2p+vW03rnYY/6R/D+QduPB7/j4kBaVA/EDLjWM= +github.com/minio/minio v0.0.0-20200725154241-abbf6ce6ccf8 h1:H0tUGnx1zkZCtqQp3LuV2GNjOasrJ9gmvlwOeDJDvzI= +github.com/minio/minio v0.0.0-20200725154241-abbf6ce6ccf8/go.mod h1:NBWtYp4t5pt3TmbpW7FHChY6ZCs8n/gTRxZCF0mCcn8= +github.com/minio/minio-go/v7 v7.0.1/go.mod h1:dJ80Mv2HeGkYLH1sqS/ksz07ON6csH3S6JUMSQ2zAns= +github.com/minio/minio-go/v7 v7.0.2-0.20200722162308-e0105ca08252 h1:V2JkMDoSmEIhRcMJwX3qeJVOzy1B5bHpHbZaQu77vbs= +github.com/minio/minio-go/v7 v7.0.2-0.20200722162308-e0105ca08252/go.mod h1:dJ80Mv2HeGkYLH1sqS/ksz07ON6csH3S6JUMSQ2zAns= +github.com/minio/operator v0.0.0-20200725185636-4a625e4fbb31 h1:FzB4mwu62LnVgOFhB7fLu15fAgIh6+1PHJoytkQPEsY= +github.com/minio/operator v0.0.0-20200725185636-4a625e4fbb31 h1:FzB4mwu62LnVgOFhB7fLu15fAgIh6+1PHJoytkQPEsY= +github.com/minio/operator v0.0.0-20200725185636-4a625e4fbb31/go.mod h1:G0pMmQFV5b5OrH7/OmVKtPoHzj3SmHNgqDlTew1NM/Y= +github.com/minio/operator v0.0.0-20200725185636-4a625e4fbb31/go.mod h1:G0pMmQFV5b5OrH7/OmVKtPoHzj3SmHNgqDlTew1NM/Y= +github.com/minio/selfupdate v0.3.0 h1:1qfaZscU3hWwX1cF5m5Dov8Z5aZNvPHk9LROzIkas1k= +github.com/minio/selfupdate v0.3.0/go.mod h1:b8ThJzzH7u2MkF6PcIra7KaXO9Khf6alWPvMSyTDCFM= github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/simdjson-go v0.1.5-0.20200303142138-b17fe061ea37 h1:pDeao6M5AEd8hwTtGmE0pVKomlL56JFRa5SiXDZAuJE= @@ -542,8 +487,7 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg= github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mmcloughlin/avo v0.0.0-20200303042253-6df701fe672f h1:4a8aNS/kCsM3TZnLO0jUzMAch5+XYh5Poe74nqatJcw= -github.com/mmcloughlin/avo v0.0.0-20200303042253-6df701fe672f/go.mod h1:L0u9qfRMLNBO97u6pPukRp6ncoQz0Q25W69fvtht3vA= +github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061 h1:UCU8+cLbbvyxi0sQ9fSeoEhZgvrrD9HKMtX6Gmc1vk8= github.com/mmcloughlin/avo v0.0.0-20200523190732-4439b6b2c061/go.mod h1:wqKykBG2QzQDJEzvRkcS8x6MiSJkF52hXZsXcjaB3ls= 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= @@ -557,38 +501,20 @@ github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFW github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/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/nats-io/gnatsd v1.4.1 h1:RconcfDeWpKCD6QIIwiVFcvForlXpWeJP7i5/lDLy44= -github.com/nats-io/gnatsd v1.4.1/go.mod h1:nqco77VO78hLCJpIcVfygDP2rPGfsEHkGTUk94uh5DQ= -github.com/nats-io/go-nats v1.7.2 h1:cJujlwCYR8iMz5ofZSD/p2WLW8FabhkQ2lIEVbSvNSA= -github.com/nats-io/go-nats v1.7.2/go.mod h1:+t7RHT5ApZebkrQdnn6AhQJmhJJiKAvJUio1PiiCtj0= -github.com/nats-io/go-nats-streaming v0.4.4 h1:1I3lkZDRdQYXb+holjdqZ2J6xyekrD06o9Fd8rWlgP4= -github.com/nats-io/go-nats-streaming v0.4.4/go.mod h1:gfq4R3c9sKAINOpelo0gn/b9QDMBZnmrttcsNF+lqyo= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server v1.4.1 h1:Ul1oSOGNV/L8kjr4v6l2f9Yet6WY+LevH1/7cRZ/qyA= -github.com/nats-io/nats-server v1.4.1/go.mod h1:c8f/fHd2B6Hgms3LtCaI7y6pC4WD1f4SUxcCud5vhBc= -github.com/nats-io/nats-server/v2 v2.1.2 h1:i2Ly0B+1+rzNZHHWtD4ZwKi+OU5l+uQo1iDHZ2PmiIc= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= github.com/nats-io/nats-server/v2 v2.1.7 h1:jCoQwDvRYJy3OpOTHeYfvIPLP46BMeDmH7XEJg/r42I= github.com/nats-io/nats-server/v2 v2.1.7/go.mod h1:rbRrRE/Iv93O/rUvZ9dh4NfT0Cm9HWjW/BqOWLGgYiE= -github.com/nats-io/nats-streaming-server v0.14.2 h1:WjQMDqVOwsI0Nb0E+XmEs1LY17CwHRbTCSTWKhw9fXs= -github.com/nats-io/nats-streaming-server v0.14.2/go.mod h1:RyqtDJZvMZO66YmyjIYdIvS69zu/wDAkyNWa8PIUa5c= github.com/nats-io/nats-streaming-server v0.18.0 h1:+RDozeN9scwCm0Wc2fYlvGcP144hvxvSOtxZ8FE21ME= github.com/nats-io/nats-streaming-server v0.18.0/go.mod h1:Y9Aiif2oANuoKazQrs4wXtF3jqt6p97ODQg68lR5TnY= -github.com/nats-io/nats.go v1.9.1 h1:ik3HbLhZ0YABLto7iX80pZLPw/6dx3T+++MZJwLnMrQ= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nats.go v1.10.0 h1:L8qnKaofSfNFbXg0C5F71LdjPRnmQwSsA4ukmkt1TvY= github.com/nats-io/nats.go v1.10.0/go.mod h1:AjGArbfyR50+afOUotNX2Xs5SYHf+CoOa5HH1eEl2HE= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3 h1:6JrEfig+HzTH85yxzhSVbjHRJv9cn0p6n3IngIcM5/k= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.4 h1:aEsHIssIk6ETN5m2/MD8Y4B2X7FfXrBAUdkyRvbVYzA= github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nats-io/stan.go v0.4.5 h1:lPZ9y1jVGiXcTaUc1SnEIWPYfh0avuEiHBePNJYgpPk= -github.com/nats-io/stan.go v0.4.5/go.mod h1:Ji7mK6gRZJSH1nc3ZJH6vi7zn/QnZhpR9Arm4iuzsUQ= github.com/nats-io/stan.go v0.7.0 h1:sMVHD9RkxPOl6PJfDVBQd+gbxWkApeYl6GrH+10msO4= github.com/nats-io/stan.go v0.7.0/go.mod h1:Ci6mUIpGQTjl++MqK2XzkWI/0vF+Bl72uScx7ejSYmU= github.com/ncw/directio v1.0.5 h1:JSUBhdjEvVaJvOoyPAbcW0fnd0tvRXD76wEfZ1KcQz4= @@ -628,45 +554,36 @@ github.com/pkg/xattr v0.4.1/go.mod h1:W2cGD0TBEus7MkUgv0tNZ9JutLtVO3cXu+IBRuHqnF 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/posener/complete v1.2.2-0.20190702141536-6ffe496ea953 h1:oBvgW8IvwF278gJ3R4hH0gD3ZeJxjwBXVIScRR0dRc8= -github.com/posener/complete v1.2.2-0.20190702141536-6ffe496ea953/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E= +github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU= github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/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-0.20190127221311-3c4408c8b829 h1:D+CiwcpGTW6pL6bv6KI3KbyEyCKyS+1JWS2h8PNDnGA= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVwNU= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 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-20190117184657-bf6a532e95b1 h1:/K3IL0Z1quvmJ7X0A1AwNEK7CRkVK3YwfOU/QAL4WGg= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20190704165056-9c2d0518ed81 h1:zQTtDd7fQiF9e80lbl+ShnD9/5NSq5r1EhcS8955ECg= -github.com/rcrowley/go-metrics v0.0.0-20190704165056-9c2d0518ed81/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= -github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= @@ -682,13 +599,10 @@ github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.5.0 h1:1N5EYkVAPEywqZRJd7cwnRtCb6xJx7NH3T3WUTF980Q= -github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo= github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3 h1:hBSHahWMEgzwRyS6dRpxY0XyjZsHyQ61s084wo5PJe0= -github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= @@ -722,15 +636,11 @@ github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/sjson v1.0.4 h1:UcdIRXff12Lpnu3OLtZvnc03g4vH2suXDXhBwBqmzYg= github.com/tidwall/sjson v1.0.4/go.mod h1:bURseu1nuBkFpIES5cz6zBtjmYeOQmEESshn7VpF15Y= -github.com/tinylib/msgp v1.1.1 h1:TnCZ3FIuKeaIy+F45+Cnp+caqdXGy4z74HvwXN+570Y= -github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tinylib/msgp v1.1.2 h1:gWmO7n0Ys2RBEb7GPYB9Ujq8Mk5p2U08lRnmMcGy6BQ= github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.1.5-pre/go.mod h1:FwP/aQVg39TXzItUBMwnWp9T9gPQnXw4Poh4/oBQZ/0= -github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2tfCQDUqRd8fI= github.com/unrolled/secure v1.0.7 h1:BcQHp3iKZyZCKj5gRqwQG+5urnGBF00wGgoPPwtheVQ= github.com/unrolled/secure v1.0.7/go.mod h1:uGc1OcRF8gCVBA+ANksKmvM85Hka6SZtQIbrKc3sHS4= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= @@ -748,8 +658,6 @@ github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd/v3 v3.3.0-rc.0.0.20200707003333-58bb8ae09f8e h1:HZQLoe71Q24wVyDrGBRcVuogx32U+cPlcm/WoSLUI6c= @@ -762,16 +670,12 @@ go.mongodb.org/mongo-driver v1.3.4 h1:zs/dKNwX0gYUtzwrN9lLiR15hCO0nDwQj5xXx+vjCd go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.uber.org/atomic v1.3.2/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/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= -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 v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/arch v0.0.0-20190909030613-46d78d1859ac/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= @@ -783,7 +687,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -792,8 +695,6 @@ golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f h1:kz4KIr+xcPUsI3VMoqWfPMvtnJ6MGfiVwsWSVzphMO4= -golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -819,7 +720,6 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/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= @@ -832,17 +732,12 @@ golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA= -golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -885,6 +780,8 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20u golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666 h1:gVCS+QOncANNPlmlO1AhlU3oxs4V9z+gTtPwIk3p2N8= +golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -914,14 +811,11 @@ golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190914235951-31e00f45c22e h1:nOOVVcLC+/3MeovP40q5lCiWmP1Z1DaN8yn8ngU63hw= -golang.org/x/tools v0.0.0-20190914235951-31e00f45c22e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200425043458-8463f397d07c h1:iHhCR0b26amDCiiO+kBguKZom9aMF+NrFxh9zeKR/XU= golang.org/x/tools v0.0.0-20200425043458-8463f397d07c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200428211428-0c9eba77bc32 h1:Xvf3ZQTm5bjXPxhI7g+dwqsCqadK1rcNtwtszuatetk= -golang.org/x/tools v0.0.0-20200428211428-0c9eba77bc32/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= @@ -931,20 +825,17 @@ google.golang.org/api v0.5.0 h1:lj9SyhMzyoa38fgFF0oO2T6pjs5IzkLPKfVtxpyCRMM= google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.0 h1:Tfd7cKwKbFRsI8RMAD3oqqw7JPFRrvFlOsfbgVkjOOw= -google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190513181449-d00d292a067c/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.22.0 h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw= google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= @@ -965,9 +856,8 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/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 h1:Ev7yu1/f6+d+b3pi5vPdRPc6nNtP1umSfcWiEfRqv6I= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= -gopkg.in/cheggaaa/pb.v1 v1.0.28/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 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -975,9 +865,6 @@ gopkg.in/h2non/filetype.v1 v1.0.5 h1:CC1jjJjoEhNVbMhXYalmGBhOBK2V70Q1N850wt/98/Y gopkg.in/h2non/filetype.v1 v1.0.5/go.mod h1:M0yem4rwSX5lLVrkEuRRp2/NinFMD5vgJ4DlAhZcfNo= 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.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.48.0 h1:URjZc+8ugRY5mL5uUeQH/a63JcHwdX9xZaWvmNWD7z8= -gopkg.in/ini.v1 v1.48.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/jcmturner/aescts.v1 v1.0.1 h1:cVVZBK2b1zY26haWB4vbBiZrfFQnfbTVrE3xZq6hrEw= @@ -1032,6 +919,8 @@ 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/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c h1:/KUFqjjqAcY4Us6luF5RDNZ16KJtb49HfR3ZHB9qYXM= k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6 h1:Oh3Mzx5pJ+yIumsAD0MOECPVeXsVot0UkiaCGVyfGQY= +k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 h1:d4vVOjXm687F1iLSP2q3lyPPuyvTUt3aVoBpi2DqRsU= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/k8s/console/base/mcs-cluster-role.yaml b/k8s/console/base/mcs-cluster-role.yaml index e22d7059d..5f0046195 100644 --- a/k8s/console/base/mcs-cluster-role.yaml +++ b/k8s/console/base/mcs-cluster-role.yaml @@ -64,7 +64,7 @@ rules: - create - get - apiGroups: - - operator.min.io + - minio.min.io resources: - "*" verbs: diff --git a/k8s/console/base/mcs-deployment.yaml b/k8s/console/base/mcs-deployment.yaml index 678c1935c..73083aa08 100644 --- a/k8s/console/base/mcs-deployment.yaml +++ b/k8s/console/base/mcs-deployment.yaml @@ -12,7 +12,7 @@ spec: labels: app: mcs spec: - serviceAccountName: m3-sa + serviceAccountName: mcs-sa containers: - name: mcs image: minio/mcs:latest diff --git a/k8s/console/base/minio-operator.yaml b/k8s/console/base/minio-operator.yaml index 3a525747e..df9fbc6fd 100644 --- a/k8s/console/base/minio-operator.yaml +++ b/k8s/console/base/minio-operator.yaml @@ -1,14 +1,19 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: minio-operator +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - name: minioinstances.operator.min.io + name: tenants.minio.min.io spec: - group: operator.min.io + group: minio.min.io scope: Namespaced names: - kind: MinIOInstance - singular: minioinstance - plural: minioinstances + kind: Tenant + singular: tenant + plural: tenants versions: - name: v1 served: true @@ -24,49 +29,109 @@ spec: type: object x-kubernetes-preserve-unknown-fields: true properties: - replicas: - type: integer - minimum: 1 - maximum: 32 + metadata: + type: object + x-kubernetes-preserve-unknown-fields: true image: type: string serviceName: type: string - volumesPerServer: - type: integer + serviceAccountName: + type: string + zones: + type: array + items: + type: object + x-kubernetes-preserve-unknown-fields: true + properties: + name: + type: string + servers: + type: integer + volumesPerServer: + type: integer + volumeClaimTemplate: + type: object + x-kubernetes-preserve-unknown-fields: true + resources: + type: object + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + type: object + x-kubernetes-preserve-unknown-fields: true + affinity: + type: object + x-kubernetes-preserve-unknown-fields: true + tolerations: + type: object + x-kubernetes-preserve-unknown-fields: true mountPath: type: string podManagementPolicy: type: string - enum: [Parallel, OrderedReady] + enum: [Parallel,OrderedReady] default: Parallel requestAutoCert: type: boolean default: false + certConfig: + type: object + properties: + commonName: + type: string + organizationName: + type: array + items: + type: string + dnsNames: + type: array + items: + type: string version: type: string mountpath: type: string subpath: type: string - mcs: + nodeSelector: + type: object + x-kubernetes-preserve-unknown-fields: true + credsSecret: + type: object + x-kubernetes-preserve-unknown-fields: true + env: + type: object + x-kubernetes-preserve-unknown-fields: true + console: type: object x-kubernetes-preserve-unknown-fields: true properties: + metadata: + type: object + x-kubernetes-preserve-unknown-fields: true image: type: string replicas: type: integer default: 2 - mcsSecret: + consoleSecret: type: object properties: name: type: string + resources: + type: object + x-kubernetes-preserve-unknown-fields: true + env: + type: object + x-kubernetes-preserve-unknown-fields: true kes: type: object x-kubernetes-preserve-unknown-fields: true properties: + metadata: + type: object + x-kubernetes-preserve-unknown-fields: true image: type: string replicas: @@ -77,6 +142,15 @@ spec: properties: name: type: string + liveness: + type: object + properties: + initialDelaySeconds: + type: integer + periodSeconds: + type: integer + timeoutSeconds: + type: integer status: type: object properties: @@ -90,6 +164,12 @@ spec: type: string jsonPath: ".status.currentState" --- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: minio-operator + namespace: default +--- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: @@ -135,37 +215,40 @@ rules: - update - delete - apiGroups: - - "certificates.k8s.io" + - certificates.k8s.io resources: - - "certificatesigningrequests" - - "certificatesigningrequests/approval" - - "certificatesigningrequests/status" + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status verbs: - update - create - get - delete - apiGroups: - - operator.min.io + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown resources: - - "*" + - signers verbs: - - "*" + - approve + - sign + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' - apiGroups: - min.io resources: - - "*" + - '*' verbs: - - "*" + - '*' --- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: minio-operator - namespace: default ---- -kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding metadata: name: minio-operator-binding roleRef: @@ -192,12 +275,8 @@ spec: labels: name: minio-operator spec: - serviceAccountName: minio-operator containers: - - name: minio-operator - image: minio/k8s-operator:2.0.9 + - image: minio/k8s-operator:v3.0.1 imagePullPolicy: IfNotPresent - # To specify cluster domain, un comment the following: - # env: - # - name: CLUSTER_DOMAIN - # value: mycluster.mydomain + name: minio-operator + serviceAccountName: minio-operator diff --git a/k8s/getoperator.sh b/k8s/getoperator.sh index 6e5586e97..96986c8d1 100755 --- a/k8s/getoperator.sh +++ b/k8s/getoperator.sh @@ -1,3 +1,3 @@ #!/bin/bash # Get's the latest deployment file from MinIO Operator -curl https://raw.githubusercontent.com/minio/minio-operator/master/minio-operator.yaml > operator-console/base/minio-operator.yaml +curl https://raw.githubusercontent.com/minio/operator/master/minio-operator.yaml > operator-console/base/minio-operator.yaml diff --git a/k8s/operator-console/base/mcs-cluster-role.yaml b/k8s/operator-console/base/mcs-cluster-role.yaml index e22d7059d..5f0046195 100644 --- a/k8s/operator-console/base/mcs-cluster-role.yaml +++ b/k8s/operator-console/base/mcs-cluster-role.yaml @@ -64,7 +64,7 @@ rules: - create - get - apiGroups: - - operator.min.io + - minio.min.io resources: - "*" verbs: diff --git a/k8s/operator-console/base/mcs-deployment.yaml b/k8s/operator-console/base/mcs-deployment.yaml index 72b057d6f..0f5d9a8bf 100644 --- a/k8s/operator-console/base/mcs-deployment.yaml +++ b/k8s/operator-console/base/mcs-deployment.yaml @@ -12,7 +12,7 @@ spec: labels: app: mcs spec: - serviceAccountName: m3-sa + serviceAccountName: mcs-sa containers: - name: mcs image: minio/mcs:latest diff --git a/k8s/operator-console/base/minio-operator.yaml b/k8s/operator-console/base/minio-operator.yaml index 3a525747e..df9fbc6fd 100644 --- a/k8s/operator-console/base/minio-operator.yaml +++ b/k8s/operator-console/base/minio-operator.yaml @@ -1,14 +1,19 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: minio-operator +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - name: minioinstances.operator.min.io + name: tenants.minio.min.io spec: - group: operator.min.io + group: minio.min.io scope: Namespaced names: - kind: MinIOInstance - singular: minioinstance - plural: minioinstances + kind: Tenant + singular: tenant + plural: tenants versions: - name: v1 served: true @@ -24,49 +29,109 @@ spec: type: object x-kubernetes-preserve-unknown-fields: true properties: - replicas: - type: integer - minimum: 1 - maximum: 32 + metadata: + type: object + x-kubernetes-preserve-unknown-fields: true image: type: string serviceName: type: string - volumesPerServer: - type: integer + serviceAccountName: + type: string + zones: + type: array + items: + type: object + x-kubernetes-preserve-unknown-fields: true + properties: + name: + type: string + servers: + type: integer + volumesPerServer: + type: integer + volumeClaimTemplate: + type: object + x-kubernetes-preserve-unknown-fields: true + resources: + type: object + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + type: object + x-kubernetes-preserve-unknown-fields: true + affinity: + type: object + x-kubernetes-preserve-unknown-fields: true + tolerations: + type: object + x-kubernetes-preserve-unknown-fields: true mountPath: type: string podManagementPolicy: type: string - enum: [Parallel, OrderedReady] + enum: [Parallel,OrderedReady] default: Parallel requestAutoCert: type: boolean default: false + certConfig: + type: object + properties: + commonName: + type: string + organizationName: + type: array + items: + type: string + dnsNames: + type: array + items: + type: string version: type: string mountpath: type: string subpath: type: string - mcs: + nodeSelector: + type: object + x-kubernetes-preserve-unknown-fields: true + credsSecret: + type: object + x-kubernetes-preserve-unknown-fields: true + env: + type: object + x-kubernetes-preserve-unknown-fields: true + console: type: object x-kubernetes-preserve-unknown-fields: true properties: + metadata: + type: object + x-kubernetes-preserve-unknown-fields: true image: type: string replicas: type: integer default: 2 - mcsSecret: + consoleSecret: type: object properties: name: type: string + resources: + type: object + x-kubernetes-preserve-unknown-fields: true + env: + type: object + x-kubernetes-preserve-unknown-fields: true kes: type: object x-kubernetes-preserve-unknown-fields: true properties: + metadata: + type: object + x-kubernetes-preserve-unknown-fields: true image: type: string replicas: @@ -77,6 +142,15 @@ spec: properties: name: type: string + liveness: + type: object + properties: + initialDelaySeconds: + type: integer + periodSeconds: + type: integer + timeoutSeconds: + type: integer status: type: object properties: @@ -90,6 +164,12 @@ spec: type: string jsonPath: ".status.currentState" --- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: minio-operator + namespace: default +--- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: @@ -135,37 +215,40 @@ rules: - update - delete - apiGroups: - - "certificates.k8s.io" + - certificates.k8s.io resources: - - "certificatesigningrequests" - - "certificatesigningrequests/approval" - - "certificatesigningrequests/status" + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status verbs: - update - create - get - delete - apiGroups: - - operator.min.io + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown resources: - - "*" + - signers verbs: - - "*" + - approve + - sign + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' - apiGroups: - min.io resources: - - "*" + - '*' verbs: - - "*" + - '*' --- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: minio-operator - namespace: default ---- -kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding metadata: name: minio-operator-binding roleRef: @@ -192,12 +275,8 @@ spec: labels: name: minio-operator spec: - serviceAccountName: minio-operator containers: - - name: minio-operator - image: minio/k8s-operator:2.0.9 + - image: minio/k8s-operator:v3.0.1 imagePullPolicy: IfNotPresent - # To specify cluster domain, un comment the following: - # env: - # - name: CLUSTER_DOMAIN - # value: mycluster.mydomain + name: minio-operator + serviceAccountName: minio-operator diff --git a/models/create_tenant_request.go b/models/create_tenant_request.go index 24e5ea0c0..57ba1dcc8 100644 --- a/models/create_tenant_request.go +++ b/models/create_tenant_request.go @@ -42,8 +42,8 @@ type CreateTenantRequest struct { // annotations Annotations map[string]string `json:"annotations,omitempty"` - // enable mcs - EnableMcs *bool `json:"enable_mcs,omitempty"` + // enable console + EnableConsole *bool `json:"enable_console,omitempty"` // enable ssl EnableSsl *bool `json:"enable_ssl,omitempty"` @@ -69,14 +69,8 @@ type CreateTenantRequest struct { // service name ServiceName string `json:"service_name,omitempty"` - // volume configuration - // Required: true - VolumeConfiguration *CreateTenantRequestVolumeConfiguration `json:"volume_configuration"` - - // volumes per server - VolumesPerServer int64 `json:"volumes_per_server,omitempty"` - // zones + // Required: true Zones []*Zone `json:"zones"` } @@ -92,10 +86,6 @@ func (m *CreateTenantRequest) Validate(formats strfmt.Registry) error { res = append(res, err) } - if err := m.validateVolumeConfiguration(formats); err != nil { - res = append(res, err) - } - if err := m.validateZones(formats); err != nil { res = append(res, err) } @@ -128,28 +118,10 @@ func (m *CreateTenantRequest) validateNamespace(formats strfmt.Registry) error { return nil } -func (m *CreateTenantRequest) validateVolumeConfiguration(formats strfmt.Registry) error { - - if err := validate.Required("volume_configuration", "body", m.VolumeConfiguration); err != nil { - return err - } - - if m.VolumeConfiguration != nil { - if err := m.VolumeConfiguration.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("volume_configuration") - } - return err - } - } - - return nil -} - func (m *CreateTenantRequest) validateZones(formats strfmt.Registry) error { - if swag.IsZero(m.Zones) { // not required - return nil + if err := validate.Required("zones", "body", m.Zones); err != nil { + return err } for i := 0; i < len(m.Zones); i++ { @@ -188,57 +160,3 @@ func (m *CreateTenantRequest) UnmarshalBinary(b []byte) error { *m = res return nil } - -// CreateTenantRequestVolumeConfiguration create tenant request volume configuration -// -// swagger:model CreateTenantRequestVolumeConfiguration -type CreateTenantRequestVolumeConfiguration struct { - - // size - // Required: true - Size *string `json:"size"` - - // storage class - StorageClass string `json:"storage_class,omitempty"` -} - -// Validate validates this create tenant request volume configuration -func (m *CreateTenantRequestVolumeConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateSize(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *CreateTenantRequestVolumeConfiguration) validateSize(formats strfmt.Registry) error { - - if err := validate.Required("volume_configuration"+"."+"size", "body", m.Size); err != nil { - return err - } - - return nil -} - -// MarshalBinary interface implementation -func (m *CreateTenantRequestVolumeConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *CreateTenantRequestVolumeConfiguration) UnmarshalBinary(b []byte) error { - var res CreateTenantRequestVolumeConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant.go b/models/tenant.go index 15cd8eaee..1d535a2e3 100644 --- a/models/tenant.go +++ b/models/tenant.go @@ -44,36 +44,18 @@ type Tenant struct { // image Image string `json:"image,omitempty"` - // instance count - InstanceCount int64 `json:"instance_count,omitempty"` - // name Name string `json:"name,omitempty"` // namespace Namespace string `json:"namespace,omitempty"` - // storage class - StorageClass string `json:"storage_class,omitempty"` - // total size TotalSize int64 `json:"total_size,omitempty"` // used size UsedSize int64 `json:"used_size,omitempty"` - // volume count - VolumeCount int64 `json:"volume_count,omitempty"` - - // volume size - VolumeSize int64 `json:"volume_size,omitempty"` - - // volumes per server - VolumesPerServer int64 `json:"volumes_per_server,omitempty"` - - // zone count - ZoneCount int64 `json:"zone_count,omitempty"` - // zones Zones []*Zone `json:"zones"` } diff --git a/models/zone.go b/models/zone.go index 319b1c54f..a05091a49 100644 --- a/models/zone.go +++ b/models/zone.go @@ -35,23 +35,34 @@ import ( type Zone struct { // name - // Required: true - Name *string `json:"name"` + Name string `json:"name,omitempty"` // servers // Required: true Servers *int64 `json:"servers"` + + // volume configuration + // Required: true + VolumeConfiguration *ZoneVolumeConfiguration `json:"volume_configuration"` + + // volumes per server + // Required: true + VolumesPerServer *int32 `json:"volumes_per_server"` } // Validate validates this zone func (m *Zone) Validate(formats strfmt.Registry) error { var res []error - if err := m.validateName(formats); err != nil { + if err := m.validateServers(formats); err != nil { res = append(res, err) } - if err := m.validateServers(formats); err != nil { + if err := m.validateVolumeConfiguration(formats); err != nil { + res = append(res, err) + } + + if err := m.validateVolumesPerServer(formats); err != nil { res = append(res, err) } @@ -61,18 +72,36 @@ func (m *Zone) Validate(formats strfmt.Registry) error { return nil } -func (m *Zone) validateName(formats strfmt.Registry) error { +func (m *Zone) validateServers(formats strfmt.Registry) error { - if err := validate.Required("name", "body", m.Name); err != nil { + if err := validate.Required("servers", "body", m.Servers); err != nil { return err } return nil } -func (m *Zone) validateServers(formats strfmt.Registry) error { +func (m *Zone) validateVolumeConfiguration(formats strfmt.Registry) error { - if err := validate.Required("servers", "body", m.Servers); err != nil { + if err := validate.Required("volume_configuration", "body", m.VolumeConfiguration); err != nil { + return err + } + + if m.VolumeConfiguration != nil { + if err := m.VolumeConfiguration.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("volume_configuration") + } + return err + } + } + + return nil +} + +func (m *Zone) validateVolumesPerServer(formats strfmt.Registry) error { + + if err := validate.Required("volumes_per_server", "body", m.VolumesPerServer); err != nil { return err } @@ -96,3 +125,57 @@ func (m *Zone) UnmarshalBinary(b []byte) error { *m = res return nil } + +// ZoneVolumeConfiguration zone volume configuration +// +// swagger:model ZoneVolumeConfiguration +type ZoneVolumeConfiguration struct { + + // size + // Required: true + Size *int64 `json:"size"` + + // storage class name + StorageClassName string `json:"storage_class_name,omitempty"` +} + +// Validate validates this zone volume configuration +func (m *ZoneVolumeConfiguration) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateSize(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *ZoneVolumeConfiguration) validateSize(formats strfmt.Registry) error { + + if err := validate.Required("volume_configuration"+"."+"size", "body", m.Size); err != nil { + return err + } + + return nil +} + +// MarshalBinary interface implementation +func (m *ZoneVolumeConfiguration) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *ZoneVolumeConfiguration) UnmarshalBinary(b []byte) error { + var res ZoneVolumeConfiguration + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/pkg/auth/jwt.go b/pkg/auth/jwt.go index 9d5b9a2eb..f445c7077 100644 --- a/pkg/auth/jwt.go +++ b/pkg/auth/jwt.go @@ -34,7 +34,7 @@ import ( "github.com/go-openapi/swag" "github.com/minio/mcs/models" xjwt "github.com/minio/mcs/pkg/auth/jwt" - "github.com/minio/minio-go/v6/pkg/credentials" + "github.com/minio/minio-go/v7/pkg/credentials" uuid "github.com/satori/go.uuid" "golang.org/x/crypto/pbkdf2" ) diff --git a/pkg/auth/jwt_test.go b/pkg/auth/jwt_test.go index bea5db471..f95e9e061 100644 --- a/pkg/auth/jwt_test.go +++ b/pkg/auth/jwt_test.go @@ -19,7 +19,7 @@ package auth import ( "testing" - "github.com/minio/minio-go/v6/pkg/credentials" + "github.com/minio/minio-go/v7/pkg/credentials" "github.com/stretchr/testify/assert" ) diff --git a/pkg/auth/ldap.go b/pkg/auth/ldap.go index f2861cce5..81c383948 100644 --- a/pkg/auth/ldap.go +++ b/pkg/auth/ldap.go @@ -20,7 +20,7 @@ import ( "errors" "log" - "github.com/minio/minio-go/v6/pkg/credentials" + "github.com/minio/minio-go/v7/pkg/credentials" ) var ( diff --git a/pkg/auth/operator.go b/pkg/auth/operator.go index e65f61775..6b5397837 100644 --- a/pkg/auth/operator.go +++ b/pkg/auth/operator.go @@ -21,8 +21,8 @@ import ( "log" "github.com/minio/mcs/cluster" - "github.com/minio/minio-go/v6/pkg/credentials" - operatorClientset "github.com/minio/minio-operator/pkg/client/clientset/versioned" + "github.com/minio/minio-go/v7/pkg/credentials" + operatorClientset "github.com/minio/operator/pkg/client/clientset/versioned" ) // operatorCredentialsProvider is an struct to hold the JWT (service account token) @@ -54,7 +54,7 @@ type OperatorClient interface { // Interface implementation // // Define the structure of a operator client and define the functions that are actually used -// from the minio-operator. +// from the minio operator. type operatorClient struct { client *operatorClientset.Clientset } diff --git a/pkg/auth/operator_test.go b/pkg/auth/operator_test.go index 5f127f092..6a5a97b27 100644 --- a/pkg/auth/operator_test.go +++ b/pkg/auth/operator_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/minio/mcs/cluster" - operatorClientset "github.com/minio/minio-operator/pkg/client/clientset/versioned" + operatorClientset "github.com/minio/operator/pkg/client/clientset/versioned" ) type operatorClientTest struct { @@ -15,7 +15,7 @@ type operatorClientTest struct { var operatorAuthenticateMock func(ctx context.Context) ([]byte, error) -// MinIOInstanceDelete implements the minio instance delete action from minio-operator +// TenantDelete implements the minio instance delete action from minio-operator func (c *operatorClientTest) Authenticate(ctx context.Context) ([]byte, error) { return operatorAuthenticateMock(ctx) } diff --git a/restapi/admin_tenants.go b/restapi/admin_tenants.go index 5dab70680..d5dfa728d 100644 --- a/restapi/admin_tenants.go +++ b/restapi/admin_tenants.go @@ -41,7 +41,7 @@ import ( "github.com/minio/mcs/models" "github.com/minio/mcs/restapi/operations" "github.com/minio/mcs/restapi/operations/admin_api" - operator "github.com/minio/minio-operator/pkg/apis/operator.min.io/v1" + operator "github.com/minio/operator/pkg/apis/minio.min.io/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -115,7 +115,7 @@ func registerTenantHandlers(api *operations.McsAPI) { // deleteTenantAction performs the actions of deleting a tenant func deleteTenantAction(ctx context.Context, operatorClient OperatorClient, nameSpace, instanceName string) error { - err := operatorClient.MinIOInstanceDelete(ctx, nameSpace, instanceName, metav1.DeleteOptions{}) + err := operatorClient.TenantDelete(ctx, nameSpace, instanceName, metav1.DeleteOptions{}) if err != nil { return err } @@ -134,7 +134,7 @@ func getDeleteTenantResponse(session *models.Principal, params admin_api.DeleteT return deleteTenantAction(context.Background(), opClient, params.Namespace, params.Tenant) } -func getMinioInstanceScheme(mi *operator.MinIOInstance) string { +func getTenantScheme(mi *operator.Tenant) string { scheme := "http" if mi.AutoCert() || mi.ExternalCert() { scheme = "https" @@ -169,52 +169,60 @@ func getTenantAdminClient(ctx context.Context, client K8sClient, namespace, tena return mAdmin, nil } -func getMinioInstance(ctx context.Context, operatorClient OperatorClient, namespace, tenantName string) (*operator.MinIOInstance, error) { - minInst, err := operatorClient.MinIOInstanceGet(ctx, namespace, tenantName, metav1.GetOptions{}) +func getTenant(ctx context.Context, operatorClient OperatorClient, namespace, tenantName string) (*operator.Tenant, error) { + minInst, err := operatorClient.TenantGet(ctx, namespace, tenantName, metav1.GetOptions{}) if err != nil { return nil, err } return minInst, nil } -func getTenantInfo(minioInstance *operator.MinIOInstance, tenantInfo *usageInfo) *models.Tenant { +func getTenantInfo(tenant *operator.Tenant, tenantInfo *usageInfo) *models.Tenant { var instanceCount int64 var volumeCount int64 - for _, zone := range minioInstance.Spec.Zones { + for _, zone := range tenant.Spec.Zones { instanceCount = instanceCount + int64(zone.Servers) - volumeCount = volumeCount + int64(zone.Servers*int32(minioInstance.Spec.VolumesPerServer)) + volumeCount = volumeCount + int64(zone.Servers*zone.VolumesPerServer) } var zones []*models.Zone - for _, z := range minioInstance.Spec.Zones { - zones = append(zones, &models.Zone{ - Name: swag.String(z.Name), - Servers: swag.Int64(int64(z.Servers)), - }) + var totalSize int64 + for _, z := range tenant.Spec.Zones { + zoneModel := &models.Zone{ + Name: z.Name, + Servers: swag.Int64(int64(z.Servers)), + VolumesPerServer: &z.VolumesPerServer, + VolumeConfiguration: &models.ZoneVolumeConfiguration{}, + } + + if z.VolumeClaimTemplate != nil { + zoneModel.VolumeConfiguration.Size = swag.Int64(z.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value()) + if z.VolumeClaimTemplate.Spec.StorageClassName != nil { + zoneModel.VolumeConfiguration.StorageClassName = *z.VolumeClaimTemplate.Spec.StorageClassName + } + } + + zones = append(zones, zoneModel) + zoneSize := int64(z.Servers) * int64(z.VolumesPerServer) * z.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value() + totalSize = totalSize + zoneSize } return &models.Tenant{ - CreationDate: minioInstance.ObjectMeta.CreationTimestamp.String(), - InstanceCount: instanceCount, - Name: minioInstance.Name, - VolumesPerServer: int64(minioInstance.Spec.VolumesPerServer), - VolumeCount: volumeCount, - VolumeSize: minioInstance.Spec.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value(), - TotalSize: int64(minioInstance.Spec.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value() * volumeCount), - ZoneCount: int64(len(minioInstance.Spec.Zones)), - CurrentState: minioInstance.Status.CurrentState, - Zones: zones, - Namespace: minioInstance.ObjectMeta.Namespace, - Image: minioInstance.Spec.Image, - UsedSize: tenantInfo.DisksUsage, - StorageClass: swag.StringValue(minioInstance.Spec.VolumeClaimTemplate.Spec.StorageClassName), + CreationDate: tenant.ObjectMeta.CreationTimestamp.String(), + Name: tenant.Name, + TotalSize: totalSize, + CurrentState: tenant.Status.CurrentState, + Zones: zones, + Namespace: tenant.ObjectMeta.Namespace, + Image: tenant.Spec.Image, + UsedSize: tenantInfo.DisksUsage, } } func getTenantInfoResponse(session *models.Principal, params admin_api.TenantInfoParams) (*models.Tenant, error) { - // 20 seconds timeout - ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + // 5 seconds timeout + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() opClientClientSet, err := cluster.OperatorClient(session.SessionToken) @@ -234,13 +242,28 @@ func getTenantInfoResponse(session *models.Principal, params admin_api.TenantInf client: clientset, } - minInst, err := getMinioInstance(ctx, opClient, params.Namespace, params.Tenant) + minTenant, err := getTenant(ctx, opClient, params.Namespace, params.Tenant) if err != nil { - log.Println("error getting minioInstance:", err) + log.Println("error getting minioTenant:", err) return nil, err } - minioInstanceScheme := getMinioInstanceScheme(minInst) - mAdmin, err := getTenantAdminClient(ctx, k8sClient, params.Namespace, params.Tenant, minInst.Spec.ServiceName, minioInstanceScheme) + tenantScheme := getTenantScheme(minTenant) + + svcName := minTenant.Spec.ServiceName + if svcName == "" { + svcName = minTenant.Name + // TODO: + // 1 get tenant services + // 2 filter out cluster ip svc + } + + mAdmin, err := getTenantAdminClient( + ctx, + k8sClient, + params.Namespace, + params.Tenant, + svcName, + tenantScheme) if err != nil { log.Println("error getting tenant's admin client:", err) return nil, err @@ -254,7 +277,7 @@ func getTenantInfoResponse(session *models.Principal, params admin_api.TenantInf log.Println("error getting admin info:", err) return nil, err } - info := getTenantInfo(minInst, adminInfo) + info := getTenantInfo(minTenant, adminInfo) return info, nil } @@ -267,20 +290,20 @@ func listTenants(ctx context.Context, operatorClient OperatorClient, namespace s listOpts.Limit = int64(*limit) } - minInstances, err := operatorClient.MinIOInstanceList(ctx, namespace, listOpts) + minTenants, err := operatorClient.TenantList(ctx, namespace, listOpts) if err != nil { return nil, err } var tenants []*models.TenantList - for _, minInst := range minInstances.Items { + for _, minInst := range minTenants.Items { var instanceCount int64 var volumeCount int64 for _, zone := range minInst.Spec.Zones { instanceCount = instanceCount + int64(zone.Servers) - volumeCount = volumeCount + int64(zone.Servers*int32(minInst.Spec.VolumesPerServer)) + volumeCount = volumeCount + int64(zone.Servers*zone.VolumesPerServer) } tenants = append(tenants, &models.TenantList{ @@ -289,7 +312,6 @@ func listTenants(ctx context.Context, operatorClient OperatorClient, namespace s ZoneCount: int64(len(minInst.Spec.Zones)), InstanceCount: instanceCount, VolumeCount: volumeCount, - VolumeSize: minInst.Spec.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value(), CurrentState: minInst.Status.CurrentState, Namespace: minInst.ObjectMeta.Namespace, }) @@ -380,59 +402,33 @@ func getTenantCreatedResponse(session *models.Principal, params admin_api.Create return nil, err } - enableSSL := true + enableSSL := false if params.Body.EnableSsl != nil { enableSSL = *params.Body.EnableSsl } enableMCS := true - if params.Body.EnableMcs != nil { - enableMCS = *params.Body.EnableMcs - } - - volumeSize, err := resource.ParseQuantity(*params.Body.VolumeConfiguration.Size) - if err != nil { - return nil, err + if params.Body.EnableConsole != nil { + enableMCS = *params.Body.EnableConsole } + // TODO: Calculate this ourselves? memorySize, err := resource.ParseQuantity(getTenantMemorySize()) if err != nil { return nil, err } - volTemp := corev1.PersistentVolumeClaimSpec{ - AccessModes: []corev1.PersistentVolumeAccessMode{ - corev1.ReadWriteOnce, - }, - Resources: corev1.ResourceRequirements{ - Requests: corev1.ResourceList{ - corev1.ResourceStorage: volumeSize, - corev1.ResourceMemory: memorySize, - }, - }, - } - - if params.Body.VolumeConfiguration.StorageClass != "" { - volTemp.StorageClassName = ¶ms.Body.VolumeConfiguration.StorageClass - } - //Construct a MinIO Instance with everything we are getting from parameters - minInst := operator.MinIOInstance{ + minInst := operator.Tenant{ ObjectMeta: metav1.ObjectMeta{ Name: *params.Body.Name, }, - Spec: operator.MinIOInstanceSpec{ + Spec: operator.TenantSpec{ Image: minioImage, Mountpath: "/export", CredsSecret: &corev1.LocalObjectReference{ Name: secretName, }, RequestAutoCert: enableSSL, - VolumeClaimTemplate: &corev1.PersistentVolumeClaim{ - ObjectMeta: metav1.ObjectMeta{ - Name: "data", - }, - Spec: volTemp, - }, }, } // optionals are set below @@ -460,10 +456,11 @@ func getTenantCreatedResponse(session *models.Principal, params admin_api.Create return nil, err } - minInst.Spec.MCS = &operator.MCSConfig{ - Replicas: 2, - Image: "minio/mcs:v0.1.1", - MCSSecret: &corev1.LocalObjectReference{Name: mcsSecretName}, + const consoleVersion = "minio/mcs:v0.2.1" + minInst.Spec.Console = &operator.ConsoleConfiguration{ + Replicas: 2, + Image: consoleVersion, + ConsoleSecret: &corev1.LocalObjectReference{Name: mcsSecretName}, } } @@ -474,18 +471,39 @@ func getTenantCreatedResponse(session *models.Principal, params admin_api.Create // set the zones if they are provided if len(params.Body.Zones) > 0 { for _, zone := range params.Body.Zones { + volumeSize := resource.NewQuantity(*zone.VolumeConfiguration.Size, resource.DecimalExponent) + volTemp := corev1.PersistentVolumeClaimSpec{ + AccessModes: []corev1.PersistentVolumeAccessMode{ + corev1.ReadWriteOnce, + }, + Resources: corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceStorage: *volumeSize, + }, + }, + } + if zone.VolumeConfiguration.StorageClassName != "" { + volTemp.StorageClassName = &zone.VolumeConfiguration.StorageClassName + } minInst.Spec.Zones = append(minInst.Spec.Zones, operator.Zone{ - Name: *zone.Name, - Servers: int32(*zone.Servers), + Name: zone.Name, + Servers: int32(*zone.Servers), + VolumesPerServer: *zone.VolumesPerServer, + VolumeClaimTemplate: &corev1.PersistentVolumeClaim{ + ObjectMeta: metav1.ObjectMeta{ + Name: "data", + }, + Spec: volTemp, + }, + Resources: corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceMemory: memorySize, + }, + }, }) } } - // Set Volumes Per Server if provided, default 1 - minInst.Spec.VolumesPerServer = 1 - if params.Body.VolumesPerServer > 0 { - minInst.Spec.VolumesPerServer = int(params.Body.VolumesPerServer) - } // Set Mount Path if provided if params.Body.MounthPath != "" { minInst.Spec.Mountpath = params.Body.MounthPath @@ -503,7 +521,7 @@ func getTenantCreatedResponse(session *models.Principal, params admin_api.Create return nil, err } - _, err = opClient.OperatorV1().MinIOInstances(ns).Create(context.Background(), &minInst, metav1.CreateOptions{}) + _, err = opClient.MinioV1().Tenants(ns).Create(context.Background(), &minInst, metav1.CreateOptions{}) if err != nil { return nil, err } @@ -522,10 +540,10 @@ func getTenantCreatedResponse(session *models.Principal, params admin_api.Create }, nil } -// updateTenantAction does an update on the minioInstance by patching the desired changes +// updateTenantAction does an update on the minioTenant by patching the desired changes func updateTenantAction(ctx context.Context, operatorClient OperatorClient, httpCl cluster.HTTPClientI, nameSpace string, params admin_api.UpdateTenantParams) error { imageToUpdate := params.Body.Image - minInst, err := operatorClient.MinIOInstanceGet(ctx, nameSpace, params.Tenant, metav1.GetOptions{}) + minInst, err := operatorClient.TenantGet(ctx, nameSpace, params.Tenant, metav1.GetOptions{}) if err != nil { return err } @@ -545,7 +563,7 @@ func updateTenantAction(ctx context.Context, operatorClient OperatorClient, http if err != nil { return err } - _, err = operatorClient.MinIOInstancePatch(ctx, nameSpace, minInst.Name, types.MergePatchType, payloadBytes, metav1.PatchOptions{}) + _, err = operatorClient.TenantPatch(ctx, nameSpace, minInst.Name, types.MergePatchType, payloadBytes, metav1.PatchOptions{}) if err != nil { return err } @@ -569,7 +587,7 @@ func getUpdateTenantResponse(session *models.Principal, params admin_api.UpdateT }, } if err := updateTenantAction(ctx, opClient, httpC, params.Namespace, params); err != nil { - log.Println("error patching MinioInstance:", err) + log.Println("error patching Tenant:", err) return err } return nil @@ -577,13 +595,13 @@ func getUpdateTenantResponse(session *models.Principal, params admin_api.UpdateT // addTenantZone creates a zone to a defined tenant func addTenantZone(ctx context.Context, operatorClient OperatorClient, params admin_api.TenantAddZoneParams) error { - minInst, err := operatorClient.MinIOInstanceGet(ctx, params.Namespace, params.Tenant, metav1.GetOptions{}) + minInst, err := operatorClient.TenantGet(ctx, params.Namespace, params.Tenant, metav1.GetOptions{}) if err != nil { return err } minInst.Spec.Zones = append(minInst.Spec.Zones, operator.Zone{ - Name: *params.Body.Name, + Name: params.Body.Name, Servers: int32(*params.Body.Servers), }) @@ -592,7 +610,7 @@ func addTenantZone(ctx context.Context, operatorClient OperatorClient, params ad return err } - _, err = operatorClient.MinIOInstancePatch(ctx, params.Namespace, minInst.Name, types.MergePatchType, payloadBytes, metav1.PatchOptions{}) + _, err = operatorClient.TenantPatch(ctx, params.Namespace, minInst.Name, types.MergePatchType, payloadBytes, metav1.PatchOptions{}) if err != nil { return err } @@ -610,7 +628,7 @@ func getTenantAddZoneResponse(session *models.Principal, params admin_api.Tenant client: opClientClientSet, } if err := addTenantZone(ctx, opClient, params); err != nil { - log.Println("error patching MinioInstance:", err) + log.Println("error patching Tenant:", err) return err } return nil diff --git a/restapi/admin_tenants_test.go b/restapi/admin_tenants_test.go index cc2f24214..225f24cbd 100644 --- a/restapi/admin_tenants_test.go +++ b/restapi/admin_tenants_test.go @@ -19,6 +19,7 @@ package restapi import ( "bytes" "context" + "encoding/json" "errors" "io/ioutil" "net/http" @@ -29,40 +30,40 @@ import ( "github.com/minio/mcs/cluster" "github.com/minio/mcs/models" "github.com/minio/mcs/restapi/operations/admin_api" - operator "github.com/minio/minio-operator/pkg/apis/operator.min.io/v1" - v1 "github.com/minio/minio-operator/pkg/apis/operator.min.io/v1" + operator "github.com/minio/operator/pkg/apis/minio.min.io/v1" + v1 "github.com/minio/operator/pkg/apis/minio.min.io/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" ) -var opClientMinioInstanceDeleteMock func(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error -var opClientMinioInstanceGetMock func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) -var opClientMinioInstancePatchMock func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) -var opClientMinioInstanceListMock func(ctx context.Context, namespace string, opts metav1.ListOptions) (*v1.MinIOInstanceList, error) +var opClientTenantDeleteMock func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error +var opClientTenantGetMock func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) +var opClientTenantPatchMock func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) +var opClientTenantListMock func(ctx context.Context, namespace string, opts metav1.ListOptions) (*v1.TenantList, error) var httpClientGetMock func(url string) (resp *http.Response, err error) var k8sclientGetSecretMock func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) var k8sclientGetServiceMock func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) -// mock function of MinioInstanceDelete() -func (ac opClientMock) MinIOInstanceDelete(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error { - return opClientMinioInstanceDeleteMock(ctx, namespace, instanceName, options) +// mock function of TenantDelete() +func (ac opClientMock) TenantDelete(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { + return opClientTenantDeleteMock(ctx, namespace, tenantName, options) } -// mock function of MinIOInstanceGet() -func (ac opClientMock) MinIOInstanceGet(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { - return opClientMinioInstanceGetMock(ctx, namespace, instanceName, options) +// mock function of TenantGet() +func (ac opClientMock) TenantGet(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) { + return opClientTenantGetMock(ctx, namespace, tenantName, options) } -// mock function of MinioInstancePatch() -func (ac opClientMock) MinIOInstancePatch(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { - return opClientMinioInstancePatchMock(ctx, namespace, instanceName, pt, data, options) +// mock function of TenantPatch() +func (ac opClientMock) TenantPatch(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { + return opClientTenantPatchMock(ctx, namespace, tenantName, pt, data, options) } -// mock function of MinioInstanceList() -func (ac opClientMock) MinIOInstanceList(ctx context.Context, namespace string, opts metav1.ListOptions) (*v1.MinIOInstanceList, error) { - return opClientMinioInstanceListMock(ctx, namespace, opts) +// mock function of TenantList() +func (ac opClientMock) TenantList(ctx context.Context, namespace string, opts metav1.ListOptions) (*v1.TenantList, error) { + return opClientTenantListMock(ctx, namespace, opts) } // mock function of get() @@ -250,8 +251,8 @@ func Test_TenantInfoTenantAdminClient(t *testing.T) { func Test_TenantInfo(t *testing.T) { testTimeStamp := metav1.Now() type args struct { - minioInstance *operator.MinIOInstance - tenantInfo *usageInfo + minioTenant *operator.Tenant + tenantInfo *usageInfo } tests := []struct { name string @@ -261,33 +262,34 @@ func Test_TenantInfo(t *testing.T) { { name: "Get tenant Info", args: args{ - minioInstance: &operator.MinIOInstance{ + minioTenant: &operator.Tenant{ ObjectMeta: metav1.ObjectMeta{ CreationTimestamp: testTimeStamp, Name: "tenant1", Namespace: "minio-ns", }, - Spec: operator.MinIOInstanceSpec{ + Spec: operator.TenantSpec{ Zones: []operator.Zone{ { - Name: "zone1", - Servers: int32(2), - }, - }, - VolumesPerServer: 4, - VolumeClaimTemplate: &corev1.PersistentVolumeClaim{ - Spec: corev1.PersistentVolumeClaimSpec{ - Resources: corev1.ResourceRequirements{ - Requests: map[corev1.ResourceName]resource.Quantity{ - corev1.ResourceStorage: resource.MustParse("1Mi"), + Name: "zone1", + Servers: int32(2), + VolumesPerServer: 4, + VolumeClaimTemplate: &corev1.PersistentVolumeClaim{ + Spec: corev1.PersistentVolumeClaimSpec{ + Resources: corev1.ResourceRequirements{ + Requests: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceStorage: resource.MustParse("1Mi"), + }, + }, + StorageClassName: swag.String("standard"), }, }, - StorageClassName: swag.String("standard"), }, }, + Image: "minio/minio:RELEASE.2020-06-14T18-32-17Z", }, - Status: operator.MinIOInstanceStatus{ + Status: operator.TenantStatus{ CurrentState: "ready", }, }, @@ -296,33 +298,34 @@ func Test_TenantInfo(t *testing.T) { }, }, want: &models.Tenant{ - CreationDate: testTimeStamp.String(), - InstanceCount: 2, // number of servers - Name: "tenant1", - VolumesPerServer: int64(4), - VolumeCount: int64(8), - VolumeSize: int64(1048576), - TotalSize: int64(8388608), - ZoneCount: int64(1), - CurrentState: "ready", + CreationDate: testTimeStamp.String(), + Name: "tenant1", + TotalSize: int64(8388608), + CurrentState: "ready", Zones: []*models.Zone{ { - Name: swag.String("zone1"), - Servers: swag.Int64(int64(2)), + Name: "zone1", + Servers: swag.Int64(int64(2)), + VolumesPerServer: swag.Int32(4), + VolumeConfiguration: &models.ZoneVolumeConfiguration{ + StorageClassName: "standard", + Size: swag.Int64(1024 * 1024), + }, }, }, - Namespace: "minio-ns", - Image: "minio/minio:RELEASE.2020-06-14T18-32-17Z", - UsedSize: int64(1024), - StorageClass: "standard", + Namespace: "minio-ns", + Image: "minio/minio:RELEASE.2020-06-14T18-32-17Z", + UsedSize: int64(1024), }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got := getTenantInfo(tt.args.minioInstance, tt.args.tenantInfo) + got := getTenantInfo(tt.args.minioTenant, tt.args.tenantInfo) if !reflect.DeepEqual(got, tt.want) { - t.Errorf("got %v want %v", got, tt.want) + ji, _ := json.Marshal(got) + vi, _ := json.Marshal(tt.want) + t.Errorf("got %s want %s", ji, vi) } }) } @@ -332,11 +335,11 @@ func Test_deleteTenantAction(t *testing.T) { opClient := opClientMock{} type args struct { - ctx context.Context - operatorClient OperatorClient - nameSpace string - instanceName string - mockMinioInstanceDelete func(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error + ctx context.Context + operatorClient OperatorClient + nameSpace string + tenantName string + mockTenantDelete func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error } tests := []struct { name string @@ -349,8 +352,8 @@ func Test_deleteTenantAction(t *testing.T) { ctx: context.Background(), operatorClient: opClient, nameSpace: "default", - instanceName: "minio-instance", - mockMinioInstanceDelete: func(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error { + tenantName: "minio-tenant", + mockTenantDelete: func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { return nil }, }, @@ -362,8 +365,8 @@ func Test_deleteTenantAction(t *testing.T) { ctx: context.Background(), operatorClient: opClient, nameSpace: "default", - instanceName: "minio-instance", - mockMinioInstanceDelete: func(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error { + tenantName: "minio-tenant", + mockTenantDelete: func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { return errors.New("something happened") }, }, @@ -371,9 +374,9 @@ func Test_deleteTenantAction(t *testing.T) { }, } for _, tt := range tests { - opClientMinioInstanceDeleteMock = tt.args.mockMinioInstanceDelete + opClientTenantDeleteMock = tt.args.mockTenantDelete t.Run(tt.name, func(t *testing.T) { - if err := deleteTenantAction(tt.args.ctx, tt.args.operatorClient, tt.args.nameSpace, tt.args.instanceName); (err != nil) != tt.wantErr { + if err := deleteTenantAction(tt.args.ctx, tt.args.operatorClient, tt.args.nameSpace, tt.args.tenantName); (err != nil) != tt.wantErr { t.Errorf("deleteTenantAction() error = %v, wantErr %v", err, tt.wantErr) } }) @@ -384,12 +387,12 @@ func Test_TenantAddZone(t *testing.T) { opClient := opClientMock{} type args struct { - ctx context.Context - operatorClient OperatorClient - nameSpace string - mockMinioInstancePatch func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) - mockMinioInstanceGet func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) - params admin_api.TenantAddZoneParams + ctx context.Context + operatorClient OperatorClient + nameSpace string + mockTenantPatch func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) + mockTenantGet func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) + params admin_api.TenantAddZoneParams } tests := []struct { name string @@ -402,15 +405,15 @@ func Test_TenantAddZone(t *testing.T) { ctx: context.Background(), operatorClient: opClient, nameSpace: "default", - mockMinioInstancePatch: func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, - mockMinioInstanceGet: func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, params: admin_api.TenantAddZoneParams{ Body: &models.Zone{ - Name: swag.String("zone-1"), + Name: "zone-1", Servers: swag.Int64(int64(4)), }, }, @@ -423,15 +426,15 @@ func Test_TenantAddZone(t *testing.T) { ctx: context.Background(), operatorClient: opClient, nameSpace: "default", - mockMinioInstancePatch: func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { + mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { return nil, errors.New("errors") }, - mockMinioInstanceGet: func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, params: admin_api.TenantAddZoneParams{ Body: &models.Zone{ - Name: swag.String("zone-1"), + Name: "zone-1", Servers: swag.Int64(int64(4)), }, }, @@ -444,15 +447,15 @@ func Test_TenantAddZone(t *testing.T) { ctx: context.Background(), operatorClient: opClient, nameSpace: "default", - mockMinioInstancePatch: func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { + mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { return nil, errors.New("errors") }, - mockMinioInstanceGet: func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { + mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) { return nil, errors.New("errors") }, params: admin_api.TenantAddZoneParams{ Body: &models.Zone{ - Name: swag.String("zone-1"), + Name: "zone-1", Servers: swag.Int64(int64(4)), }, }, @@ -461,8 +464,8 @@ func Test_TenantAddZone(t *testing.T) { }, } for _, tt := range tests { - opClientMinioInstanceGetMock = tt.args.mockMinioInstanceGet - opClientMinioInstancePatchMock = tt.args.mockMinioInstancePatch + opClientTenantGetMock = tt.args.mockTenantGet + opClientTenantPatchMock = tt.args.mockTenantPatch t.Run(tt.name, func(t *testing.T) { if err := addTenantZone(tt.args.ctx, tt.args.operatorClient, tt.args.params); (err != nil) != tt.wantErr { t.Errorf("addTenantZone() error = %v, wantErr %v", err, tt.wantErr) @@ -476,15 +479,15 @@ func Test_UpdateTenantAction(t *testing.T) { httpClientM := httpClientMock{} type args struct { - ctx context.Context - operatorClient OperatorClient - httpCl cluster.HTTPClientI - nameSpace string - instanceName string - mockMinioInstancePatch func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) - mockMinioInstanceGet func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) - mockHTTPClientGet func(url string) (resp *http.Response, err error) - params admin_api.UpdateTenantParams + ctx context.Context + operatorClient OperatorClient + httpCl cluster.HTTPClientI + nameSpace string + tenantName string + mockTenantPatch func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) + mockTenantGet func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) + mockHTTPClientGet func(url string) (resp *http.Response, err error) + params admin_api.UpdateTenantParams } tests := []struct { name string @@ -498,12 +501,12 @@ func Test_UpdateTenantAction(t *testing.T) { operatorClient: opClient, httpCl: httpClientM, nameSpace: "default", - instanceName: "minio-instance", - mockMinioInstancePatch: func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + tenantName: "minio-tenant", + mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, - mockMinioInstanceGet: func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, mockHTTPClientGet: func(url string) (resp *http.Response, err error) { return &http.Response{}, nil @@ -517,17 +520,17 @@ func Test_UpdateTenantAction(t *testing.T) { wantErr: false, }, { - name: "Error occurs getting minioInstance", + name: "Error occurs getting minioTenant", args: args{ ctx: context.Background(), operatorClient: opClient, httpCl: httpClientM, nameSpace: "default", - instanceName: "minio-instance", - mockMinioInstancePatch: func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + tenantName: "minio-tenant", + mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, - mockMinioInstanceGet: func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { + mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) { return nil, errors.New("error-get") }, mockHTTPClientGet: func(url string) (resp *http.Response, err error) { @@ -542,18 +545,18 @@ func Test_UpdateTenantAction(t *testing.T) { wantErr: true, }, { - name: "Error occurs patching minioInstance", + name: "Error occurs patching minioTenant", args: args{ ctx: context.Background(), operatorClient: opClient, httpCl: httpClientM, nameSpace: "default", - instanceName: "minio-instance", - mockMinioInstancePatch: func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { + tenantName: "minio-tenant", + mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { return nil, errors.New("error-get") }, - mockMinioInstanceGet: func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, mockHTTPClientGet: func(url string) (resp *http.Response, err error) { return &http.Response{}, nil @@ -573,12 +576,12 @@ func Test_UpdateTenantAction(t *testing.T) { operatorClient: opClient, httpCl: httpClientM, nameSpace: "default", - instanceName: "minio-instance", - mockMinioInstancePatch: func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + tenantName: "minio-tenant", + mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, - mockMinioInstanceGet: func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, mockHTTPClientGet: func(url string) (resp *http.Response, err error) { r := ioutil.NopCloser(bytes.NewReader([]byte(`./minio.RELEASE.2020-06-18T02-23-35Z"`))) @@ -601,12 +604,12 @@ func Test_UpdateTenantAction(t *testing.T) { operatorClient: opClient, httpCl: httpClientM, nameSpace: "default", - instanceName: "minio-instance", - mockMinioInstancePatch: func(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + tenantName: "minio-tenant", + mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, - mockMinioInstanceGet: func(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { - return &v1.MinIOInstance{}, nil + mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*v1.Tenant, error) { + return &v1.Tenant{}, nil }, mockHTTPClientGet: func(url string) (resp *http.Response, err error) { return nil, errors.New("error") @@ -621,8 +624,8 @@ func Test_UpdateTenantAction(t *testing.T) { }, } for _, tt := range tests { - opClientMinioInstanceGetMock = tt.args.mockMinioInstanceGet - opClientMinioInstancePatchMock = tt.args.mockMinioInstancePatch + opClientTenantGetMock = tt.args.mockTenantGet + opClientTenantPatchMock = tt.args.mockTenantPatch httpClientGetMock = tt.args.mockHTTPClientGet t.Run(tt.name, func(t *testing.T) { if err := updateTenantAction(tt.args.ctx, tt.args.operatorClient, tt.args.httpCl, tt.args.nameSpace, tt.args.params); (err != nil) != tt.wantErr { diff --git a/restapi/client.go b/restapi/client.go index 0ae8286a1..61f22f194 100644 --- a/restapi/client.go +++ b/restapi/client.go @@ -30,8 +30,9 @@ import ( "github.com/minio/mcs/pkg/auth" xjwt "github.com/minio/mcs/pkg/auth/jwt" "github.com/minio/mcs/pkg/auth/ldap" - "github.com/minio/minio-go/v6" - "github.com/minio/minio-go/v6/pkg/credentials" + "github.com/minio/minio-go/v7" + "github.com/minio/minio-go/v7/pkg/credentials" + "github.com/minio/minio-go/v7/pkg/notification" ) func init() { @@ -47,9 +48,9 @@ type MinioClient interface { listBucketsWithContext(ctx context.Context) ([]minio.BucketInfo, error) makeBucketWithContext(ctx context.Context, bucketName, location string) error setBucketPolicyWithContext(ctx context.Context, bucketName, policy string) error - removeBucket(bucketName string) error - getBucketNotification(bucketName string) (bucketNotification minio.BucketNotification, err error) - getBucketPolicy(bucketName string) (string, error) + removeBucket(ctx context.Context, bucketName string) error + getBucketNotification(ctx context.Context, bucketName string) (config notification.Configuration, err error) + getBucketPolicy(ctx context.Context, bucketName string) (string, error) } // Interface implementation @@ -62,32 +63,34 @@ type minioClient struct { // implements minio.ListBucketsWithContext(ctx) func (c minioClient) listBucketsWithContext(ctx context.Context) ([]minio.BucketInfo, error) { - return c.client.ListBucketsWithContext(ctx) + return c.client.ListBuckets(ctx) } // implements minio.MakeBucketWithContext(ctx, bucketName, location) func (c minioClient) makeBucketWithContext(ctx context.Context, bucketName, location string) error { - return c.client.MakeBucketWithContext(ctx, bucketName, location) + return c.client.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{ + Region: location, + }) } // implements minio.SetBucketPolicyWithContext(ctx, bucketName, policy) func (c minioClient) setBucketPolicyWithContext(ctx context.Context, bucketName, policy string) error { - return c.client.SetBucketPolicyWithContext(ctx, bucketName, policy) + return c.client.SetBucketPolicy(ctx, bucketName, policy) } // implements minio.RemoveBucket(bucketName) -func (c minioClient) removeBucket(bucketName string) error { - return c.client.RemoveBucket(bucketName) +func (c minioClient) removeBucket(ctx context.Context, bucketName string) error { + return c.client.RemoveBucket(ctx, bucketName) } // implements minio.GetBucketNotification(bucketName) -func (c minioClient) getBucketNotification(bucketName string) (bucketNotification minio.BucketNotification, err error) { - return c.client.GetBucketNotification(bucketName) +func (c minioClient) getBucketNotification(ctx context.Context, bucketName string) (config notification.Configuration, err error) { + return c.client.GetBucketNotification(ctx, bucketName) } // implements minio.GetBucketPolicy(bucketName) -func (c minioClient) getBucketPolicy(bucketName string) (string, error) { - return c.client.GetBucketPolicy(bucketName) +func (c minioClient) getBucketPolicy(ctx context.Context, bucketName string) (string, error) { + return c.client.GetBucketPolicy(ctx, bucketName) } // MCS3Client interface with all functions to be implemented @@ -160,8 +163,10 @@ func (s mcsSTSAssumeRole) IsExpired() bool { } // STSClient contains http.client configuration need it by STSAssumeRole -var STSClient = PrepareSTSClient() -var MinioEndpoint = getMinIOServer() +var ( + STSClient = PrepareSTSClient() + MinioEndpoint = getMinIOServer() +) func newMcsCredentials(accessKey, secretKey, location string) (*credentials.Credentials, error) { // Future authentication methods can be added under this switch statement @@ -229,14 +234,14 @@ func getMcsCredentialsFromSession(claims *models.Principal) *credentials.Credent // from the provided jwt func newMinioClient(claims *models.Principal) (*minio.Client, error) { creds := getMcsCredentialsFromSession(claims) - minioClient, err := minio.NewWithOptions(getMinIOEndpoint(), &minio.Options{ - Creds: creds, - Secure: getMinIOEndpointIsSecure(), + minioClient, err := minio.New(getMinIOEndpoint(), &minio.Options{ + Creds: creds, + Secure: getMinIOEndpointIsSecure(), + Transport: STSClient.Transport, }) if err != nil { return nil, err } - minioClient.SetCustomTransport(STSClient.Transport) return minioClient, nil } diff --git a/restapi/config.go b/restapi/config.go index a76fcd1d5..87920d0f8 100644 --- a/restapi/config.go +++ b/restapi/config.go @@ -40,7 +40,7 @@ var TLSPort = "9443" var TLSRedirect = "off" // defaultTenantMemorySize default value used -// when generating minioInstance request +// when generating minioTenant request var defaultTenantMemorySize = "16Gi" func getAccessKey() string { @@ -234,7 +234,7 @@ func getSecureExpectCTHeader() string { } // getTenantMemorySize Memory size value to be used when generating the -// MinioInstance request +// Tenant request func getTenantMemorySize() string { return env.Get(McsTenantMemorySize, defaultTenantMemorySize) } diff --git a/restapi/constants.go b/restapi/constants.go index 6b7bad7a2..a5f22c5cd 100644 --- a/restapi/constants.go +++ b/restapi/constants.go @@ -17,6 +17,6 @@ package restapi const ( - // McsTenantMemorySize Memory size to be used when creating MinioInstance request + // McsTenantMemorySize Memory size to be used when creating Tenant request McsTenantMemorySize = "MCS_TENANT_MEMORY_SIZE" ) diff --git a/restapi/embedded_spec.go b/restapi/embedded_spec.go index 60039b942..eb4a0ed46 100644 --- a/restapi/embedded_spec.go +++ b/restapi/embedded_spec.go @@ -726,7 +726,7 @@ func init() { "tags": [ "UserAPI" ], - "summary": "Login to mcs", + "summary": "Login to Console", "operationId": "Login", "parameters": [ { @@ -827,7 +827,7 @@ func init() { "tags": [ "UserAPI" ], - "summary": "Logout from mcs.", + "summary": "Logout from Console.", "operationId": "Logout", "responses": { "200": { @@ -1929,8 +1929,8 @@ func init() { "type": "object", "required": [ "name", - "volume_configuration", - "namespace" + "namespace", + "zones" ], "properties": { "access_key": { @@ -1942,7 +1942,7 @@ func init() { "type": "string" } }, - "enable_mcs": { + "enable_console": { "type": "boolean", "default": true }, @@ -1969,23 +1969,6 @@ func init() { "service_name": { "type": "string" }, - "volume_configuration": { - "type": "object", - "required": [ - "size" - ], - "properties": { - "size": { - "type": "string" - }, - "storage_class": { - "type": "string" - } - } - }, - "volumes_per_server": { - "type": "integer" - }, "zones": { "type": "array", "items": { @@ -2575,18 +2558,12 @@ func init() { "image": { "type": "string" }, - "instance_count": { - "type": "integer" - }, "name": { "type": "string" }, "namespace": { "type": "string" }, - "storage_class": { - "type": "string" - }, "total_size": { "type": "integer", "format": "int64" @@ -2595,19 +2572,6 @@ func init() { "type": "integer", "format": "int64" }, - "volume_count": { - "type": "integer" - }, - "volume_size": { - "type": "integer", - "format": "int64" - }, - "volumes_per_server": { - "type": "integer" - }, - "zone_count": { - "type": "integer" - }, "zones": { "type": "array", "items": { @@ -2727,8 +2691,9 @@ func init() { "zone": { "type": "object", "required": [ - "name", - "servers" + "servers", + "volumes_per_server", + "volume_configuration" ], "properties": { "name": { @@ -2736,6 +2701,24 @@ func init() { }, "servers": { "type": "integer" + }, + "volume_configuration": { + "type": "object", + "required": [ + "size" + ], + "properties": { + "size": { + "type": "integer" + }, + "storage_class_name": { + "type": "string" + } + } + }, + "volumes_per_server": { + "type": "integer", + "format": "int32" } } } @@ -3446,7 +3429,7 @@ func init() { "tags": [ "UserAPI" ], - "summary": "Login to mcs", + "summary": "Login to Console", "operationId": "Login", "parameters": [ { @@ -3547,7 +3530,7 @@ func init() { "tags": [ "UserAPI" ], - "summary": "Logout from mcs.", + "summary": "Logout from Console.", "operationId": "Logout", "responses": { "200": { @@ -4463,16 +4446,16 @@ func init() { } }, "definitions": { - "CreateTenantRequestVolumeConfiguration": { + "ZoneVolumeConfiguration": { "type": "object", "required": [ "size" ], "properties": { "size": { - "type": "string" + "type": "integer" }, - "storage_class": { + "storage_class_name": { "type": "string" } } @@ -4663,8 +4646,8 @@ func init() { "type": "object", "required": [ "name", - "volume_configuration", - "namespace" + "namespace", + "zones" ], "properties": { "access_key": { @@ -4676,7 +4659,7 @@ func init() { "type": "string" } }, - "enable_mcs": { + "enable_console": { "type": "boolean", "default": true }, @@ -4703,23 +4686,6 @@ func init() { "service_name": { "type": "string" }, - "volume_configuration": { - "type": "object", - "required": [ - "size" - ], - "properties": { - "size": { - "type": "string" - }, - "storage_class": { - "type": "string" - } - } - }, - "volumes_per_server": { - "type": "integer" - }, "zones": { "type": "array", "items": { @@ -5309,18 +5275,12 @@ func init() { "image": { "type": "string" }, - "instance_count": { - "type": "integer" - }, "name": { "type": "string" }, "namespace": { "type": "string" }, - "storage_class": { - "type": "string" - }, "total_size": { "type": "integer", "format": "int64" @@ -5329,19 +5289,6 @@ func init() { "type": "integer", "format": "int64" }, - "volume_count": { - "type": "integer" - }, - "volume_size": { - "type": "integer", - "format": "int64" - }, - "volumes_per_server": { - "type": "integer" - }, - "zone_count": { - "type": "integer" - }, "zones": { "type": "array", "items": { @@ -5461,8 +5408,9 @@ func init() { "zone": { "type": "object", "required": [ - "name", - "servers" + "servers", + "volumes_per_server", + "volume_configuration" ], "properties": { "name": { @@ -5470,6 +5418,24 @@ func init() { }, "servers": { "type": "integer" + }, + "volume_configuration": { + "type": "object", + "required": [ + "size" + ], + "properties": { + "size": { + "type": "integer" + }, + "storage_class_name": { + "type": "string" + } + } + }, + "volumes_per_server": { + "type": "integer", + "format": "int32" } } } diff --git a/restapi/operations/user_api/login.go b/restapi/operations/user_api/login.go index bef6b48ab..bce3ce1e2 100644 --- a/restapi/operations/user_api/login.go +++ b/restapi/operations/user_api/login.go @@ -48,7 +48,7 @@ func NewLogin(ctx *middleware.Context, handler LoginHandler) *Login { /*Login swagger:route POST /login UserAPI login -Login to mcs +Login to Console */ type Login struct { diff --git a/restapi/operations/user_api/logout.go b/restapi/operations/user_api/logout.go index 0cac8edfb..f46dff52e 100644 --- a/restapi/operations/user_api/logout.go +++ b/restapi/operations/user_api/logout.go @@ -50,7 +50,7 @@ func NewLogout(ctx *middleware.Context, handler LogoutHandler) *Logout { /*Logout swagger:route POST /logout UserAPI logout -Logout from mcs. +Logout from Console. */ type Logout struct { diff --git a/restapi/operator_client.go b/restapi/operator_client.go index ef98a927f..121981433 100644 --- a/restapi/operator_client.go +++ b/restapi/operator_client.go @@ -19,8 +19,8 @@ package restapi import ( "context" - v1 "github.com/minio/minio-operator/pkg/apis/operator.min.io/v1" - operatorClientset "github.com/minio/minio-operator/pkg/client/clientset/versioned" + v1 "github.com/minio/operator/pkg/apis/minio.min.io/v1" + operatorClientset "github.com/minio/operator/pkg/client/clientset/versioned" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" ) @@ -29,36 +29,36 @@ import ( // by mock when testing, it should include all OperatorClient respective api calls // that are used within this project. type OperatorClient interface { - MinIOInstanceDelete(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error - MinIOInstanceGet(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) - MinIOInstancePatch(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) - MinIOInstanceList(ctx context.Context, namespace string, opts metav1.ListOptions) (*v1.MinIOInstanceList, error) + TenantDelete(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error + TenantGet(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.Tenant, error) + TenantPatch(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) + TenantList(ctx context.Context, namespace string, opts metav1.ListOptions) (*v1.TenantList, error) } // Interface implementation // // Define the structure of a operator client and define the functions that are actually used -// from the minio-operator. +// from the minio operator. type operatorClient struct { client *operatorClientset.Clientset } -// MinIOInstanceDelete implements the minio instance delete action from minio-operator -func (c *operatorClient) MinIOInstanceDelete(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error { - return c.client.OperatorV1().MinIOInstances(namespace).Delete(ctx, instanceName, options) +// TenantDelete implements the minio instance delete action from minio operator +func (c *operatorClient) TenantDelete(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error { + return c.client.MinioV1().Tenants(namespace).Delete(ctx, instanceName, options) } -// MinIOInstanceGet implements the minio instance get action from minio-operator -func (c *operatorClient) MinIOInstanceGet(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.MinIOInstance, error) { - return c.client.OperatorV1().MinIOInstances(namespace).Get(ctx, instanceName, options) +// TenantGet implements the minio instance get action from minio operator +func (c *operatorClient) TenantGet(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*v1.Tenant, error) { + return c.client.MinioV1().Tenants(namespace).Get(ctx, instanceName, options) } -// MinIOInstancePatch implements the minio instance patch action from minio-operator -func (c *operatorClient) MinIOInstancePatch(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.MinIOInstance, error) { - return c.client.OperatorV1().MinIOInstances(namespace).Patch(ctx, instanceName, pt, data, options) +// TenantPatch implements the minio instance patch action from minio operator +func (c *operatorClient) TenantPatch(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*v1.Tenant, error) { + return c.client.MinioV1().Tenants(namespace).Patch(ctx, instanceName, pt, data, options) } -// MinIOInstanceList implements the minio instance list action from minio-operator -func (c *operatorClient) MinIOInstanceList(ctx context.Context, namespace string, opts metav1.ListOptions) (*v1.MinIOInstanceList, error) { - return c.client.OperatorV1().MinIOInstances(namespace).List(ctx, opts) +// TenantList implements the minio instance list action from minio operator +func (c *operatorClient) TenantList(ctx context.Context, namespace string, opts metav1.ListOptions) (*v1.TenantList, error) { + return c.client.MinioV1().Tenants(namespace).List(ctx, opts) } diff --git a/restapi/user_buckets.go b/restapi/user_buckets.go index 072544337..18e848e77 100644 --- a/restapi/user_buckets.go +++ b/restapi/user_buckets.go @@ -30,7 +30,7 @@ import ( "github.com/minio/mcs/models" "github.com/minio/mcs/restapi/operations" "github.com/minio/mcs/restapi/operations/user_api" - "github.com/minio/minio-go/v6/pkg/policy" + "github.com/minio/minio-go/v7/pkg/policy" minioIAMPolicy "github.com/minio/minio/pkg/iam/policy" ) @@ -211,10 +211,7 @@ func getBucketSetPolicyResponse(session *models.Principal, bucketName string, re // removeBucket deletes a bucket func removeBucket(client MinioClient, bucketName string) error { - if err := client.removeBucket(bucketName); err != nil { - return err - } - return nil + return client.removeBucket(context.Background(), bucketName) } // getDeleteBucketResponse performs removeBucket() to delete a bucket @@ -239,7 +236,7 @@ func getDeleteBucketResponse(session *models.Principal, params user_api.DeleteBu // getBucketInfo return bucket information including name, policy access, size and creation date func getBucketInfo(client MinioClient, bucketName string) (*models.Bucket, error) { - policyStr, err := client.getBucketPolicy(bucketName) + policyStr, err := client.getBucketPolicy(context.Background(), bucketName) if err != nil { return nil, err } diff --git a/restapi/user_buckets_events.go b/restapi/user_buckets_events.go index 267631c75..f358f4616 100644 --- a/restapi/user_buckets_events.go +++ b/restapi/user_buckets_events.go @@ -26,7 +26,7 @@ import ( "github.com/minio/mcs/models" "github.com/minio/mcs/restapi/operations" "github.com/minio/mcs/restapi/operations/user_api" - "github.com/minio/minio-go/v6" + "github.com/minio/minio-go/v7/pkg/notification" ) func registerBucketEventsHandlers(api *operations.McsAPI) { @@ -58,22 +58,22 @@ func registerBucketEventsHandlers(api *operations.McsAPI) { // listBucketEvents fetches a list of all events set for a bucket and serializes them for a proper output func listBucketEvents(client MinioClient, bucketName string) ([]*models.NotificationConfig, error) { var configs []*models.NotificationConfig - bn, err := client.getBucketNotification(bucketName) + bn, err := client.getBucketNotification(context.Background(), bucketName) if err != nil { return nil, err } // Generate pretty event names from event types - prettyEventNames := func(eventsTypes []minio.NotificationEventType) []models.NotificationEventType { + prettyEventNames := func(eventsTypes []notification.EventType) []models.NotificationEventType { var result []models.NotificationEventType for _, eventType := range eventsTypes { var eventTypePretty models.NotificationEventType switch eventType { - case minio.ObjectAccessedAll: + case notification.ObjectAccessedAll: eventTypePretty = models.NotificationEventTypeGet - case minio.ObjectCreatedAll: + case notification.ObjectCreatedAll: eventTypePretty = models.NotificationEventTypePut - case minio.ObjectRemovedAll: + case notification.ObjectRemovedAll: eventTypePretty = models.NotificationEventTypeDelete } result = append(result, eventTypePretty) @@ -82,7 +82,7 @@ func listBucketEvents(client MinioClient, bucketName string) ([]*models.Notifica } // part of implementation taken from minio/mc // s3Client.ListNotificationConfigs()... to serialize configurations - getFilters := func(config minio.NotificationConfig) (prefix, suffix string) { + getFilters := func(config notification.Config) (prefix, suffix string) { if config.Filter == nil { return } @@ -97,27 +97,27 @@ func listBucketEvents(client MinioClient, bucketName string) ([]*models.Notifica } return prefix, suffix } - for _, config := range bn.TopicConfigs { - prefix, suffix := getFilters(config.NotificationConfig) - configs = append(configs, &models.NotificationConfig{ID: config.ID, - Arn: swag.String(config.Topic), - Events: prettyEventNames(config.Events), + for _, embed := range bn.TopicConfigs { + prefix, suffix := getFilters(embed.Config) + configs = append(configs, &models.NotificationConfig{ID: embed.ID, + Arn: swag.String(embed.Topic), + Events: prettyEventNames(embed.Events), Prefix: prefix, Suffix: suffix}) } - for _, config := range bn.QueueConfigs { - prefix, suffix := getFilters(config.NotificationConfig) - configs = append(configs, &models.NotificationConfig{ID: config.ID, - Arn: swag.String(config.Queue), - Events: prettyEventNames(config.Events), + for _, embed := range bn.QueueConfigs { + prefix, suffix := getFilters(embed.Config) + configs = append(configs, &models.NotificationConfig{ID: embed.ID, + Arn: swag.String(embed.Queue), + Events: prettyEventNames(embed.Events), Prefix: prefix, Suffix: suffix}) } - for _, config := range bn.LambdaConfigs { - prefix, suffix := getFilters(config.NotificationConfig) - configs = append(configs, &models.NotificationConfig{ID: config.ID, - Arn: swag.String(config.Lambda), - Events: prettyEventNames(config.Events), + for _, embed := range bn.LambdaConfigs { + prefix, suffix := getFilters(embed.Config) + configs = append(configs, &models.NotificationConfig{ID: embed.ID, + Arn: swag.String(embed.Lambda), + Events: prettyEventNames(embed.Events), Prefix: prefix, Suffix: suffix}) } diff --git a/restapi/user_buckets_events_test.go b/restapi/user_buckets_events_test.go index c0ed0142e..edb6f7715 100644 --- a/restapi/user_buckets_events_test.go +++ b/restapi/user_buckets_events_test.go @@ -26,16 +26,16 @@ import ( "github.com/go-openapi/swag" "github.com/minio/mc/pkg/probe" "github.com/minio/mcs/models" - "github.com/minio/minio-go/v6" + "github.com/minio/minio-go/v7/pkg/notification" "github.com/stretchr/testify/assert" ) // assigning mock at runtime instead of compile time -var minioGetBucketNotificationMock func(bucketName string) (bucketNotification minio.BucketNotification, err error) +var minioGetBucketNotificationMock func(ctx context.Context, bucketName string) (bucketNotification notification.Configuration, err error) // mock function of getBucketNotification() -func (mc minioClientMock) getBucketNotification(bucketName string) (bucketNotification minio.BucketNotification, err error) { - return minioGetBucketNotificationMock(bucketName) +func (mc minioClientMock) getBucketNotification(ctx context.Context, bucketName string) (bucketNotification notification.Configuration, err error) { + return minioGetBucketNotificationMock(ctx, bucketName) } //// Mock mc S3Client functions //// @@ -144,27 +144,27 @@ func TestListBucketEvents(t *testing.T) { ////// Test-1 : listBucketEvents() get list of events for a particular bucket only one config // mock bucketNotification response from MinIO - mockBucketN := minio.BucketNotification{ - LambdaConfigs: []minio.LambdaConfig{}, - TopicConfigs: []minio.TopicConfig{}, - QueueConfigs: []minio.QueueConfig{ - minio.QueueConfig{ + mockBucketN := notification.Configuration{ + LambdaConfigs: []notification.LambdaConfig{}, + TopicConfigs: []notification.TopicConfig{}, + QueueConfigs: []notification.QueueConfig{ + notification.QueueConfig{ Queue: "arn:minio:sqs::test:postgresql", - NotificationConfig: minio.NotificationConfig{ + Config: notification.Config{ ID: "", - Events: []minio.NotificationEventType{ - minio.ObjectAccessedAll, - minio.ObjectCreatedAll, - minio.ObjectRemovedAll, + Events: []notification.EventType{ + notification.ObjectAccessedAll, + notification.ObjectCreatedAll, + notification.ObjectRemovedAll, }, - Filter: &minio.Filter{ - S3Key: minio.S3Key{ - FilterRules: []minio.FilterRule{ - minio.FilterRule{ + Filter: ¬ification.Filter{ + S3Key: notification.S3Key{ + FilterRules: []notification.FilterRule{ + notification.FilterRule{ Name: "suffix", Value: ".jpg", }, - minio.FilterRule{ + notification.FilterRule{ Name: "prefix", Value: "file/", }, @@ -188,7 +188,7 @@ func TestListBucketEvents(t *testing.T) { }, }, } - minioGetBucketNotificationMock = func(bucketName string) (bucketNotification minio.BucketNotification, err error) { + minioGetBucketNotificationMock = func(ctx context.Context, bucketName string) (bucketNotification notification.Configuration, err error) { return mockBucketN, nil } eventConfigs, err := listBucketEvents(minClient, "bucket") @@ -209,16 +209,16 @@ func TestListBucketEvents(t *testing.T) { } ////// Test-2 : listBucketEvents() get list of events no filters - mockBucketN = minio.BucketNotification{ - LambdaConfigs: []minio.LambdaConfig{}, - TopicConfigs: []minio.TopicConfig{}, - QueueConfigs: []minio.QueueConfig{ - minio.QueueConfig{ + mockBucketN = notification.Configuration{ + LambdaConfigs: []notification.LambdaConfig{}, + TopicConfigs: []notification.TopicConfig{}, + QueueConfigs: []notification.QueueConfig{ + notification.QueueConfig{ Queue: "arn:minio:sqs::test:postgresql", - NotificationConfig: minio.NotificationConfig{ + Config: notification.Config{ ID: "", - Events: []minio.NotificationEventType{ - minio.ObjectRemovedAll, + Events: []notification.EventType{ + notification.ObjectRemovedAll, }, }, }, @@ -235,7 +235,7 @@ func TestListBucketEvents(t *testing.T) { }, }, } - minioGetBucketNotificationMock = func(bucketName string) (bucketNotification minio.BucketNotification, err error) { + minioGetBucketNotificationMock = func(ctx context.Context, bucketName string) (bucketNotification notification.Configuration, err error) { return mockBucketN, nil } eventConfigs, err = listBucketEvents(minClient, "bucket") @@ -256,23 +256,23 @@ func TestListBucketEvents(t *testing.T) { } ////// Test-3 : listBucketEvents() get list of events - mockBucketN = minio.BucketNotification{ - LambdaConfigs: []minio.LambdaConfig{ - minio.LambdaConfig{ + mockBucketN = notification.Configuration{ + LambdaConfigs: []notification.LambdaConfig{ + notification.LambdaConfig{ Lambda: "lambda", - NotificationConfig: minio.NotificationConfig{ + Config: notification.Config{ ID: "", - Events: []minio.NotificationEventType{ - minio.ObjectRemovedAll, + Events: []notification.EventType{ + notification.ObjectRemovedAll, }, - Filter: &minio.Filter{ - S3Key: minio.S3Key{ - FilterRules: []minio.FilterRule{ - minio.FilterRule{ + Filter: ¬ification.Filter{ + S3Key: notification.S3Key{ + FilterRules: []notification.FilterRule{ + notification.FilterRule{ Name: "suffix", Value: ".png", }, - minio.FilterRule{ + notification.FilterRule{ Name: "prefix", Value: "lambda/", }, @@ -282,22 +282,22 @@ func TestListBucketEvents(t *testing.T) { }, }, }, - TopicConfigs: []minio.TopicConfig{ - minio.TopicConfig{ + TopicConfigs: []notification.TopicConfig{ + notification.TopicConfig{ Topic: "topic", - NotificationConfig: minio.NotificationConfig{ + Config: notification.Config{ ID: "", - Events: []minio.NotificationEventType{ - minio.ObjectRemovedAll, + Events: []notification.EventType{ + notification.ObjectRemovedAll, }, - Filter: &minio.Filter{ - S3Key: minio.S3Key{ - FilterRules: []minio.FilterRule{ - minio.FilterRule{ + Filter: ¬ification.Filter{ + S3Key: notification.S3Key{ + FilterRules: []notification.FilterRule{ + notification.FilterRule{ Name: "suffix", Value: ".gif", }, - minio.FilterRule{ + notification.FilterRule{ Name: "prefix", Value: "topic/", }, @@ -307,17 +307,17 @@ func TestListBucketEvents(t *testing.T) { }, }, }, - QueueConfigs: []minio.QueueConfig{ - minio.QueueConfig{ + QueueConfigs: []notification.QueueConfig{ + notification.QueueConfig{ Queue: "arn:minio:sqs::test:postgresql", - NotificationConfig: minio.NotificationConfig{ + Config: notification.Config{ ID: "", - Events: []minio.NotificationEventType{ - minio.ObjectRemovedAll, + Events: []notification.EventType{ + notification.ObjectRemovedAll, }, - Filter: &minio.Filter{ - S3Key: minio.S3Key{ - FilterRules: []minio.FilterRule{}, + Filter: ¬ification.Filter{ + S3Key: notification.S3Key{ + FilterRules: []notification.FilterRule{}, }, }, }, @@ -354,7 +354,7 @@ func TestListBucketEvents(t *testing.T) { }, }, } - minioGetBucketNotificationMock = func(bucketName string) (bucketNotification minio.BucketNotification, err error) { + minioGetBucketNotificationMock = func(ctx context.Context, bucketName string) (bucketNotification notification.Configuration, err error) { return mockBucketN, nil } eventConfigs, err = listBucketEvents(minClient, "bucket") @@ -375,8 +375,8 @@ func TestListBucketEvents(t *testing.T) { } ////// Test-2 : listBucketEvents() Returns error and see that the error is handled correctly and returned - minioGetBucketNotificationMock = func(bucketName string) (bucketNotification minio.BucketNotification, err error) { - return minio.BucketNotification{}, errors.New("error") + minioGetBucketNotificationMock = func(ctx context.Context, bucketName string) (bucketNotification notification.Configuration, err error) { + return notification.Configuration{}, errors.New("error") } _, err = listBucketEvents(minClient, "bucket") if assert.Error(err) { diff --git a/restapi/user_buckets_test.go b/restapi/user_buckets_test.go index fbbf27e4f..647297dbd 100644 --- a/restapi/user_buckets_test.go +++ b/restapi/user_buckets_test.go @@ -26,7 +26,7 @@ import ( "github.com/go-openapi/swag" "github.com/minio/mcs/models" - "github.com/minio/minio-go/v6" + "github.com/minio/minio-go/v7" "github.com/minio/minio/pkg/madmin" "github.com/stretchr/testify/assert" ) @@ -58,12 +58,12 @@ func (mc minioClientMock) setBucketPolicyWithContext(ctx context.Context, bucket } // mock function of removeBucket() -func (mc minioClientMock) removeBucket(bucketName string) error { +func (mc minioClientMock) removeBucket(ctx context.Context, bucketName string) error { return minioRemoveBucketMock(bucketName) } // imock function of getBucketPolicy() -func (mc minioClientMock) getBucketPolicy(bucketName string) (string, error) { +func (mc minioClientMock) getBucketPolicy(ctx context.Context, bucketName string) (string, error) { return minioGetBucketPolicyMock(bucketName) } diff --git a/restapi/user_login_test.go b/restapi/user_login_test.go index 3577f7954..6cff73f8c 100644 --- a/restapi/user_login_test.go +++ b/restapi/user_login_test.go @@ -23,7 +23,7 @@ import ( "github.com/minio/mcs/pkg/auth" "github.com/minio/mcs/pkg/auth/idp/oauth2" - "github.com/minio/minio-go/v6/pkg/credentials" + "github.com/minio/minio-go/v7/pkg/credentials" "github.com/minio/minio/cmd/config" "github.com/minio/minio/pkg/madmin" "github.com/stretchr/testify/assert" diff --git a/swagger.yml b/swagger.yml index 1868df1a4..0a6696d35 100644 --- a/swagger.yml +++ b/swagger.yml @@ -39,7 +39,7 @@ paths: tags: - UserAPI post: - summary: Login to mcs + summary: Login to Console operationId: Login parameters: - name: body @@ -108,7 +108,7 @@ paths: /logout: post: - summary: Logout from mcs. + summary: Logout from Console. operationId: Logout responses: 200: @@ -1689,17 +1689,6 @@ definitions: properties: name: type: string - zone_count: - type: integer - instance_count: - type: integer - volume_size: - type: integer - format: int64 - volume_count: - type: integer - volumes_per_server: - type: integer creation_date: type: string currentState: @@ -1718,8 +1707,6 @@ definitions: used_size: type: integer format: int64 - storage_class: - type: string tenantList: type: object @@ -1762,8 +1749,8 @@ definitions: type: object required: - name - - volume_configuration - namespace + - zones properties: name: type: string @@ -1776,24 +1763,13 @@ definitions: type: array items: $ref: "#/definitions/zone" - volumes_per_server: - type: integer - volume_configuration: - type: object - required: - - size - properties: - size: - type: string - storage_class: - type: string mounth_path: type: string access_key: type: string secret_key: type: string - enable_mcs: + enable_console: type: boolean default: true enable_ssl: @@ -1815,13 +1791,26 @@ definitions: zone: type: object required: - - name - servers + - volumes_per_server + - volume_configuration properties: name: type: string servers: type: integer + volumes_per_server: + type: integer + format: int32 + volume_configuration: + type: object + required: + - size + properties: + size: + type: integer + storage_class_name: + type: string resourceQuota: type: object