[et-mgmt-tools] [PATCH] Multiple nic patch with DLutterkort's comments applied
Bryan Kearney
bkearney at redhat.com
Wed Aug 6 12:08:12 UTC 2008
David Lutterkort wrote:
> On Tue, 2008-08-05 at 16:39 -0400, bkearney at redhat.com wrote:
>> diff -r 6a207373b908 -r d9910a83bbf6 virtinst/cli.py
>> --- a/virtinst/cli.py Tue Jul 29 11:21:07 2008 -0400
>> +++ b/virtinst/cli.py Mon Aug 04 15:00:25 2008 -0400
>> @@ -262,41 +262,41 @@
>> fail(_("Unknown network type ") + network)
>> guest.nics.append(n)
>>
>> -def digest_networks(macs, bridges, networks):
>> +def digest_networks(macs, bridges, networks, nics = 1):
>> if type(bridges) != list and bridges != None:
>> bridges = [ bridges ]
>>
>> - if type(macs) != list and macs != None:
>> + if macs is None:
>> + macs = []
>> + elif type(macs) != list:
>> macs = [ macs ]
>> -
>> - if type(networks) != list and networks != None:
>> - networks = [ networks ]
>> +
>> + if networks is None:
>> + networks = []
>> + elif type(networks) != list:
>> + networks = [ macs ]
>>
>> if bridges is not None and networks != None:
>> fail(_("Cannot mix both --bridge and --network arguments"))
>>
>> - # ensure we have equal length lists
>> +
>> if bridges != None:
>> networks = map(lambda b: "bridge:" + b, bridges)
>> -
>> - if networks != None:
>> - if macs != None:
>> - if len(macs) != len(networks):
>> - fail(_("Need to pass equal numbers of networks & mac addresses"))
>> - else:
>> - macs = [ None ] * len(networks)
>> - else:
>> - if os.getuid() == 0:
>> - net = util.default_network()
>> - networks = [net[0] + ":" + net[1]]
>> - else:
>> - networks = ["user"]
>> - if macs != None:
>> - if len(macs) > 1:
>> - fail(_("Need to pass equal numbers of networks & mac addresses"))
>> - else:
>> - macs = [ None ]
>> -
>> +
>> + # ensure we have equal length lists
>> + if len(macs) != len(networks):
>> + fail(_("Need to pass equal numbers of networks & mac addresses"))
>> +
>> + # Create extra networks up to the number of nics requested
>> + if len(macs) < nics:
>> + for cnt in range(len(macs),nics):
>> + if os.getuid() == 0:
>> + net = util.default_network()
>> + networks.append(net[0] + ":" + net[1])
>> + else:
>> + networks.append("user")
>> + macs.append(None)
>> +
>> return (macs, networks)
>
> I didn't notice this the first time through: it used to be that you
> could just specify the network/bridge to connect to, without giving an
> explicit MAC (so that you use a random MAC)
>
> We definitely want to keep that ability. I think the above should be
> changed so that the behavior is (1) you need to specify nnics networks
> and/or bridges (2) you may specify up to nnics explicit MACS, with the
> meaning that successive -w and -b options talk about successive
> interfaces, and explicit MACS are assigned to them in sequence. For
> interfaces that don't have an explicit MAC assigned, we'll generate a
> random MAC.
>
> For example,
>
> virt-image -b br0 -w default -m 00:16:..
>
> would connect the first interface to the bridge 'br0' on the host, and
> the second interface to the 'default' network. The first interface would
> get the explicit MAC assigned, whereas the second one would get some
> random MAC.
I will rework and submit. I will error out if you pass more MAC
addresses then networks or bridges.
-- bk
More information about the et-mgmt-tools
mailing list