Iotronic plugin for the OpenStack Dashboard.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
6.3 KiB

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import logging
from django import template
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy
from horizon import tables
from openstack_dashboard import api
LOG = logging.getLogger(__name__)
class CreateBoardLink(tables.LinkAction):
name = "create"
verbose_name = _("Create Board")
url = "horizon:iot:boards:create"
classes = ("ajax-modal",)
icon = "plus"
# policy_rules = (("iot", "iot:create_board"),)
class EditBoardLink(tables.LinkAction):
name = "edit"
verbose_name = _("Edit")
url = "horizon:iot:boards:update"
classes = ("ajax-modal",)
icon = "pencil"
# policy_rules = (("iot", "iot:update_board"),)
def allowed(self, request, role):
return api.keystone.keystone_can_edit_role()
class RestoreServices(tables.BatchAction):
name = "restoreservices"
def action_present(count):
return u"Restore ALL Services"
def action_past(count):
return u"Restored ALL Services"
def allowed(self, request, board=None):
return True
def action(self, request, board_id):
api.iotronic.restore_services(request, board_id)
class EnableServiceLink(tables.LinkAction):
name = "enableservice"
verbose_name = _("Enable Service(s)")
url = "horizon:iot:boards:enableservice"
classes = ("ajax-modal",)
# icon = "plus"
# policy_rules = (("iot", "iot:service_action"),)
class DisableServiceLink(tables.LinkAction):
name = "disableservice"
verbose_name = _("Disable Service(s)")
url = "horizon:iot:boards:disableservice"
classes = ("ajax-modal",)
# icon = "plus"
# policy_rules = (("iot", "iot:service_action"),)
class RemovePluginsLink(tables.LinkAction):
name = "removeplugins"
verbose_name = _("Remove Plugin(s)")
url = "horizon:iot:boards:removeplugins"
classes = ("ajax-modal",)
icon = "plus"
# policy_rules = (("iot", "iot:remove_plugins"),)
class AttachPortLink(tables.LinkAction):
name = "attachport"
verbose_name = _("Attach Port")
url = "horizon:iot:boards:attachport"
classes = ("ajax-modal",)
icon = "plus"
class DetachPortLink(tables.LinkAction):
name = "detachport"
verbose_name = _("Detach Port")
url = "horizon:iot:boards:detachport"
classes = ("ajax-modal",)
icon = "plus"
class EnableWebServiceLink(tables.LinkAction):
name = "enablewebservice"
verbose_name = _("Enable Web Services Manager")
url = "horizon:iot:boards:enablewebservice"
classes = ("ajax-modal",)
icon = "plus"
class DisableWebServiceLink(tables.LinkAction):
name = "disablewebservice"
verbose_name = _("Disable Web Services Manager")
url = "horizon:iot:boards:disablewebservice"
classes = ("ajax-modal",)
icon = "plus"
class DeleteBoardsAction(tables.DeleteAction):
def action_present(count):
return ungettext_lazy(
u"Delete Board",
u"Delete Boards",
def action_past(count):
return ungettext_lazy(
u"Deleted Board",
u"Deleted Boards",
# policy_rules = (("iot", "iot:delete_board"),)
def allowed(self, request, role):
return api.keystone.keystone_can_edit_role()
def delete(self, request, board_id):
api.iotronic.board_delete(request, board_id)
class BoardFilterAction(tables.FilterAction):
# If uncommented it will appear the select menu list of fields
# and filter button
filter_type = "server"
filter_choices = (("name", _("Board Name ="), True),
("type", _("Type ="), True),
("status", _("Status ="), True))
def filter(self, table, boards, filter_string):
"""Naive case-insensitive search."""
q = filter_string.lower()
return [board for board in boards
if q in]
def show_services(board_info):
template_name = 'iot/boards/_cell_services.html'
context = board_info._info
# LOG.debug("CONTEXT: %s", context)
return template.loader.render_to_string(template_name,
class BoardsTable(tables.DataTable):
name = tables.WrappingColumn('name', link="horizon:iot:boards:detail",
verbose_name=_('Board Name'))
type = tables.Column('type', verbose_name=_('Type'))
# mobile = tables.Column('mobile', verbose_name=_('Mobile'))
lr_version = tables.Column('lr_version', verbose_name=_('LR version'))
# fleet = tables.Column('fleet', verbose_name=_('Fleet ID'))
fleet_name = tables.Column('fleet_name', verbose_name=_('Fleet Name'))
# code = tables.Column('code', verbose_name=_('Code'))
status = tables.Column('status', verbose_name=_('Status'))
uuid = tables.Column('uuid', verbose_name=_('Board ID'))
# location = tables.Column('location', verbose_name=_('Geo'))
services = tables.Column(show_services, verbose_name=_('Services'))
# extra = tables.Column('extra', verbose_name=_('Extra'))
# Overriding get_object_id method because in IoT service the "id" is
# identified by the field UUID
def get_object_id(self, datum):
return datum.uuid
class Meta(object):
name = "boards"
verbose_name = _("boards")
row_actions = (EditBoardLink, EnableServiceLink, DisableServiceLink,
RestoreServices, AttachPortLink, DetachPortLink,
EnableWebServiceLink, DisableWebServiceLink,
RemovePluginsLink, DeleteBoardsAction)
table_actions = (BoardFilterAction, CreateBoardLink,