@@ -30,6 +30,8 @@ import (
30
30
"path/filepath"
31
31
"strings"
32
32
33
+ "github.com/vmware/govmomi/object"
34
+
33
35
"github.com/vmware/govmomi/govc/cli"
34
36
"github.com/vmware/govmomi/govc/flags"
35
37
"github.com/vmware/govmomi/nfc"
@@ -41,12 +43,13 @@ import (
41
43
type ovfx struct {
42
44
* flags.VirtualMachineFlag
43
45
44
- dest string
45
- name string
46
- force bool
47
- images bool
48
- prefix bool
49
- sha int
46
+ dest string
47
+ name string
48
+ snapshot string
49
+ force bool
50
+ images bool
51
+ prefix bool
52
+ sha int
50
53
51
54
mf bytes.Buffer
52
55
}
@@ -66,6 +69,7 @@ func (cmd *ovfx) Register(ctx context.Context, f *flag.FlagSet) {
66
69
cmd .VirtualMachineFlag .Register (ctx , f )
67
70
68
71
f .StringVar (& cmd .name , "name" , "" , "Specifies target name (defaults to source name)" )
72
+ f .StringVar (& cmd .snapshot , "snapshot" , "" , "Specifies a snapshot to export from (supports running VMs)" )
69
73
f .BoolVar (& cmd .force , "f" , false , "Overwrite existing" )
70
74
f .BoolVar (& cmd .images , "i" , false , "Include image files (*.{iso,img})" )
71
75
f .BoolVar (& cmd .prefix , "prefix" , true , "Prepend target name to image filenames if missing" )
@@ -129,7 +133,7 @@ func (cmd *ovfx) Run(ctx context.Context, f *flag.FlagSet) error {
129
133
return err
130
134
}
131
135
132
- lease , err := vm . Export (ctx )
136
+ lease , err := cmd . requestExport (ctx , vm )
133
137
if err != nil {
134
138
return err
135
139
}
@@ -213,6 +217,17 @@ func (cmd *ovfx) Run(ctx context.Context, f *flag.FlagSet) error {
213
217
return file .Close ()
214
218
}
215
219
220
+ func (cmd * ovfx ) requestExport (ctx context.Context , vm * object.VirtualMachine ) (* nfc.Lease , error ) {
221
+ if cmd .snapshot != "" {
222
+ snapRef , err := vm .FindSnapshot (ctx , cmd .snapshot )
223
+ if err != nil {
224
+ return nil , err
225
+ }
226
+ return vm .ExportSnapshot (ctx , snapRef )
227
+ }
228
+ return vm .Export (ctx )
229
+ }
230
+
216
231
func (cmd * ovfx ) include (item * nfc.FileItem ) bool {
217
232
if cmd .images {
218
233
return true
0 commit comments