class VolumesTable(VolumesTableBase): name = tables.WrappingColumn("name", verbose_name=_("Name"), link="horizon:project:volumes:detail") group = GroupNameColumn("name", verbose_name=_("Group"), link="horizon:project:volume_groups:detail") volume_type = tables.Column(get_volume_type, verbose_name=_("Type")) attachments = AttachmentColumn("attachments", verbose_name=_("Attached To")) availability_zone = tables.Column("availability_zone", verbose_name=_("Availability Zone")) bootable = tables.Column('is_bootable', verbose_name=_("Bootable"), filters=(filters.yesno, filters.capfirst)) encryption = tables.Column(get_encrypted_value, verbose_name=_("Encrypted"), link=get_encrypted_link) class Meta(object): name = "volumes" verbose_name = _("Volumes") status_columns = ["status"] row_class = UpdateRow table_actions = (CreateVolume, AcceptTransfer, DeleteVolume, VolumesFilterAction) launch_actions = (LaunchVolumeNG, ) row_actions = (( EditVolume, ExtendVolume, ) + launch_actions + (EditAttachments, CreateSnapshot, CreateBackup, RetypeVolume, UploadToImage, CreateTransfer, DeleteTransfer, DeleteVolume, UpdateMetadata))
class FlavorsTable(tables.DataTable): name = tables.WrappingColumn('name', verbose_name=_('Flavor Name')) vcpus = tables.Column('vcpus', verbose_name=_('VCPUs')) ram = tables.Column(get_size, verbose_name=_('RAM'), attrs={'data-type': 'size'}) disk = tables.Column(get_disk_size, verbose_name=_('Root Disk'), attrs={'data-type': 'size'}) ephemeral = tables.Column(get_ephemeral_size, verbose_name=_('Ephemeral Disk'), attrs={'data-type': 'size'}) swap = tables.Column(get_swap_size, verbose_name=_('Swap Disk'), attrs={'data-type': 'size'}) rxtx_factor = tables.Column('rxtx_factor', verbose_name=_("RX/TX factor")) flavor_id = tables.Column('id', verbose_name=_('ID')) public = tables.Column("is_public", verbose_name=_("Public"), empty_value=False, filters=(filters.yesno, filters.capfirst)) extra_specs = UpdateMetadataColumn( get_extra_specs, verbose_name=_("Metadata"), link=True, empty_value=False, filters=(filters.yesno, filters.capfirst), link_attrs={'ng-controller': 'MetadataModalHelperController as modal'}) class Meta(object): name = "flavors" verbose_name = _("Flavors") table_actions = (FlavorFilterAction, CreateFlavor, DeleteFlavor) row_actions = (ModifyAccess, UpdateMetadata, DeleteFlavor)
class NetworksTable(tables.DataTable): name = tables.WrappingColumn("name_or_id", verbose_name=_("Name"), link='horizon:project:networks:detail') subnets = tables.Column( get_subnets, verbose_name=_("Subnets Associated"), ) shared = tables.Column("shared", verbose_name=_("Shared"), filters=(filters.yesno, filters.capfirst)) external = tables.Column("router:external", verbose_name=_("External"), filters=(filters.yesno, filters.capfirst)) status = tables.Column("status", verbose_name=_("Status"), display_choices=STATUS_DISPLAY_CHOICES) admin_state = tables.Column("admin_state", verbose_name=_("Admin State"), display_choices=DISPLAY_CHOICES) def get_object_display(self, network): return network.name_or_id class Meta(object): name = "networks" verbose_name = _("Networks") table_actions = (CreateNetwork, DeleteNetwork, ProjectNetworksFilterAction) row_actions = (EditNetwork, CreateSubnet, DeleteNetwork)
class GroupTypesTable(tables.DataTable): name = tables.WrappingColumn("name", verbose_name=_("Name"), form_field=forms.CharField(max_length=64)) description = tables.Column(lambda obj: getattr(obj, 'description', None), verbose_name=_('Description'), form_field=forms.CharField( widget=forms.Textarea(attrs={'rows': 4}), required=False)) public = tables.Column("is_public", verbose_name=_("Public"), filters=(filters.yesno, filters.capfirst), form_field=forms.BooleanField(label=_('Public'), required=False)) def get_object_display(self, group_type): return group_type.name def get_object_id(self, group_type): return str(group_type.id) class Meta(object): name = "group_types" verbose_name = _("Group Types") table_actions = ( GroupTypesFilterAction, CreateGroupType, DeleteGroupType, ) row_actions = (EditGroupType, DeleteGroupType) row_class = UpdateRow
class SecurityServicesTable(tables.DataTable): name = tables.WrappingColumn( "name", verbose_name=_("Name"), link="horizon:admin:security_services:security_service_detail") project = tables.Column("project_name", verbose_name=_("Project")) dns_ip = tables.Column("dns_ip", verbose_name=_("DNS IP")) server = tables.Column("server", verbose_name=_("Server")) domain = tables.Column("domain", verbose_name=_("Domain")) user = tables.Column("user", verbose_name=_("Sid")) def get_object_display(self, security_service): return security_service.name def get_object_id(self, security_service): return str(security_service.id) class Meta(object): name = "security_services" verbose_name = _("Security Services") table_actions = ( tables.NameFilterAction, DeleteSecurityService, ) row_actions = (DeleteSecurityService, )
class VolumeSnapshotsTable(volume_tables.VolumesTableBase): name = tables.WrappingColumn("name", verbose_name=_("Name"), link="horizon:project:snapshots:detail") volume_name = SnapshotVolumeNameColumn( "name", verbose_name=_("Volume Name"), link="horizon:project:volumes:detail") class Meta(object): name = "volume_snapshots" verbose_name = _("Volume Snapshots") pagination_param = 'snapshot_marker' prev_pagination_param = 'prev_snapshot_marker' table_actions = ( VolumeSnapshotsFilterAction, DeleteVolumeSnapshot, ) launch_actions = () if getattr(settings, 'LAUNCH_INSTANCE_LEGACY_ENABLED', False): launch_actions = (LaunchSnapshot, ) + launch_actions if getattr(settings, 'LAUNCH_INSTANCE_NG_ENABLED', True): launch_actions = (LaunchSnapshotNG, ) + launch_actions row_actions = ( (CreateVolumeFromSnapshot, ) + launch_actions + (EditVolumeSnapshot, DeleteVolumeSnapshot, UpdateMetadata)) row_class = UpdateRow status_columns = ("status", ) permissions = [ ('openstack.services.volume', 'openstack.services.volumev2'), ]
class NetworksTable(tables.DataTable): tenant = tables.Column("tenant_name", verbose_name=_("Project")) name = tables.WrappingColumn("name_or_id", verbose_name=_("Network Name"), link='horizon:admin:networks:detail') subnets = tables.Column( project_tables.get_subnets, verbose_name=_("Subnets Associated"), ) num_agents = tables.Column("num_agents", verbose_name=_("DHCP Agents")) shared = tables.Column("shared", verbose_name=_("Shared"), filters=(filters.yesno, filters.capfirst)) external = tables.Column("router:external", verbose_name=_("External"), filters=(filters.yesno, filters.capfirst)) status = tables.Column( "status", verbose_name=_("Status"), display_choices=project_tables.STATUS_DISPLAY_CHOICES) admin_state = tables.Column("admin_state", verbose_name=_("Admin State"), display_choices=DISPLAY_CHOICES) availability_zones = tables.Column(get_availability_zones, verbose_name=_("Availability Zones")) def get_object_display(self, network): return network.name_or_id class Meta(object): name = "networks" verbose_name = _("Networks") table_actions = (CreateNetwork, project_tables.DeleteNetwork, AdminNetworksFilterAction) row_actions = (EditNetwork, CreateSubnet, project_tables.DeleteNetwork) def __init__(self, request, data=None, needs_form_wrapper=None, **kwargs): super(NetworksTable, self).__init__(request, data=data, needs_form_wrapper=needs_form_wrapper, **kwargs) try: if not api.neutron.is_extension_supported( request, "network_availability_zone"): del self.columns["availability_zones"] except Exception: msg = _("Unable to check if network availability zone extension " "is supported") exceptions.handle(self.request, msg) del self.columns['availability_zones'] try: if not api.neutron.is_extension_supported(request, 'dhcp_agent_scheduler'): del self.columns['num_agents'] except Exception: msg = _("Unable to check if DHCP agent scheduler " "extension is supported") exceptions.handle(self.request, msg) del self.columns['num_agents']
class NovaShareNetworkTable(tables.DataTable): name = tables.WrappingColumn( "name", verbose_name=_("Name"), link="horizon:project:shares:share_network_detail") nova_net = tables.Column("nova_net", verbose_name=_("Nova Net")) ip_version = tables.Column("ip_version", verbose_name=_("IP Version")) network_type = tables.Column("network_type", verbose_name=_("Network Type")) segmentation_id = tables.Column("segmentation_id", verbose_name=_("Segmentation Id")) def get_object_display(self, share_network): return share_network.name or str(share_network.id) def get_object_id(self, share_network): return str(share_network.id) class Meta(object): name = "share_networks" verbose_name = _("Share Networks") table_actions = ( tables.NameFilterAction, Create, Delete) row_class = UpdateRow row_actions = ( EditShareNetwork, Delete)
class PortsTable(project_tables.PortsTable): name = tables.WrappingColumn("name_or_id", verbose_name=_("Name"), link="horizon:admin:networks:ports:detail") failure_url = reverse_lazy('horizon:admin:networks:index') @memoized.memoized_method def _get_network(self): try: network_id = self.kwargs['network_id'] network = api.neutron.network_get(self.request, network_id) network.set_id_as_name_if_empty(length=0) except Exception: msg = _('Unable to retrieve details for network "%s".') \ % (network_id) exceptions.handle(self.request, msg, redirect=self.failure_url) return network class Meta(object): name = "ports" verbose_name = _("Ports") table_actions = (CreatePort, DeletePort, tables.FilterAction) row_actions = ( UpdatePort, DeletePort, ) hidden_title = False
class ShareNetworksTable(tables.DataTable): name = tables.WrappingColumn( "name", verbose_name=_("Name"), link="horizon:admin:share_networks:share_network_detail") project = tables.Column("project_name", verbose_name=_("Project")) neutron_net = tables.Column("neutron_net", verbose_name=_("Neutron Net")) neutron_subnet = tables.Column("neutron_subnet", verbose_name=_("Neutron Subnet")) ip_version = tables.Column("ip_version", verbose_name=_("IP Version")) network_type = tables.Column("network_type", verbose_name=_("Network Type")) segmentation_id = tables.Column("segmentation_id", verbose_name=_("Segmentation Id")) def get_object_display(self, share_network): return share_network.name or str(share_network.id) def get_object_id(self, share_network): return str(share_network.id) class Meta(object): name = "share_networks" verbose_name = _("Share Networks") table_actions = ( tables.NameFilterAction, sn_tables.Delete, ) row_class = sn_tables.UpdateRow row_actions = (sn_tables.Delete, )
class PortsTable(tables.DataTable): name = tables.WrappingColumn("name_or_id", verbose_name=_("Name"), link="horizon:project:networks:ports:detail") fixed_ips = tables.Column(get_fixed_ips, verbose_name=_("Fixed IPs")) attached = tables.Column(get_attached, verbose_name=_("Attached Device")) status = tables.Column("status", verbose_name=_("Status"), display_choices=STATUS_DISPLAY_CHOICES) admin_state = tables.Column("admin_state", verbose_name=_("Admin State"), display_choices=DISPLAY_CHOICES) mac_state = tables.Column("mac_state", empty_value=api.neutron.OFF_STATE, verbose_name=_("MAC Learning State")) def get_object_display(self, port): return port.id class Meta(object): name = "ports" verbose_name = _("Ports") table_actions = (tables.FilterAction, CreatePort, DeletePort) row_actions = (UpdatePort, DeletePort) hidden_title = False def __init__(self, request, data=None, needs_form_wrapper=None, **kwargs): super(PortsTable, self).__init__(request, data=data, needs_form_wrapper=needs_form_wrapper, **kwargs) if not api.neutron.is_extension_supported(request, 'mac-learning'): del self.columns['mac_state']
class VolumesTable(volumes_tables.VolumesTable): name = tables.WrappingColumn("name", verbose_name=_("Name"), link="horizon:admin:volumes:detail") host = tables.Column("os-vol-host-attr:host", verbose_name=_("Host")) tenant = tables.Column(lambda obj: getattr(obj, 'tenant_name', None), verbose_name=_("Project")) class Meta(object): name = "volumes" verbose_name = _("Volumes") status_columns = ["status"] row_class = volumes_tables.UpdateRow table_actions = (ManageVolumeAction, volumes_tables.DeleteVolume, VolumesFilterAction) row_actions = (volumes_tables.DeleteVolume, UpdateVolumeStatusAction, UnmanageVolumeAction, MigrateVolume, volumes_tables.UpdateMetadata) columns = ( 'tenant', 'host', 'name', 'size', 'status', 'volume_type', 'attachments', 'bootable', 'encryption', )
class SharesTableBase(tables.DataTable): STATUS_CHOICES = ( ("available", True), ("AVAILABLE", True), ("creating", None), ("CREATING", None), ("deleting", None), ("DELETING", None), ("migrating", None), ("migrating_to", None), ("error", False), ("ERROR", False), ("error_deleting", False), ("ERROR_DELETING", False), ("MANAGE_ERROR", False), ("UNMANAGE_ERROR", False), ("extending_error", False), ) STATUS_DISPLAY_CHOICES = ( ("available", pgettext_lazy("Current status of share", u"Available")), ("AVAILABLE", pgettext_lazy("Current status of share", u"Available")), ("creating", pgettext_lazy("Current status of share", u"Creating")), ("CREATING", pgettext_lazy("Current status of share", u"Creating")), ("deleting", pgettext_lazy("Current status of share", u"Deleting")), ("DELETING", pgettext_lazy("Current status of share", u"Deleting")), ("migrating", pgettext_lazy("Current status of share", u"Migrating")), ("migrating_to", pgettext_lazy("Current status of share", u"Migrating to")), ("error", pgettext_lazy("Current status of share", u"Error")), ("ERROR", pgettext_lazy("Current status of share", u"Error")), ("error_deleting", pgettext_lazy("Current status of share", u"Deleting")), ("ERROR_DELETING", pgettext_lazy("Current status of share", u"Deleting")), ("MANAGE_ERROR", pgettext_lazy("Current status of share", u"Manage Error")), ("UNMANAGE_ERROR", pgettext_lazy("Current status of share", u"Unmanage Error")), ("extending_error", pgettext_lazy("Current status of share", u"Extending Error")), ) name = tables.WrappingColumn("name", verbose_name=_("Name"), link="horizon:project:shares:detail") description = tables.Column("description", verbose_name=_("Description"), truncate=40) metadata = tables.Column("metadata", verbose_name=_("Metadata")) size = tables.Column(get_size, verbose_name=_("Size"), attrs={'data-type': 'size'}) status = tables.Column("status", filters=(title, ), verbose_name=_("Status"), status=True, status_choices=STATUS_CHOICES, display_choices=STATUS_DISPLAY_CHOICES) def get_object_display(self, obj): return obj.name or obj.id
class VolumeSnapshotsTable(volumes_tables.VolumesTableBase): name = tables.WrappingColumn("name", verbose_name=_("Name"), link="horizon:admin:volumes:snapshots:detail") volume_name = snapshots_tables.SnapshotVolumeNameColumn( "name", verbose_name=_("Volume Name"), link="horizon:admin:volumes:volumes:detail") host = tables.Column("host_name", verbose_name=_("Host")) tenant = tables.Column("tenant_name", verbose_name=_("Project")) class Meta(object): name = "volume_snapshots" verbose_name = _("Volume Snapshots") pagination_param = 'snapshot_marker' prev_pagination_param = 'prev_snapshot_marker' table_actions = ( snapshots_tables.VolumeSnapshotsFilterAction, snapshots_tables.DeleteVolumeSnapshot, ) row_actions = ( snapshots_tables.DeleteVolumeSnapshot, UpdateVolumeSnapshotStatus, ) row_class = UpdateRow status_columns = ("status", ) columns = ( 'tenant', 'host', 'name', 'description', 'size', 'status', 'volume_name', )
class NodesTable(tables.DataTable): node_id = tables.WrappingColumn('id', verbose_name=_("ID")) name = tables.WrappingColumn('name', verbose_name=_("Name")) ip = tables.Column('ip', verbose_name=_("IP Address")) n_cores = tables.Column('n_cores', verbose_name=_("Num CPUs")) core_freq_mhz = tables.Column('core_freq_mhz', verbose_name=_("Core Frequency [MHz]")) ram_mb = tables.Column('ram_mb', verbose_name=_("Memory [MB]")) class Meta(object): name = "nodes" verbose_name = _("Nodes") table_actions = ( tables.FilterAction, HypervisorLinkAction, )
class ShareGroupTypesTable(tables.DataTable): name = tables.WrappingColumn("name", verbose_name=_("Name")) group_specs = tables.Column("group_specs", verbose_name=_("Group specs")) share_types = tables.Column("share_types", verbose_name=_("Share types")) visibility = tables.Column( "is_public", verbose_name=_("Visibility"), filters=(lambda d: 'public' if d is True else 'private', ), ) is_default = tables.Column( "is_default", verbose_name=_("Is default"), filters=(lambda d: 'Yes' if d is True else '-', ), ) def get_object_display(self, share_group_type): return share_group_type.name def get_object_id(self, share_group_type): return str(share_group_type.id) class Meta(object): name = "share_group_types" verbose_name = _("Share Group Types") table_actions = ( tables.NameFilterAction, CreateShareGroupType, DeleteShareGroupType, ) row_actions = ( UpdateShareGroupType, ManageShareGroupTypeAccess, DeleteShareGroupType, )
class VolumeDetailsSnapshotsTable(volume_tables.VolumesTableBase): group_snapshot = GroupSnapshotNameColumn( "name", verbose_name=_("Group Snapshot"), link="horizon:project:vg_snapshots:detail") name = tables.WrappingColumn("name", verbose_name=_("Name"), link="horizon:project:snapshots:detail") class Meta(object): name = "volume_snapshots" verbose_name = _("Volume Snapshots") pagination_param = 'snapshot_marker' prev_pagination_param = 'prev_snapshot_marker' table_actions = ( VolumeSnapshotsFilterAction, DeleteVolumeSnapshot, ) launch_actions = () if settings.LAUNCH_INSTANCE_LEGACY_ENABLED: launch_actions = (LaunchSnapshot, ) + launch_actions if settings.LAUNCH_INSTANCE_NG_ENABLED: launch_actions = (LaunchSnapshotNG, ) + launch_actions row_actions = ((CreateVolumeFromSnapshot, ) + launch_actions + (EditVolumeSnapshot, DeleteVolumeSnapshot, CreateBackup, UpdateMetadata)) row_class = UpdateRow status_columns = ("status", )
class AdminHypervisorsTable(tables.DataTable): STATUS_CHOICES = ( ("enabled", True), ("down", False), ("disabled", False), ) hostname = tables.WrappingColumn("hypervisor_hostname", link="horizon:admin:hypervisors:detail", verbose_name=_("Hostname")) cpu_model = tables.Column(get_cpu_model, verbose_name=_("CPU")) hypervisor_type = tables.Column("hypervisor_type", verbose_name=_("Type")) vcpus_used = tables.Column(get_vcpus_used, verbose_name=_("VCPUs (used)"), attrs={'data-type': 'vcpus_used'}) vcpus = tables.Column("vcpus", verbose_name=_("VCPUs (total)")) memory_used = tables.Column(get_memory_used, verbose_name=_("RAM (used)"), attrs={'data-type': 'size'}, filters=(sizeformat.mb_float_format,)) memory = tables.Column(get_memory_total, verbose_name=_("RAM (total)"), attrs={'data-type': 'size'}, filters=(sizeformat.mb_float_format,)) local_used = tables.Column('local_gb_used', verbose_name=_("Local Storage (used)"), attrs={'data-type': 'size'}, filters=(sizeformat.diskgbformat,)) local = tables.Column('local_gb', verbose_name=_("Local Storage (total)"), attrs={'data-type': 'size'}, filters=(sizeformat.diskgbformat,)) running_vms = tables.Column("running_vms", verbose_name=_("Instances")) status = tables.Column(get_status, verbose_name=_("Status"), status=True, status_choices=STATUS_CHOICES) def get_object_id(self, hypervisor): return "%s_%s" % (hypervisor.id, hypervisor.hypervisor_hostname) class Meta(object): name = "hypervisors" verbose_name = _("Hypervisors") status_columns = ["status"]
class SharesTable(SharesTableBase): name = tables.WrappingColumn("name", verbose_name=_("Name"), link="horizon:project:shares:detail") visibility = tables.Column( "is_public", verbose_name=_("Visibility"), help_text=("Whether this share visible to all tenants (public) or " "only for owner (private)."), filters=(lambda d: 'public' if d is True else 'private', ), ) proto = tables.Column("share_proto", verbose_name=_("Protocol")) share_network = tables.Column("share_network", verbose_name=_("Share Network"), empty_value="-") class Meta(object): name = "shares" verbose_name = _("Shares") status_columns = ["status"] row_class = UpdateRow table_actions = (tables.NameFilterAction, CreateShare, DeleteShare) row_actions = (EditShare, ExtendShare, RevertShare, ss_tables.CreateShareSnapshot, ManageRules, ManageReplicas, EditShareMetadata, DeleteShare)
class GroupsTable(tables.DataTable): STATUS_CHOICES = ( ("in-use", True), ("available", True), ("creating", None), ("error", False), ) STATUS_DISPLAY_CHOICES = ( ("available", pgettext_lazy("Current status of Volume Group", "Available")), ("in-use", pgettext_lazy("Current status of Volume Group", "In-use")), ("error", pgettext_lazy("Current status of Volume Group", "Error")), ("updating", pgettext_lazy("Current status of Volume Group", "Updating")), ("deleting", pgettext_lazy("Current status of Volume Group", "Deleting")), ) name = tables.WrappingColumn("name_or_id", verbose_name=_("Name"), link="horizon:project:volume_groups:detail") description = tables.Column("description", verbose_name=_("Description"), truncate=40) status = tables.Column("status", verbose_name=_("Status"), status=True, status_choices=STATUS_CHOICES, display_choices=STATUS_DISPLAY_CHOICES) availability_zone = tables.Column("availability_zone", verbose_name=_("Availability Zone")) volume_type = tables.Column(get_volume_types, verbose_name=_("Volume Type(s)")) has_snapshots = tables.Column("has_snapshots", verbose_name=_("Has Snapshots"), filters=(filters.yesno,)) def get_object_id(self, group): return group.id class Meta(object): name = "volume_groups" verbose_name = _("Volume Groups") table_actions = ( CreateGroup, GroupsFilterAction, ) row_actions = ( CreateSnapshot, ManageVolumes, EditGroup, CloneGroup, RemoveAllVolumes, DeleteGroup, ) row_class = UpdateRow status_columns = ("status",)
class VolumesTable(VolumesTableBase): name = tables.WrappingColumn("name", verbose_name=_("Name"), link="horizon:admin:volumes:volumes:detail") # volume_type = tables.Column(get_volume_type, # verbose_name=_("Type")) attachments = AttachmentColumn("attachments", verbose_name=_("Attached To")) availability_zone = tables.Column("availability_zone", verbose_name=_("Availability Zone")) bootable = tables.Column('is_bootable', verbose_name=_("Bootable"), filters=(filters.yesno, filters.capfirst)) encryption = tables.Column(get_encrypted_value, verbose_name=_("Encrypted"), link=get_encrypted_link) # class Meta: # name = "volumes" # verbose_name = _("Volumes") # status_columns = ["status"] # row_class = UpdateRow # table_actions = (CreateVolume, IncreaseVolume, DeleteVolume, VolumesFilterAction) # row_actions = (EditVolume, ExtendVolume, LaunchVolume, EditAttachments, # CreateSnapshot, CreateBackup, RetypeVolume, # UploadToImage, DeleteVolume, UpdateVolumeStatusAction) class Meta(object): name = "volumes" verbose_name = _("Volumes") status_columns = ["status"] row_class = UpdateRow #table_actions = (CreateVolume, AcceptTransfer, DeleteVolume, table_actions = (CreateVolume, IncreaseVolume, DeleteVolume, VolumesFilterAction) launch_actions = () if getattr(settings, 'LAUNCH_INSTANCE_LEGACY_ENABLED', False): launch_actions = (LaunchVolume, ) + launch_actions if getattr(settings, 'LAUNCH_INSTANCE_NG_ENABLED', True): launch_actions = (LaunchVolumeNG, ) + launch_actions # row_actions = ((EditVolume, ExtendVolume,) + # launch_actions + # (EditAttachments, CreateSnapshot, CreateBackup, # RetypeVolume, UploadToImage, CreateTransfer, # DeleteTransfer, DeleteVolume)) row_actions = (( EditVolume, ExtendVolume, ) + launch_actions + ( EditAttachments, CreateSnapshot, CreateBackup, UploadToImage, DeleteVolume, UpdateVolumeStatusAction, ))
class HostsTable(tables.DataTable): name = tables.WrappingColumn('name', # link="horizon:ceph:hosts:detail", verbose_name=_('Host Name')) class Meta(object): name = "hosts" verbose_name = _("Ceph Hosts")
class RolesTable(tables.DataTable): name = tables.WrappingColumn('name', verbose_name=_('Role Name')) id = tables.Column('id', verbose_name=_('Role ID')) class Meta(object): name = "roles" verbose_name = _("Roles") row_actions = (EditRoleLink, DeleteRolesAction) table_actions = (RoleFilterAction, CreateRoleLink, DeleteRolesAction)
class TenantsTable(tables.DataTable): name = tables.WrappingColumn('name', verbose_name=_('Name'), link=("horizon:identity:projects:detail"), form_field=forms.CharField(max_length=64)) description = tables.Column(lambda obj: getattr(obj, 'description', None), verbose_name=_('Description'), form_field=forms.CharField( widget=forms.Textarea(attrs={'rows': 4}), required=False)) id = tables.Column('id', verbose_name=_('Project ID')) enabled = tables.Column('enabled', verbose_name=_('Enabled'), status=True, filters=(filters.yesno, filters.capfirst), form_field=forms.BooleanField(label=_('Enabled'), required=False)) if api.keystone.VERSIONS.active >= 3: domain_name = tables.Column('domain_name', verbose_name=_('Domain Name')) enabled = tables.Column('enabled', verbose_name=_('Enabled'), status=True, filters=(filters.yesno, filters.capfirst), form_field=forms.BooleanField( label=_('Enabled'), required=False)) def get_project_detail_link(self, project): # this method is an ugly monkey patch, needed because # the column link method does not provide access to the request if policy.check((("identity", "identity:get_project"), ), self.request, target={"project": project}): return reverse("horizon:identity:projects:detail", args=(project.id, )) return None def __init__(self, request, data=None, needs_form_wrapper=None, **kwargs): super(TenantsTable, self).__init__(request, data=data, needs_form_wrapper=needs_form_wrapper, **kwargs) # see the comment above about ugly monkey patches self.columns['name'].get_link_url = self.get_project_detail_link class Meta(object): name = "tenants" verbose_name = _("Projects") row_class = UpdateRow row_actions = (UpdateMembersLink, UpdateGroupsLink, UpdateProject, UsageLink, ModifyQuotas, DeleteTenantsAction, RescopeTokenToProject) table_actions = (TenantFilterAction, CreateProject, DeleteTenantsAction) pagination_param = "tenant_marker"
class RoleAssignmentsTable(tables.DataTable): project = tables.WrappingColumn(get_project_name, verbose_name=_('Project'), link=get_project_link, form_field=forms.CharField(max_length=64)) domain = tables.WrappingColumn(get_domain_name, verbose_name=_('Domain'), form_field=forms.CharField(max_length=64)) system = tables.WrappingColumn(get_system_scope, verbose_name=_('System Scope'), form_field=forms.CharField(max_length=64)) role = tables.Column(get_role_name, verbose_name=_('Role'), form_field=forms.CharField( widget=forms.Textarea(attrs={'rows': 4}), required=False)) def get_object_id(self, datum): """Identifier of the role assignment.""" # Role assignment doesn't have identifier so one will be created # from the identifier of scope, user and role. This will guaranty the # unicity. scope_id = "" if "project" in datum.scope: scope_id = datum.scope["project"]["id"] elif "domain" in datum.scope: scope_id = datum.scope["domain"]["id"] assignee_id = "" if hasattr(datum, "user"): assignee_id = datum.user["id"] elif hasattr(datum, "group"): assignee_id = datum.group["id"] return "%s%s%s" % (assignee_id, datum.role["id"], scope_id) class Meta(object): name = "roleassignmentstable" verbose_name = _("Role assignments")
class RBACPoliciesTable(tables.DataTable): tenant = tables.Column("tenant_name", verbose_name=_("Project")) id = tables.WrappingColumn('id', verbose_name=_('ID'), link="horizon:admin:rbac_policies:detail") object_type = tables.WrappingColumn('object_type', verbose_name=_('Object Type')) object_name = tables.Column("object_name", verbose_name=_("Object")) target_tenant = tables.Column("target_tenant_name", verbose_name=_("Target Project")) class Meta(object): name = "rbac policies" verbose_name = _("RBAC Policies") table_actions = ( CreateRBACPolicy, DeleteRBACPolicy, ) row_actions = (UpdateRBACPolicy, DeleteRBACPolicy)
class ShareGroupSnapshotsTable(tables.DataTable): STATUS_CHOICES = ( ("available", True), ("creating", None), ("error", False), ) STATUS_DISPLAY_CHOICES = ( ("available", pgettext_lazy("Current status of snapshot", u"Available")), ("creating", pgettext_lazy("Current status of snapshot", u"Creating")), ("error", pgettext_lazy("Current status of snapshot", u"Error")), ) name = tables.WrappingColumn( "name", verbose_name=_("Name"), link="horizon:project:share_group_snapshots:detail") description = tables.Column( "description", verbose_name=_("Description"), truncate=40) created_at = tables.Column( "created_at", verbose_name=_("Created at"), filters=( filters.parse_isotime, )) status = tables.Column( "status", filters=(title,), verbose_name=_("Status"), status=True, status_choices=STATUS_CHOICES, display_choices=STATUS_DISPLAY_CHOICES) source = ShareGroupSnapshotShareGroupNameColumn( "share_group", verbose_name=_("Source"), link="horizon:project:share_groups:detail") def get_object_display(self, obj): return obj.name class Meta(object): name = "share_group_snapshots" verbose_name = _("Share Group Snapshots") status_columns = ["status"] row_class = UpdateShareGroupSnapshotRow table_actions = ( tables.NameFilterAction, DeleteShareGroupSnapshot, ) row_actions = ( CreateShareGroupFromSnapshot, UpdateShareGroupSnapshot, DeleteShareGroupSnapshot, )
class RoutersTable(tables.DataTable): name = tables.WrappingColumn("name", verbose_name=_("Name"), link="horizon:project:routers:detail") status = tables.Column("status", verbose_name=_("Status"), status=True, display_choices=STATUS_DISPLAY_CHOICES) distributed = tables.Column("distributed", filters=(filters.yesno, filters.capfirst), verbose_name=_("Distributed")) ha = tables.Column( "ha", filters=(filters.yesno, filters.capfirst), # Translators: High Availability mode of Neutron router verbose_name=_("HA mode")) ext_net = tables.Column(get_external_network, verbose_name=_("External Network")) admin_state = tables.Column("admin_state", verbose_name=_("Admin State"), display_choices=ADMIN_STATE_DISPLAY_CHOICES) availability_zones = tables.Column(get_availability_zones, verbose_name=_("Availability Zones")) def __init__(self, request, data=None, needs_form_wrapper=None, **kwargs): super(RoutersTable, self).__init__(request, data=data, needs_form_wrapper=needs_form_wrapper, **kwargs) if not api.neutron.get_feature_permission(request, "dvr", "get"): del self.columns["distributed"] if not api.neutron.get_feature_permission(request, "l3-ha", "get"): del self.columns["ha"] try: if not api.neutron.is_extension_supported( request, "router_availability_zone"): del self.columns["availability_zones"] except Exception: msg = _("Unable to check if router availability zone extension " "is supported") exceptions.handle(self.request, msg) del self.columns['availability_zones'] def get_object_display(self, obj): return obj.name class Meta(object): name = "routers" verbose_name = _("Routers") status_columns = ["status"] row_class = UpdateRow table_actions = (CreateRouter, DeleteRouter, RoutersFilterAction) row_actions = (SetGateway, ClearGateway, EditRouter, DeleteRouter)
class LibraryPolicyRulesTable(tables.DataTable): name = tables.Column("name", verbose_name=_("Rule Name"), classes=('nowrap-col',)) rule = tables.Column("rule", verbose_name=_("Rule"), filters=(congress.format_rule, linebreaksbr,)) comment = tables.WrappingColumn("comment", verbose_name=_("Comment")) class Meta(object): name = "policy_library_rules" verbose_name = _("Policy Rules") hidden_title = False
class ReachabilityTestsTable(tables.DataTable): id = tables.Column("id", hidden=True) name = tables.Column("name", verbose_name=_("Name")) src_tenant = tables.WrappingColumn("src_tenant", verbose_name="Source Tenant") src_segment = tables.WrappingColumn("src_segment", verbose_name="Source Segment") src_tenant_id = tables.Column("src_tenant_id", verbose_name="Source Tenant ID", hidden=True) src_tenant_name = tables.Column("src_tenant_name", verbose_name="Source Tenant Name", hidden=True) src_segment_id = tables.Column("src_segment_id", verbose_name="Source Segment ID", hidden=True) src_segment_name = tables.Column("src_segment_name", verbose_name="Source Segment Name", hidden=True) src_ip = tables.Column("src_ip", verbose_name=_("Source IP")) dst_ip = tables.Column("dst_ip", verbose_name=_("Destination IP")) test_time = tables.Column( "test_time", link=("horizon:project:connections:reachability_tests:detail"), verbose_name=_("Last Run")) status = tables.Column("test_result", filters=(title, filters.replace_underscores), verbose_name=_("Status"), status_choices=STATUS_CHOICES, display_choices=STATUS_DISPLAY_CHOICES) class Meta(object): name = "reachabilitytests" verbose_name = _("Reachability Tests") table_actions = (CreateReachabilityTest, RunQuickTest, DeleteReachabilityTests, ReachabilityTestFilterAction) row_actions = (RunTest, UpdateTest, DeleteReachabilityTests)