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)
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)
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)
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')
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")
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)
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)
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)
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")
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')