Commit c2ca672d authored by Antoine Millet's avatar Antoine Millet
Browse files

Added vlans cli handler

parent f552fe21
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -343,6 +343,35 @@ class CliHandler(RegisteredCCHandler):

        return errs.get_dict()

    @listed
    def vlans(self, query, vlan_update, mac_address=None):
        """ Edit VLANs propagated to a VM interface.

        :param query: the tql query to select objects.
        """

        objects = self.client.list(query, show=('r', 'p', 'h'), method='vlans')
        if not objects:
            raise NotImplementedError('No objects matched by query')
        errs = Reporter()
        for obj in objects:
            if obj['r'] != 'vm':
                errs.error(obj['id'], 'bad role')
                continue
            try:
                hvcon = self.server.get_client(obj['p'])
            except KeyError:
                errs.error(obj['id'], 'hypervisor not connected')
            else:
                try:
                    hvcon.proxy.vm_set_vlans(obj['h'], vlan_update, mac_address=mac_address)
                except Exception as err:
                    errs.error(obj['id'], str(err))
                else:
                    errs.success(obj['id'], 'vlans updated')

        return errs.get_dict()

    #
    # Account management:
    #