2017-08-02 17:27:17 +00:00
/ *
2019-03-20 19:32:48 +00:00
Copyright 2017 the Velero contributors .
2017-08-02 17:27:17 +00:00
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package restore
import (
2017-10-26 15:24:16 +00:00
"fmt"
2018-06-13 23:40:18 +00:00
"os"
2017-10-26 15:24:16 +00:00
2017-08-02 17:27:17 +00:00
"github.com/spf13/cobra"
2017-10-26 15:24:16 +00:00
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2017-08-02 17:27:17 +00:00
2019-09-30 21:26:56 +00:00
api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
"github.com/vmware-tanzu/velero/pkg/client"
"github.com/vmware-tanzu/velero/pkg/cmd"
"github.com/vmware-tanzu/velero/pkg/cmd/util/output"
"github.com/vmware-tanzu/velero/pkg/restic"
2017-08-02 17:27:17 +00:00
)
2017-10-26 15:24:16 +00:00
func NewDescribeCommand ( f client . Factory , use string ) * cobra . Command {
2018-06-13 23:40:18 +00:00
var (
2019-10-03 20:46:46 +00:00
listOptions metav1 . ListOptions
details bool
insecureSkipTLSVerify bool
2018-06-13 23:40:18 +00:00
)
2017-10-26 15:24:16 +00:00
2020-04-03 15:02:41 +00:00
config , err := client . LoadConfig ( )
if err != nil {
fmt . Fprintf ( os . Stderr , "WARNING: Error reading config file: %v\n" , err )
}
caCertFile := config . CACertFile ( )
2017-08-02 17:27:17 +00:00
c := & cobra . Command {
2017-11-13 14:50:49 +00:00
Use : use + " [NAME1] [NAME2] [NAME...]" ,
2017-10-26 15:24:16 +00:00
Short : "Describe restores" ,
2017-08-02 17:27:17 +00:00
Run : func ( c * cobra . Command , args [ ] string ) {
2019-01-25 03:33:07 +00:00
veleroClient , err := f . Client ( )
2017-10-26 15:24:16 +00:00
cmd . CheckError ( err )
var restores * api . RestoreList
if len ( args ) > 0 {
restores = new ( api . RestoreList )
for _ , name := range args {
2019-01-25 03:33:07 +00:00
restore , err := veleroClient . VeleroV1 ( ) . Restores ( f . Namespace ( ) ) . Get ( name , metav1 . GetOptions { } )
2017-10-26 15:24:16 +00:00
cmd . CheckError ( err )
restores . Items = append ( restores . Items , * restore )
}
} else {
2019-01-25 03:33:07 +00:00
restores , err = veleroClient . VeleroV1 ( ) . Restores ( f . Namespace ( ) ) . List ( listOptions )
2017-10-26 15:24:16 +00:00
cmd . CheckError ( err )
}
first := true
for _ , restore := range restores . Items {
2019-01-25 03:33:07 +00:00
opts := restic . NewPodVolumeRestoreListOptions ( restore . Name )
podvolumeRestoreList , err := veleroClient . VeleroV1 ( ) . PodVolumeRestores ( f . Namespace ( ) ) . List ( opts )
2018-06-13 23:40:18 +00:00
if err != nil {
fmt . Fprintf ( os . Stderr , "error getting PodVolumeRestores for restore %s: %v\n" , restore . Name , err )
}
2020-04-03 15:02:41 +00:00
s := output . DescribeRestore ( & restore , podvolumeRestoreList . Items , details , veleroClient , insecureSkipTLSVerify , caCertFile )
2017-10-26 15:24:16 +00:00
if first {
first = false
fmt . Print ( s )
} else {
fmt . Printf ( "\n\n%s" , s )
}
}
cmd . CheckError ( err )
2017-08-02 17:27:17 +00:00
} ,
}
2017-10-26 15:24:16 +00:00
c . Flags ( ) . StringVarP ( & listOptions . LabelSelector , "selector" , "l" , listOptions . LabelSelector , "only show items matching this label selector" )
2018-10-22 16:37:30 +00:00
c . Flags ( ) . BoolVar ( & details , "details" , details , "display additional detail in the command output" )
2019-10-03 20:46:46 +00:00
c . Flags ( ) . BoolVar ( & insecureSkipTLSVerify , "insecure-skip-tls-verify" , insecureSkipTLSVerify , "If true, the object store's TLS certificate will not be checked for validity. This is insecure and susceptible to man-in-the-middle attacks. Not recommended for production." )
2020-04-03 15:02:41 +00:00
c . Flags ( ) . StringVar ( & caCertFile , "cacert" , caCertFile , "path to a certificate bundle to use when verifying TLS connections" )
2017-10-26 15:24:16 +00:00
2017-08-02 17:27:17 +00:00
return c
}