Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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