[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