コード例 #1
0
ファイル: cmdbctl.py プロジェクト: itnihao/pytin
    def _handle_command_set(self, *args, **options):
        res_id = options['resource-id']
        resource = Resource.objects.get(pk=res_id)

        update_query = self._parse_reminder_arguments(options['fields'])
        for field_name in update_query:
            field_value = update_query[field_name]

            if field_name in ['parent', 'parent_id']:
                field_name, field_value = self._normalize_parent_field(field_value)

            if field_name == 'type':
                requested_model = apps.get_model(field_value)
                resource = resource.cast_type(requested_model)
            elif ModelFieldChecker.is_field_or_property(resource, field_name):
                setattr(resource, field_name, field_value)
                resource.save()
            else:
                if field_value:
                    resource.set_option(name=field_name,
                                        value=field_value,
                                        format=options['format'] if options['format'] else ResourceOption.FORMAT_STRING)
                elif resource.get_option_value(field_name, default=None):
                    resource.get_option(field_name).delete()  # delete option

        cascade = options['cascade']
        if options['use']:
            resource.use(cascade=cascade)
        elif options['free']:
            resource.free(cascade=cascade)
        elif options['lock']:
            resource.lock(cascade=cascade)

        ConsoleResourceWriter.dump_item(resource)
コード例 #2
0
    def _handle_command_add(self, *args, **options):
        parsed_data = self._parse_reminder_arguments(options['fields'])

        requested_model = Resource
        if options['type']:
            requested_model = apps.get_model(options['type'])

        if 'parent' in parsed_data:
            field_name, field_value = self._normalize_parent_field(
                parsed_data['parent'])
            if 'parent' in parsed_data:
                del parsed_data['parent']
            if 'parent_id' in parsed_data:
                del parsed_data['parent_id']
            parsed_data[field_name] = field_value

        if 'id' in parsed_data and Resource.active.filter(
                pk=parsed_data['id']).exists():
            raise Exception("Item with ID %s is already exists." %
                            parsed_data['id'])

        resource = requested_model.objects.create(**parsed_data)
        resource.refresh_from_db()

        ConsoleResourceWriter.dump_item(resource)
コード例 #3
0
    def _handle_command_set(self, *args, **options):
        res_id = options['resource-id']
        resource = Resource.objects.get(pk=res_id)

        update_query = self._parse_reminder_arguments(options['fields'])
        for field_name in update_query:
            field_value = update_query[field_name]

            if field_name in ['parent', 'parent_id']:
                field_name, field_value = self._normalize_parent_field(field_value)

            if field_name == 'type':
                requested_model = apps.get_model(field_value)
                resource = resource.cast_type(requested_model)
            elif ModelFieldChecker.is_field_or_property(resource, field_name):
                setattr(resource, field_name, field_value)
                resource.save()
            else:
                if field_value:
                    resource.set_option(name=field_name,
                                        value=field_value,
                                        format=options['format'] if options['format'] else ResourceOption.FORMAT_STRING)
                elif resource.get_option_value(field_name, default=None):
                    resource.get_option(field_name).delete()  # delete option

        if options['use']:
            resource.use()
        elif options['free']:
            resource.free()
        elif options['lock']:
            resource.lock()

        ConsoleResourceWriter.dump_item(resource)
コード例 #4
0
ファイル: cmdbip.py プロジェクト: gsdu8g9/pytin
 def _list_pools(self):
     resource_writer = ConsoleResourceWriter(GlobalIPManager.find_pools())
     resource_writer.print_table(fields=[
         'id', 'parent', 'self', 'status', 'used_addresses',
         'total_addresses', 'usage'
     ],
                                 sort_by='parent')
コード例 #5
0
ファイル: cmdbasset.py プロジェクト: itnihao/pytin
    def _handle_switch(self, *args, **options):
        device_id = options['switch-id']
        switch = Resource.objects.get(pk=device_id)

        query = dict(parent=switch)

        if options['port'] and len(options['port']) > 0:
            query['number__in'] = options['port']

        port_link_data = []
        for switch_port in SwitchPort.active.filter(**query).order_by('-name'):
            for port_connection in PortConnection.active.filter(parent=switch_port):
                linked_server_port = port_connection.linked_port

                if linked_server_port:
                    if isinstance(linked_server_port, ServerPort):
                        port_link_data.append([
                            switch_port.number,
                            port_connection.link_speed_mbit,
                            linked_server_port.parent.name,
                            linked_server_port.typed_parent.label,
                            port_connection.last_seen
                        ])
                else:
                    logger.warning("PortConnection %s linked to missing ServerPort %s" % (
                        port_connection, linked_server_port.id))
                    continue

        if port_link_data:
            writer = ConsoleResourceWriter(port_link_data)
            writer.print_table(fields=['port_number', 'link_speed_mbit', 'server_name', 'label', 'last_seen'],
                               sort_by='port_number')
        else:
            logger.info("not connected")
コード例 #6
0
    def _handle_command_get(self, *args, **options):
        show_fields = options['show_fields'].split(',')

        for res_id in options['resource-id']:
            resource = Resource.objects.get(pk=res_id)

            if options['path']:
                console_printer = ConsoleResourceWriter(PathIterator(resource))
                console_printer.print_path(show_fields)
            elif options['tree']:
                console_printer = ConsoleResourceWriter(TreeIterator(resource))
                console_printer.print_tree(show_fields)
            else:
                ConsoleResourceWriter.dump_item(resource)
コード例 #7
0
ファイル: cmdbctl.py プロジェクト: itnihao/pytin
    def _handle_command_search(self, *args, **options):
        query = self._parse_reminder_arguments(options['filter'])

        if options['index']:
            updated = 0
            for resource in Resource.active.all():
                resource.name = unicode(resource)
                resource.save()

            logger.debug("Updated resources: %s" % updated)
            return

        # apply status
        if not options['status']:
            resource_set = Resource.active.filter(**query)
        else:
            query['status__in'] = options['status'].split(',')
            resource_set = Resource.objects.filter(**query)

        # order by
        table_sort_by_field = None
        if options['order']:
            fields = options['order'].split(',')
            for field_name in fields:
                if not ModelFieldChecker.is_model_field(Resource, field_name):
                    table_sort_by_field = field_name
                    break

            if not table_sort_by_field:
                resource_set = resource_set.order_by(*fields)

        # apply limits
        limit = options['limit']
        offset = (options['page'] - 1) * limit
        if limit > 0:
            resource_set = resource_set[offset:limit]

        # tabular output with column align
        show_fields = options['show_fields'].split(',')

        console_writer = ConsoleResourceWriter(resource_set)
        console_writer.print_table(show_fields, sort_by=table_sort_by_field)
コード例 #8
0
    def _handle_command_search(self, *args, **options):
        query = self._parse_reminder_arguments(options['filter'])

        if options['index']:
            updated = 0
            for resource in Resource.active.all():
                resource.name = unicode(resource)
                resource.save()

            logger.debug("Updated resources: %s" % updated)
            return

        # apply status
        if not options['status']:
            resource_set = Resource.active.filter(**query)
        else:
            query['status__in'] = options['status'].split(',')
            resource_set = Resource.objects.filter(**query)

        # order by
        table_sort_by_field = None
        if options['order']:
            fields = options['order'].split(',')
            for field_name in fields:
                if not ModelFieldChecker.is_model_field(Resource, field_name):
                    table_sort_by_field = field_name
                    break

            if not table_sort_by_field:
                resource_set = resource_set.order_by(*fields)

        # apply limits
        limit = options['limit']
        offset = (options['page'] - 1) * limit
        if limit > 0:
            resource_set = resource_set[offset:limit]

        # tabular output with column align
        show_fields = options['show_fields'].split(',')

        console_writer = ConsoleResourceWriter(resource_set)
        console_writer.print_table(show_fields, sort_by=table_sort_by_field)
コード例 #9
0
ファイル: cmdbctl.py プロジェクト: itnihao/pytin
    def _handle_command_get(self, *args, **options):
        show_fields = options['show_fields'].split(',')

        for res_id in options['resource-id']:
            resource = Resource.objects.get(pk=res_id)

            if options['path']:
                console_printer = ConsoleResourceWriter(PathIterator(resource))
                console_printer.print_path(show_fields)
            elif options['tree']:
                console_printer = ConsoleResourceWriter(TreeIterator(resource))
                console_printer.print_tree(show_fields)
            else:
                ConsoleResourceWriter.dump_item(resource)
コード例 #10
0
ファイル: cmdbctl.py プロジェクト: itnihao/pytin
    def _handle_command_add(self, *args, **options):
        parsed_data = self._parse_reminder_arguments(options['fields'])

        requested_model = Resource
        if options['type']:
            requested_model = apps.get_model(options['type'])

        if 'parent' in parsed_data:
            field_name, field_value = self._normalize_parent_field(parsed_data['parent'])
            if 'parent' in parsed_data:
                del parsed_data['parent']
            if 'parent_id' in parsed_data:
                del parsed_data['parent_id']
            parsed_data[field_name] = field_value

        if 'id' in parsed_data and Resource.active.filter(pk=parsed_data['id']).exists():
            raise Exception("Item with ID %s is already exists." % parsed_data['id'])

        resource = requested_model.objects.create(**parsed_data)
        resource.refresh_from_db()

        ConsoleResourceWriter.dump_item(resource)
コード例 #11
0
    def _handle_switch(self, *args, **options):
        device_id = options['switch-id']
        switch = Resource.objects.get(pk=device_id)

        query = dict(parent=switch)

        if options['port'] and len(options['port']) > 0:
            query['number__in'] = options['port']

        port_link_data = []
        for switch_port in SwitchPort.active.filter(**query).order_by('-name'):
            for port_connection in PortConnection.active.filter(
                    parent=switch_port):
                linked_server_port = port_connection.linked_port

                if linked_server_port:
                    if isinstance(linked_server_port, ServerPort):
                        port_link_data.append([
                            switch_port.number,
                            port_connection.link_speed_mbit,
                            linked_server_port.parent.name,
                            linked_server_port.typed_parent.label,
                            port_connection.last_seen
                        ])
                else:
                    logger.warning(
                        "PortConnection %s linked to missing ServerPort %s" %
                        (port_connection, linked_server_port.id))
                    continue

        if port_link_data:
            writer = ConsoleResourceWriter(port_link_data)
            writer.print_table(fields=[
                'port_number', 'link_speed_mbit', 'server_name', 'label',
                'last_seen'
            ],
                               sort_by='port_number')
        else:
            logger.info("not connected")
コード例 #12
0
 def _list_pools(self):
     resource_writer = ConsoleResourceWriter(IPAddressPool.get_all_pools())
     resource_writer.print_table(fields=['id', 'parent', 'self', 'type', 'status', 'usage'], sort_by='parent')