Ejemplo n.º 1
0
def execute_networkports(changeplan):
    changed_networkports = NetworkPort.objects.filter(version=changeplan)
    for changed_networkport in changed_networkports:
        try:
            live = ChangePlan.objects.get(id=0)
            live_networkport = versioned_object(changed_networkport, live, NetworkPort.IDENTITY_FIELDS)

            if live_networkport is None:
                live_asset = add_asset(changed_networkport.asset, live)
                NetworkPort.objects.create(
                    asset=live_asset,
                    label=changed_networkport.label,
                    mac_address=changed_networkport.mac_address,
                    connection=add_network_conn(changed_networkport.connection, live),
                    version=live
                )
            else:
                live_networkport.label = changed_networkport.label
                live_networkport.mac_address = changed_networkport.mac_address
                if changed_networkport.connection:
                    live_networkport.connection = add_network_conn(changed_networkport.connection, live)
                else:
                    live_networkport.connection = None
                live_networkport.save()

        except Exception as e:
            pass
Ejemplo n.º 2
0
 def loop_ports(old_asset, recurse):
     for port in old_asset.networkport_set.all():
         old_port = NetworkPort.objects.get(id=port.id)
         other = old_port.connection
         port = add_network_conn(port, change_plan)
         if other:
             if recurse:
                 loop_ports(other.asset, False)
             other = add_network_conn(other, change_plan)
             other.connection = port
             port.connection = other
             other.save()
             port.save()
Ejemplo n.º 3
0
    def after_import_row(self, row, row_result, **kwargs):
        if row_result.import_type == 'skip':
            return
        try:
            port = NetworkPort.objects.get(id=row_result.object_id)
        except:
            return

        if (row['dest_hostname'] == ''
                and row['dest_port'] != '') or (row['dest_hostname'] != ''
                                                and row['dest_port'] == ''):
            raise ValidationError("These fields must both be empty or set")

        if row['dest_hostname'] != '' and row['dest_port'] != '':
            dest_conn = newest_object(NetworkPort,
                                      self.version,
                                      asset__hostname=row['dest_hostname'],
                                      label__name=row['dest_port'])

            dest_conn = add_network_conn(dest_conn, self.version)
            port.connection = dest_conn
            port.save()
        else:
            port.connection = None
            port.save()
Ejemplo n.º 4
0
def create_asset_extra(asset, version, power_connections, net_ports):
    # Other objects
    if power_connections:
        order = 1
        for connection in power_connections:
            if order > asset.itmodel.power_ports:
                break
            if isinstance(connection['pdu_id'], int):
                connection['pdu_id'] = PDU.objects.get(id=connection['pdu_id'])
            new_pdu = versioned_object(connection['pdu_id'], version, PDU.IDENTITY_FIELDS)
            if new_pdu is None:
                add_rack(connection['pdu_id'].rack, version)
            Powered.objects.create(
                pdu=versioned_object(connection['pdu_id'], version, PDU.IDENTITY_FIELDS),
                plug_number=connection['plug'],
                version=version,
                asset=asset,
                order=order
            )
            order += 1

    if net_ports:
        i = 1
        for port in net_ports:
            if i > asset.itmodel.network_ports:
                break
            mac = port.get('mac_address')
            if mac and len(mac) == 0:
                mac = None

            if version.id != 0:
                if port['connection'] is not None:
                    versioned_conn = add_network_conn(port['connection'], version)
                    port['connection'] = versioned_conn

            NetworkPort.objects.create(
                asset=asset,
                label=NetworkPortLabel.objects.get(
                    itmodel=asset.itmodel,
                    name=port['label']
                ),
                mac_address=mac,
                connection=add_network_conn(port.get('connection'), version),
                version=version,
            )
            i += 1
Ejemplo n.º 5
0
 def after_save_instance(self, instance, using_transactions, dry_run):
     if self.version.parent:
         asset = versioned_object(instance.asset, self.version.parent,
                                  ['hostname'])
         for port in asset.networkport_set.all():
             add_network_conn(port, self.version)
Ejemplo n.º 6
0
    def update(self, request, *args,
               **kwargs):  # todo the logic in this looks fishy..
        # Do you need to update data's id or is that done already? what about version?
        # Does the new asset get added to the new version? What about its network ports?
        # Make sure that network ports are not deleted in the offline case but connections are wiped
        version = ChangePlan.objects.get(id=get_version(request))
        asset = self.get_object()
        asset_ver = asset.version
        request.data['power_connections'] = request.data.get(
            'power_connections', [])
        request.data['network_ports'] = request.data.get('network_ports', [])
        request.data['power_connections'] = [
            entry for entry in request.data['power_connections'] if entry
        ]

        site = Site.objects.get(id=request.data['location']['site'])
        check_asset_perm(request.user.username, site.abbr)
        check_asset_perm(request.user.username, asset.site.abbr)

        if version != asset_ver:
            data = request.data
            if not site.offline:
                rack = versioned_object(asset.rack, version,
                                        Rack.IDENTITY_FIELDS)
                if not rack:
                    rack = add_rack(asset.rack, version)
                old_pdus = {
                    port['id']: port['position']
                    for port in asset.rack.pdu_set.order_by('position').values(
                        'id', 'position')
                }
                new_pdus = {
                    port['position']: port['id']
                    for port in rack.pdu_set.order_by('position').values(
                        'id', 'position')
                }
                data['location']['rack'] = rack.id
                for i, port in enumerate(request.data['power_connections']):
                    data['power_connections'][i]['pdu_id'] = new_pdus[old_pdus[
                        int(port['pdu_id'])]]

                for i, port in enumerate(request.data['network_ports']):
                    if port['connection'] is not None:
                        versioned_conn = add_network_conn(
                            NetworkPort.objects.get(id=port['connection']),
                            version)
                        data['network_ports'][i][
                            'connection'] = versioned_conn.id
            else:
                request.data['power_connections'] = []

            if request.data['location']['tag'] == 'chassis-mount':
                chassis = Asset.objects.get(
                    id=request.data['location']['asset'])
                request.data['location']['asset'] = add_asset(
                    chassis, version, Asset.IDENTITY_FIELDS).id
                pass

            serializer = AssetSerializer(data=data,
                                         context={
                                             'request': request,
                                             'version': version.id
                                         })
            serializer.is_valid(raise_exception=True)
            serializer.save()
            return Response(data=serializer.data, status=HTTP_200_OK)

        else:
            return super(AssetUpdate, self).update(request, *args, **kwargs)