@@ -23,6 +23,7 @@ import (
23
23
"fmt"
24
24
"path"
25
25
26
+ "github.com/vmware/govmomi/find"
26
27
"github.com/vmware/govmomi/govc/cli"
27
28
"github.com/vmware/govmomi/govc/flags"
28
29
"github.com/vmware/govmomi/nfc"
@@ -163,34 +164,42 @@ func (cmd *ovfx) Map(op []Property) (p []types.KeyValue) {
163
164
return
164
165
}
165
166
166
- func (cmd * ovfx ) NetworkMap (e * ovf.Envelope ) (p []types.OvfNetworkMapping ) {
167
+ func (cmd * ovfx ) NetworkMap (e * ovf.Envelope ) ([]types.OvfNetworkMapping , error ) {
167
168
ctx := context .TODO ()
168
169
finder , err := cmd .DatastoreFlag .Finder ()
169
170
if err != nil {
170
- return
171
+ return nil , err
171
172
}
172
173
173
- networks := map [string ]string {}
174
-
175
- if e .Network != nil {
176
- for _ , net := range e .Network .Networks {
177
- networks [net .Name ] = net .Name
174
+ var nmap []types.OvfNetworkMapping
175
+ for _ , m := range cmd .Options .NetworkMapping {
176
+ if m .Network == "" {
177
+ continue // Not set, let vSphere choose the default network
178
178
}
179
- }
180
179
181
- for _ , net := range cmd .Options .NetworkMapping {
182
- networks [net .Name ] = net .Network
183
- }
180
+ var ref types.ManagedObjectReference
184
181
185
- for src , dst := range networks {
186
- if net , err := finder .Network (ctx , dst ); err == nil {
187
- p = append (p , types.OvfNetworkMapping {
188
- Name : src ,
189
- Network : net .Reference (),
190
- })
182
+ net , err := finder .Network (ctx , m .Network )
183
+ if err != nil {
184
+ switch err .(type ) {
185
+ case * find.NotFoundError :
186
+ if ! ref .FromString (m .Network ) {
187
+ return nil , err
188
+ } // else this is a raw MO ref
189
+ default :
190
+ return nil , err
191
+ }
192
+ } else {
193
+ ref = net .Reference ()
191
194
}
195
+
196
+ nmap = append (nmap , types.OvfNetworkMapping {
197
+ Name : m .Name ,
198
+ Network : ref ,
199
+ })
192
200
}
193
- return
201
+
202
+ return nmap , err
194
203
}
195
204
196
205
func (cmd * ovfx ) Import (fpath string ) (* types.ManagedObjectReference , error ) {
@@ -224,6 +233,11 @@ func (cmd *ovfx) Import(fpath string) (*types.ManagedObjectReference, error) {
224
233
name = cmd .Name
225
234
}
226
235
236
+ nmap , err := cmd .NetworkMap (e )
237
+ if err != nil {
238
+ return nil , err
239
+ }
240
+
227
241
cisp := types.OvfCreateImportSpecParams {
228
242
DiskProvisioning : cmd .Options .DiskProvisioning ,
229
243
EntityName : name ,
@@ -233,7 +247,7 @@ func (cmd *ovfx) Import(fpath string) (*types.ManagedObjectReference, error) {
233
247
DeploymentOption : cmd .Options .Deployment ,
234
248
Locale : "US" },
235
249
PropertyMapping : cmd .Map (cmd .Options .PropertyMapping ),
236
- NetworkMapping : cmd . NetworkMap ( e ) ,
250
+ NetworkMapping : nmap ,
237
251
}
238
252
239
253
host , err := cmd .HostSystemIfSpecified ()
0 commit comments