Exemple #1
0
    def _find_port_dict_extensions(self,
                                   port_res,
                                   port_db,
                                   port_ext=None,
                                   switchports=None,
                                   session=None):
        """Looks up extension data and updates port_res."""
        if not port_ext:
            port_ext = db.get_port_ext(port_res["id"], session=session)
            if not port_ext:
                LOG.error("Port %s does not have extension data" %
                          port_db["id"])
                return
            port_ext = port_ext.as_dict()

        if not switchports:
            switchports = []
            if port_ext["hardware_id"]:
                switchports = db.filter_switchports(
                    hardware_id=port_ext["hardware_id"], session=session)
            switchports = [sp.as_dict() for sp in switchports]

        port_res["switch:ports"] = switchports
        port_res["switch:hardware_id"] = port_ext["hardware_id"]
        port_res["commit"] = port_ext["commit"]
        port_res["trunked"] = port_ext["trunked"]
    def update_switchports(cls, switchports, session=None):
        if not session:
            session = db_api.get_session()

        with session.begin(subtransactions=True):

            hardware_id = cls._validate_hardware_id(switchports)
            originals = list(db.filter_switchports(
                hardware_id=hardware_id, session=session))

            # If the given switchports match what exists in the db,
            # we don't have to do anything.
            equal = db.compare_switchports(
                originals, switchports, session=session)

            if equal:
                LOG.info(("No switchports update required "
                          "for hardware_id %s" % (hardware_id)))
                return originals
            else:
                LOG.info(("Updating switchports for "
                          "hardware_id %s" % (hardware_id)))
                # TODO(morgbara) this is a little ham-fisted
                cls.delete_switchports(hardware_id, session=session)
                return cls.create_switchports(switchports, session=session)
Exemple #3
0
    def update_switchports(cls, switchports, session=None):
        if not session:
            session = db_api.get_session()

        with session.begin(subtransactions=True):

            hardware_id = cls._validate_hardware_id(switchports)
            originals = list(
                db.filter_switchports(hardware_id=hardware_id,
                                      session=session))

            # If the given switchports match what exists in the db,
            # we don't have to do anything.
            equal = db.compare_switchports(originals,
                                           switchports,
                                           session=session)

            if equal:
                LOG.info(("No switchports update required "
                          "for hardware_id %s" % (hardware_id)))
                return originals
            else:
                LOG.info(("Updating switchports for "
                          "hardware_id %s" % (hardware_id)))
                # TODO(morgbara) this is a little ham-fisted
                cls.delete_switchports(hardware_id, session=session)
                return cls.create_switchports(switchports, session=session)
    def test_delete(self):
        switchports = self._make_switchports(
            self.fmt, [self.switch1, self.switch2],
            self.hardware_id, ['eth1/1', 'eth1/1'], ['eth0', 'eth1']
        )

        self._delete('switchports', self.hardware_id)

        switchports = ironic_db.filter_switchports(
            hardware_id=self.hardware_id)
        self.assertEqual(list(switchports), [])
Exemple #5
0
    def test_delete(self):
        switchports = self._make_switchports(self.fmt,
                                             [self.switch1, self.switch2],
                                             self.hardware_id,
                                             ['eth1/1', 'eth1/1'],
                                             ['eth0', 'eth1'])

        self._delete('switchports', self.hardware_id)

        switchports = ironic_db.filter_switchports(
            hardware_id=self.hardware_id)
        self.assertEqual(list(switchports), [])
    def index(self, request):
        filters = {}
        if request.GET.get("hardware_id"):
            filters["hardware_id"] = request.GET.get("hardware_id")

        if request.GET.get("switch_id"):
            filters["switch_id"] = request.GET.get("switch_id")

        if filters:
            switchports = db.filter_switchports(**filters)
        else:
            switchports = db.get_all_switchports()
        return dict(switchports=[p.as_dict() for p in switchports])
Exemple #7
0
    def index(self, request):
        filters = {}
        if request.GET.get("hardware_id"):
            filters["hardware_id"] = request.GET.get("hardware_id")

        if request.GET.get("switch_id"):
            filters["switch_id"] = request.GET.get("switch_id")

        if filters:
            switchports = db.filter_switchports(**filters)
        else:
            switchports = db.get_all_switchports()
        return dict(switchports=[p.as_dict() for p in switchports])
    def _find_port_dict_extensions(self, port_res, port_db, port_ext=None,
                                   switchports=None, session=None):
        """Looks up extension data and updates port_res."""
        if not port_ext:
            port_ext = db.get_port_ext(port_res["id"], session=session)
            port_ext = port_ext.as_dict()

        if not switchports:
            switchports = []
            if port_ext["hardware_id"]:
                switchports = db.filter_switchports(
                    hardware_id=port_ext["hardware_id"], session=session)
            switchports = [sp.as_dict() for sp in switchports]

        port_res["switch:ports"] = switchports
        port_res["switch:hardware_id"] = port_ext["hardware_id"]
        port_res["commit"] = port_ext["commit"]
        port_res["trunked"] = port_ext["trunked"]
    def delete_switchports(cls, hardware_id, switchports=None, session=None):
        if not session:
            session = db_api.get_session()

        # find portmaps and check if they are in-use before deleting.
        with session.begin(subtransactions=True):

            if not switchports:
                switchports = list(db.filter_switchports(
                    hardware_id=hardware_id, session=session))

            switchport_ids = [sp.id for sp in switchports]
            if switchport_ids:
                bindings = db.filter_switchport_bindings_by_switch_port_ids(
                    switchport_ids, session=session)
                bindings = list(bindings)
                if bindings:
                    raise exc.BadRequest(
                        resource="switchport",
                        reason=("Cannot delete, switchport(s) "
                                "'%s' in use" % (','.join(switchport_ids)))
                    )
            return db.delete_switchports(switchport_ids, session=session)
Exemple #10
0
    def delete_switchports(cls, hardware_id, switchports=None, session=None):
        if not session:
            session = db_api.get_session()

        # find portmaps and check if they are in-use before deleting.
        with session.begin(subtransactions=True):

            if not switchports:
                switchports = list(
                    db.filter_switchports(hardware_id=hardware_id,
                                          session=session))

            switchport_ids = [sp.id for sp in switchports]
            if switchport_ids:
                bindings = db.filter_switchport_bindings_by_switch_port_ids(
                    switchport_ids, session=session)
                bindings = list(bindings)
                if bindings:
                    raise exc.BadRequest(
                        resource="switchport",
                        reason=("Cannot delete, switchport(s) "
                                "'%s' in use" % (','.join(switchport_ids))))
            return db.delete_switchports(switchport_ids, session=session)
    def validate_switchports(cls, switchports, session=None):
        """TODO(morgabra) Split this up, think about it more. It's
        inefficient and large.
        """
        if not session:
            session = db_api.get_session()

        if not switchports:
            raise exc.BadRequest(
                resource="switchports",
                reason="must specify at least 1 switchport")

        hardware_id = cls._validate_hardware_id(switchports)

        # Ensure no switchports exist for the given hardware_id
        existing = list(db.filter_switchports(
            hardware_id=hardware_id, session=session))
        if existing:
            raise exc.BadRequest(
                resource="switchports",
                reason=("switchports already exist for "
                        "hardware_id='%s'" % hardware_id))

        # Ensure all given names are !None
        names = set([s.get("name") for s in switchports])
        if None in names:
            raise exc.BadRequest(
                resource="switchports",
                reason="name cannot be empty")

        # Ensure all given names are unique
        if (len(names) != len(switchports)):
            raise exc.BadRequest(
                resource="switchports",
                reason="all switchport names must be unique")

        # Ensure all given switch_id/port maps are unique
        ports = set([(s.get("switch_id"), s.get("port")) for s in switchports])
        if (len(ports) != len(switchports)):
            raise exc.BadRequest(
                resource="switchports",
                reason=("cannot add switchport with identical "
                        "switch_id/port values"))

        for switch_id, port in ports:

            # Ensure switch_id is !None
            if not switch_id:
                raise exc.BadRequest(
                    resource="switchports",
                    reason="switch_id cannot be empty")

            # Ensure switch_id is !None
            if not port:
                raise exc.BadRequest(
                    resource="switchports",
                    reason="port cannot be empty")

            # Ensure referenced switch actually exists
            switch = db.get_switch(switch_id, session=session)
            if not switch:
                raise exc.NotFound(
                    resource="switch %s" % (switch_id))

            # Ensure switchport not taken by another hardware_id
            existing = list(db.filter_switchports(
                switch_id=switch_id, port=port, session=session))
            if len(existing) >= 1:
                raise exc.BadRequest(
                    resource="switchport",
                    reason=("port already mapped to hardware_id "
                            "'%s'" % (existing[0].hardware_id)))

        return switchports
 def show(self, request, id):
     switchports = list(db.filter_switchports(hardware_id=id))
     if not switchports:
         raise exc.NotFound(
             resource="switchports %s" % (id))
     return dict(switchports=[s.as_dict() for s in switchports])
Exemple #13
0
    def validate_switchports(cls, switchports, session=None):
        """TODO(morgabra) Split this up, think about it more. It's
        inefficient and large.
        """
        if not session:
            session = db_api.get_session()

        if not switchports:
            raise exc.BadRequest(resource="switchports",
                                 reason="must specify at least 1 switchport")

        hardware_id = cls._validate_hardware_id(switchports)

        # Ensure no switchports exist for the given hardware_id
        existing = list(
            db.filter_switchports(hardware_id=hardware_id, session=session))
        if existing:
            raise exc.BadRequest(resource="switchports",
                                 reason=("switchports already exist for "
                                         "hardware_id='%s'" % hardware_id))

        # Ensure all given names are !None
        names = set([s.get("name") for s in switchports])
        if None in names:
            raise exc.BadRequest(resource="switchports",
                                 reason="name cannot be empty")

        # Ensure all given names are unique
        if (len(names) != len(switchports)):
            raise exc.BadRequest(resource="switchports",
                                 reason="all switchport names must be unique")

        # Ensure all given switch_id/port maps are unique
        ports = set([(s.get("switch_id"), s.get("port")) for s in switchports])
        if (len(ports) != len(switchports)):
            raise exc.BadRequest(
                resource="switchports",
                reason=("cannot add switchport with identical "
                        "switch_id/port values"))

        for switch_id, port in ports:

            # Ensure switch_id is !None
            if not switch_id:
                raise exc.BadRequest(resource="switchports",
                                     reason="switch_id cannot be empty")

            # Ensure switch_id is !None
            if not port:
                raise exc.BadRequest(resource="switchports",
                                     reason="port cannot be empty")

            # Ensure referenced switch actually exists
            switch = db.get_switch(switch_id, session=session)
            if not switch:
                raise exc.NotFound(resource="switch %s" % (switch_id))

            # Ensure switchport not taken by another hardware_id
            existing = list(
                db.filter_switchports(switch_id=switch_id,
                                      port=port,
                                      session=session))
            if len(existing) >= 1:
                raise exc.BadRequest(
                    resource="switchport",
                    reason=("port already mapped to hardware_id "
                            "'%s'" % (existing[0].hardware_id)))

        return switchports
Exemple #14
0
 def show(self, request, id):
     switchports = list(db.filter_switchports(hardware_id=id))
     if not switchports:
         raise exc.NotFound(resource="switchports %s" % (id))
     return dict(switchports=[s.as_dict() for s in switchports])