Add colors to describe command (#3275)
* Add colors to describe command * Add colors to describe backups/restore/schedules commands * Make name in the output bold * Disable colors via `--colorized` flag or if velero isn't in TTY Co-authored-by: Clay Kauzlaric <ckauzlaric@vmware.com> Signed-off-by: Clay Kauzlaric <ckauzlaric@vmware.com> Signed-off-by: Mikael Manukyan <mmanukyan@vmware.com> * Add changelog * and run make update Co-authored-by: Mikael Manukyan <mmanukyan@vmware.com> Signed-off-by: Mikael Manukyan <mmanukyan@vmware.com> Signed-off-by: Clay Kauzlaric <ckauzlaric@vmware.com> * Add colorized to the client config file Co-authored-by: Mikael Manukyan <mmanukyan@vmware.com> Signed-off-by: Clay Kauzlaric <ckauzlaric@vmware.com> Co-authored-by: Mikael Manukyan <mmanukyan@vmware.com> * allow client config to use string values * the command `velero client config set colorized=false` writes a string value of "false" into the config. This change allows that string to be accepted and converted into a boolean when used in program. Signed-off-by: Clay Kauzlaric <ckauzlaric@vmware.com> * Add docs about colored CLI output Co-authored-by: Mikael Manukyan <mmanukyan@vmware.com> Signed-off-by: Clay Kauzlaric <ckauzlaric@vmware.com> * Update site/content/docs/main/customize-installation.md Co-authored-by: JenTing Hsiao <jenting.hsiao@suse.com> Signed-off-by: Clay Kauzlaric <ckauzlaric@vmware.com> * docs: remove comma * as per @carlisia 's suggestion Signed-off-by: Clay Kauzlaric <ckauzlaric@vmware.com> Co-authored-by: Clay Kauzlaric <ckauzlaric@vmware.com> Co-authored-by: Clay Kauzlaric <clay.kauzlaric@gmail.com> Co-authored-by: JenTing Hsiao <jenting.hsiao@suse.com>pull/3434/head
parent
5940a47789
commit
36fc42761b
|
@ -0,0 +1 @@
|
||||||
|
Add colored output to `describe schedule/backup/restore` commands
|
1
go.mod
1
go.mod
|
@ -11,6 +11,7 @@ require (
|
||||||
github.com/aws/aws-sdk-go v1.28.2
|
github.com/aws/aws-sdk-go v1.28.2
|
||||||
github.com/docker/spdystream v0.0.0-20170912183627-bc6354cbbc29 // indirect
|
github.com/docker/spdystream v0.0.0-20170912183627-bc6354cbbc29 // indirect
|
||||||
github.com/evanphx/json-patch v4.9.0+incompatible
|
github.com/evanphx/json-patch v4.9.0+incompatible
|
||||||
|
github.com/fatih/color v1.10.0
|
||||||
github.com/gobwas/glob v0.2.3
|
github.com/gobwas/glob v0.2.3
|
||||||
github.com/gofrs/uuid v3.2.0+incompatible
|
github.com/gofrs/uuid v3.2.0+incompatible
|
||||||
github.com/golang/protobuf v1.4.2
|
github.com/golang/protobuf v1.4.2
|
||||||
|
|
14
go.sum
14
go.sum
|
@ -147,6 +147,8 @@ github.com/evanphx/json-patch/v5 v5.1.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2Vvl
|
||||||
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
|
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
|
||||||
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
|
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
|
github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
|
||||||
|
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
|
||||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||||
|
@ -377,8 +379,11 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN
|
||||||
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
||||||
github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk=
|
github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk=
|
||||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||||
|
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
|
||||||
|
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
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.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||||
|
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
|
@ -667,12 +672,12 @@ golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||||
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ=
|
|
||||||
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY=
|
golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY=
|
||||||
|
@ -812,30 +817,24 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
||||||
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
|
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
|
||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw=
|
k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw=
|
||||||
k8s.io/api v0.19.2 h1:q+/krnHWKsL7OBZg/rxnycsl9569Pud76UJ77MvKXms=
|
|
||||||
k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI=
|
k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI=
|
||||||
k8s.io/api v0.19.7 h1:MpHhls03C2pyzoYcpbe4QqYiiZjdvW+tuWq6TbjV14Y=
|
k8s.io/api v0.19.7 h1:MpHhls03C2pyzoYcpbe4QqYiiZjdvW+tuWq6TbjV14Y=
|
||||||
k8s.io/api v0.19.7/go.mod h1:KTryDUT3l6Mtv7K2J2486PNL9DBns3wOYTkGR+iz63Y=
|
k8s.io/api v0.19.7/go.mod h1:KTryDUT3l6Mtv7K2J2486PNL9DBns3wOYTkGR+iz63Y=
|
||||||
k8s.io/apiextensions-apiserver v0.19.2 h1:oG84UwiDsVDu7dlsGQs5GySmQHCzMhknfhFExJMz9tA=
|
|
||||||
k8s.io/apiextensions-apiserver v0.19.2/go.mod h1:EYNjpqIAvNZe+svXVx9j4uBaVhTB4C94HkY3w058qcg=
|
k8s.io/apiextensions-apiserver v0.19.2/go.mod h1:EYNjpqIAvNZe+svXVx9j4uBaVhTB4C94HkY3w058qcg=
|
||||||
k8s.io/apiextensions-apiserver v0.19.7 h1:aV9DANMSCCYBEMbtoT/5oesrtcciQrjy9yqWVtZZL5A=
|
k8s.io/apiextensions-apiserver v0.19.7 h1:aV9DANMSCCYBEMbtoT/5oesrtcciQrjy9yqWVtZZL5A=
|
||||||
k8s.io/apiextensions-apiserver v0.19.7/go.mod h1:XJNNtjISNNePDEUClHt/igzMpQcmjVVh88QH+PKztPU=
|
k8s.io/apiextensions-apiserver v0.19.7/go.mod h1:XJNNtjISNNePDEUClHt/igzMpQcmjVVh88QH+PKztPU=
|
||||||
k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig=
|
k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig=
|
||||||
k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
|
k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
|
||||||
k8s.io/apimachinery v0.19.2 h1:5Gy9vQpAGTKHPVOh5c4plE274X8D/6cuEiTO2zve7tc=
|
|
||||||
k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
|
k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
|
||||||
k8s.io/apimachinery v0.19.7 h1:nTaEnYVH+i//aPgMA0zTEV2lfVLCV9LextqVd67mulc=
|
k8s.io/apimachinery v0.19.7 h1:nTaEnYVH+i//aPgMA0zTEV2lfVLCV9LextqVd67mulc=
|
||||||
k8s.io/apimachinery v0.19.7/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q=
|
k8s.io/apimachinery v0.19.7/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q=
|
||||||
k8s.io/apiserver v0.19.2 h1:xq2dXAzsAoHv7S4Xc/p7PKhiowdHV/PgdePWo3MxIYM=
|
|
||||||
k8s.io/apiserver v0.19.2/go.mod h1:FreAq0bJ2vtZFj9Ago/X0oNGC51GfubKK/ViOKfVAOA=
|
k8s.io/apiserver v0.19.2/go.mod h1:FreAq0bJ2vtZFj9Ago/X0oNGC51GfubKK/ViOKfVAOA=
|
||||||
k8s.io/apiserver v0.19.7 h1:fOOELJ9TNC6DgKL3GUkQLE/EBMLjwBseTstx2eRP61o=
|
k8s.io/apiserver v0.19.7 h1:fOOELJ9TNC6DgKL3GUkQLE/EBMLjwBseTstx2eRP61o=
|
||||||
k8s.io/apiserver v0.19.7/go.mod h1:DmWVQggNePspa+vSsVytVbS3iBSDTXdJVt0akfHacKk=
|
k8s.io/apiserver v0.19.7/go.mod h1:DmWVQggNePspa+vSsVytVbS3iBSDTXdJVt0akfHacKk=
|
||||||
k8s.io/cli-runtime v0.19.2 h1:d4uOtKhy3ImdaKqZJ8yQgLrdtUwsJLfP4Dw7L/kVPOo=
|
|
||||||
k8s.io/cli-runtime v0.19.2/go.mod h1:CMynmJM4Yf02TlkbhKxoSzi4Zf518PukJ5xep/NaNeY=
|
k8s.io/cli-runtime v0.19.2/go.mod h1:CMynmJM4Yf02TlkbhKxoSzi4Zf518PukJ5xep/NaNeY=
|
||||||
k8s.io/cli-runtime v0.19.7 h1:VkHsqrQYCD6+yBm2k9lOxLJtfo1tmb/TdYIHQ2RSCsY=
|
k8s.io/cli-runtime v0.19.7 h1:VkHsqrQYCD6+yBm2k9lOxLJtfo1tmb/TdYIHQ2RSCsY=
|
||||||
k8s.io/cli-runtime v0.19.7/go.mod h1:UTtbWaGV/USZSrnvuW/lRZGM5OsemAT/q/Du/Ac+wKU=
|
k8s.io/cli-runtime v0.19.7/go.mod h1:UTtbWaGV/USZSrnvuW/lRZGM5OsemAT/q/Du/Ac+wKU=
|
||||||
k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU=
|
k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU=
|
||||||
k8s.io/client-go v0.19.2 h1:gMJuU3xJZs86L1oQ99R4EViAADUPMHHtS9jFshasHSc=
|
|
||||||
k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA=
|
k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA=
|
||||||
k8s.io/client-go v0.19.7 h1:SoJ4mzZ9LyXBGDe8MmpMznw0CwQ1ITWgsmG7GixvhUU=
|
k8s.io/client-go v0.19.7 h1:SoJ4mzZ9LyXBGDe8MmpMznw0CwQ1ITWgsmG7GixvhUU=
|
||||||
k8s.io/client-go v0.19.7/go.mod h1:iytGI7S3kmv6bWnn+bSQUE4VlrEi4YFssvVB7J7Hvqg=
|
k8s.io/client-go v0.19.7/go.mod h1:iytGI7S3kmv6bWnn+bSQUE4VlrEi4YFssvVB7J7Hvqg=
|
||||||
|
@ -844,7 +843,6 @@ k8s.io/cluster-bootstrap v0.19.2/go.mod h1:bzngsppPfdt9vAHUnDIEoMNsxD2b6XArVVH/W
|
||||||
k8s.io/code-generator v0.19.0/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk=
|
k8s.io/code-generator v0.19.0/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk=
|
||||||
k8s.io/code-generator v0.19.2/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk=
|
k8s.io/code-generator v0.19.2/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk=
|
||||||
k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0=
|
k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0=
|
||||||
k8s.io/component-base v0.19.2 h1:jW5Y9RcZTb79liEhW3XDVTW7MuvEGP0tQZnfSX6/+gs=
|
|
||||||
k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo=
|
k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo=
|
||||||
k8s.io/component-base v0.19.7 h1:ZXS2VRWOWBOc2fTd1zjzhi/b/mkqFT9FDqiNsn1cH30=
|
k8s.io/component-base v0.19.7 h1:ZXS2VRWOWBOc2fTd1zjzhi/b/mkqFT9FDqiNsn1cH30=
|
||||||
k8s.io/component-base v0.19.7/go.mod h1:YX8spPBgwl3I6UGcSdQiEMAqRMSUsGQOW7SEr4+Qa3U=
|
k8s.io/component-base v0.19.7/go.mod h1:YX8spPBgwl3I6UGcSdQiEMAqRMSUsGQOW7SEr4+Qa3U=
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2018, 2019 the Velero contributors.
|
Copyright 2021 the Velero contributors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -20,6 +20,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
@ -29,6 +30,7 @@ const (
|
||||||
ConfigKeyNamespace = "namespace"
|
ConfigKeyNamespace = "namespace"
|
||||||
ConfigKeyFeatures = "features"
|
ConfigKeyFeatures = "features"
|
||||||
ConfigKeyCACert = "cacert"
|
ConfigKeyCACert = "cacert"
|
||||||
|
ConfigKeyColorized = "colorized"
|
||||||
)
|
)
|
||||||
|
|
||||||
// VeleroConfig is a map of strings to interface{} for deserializing Velero client config options.
|
// VeleroConfig is a map of strings to interface{} for deserializing Velero client config options.
|
||||||
|
@ -111,6 +113,26 @@ func (c VeleroConfig) Features() []string {
|
||||||
return strings.Split(features, ",")
|
return strings.Split(features, ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c VeleroConfig) Colorized() bool {
|
||||||
|
val, ok := c[ConfigKeyColorized]
|
||||||
|
if !ok {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
valString, ok := val.(string)
|
||||||
|
if !ok {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
colorized, err := strconv.ParseBool(valString)
|
||||||
|
if err != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return colorized
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (c VeleroConfig) CACertFile() string {
|
func (c VeleroConfig) CACertFile() string {
|
||||||
val, ok := c[ConfigKeyCACert]
|
val, ok := c[ConfigKeyCACert]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2019 the Velero contributors.
|
Copyright 2021 the Velero contributors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -30,4 +30,5 @@ func TestVeleroConfig(t *testing.T) {
|
||||||
|
|
||||||
assert.Equal(t, "foo", c.Namespace())
|
assert.Equal(t, "foo", c.Namespace())
|
||||||
assert.Equal(t, []string{"feature1", "feature2"}, c.Features())
|
assert.Equal(t, []string{"feature1", "feature2"}, c.Features())
|
||||||
|
assert.Equal(t, true, c.Colorized())
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2020 the Velero contributors.
|
Copyright 2021 the Velero contributors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -27,6 +27,8 @@ import (
|
||||||
|
|
||||||
snapshotv1beta1api "github.com/kubernetes-csi/external-snapshotter/client/v4/apis/volumesnapshot/v1beta1"
|
snapshotv1beta1api "github.com/kubernetes-csi/external-snapshotter/client/v4/apis/volumesnapshot/v1beta1"
|
||||||
|
|
||||||
|
"github.com/fatih/color"
|
||||||
|
|
||||||
velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
|
velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
|
||||||
"github.com/vmware-tanzu/velero/pkg/cmd/util/downloadrequest"
|
"github.com/vmware-tanzu/velero/pkg/cmd/util/downloadrequest"
|
||||||
"github.com/vmware-tanzu/velero/pkg/features"
|
"github.com/vmware-tanzu/velero/pkg/features"
|
||||||
|
@ -53,20 +55,30 @@ func DescribeBackup(
|
||||||
if phase == "" {
|
if phase == "" {
|
||||||
phase = velerov1api.BackupPhaseNew
|
phase = velerov1api.BackupPhaseNew
|
||||||
}
|
}
|
||||||
|
phaseString := string(phase)
|
||||||
|
switch phase {
|
||||||
|
case velerov1api.BackupPhaseFailedValidation, velerov1api.BackupPhasePartiallyFailed, velerov1api.BackupPhaseFailed:
|
||||||
|
phaseString = color.RedString(phaseString)
|
||||||
|
case velerov1api.BackupPhaseCompleted:
|
||||||
|
phaseString = color.GreenString(phaseString)
|
||||||
|
case velerov1api.BackupPhaseDeleting:
|
||||||
|
case velerov1api.BackupPhaseInProgress:
|
||||||
|
case velerov1api.BackupPhaseNew:
|
||||||
|
}
|
||||||
|
|
||||||
logsNote := ""
|
logsNote := ""
|
||||||
if backup.Status.Phase == velerov1api.BackupPhaseFailed || backup.Status.Phase == velerov1api.BackupPhasePartiallyFailed {
|
if backup.Status.Phase == velerov1api.BackupPhaseFailed || backup.Status.Phase == velerov1api.BackupPhasePartiallyFailed {
|
||||||
logsNote = fmt.Sprintf(" (run `velero backup logs %s` for more information)", backup.Name)
|
logsNote = fmt.Sprintf(" (run `velero backup logs %s` for more information)", backup.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
d.Printf("Phase:\t%s%s\n", phase, logsNote)
|
d.Printf("Phase:\t%s%s\n", phaseString, logsNote)
|
||||||
|
|
||||||
status := backup.Status
|
status := backup.Status
|
||||||
if len(status.ValidationErrors) > 0 {
|
if len(status.ValidationErrors) > 0 {
|
||||||
d.Println()
|
d.Println()
|
||||||
d.Printf("Validation errors:")
|
d.Printf("Validation errors:")
|
||||||
for _, ve := range status.ValidationErrors {
|
for _, ve := range status.ValidationErrors {
|
||||||
d.Printf("\t%s\n", ve)
|
d.Printf("\t%s\n", color.RedString(ve))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2017 the Velero contributors.
|
Copyright 2021 the Velero contributors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -23,6 +23,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
|
|
||||||
|
"github.com/fatih/color"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -57,7 +58,7 @@ func (d *Describer) Println(args ...interface{}) {
|
||||||
|
|
||||||
// DescribeMetadata describes standard object metadata in a consistent manner.
|
// DescribeMetadata describes standard object metadata in a consistent manner.
|
||||||
func (d *Describer) DescribeMetadata(metadata metav1.ObjectMeta) {
|
func (d *Describer) DescribeMetadata(metadata metav1.ObjectMeta) {
|
||||||
d.Printf("Name:\t%s\n", metadata.Name)
|
d.Printf("Name:\t%s\n", color.New(color.Bold).SprintFunc()(metadata.Name))
|
||||||
d.Printf("Namespace:\t%s\n", metadata.Namespace)
|
d.Printf("Namespace:\t%s\n", metadata.Namespace)
|
||||||
d.DescribeMap("Labels", metadata.Labels)
|
d.DescribeMap("Labels", metadata.Labels)
|
||||||
d.DescribeMap("Annotations", metadata.Annotations)
|
d.DescribeMap("Annotations", metadata.Annotations)
|
||||||
|
|
|
@ -25,6 +25,8 @@ import (
|
||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
|
"github.com/fatih/color"
|
||||||
|
|
||||||
v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
|
v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
|
||||||
"github.com/vmware-tanzu/velero/pkg/cmd/util/downloadrequest"
|
"github.com/vmware-tanzu/velero/pkg/cmd/util/downloadrequest"
|
||||||
clientset "github.com/vmware-tanzu/velero/pkg/generated/clientset/versioned"
|
clientset "github.com/vmware-tanzu/velero/pkg/generated/clientset/versioned"
|
||||||
|
@ -40,13 +42,20 @@ func DescribeRestore(restore *v1.Restore, podVolumeRestores []v1.PodVolumeRestor
|
||||||
if phase == "" {
|
if phase == "" {
|
||||||
phase = v1.RestorePhaseNew
|
phase = v1.RestorePhaseNew
|
||||||
}
|
}
|
||||||
|
phaseString := string(phase)
|
||||||
|
switch phase {
|
||||||
|
case v1.RestorePhaseCompleted:
|
||||||
|
phaseString = color.GreenString(phaseString)
|
||||||
|
case v1.RestorePhaseFailedValidation, v1.RestorePhasePartiallyFailed, v1.RestorePhaseFailed:
|
||||||
|
phaseString = color.RedString(phaseString)
|
||||||
|
}
|
||||||
|
|
||||||
resultsNote := ""
|
resultsNote := ""
|
||||||
if phase == v1.RestorePhaseFailed || phase == v1.RestorePhasePartiallyFailed {
|
if phase == v1.RestorePhaseFailed || phase == v1.RestorePhasePartiallyFailed {
|
||||||
resultsNote = fmt.Sprintf(" (run 'velero restore logs %s' for more information)", restore.Name)
|
resultsNote = fmt.Sprintf(" (run 'velero restore logs %s' for more information)", restore.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
d.Printf("Phase:\t%s%s\n", restore.Status.Phase, resultsNote)
|
d.Printf("Phase:\t%s%s\n", phaseString, resultsNote)
|
||||||
|
|
||||||
d.Println()
|
d.Println()
|
||||||
// "<n/a>" output should only be applicable for restore that failed validation
|
// "<n/a>" output should only be applicable for restore that failed validation
|
||||||
|
@ -66,7 +75,7 @@ func DescribeRestore(restore *v1.Restore, podVolumeRestores []v1.PodVolumeRestor
|
||||||
d.Println()
|
d.Println()
|
||||||
d.Printf("Validation errors:")
|
d.Printf("Validation errors:")
|
||||||
for _, ve := range restore.Status.ValidationErrors {
|
for _, ve := range restore.Status.ValidationErrors {
|
||||||
d.Printf("\t%s\n", ve)
|
d.Printf("\t%s\n", color.RedString(ve))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@ package output
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/fatih/color"
|
||||||
|
|
||||||
v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
|
v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -28,17 +30,25 @@ func DescribeSchedule(schedule *v1.Schedule) string {
|
||||||
|
|
||||||
d.Println()
|
d.Println()
|
||||||
phase := schedule.Status.Phase
|
phase := schedule.Status.Phase
|
||||||
|
|
||||||
if phase == "" {
|
if phase == "" {
|
||||||
phase = v1.SchedulePhaseNew
|
phase = v1.SchedulePhaseNew
|
||||||
}
|
}
|
||||||
d.Printf("Phase:\t%s\n", phase)
|
phaseString := string(phase)
|
||||||
|
switch phase {
|
||||||
|
case v1.SchedulePhaseEnabled:
|
||||||
|
phaseString = color.GreenString(phaseString)
|
||||||
|
case v1.SchedulePhaseFailedValidation:
|
||||||
|
phaseString = color.RedString(phaseString)
|
||||||
|
}
|
||||||
|
d.Printf("Phase:\t%s\n", phaseString)
|
||||||
|
|
||||||
status := schedule.Status
|
status := schedule.Status
|
||||||
if len(status.ValidationErrors) > 0 {
|
if len(status.ValidationErrors) > 0 {
|
||||||
d.Println()
|
d.Println()
|
||||||
d.Printf("Validation errors:")
|
d.Printf("Validation errors:")
|
||||||
for _, ve := range status.ValidationErrors {
|
for _, ve := range status.ValidationErrors {
|
||||||
d.Printf("\t%s\n", ve)
|
d.Printf("\t%s\n", color.RedString(ve))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2017, 2019 the Velero contributors.
|
Copyright 2021 the Velero contributors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -21,6 +21,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/fatih/color"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
|
|
||||||
|
@ -54,9 +55,10 @@ func NewCommand(name string) *cobra.Command {
|
||||||
fmt.Fprintf(os.Stderr, "WARNING: Error reading config file: %v\n", err)
|
fmt.Fprintf(os.Stderr, "WARNING: Error reading config file: %v\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Declare cmdFeatures here so we can access them in the PreRun hooks
|
// Declare cmdFeatures and cmdColorzied here so we can access them in the PreRun hooks
|
||||||
// without doing a chain of calls into the command's FlagSet
|
// without doing a chain of calls into the command's FlagSet
|
||||||
var cmdFeatures veleroflag.StringArray
|
var cmdFeatures veleroflag.StringArray
|
||||||
|
var cmdColorzied veleroflag.OptionalBool
|
||||||
|
|
||||||
c := &cobra.Command{
|
c := &cobra.Command{
|
||||||
Use: name,
|
Use: name,
|
||||||
|
@ -74,6 +76,13 @@ operations can also be performed as 'velero backup get' and 'velero schedule cre
|
||||||
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||||||
features.Enable(config.Features()...)
|
features.Enable(config.Features()...)
|
||||||
features.Enable(cmdFeatures...)
|
features.Enable(cmdFeatures...)
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case cmdColorzied.Value != nil:
|
||||||
|
color.NoColor = !*cmdColorzied.Value
|
||||||
|
default:
|
||||||
|
color.NoColor = !config.Colorized()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,6 +92,9 @@ operations can also be performed as 'velero backup get' and 'velero schedule cre
|
||||||
// Bind features directly to the root command so it's available to all callers.
|
// Bind features directly to the root command so it's available to all callers.
|
||||||
c.PersistentFlags().Var(&cmdFeatures, "features", "Comma-separated list of features to enable for this Velero process. Combines with values from $HOME/.config/velero/config.json if present")
|
c.PersistentFlags().Var(&cmdFeatures, "features", "Comma-separated list of features to enable for this Velero process. Combines with values from $HOME/.config/velero/config.json if present")
|
||||||
|
|
||||||
|
// Color will be enabled or disabled for all subcommands
|
||||||
|
c.PersistentFlags().Var(&cmdColorzied, "colorized", "Show colored output in TTY. Overrides 'colorized' value from $HOME/.config/velero/config.json if present. Enabled by default")
|
||||||
|
|
||||||
c.AddCommand(
|
c.AddCommand(
|
||||||
backup.NewCommand(f),
|
backup.NewCommand(f),
|
||||||
schedule.NewCommand(f),
|
schedule.NewCommand(f),
|
||||||
|
|
|
@ -70,6 +70,21 @@ All client side feature flags may be disabled using the below command
|
||||||
velero client config set features=
|
velero client config set features=
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Colored CLI output
|
||||||
|
|
||||||
|
Velero CLI uses colored output for some commands, such as `velero describe`. If
|
||||||
|
the environment in which Velero is run doesn't support colored output, the
|
||||||
|
colored output will be automatically disabled. However, you can manually disable
|
||||||
|
colors with config file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
velero client config set colorized=false
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that if you specify `--colorized=true` as a CLI option it will override
|
||||||
|
the config file setting.
|
||||||
|
|
||||||
|
|
||||||
## Customize resource requests and limits
|
## Customize resource requests and limits
|
||||||
|
|
||||||
At installation, Velero sets default resource requests and limits for the Velero pod and the restic pod, if you using the [restic integration](/docs/main/restic/).
|
At installation, Velero sets default resource requests and limits for the Velero pod and the restic pod, if you using the [restic integration](/docs/main/restic/).
|
||||||
|
|
Loading…
Reference in New Issue