def update(self, name, params): info = self.lookup(name) info['name'] = name original = copy.deepcopy(info) # validate update parameters connection = info['connection'] if connection in ['bridge', 'macvtap', 'passthrough', 'vepa']: if params.get('subnet'): raise InvalidParameter("KCHNET0031E") elif connection in ['nat', 'isolated']: if params.get('vlan_id') or params.get('interfaces'): raise InvalidParameter("KCHNET0032E") # get target device if bridge was created by Kimchi if connection == 'bridge': iface = info['interfaces'][0] if is_bridge(iface) and iface.startswith(KIMCHI_BRIDGE_PREFIX): port = ports(iface)[0] if is_vlan(port): dev = get_vlan_device(port) info['interfaces'] = original['interfaces'] = [dev] # nic else: info['interfaces'] = original['interfaces'] = [port] # merge parameters info.update(params) # delete original network self.delete(name) try: # create new network network = self.collection.create(info) except: # restore original network self.collection.create(original) raise return network
def update(self, name, params): info = self.lookup(name) original = copy.deepcopy(info) original['name'] = name # validate update parameters connection = info['connection'] if connection in ['bridge', 'macvtap', 'vepa']: if params.get('subnet'): raise InvalidParameter("KCHNET0031E") elif connection in ['nat', 'isolated']: if params.get('vlan_id') or params.get('interfaces'): raise InvalidParameter("KCHNET0032E") # get target device if bridge was created by Kimchi if connection == 'bridge': iface = info['interfaces'][0] if is_bridge(iface) and iface.startswith(KIMCHI_BRIDGE_PREFIX): port = ports(iface)[0] if is_vlan(port): dev = get_vlan_device(port) info['interfaces'] = original['interfaces'] = [dev] # nic else: info['interfaces'] = original['interfaces'] = [port] # merge parameters info.update(params) # delete original network self.delete(name) try: # create new network network = self.collection.create(info) except: # restore original network self.collection.create(original) raise return network