Merge "Fix Flake8 style warnings in openstack_dashboard/"

This commit is contained in:
Jenkins 2014-07-30 18:22:20 +00:00 committed by Gerrit Code Review
commit 9bdc8fb45c
72 changed files with 667 additions and 691 deletions

View File

@ -20,14 +20,12 @@ from __future__ import absolute_import
import itertools
import logging
import thread
from django.conf import settings
import glanceclient as glance_client
from six.moves import _thread as thread
from horizon.utils import functions as utils
from openstack_dashboard.api import base

View File

@ -14,6 +14,7 @@ import logging
from django.conf import settings
from heatclient import client as heat_client
from horizon.utils import functions as utils
from openstack_dashboard.api import base
@ -41,10 +42,10 @@ def heatclient(request, password=None):
'ca_file': cacert,
'username': request.user.username,
'password': password
#'timeout': args.timeout,
#'ca_file': args.ca_file,
#'cert_file': args.cert_file,
#'key_file': args.key_file,
# 'timeout': args.timeout,
# 'ca_file': args.ca_file,
# 'cert_file': args.cert_file,
# 'key_file': args.key_file,
}
client = heat_client.Client(api_version, endpoint, **kwargs)
client.format_parameters = format_parameters

View File

@ -218,6 +218,7 @@ def tenant_create(request, name, description=None, enabled=None,
def get_default_domain(request):
"""Gets the default domain object to use when creating Identity object.
Returns the domain context if is set, otherwise return the domain
of the logon user.
"""
@ -576,9 +577,7 @@ def remove_group_role(request, role, group, domain=None, project=None):
def remove_group_roles(request, group, domain=None, project=None):
"""Removes all roles from a group on a domain or project,
removing them from it.
"""
"""Removes all roles from a group on a domain or project."""
client = keystoneclient(request, admin=True)
roles = client.roles.list(group=group, domain=domain, project=project)
for role in roles:
@ -587,8 +586,9 @@ def remove_group_roles(request, group, domain=None, project=None):
def get_default_role(request):
"""Gets the default role object from Keystone and saves it as a global
since this is configured in settings and should not change from request
"""Gets the default role object from Keystone and saves it as a global.
Since this is configured in settings and should not change from request
to request. Supports lookup by name or id.
"""
global DEFAULT_ROLE

View File

@ -112,15 +112,17 @@ class FloatingIpManager(object):
@abc.abstractmethod
def get_target_id_by_instance(self, instance_id):
"""Returns a target ID of floating IP association based on
a backend implementation.
"""Returns a target ID of floating IP association.
Based on a backend implementation.
"""
pass
@abc.abstractmethod
def list_target_id_by_instance(self, instance_id):
"""Returns a list of instance's target IDs of floating IP association
based on the backend implementation
"""Returns a list of instance's target IDs of floating IP association.
Based on the backend implementation
"""
pass

View File

@ -21,20 +21,20 @@ from __future__ import absolute_import
import collections
import logging
import netaddr
from django.conf import settings
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
from neutronclient.v2_0 import client as neutron_client
from horizon import messages
from horizon.utils.memoized import memoized # noqa
from openstack_dashboard.api import base
from openstack_dashboard.api import network_base
from openstack_dashboard.api import nova
from neutronclient.v2_0 import client as neutron_client
LOG = logging.getLogger(__name__)
@ -120,7 +120,7 @@ class Router(NeutronAPIDictWrapper):
"""Wrapper for neutron routers."""
def __init__(self, apiresource):
#apiresource['admin_state'] = \
# apiresource['admin_state'] = \
# 'UP' if apiresource['admin_state_up'] else 'DOWN'
super(Router, self).__init__(apiresource)
@ -463,6 +463,7 @@ def network_list(request, **params):
def network_list_for_tenant(request, tenant_id, **params):
"""Return a network list available for the tenant.
The list contains networks owned by the tenant and public networks.
If requested_networks specified, it searches requested_networks only.
"""
@ -497,6 +498,7 @@ def network_get(request, network_id, expand_subnet=True, **params):
def network_create(request, **kwargs):
"""Create a subnet on a specified network.
:param request: request context
:param tenant_id: (optional) tenant id of the network created
:param name: (optional) name of the network created
@ -539,6 +541,7 @@ def subnet_get(request, subnet_id, **params):
def subnet_create(request, network_id, cidr, ip_version, **kwargs):
"""Create a subnet on a specified network.
:param request: request context
:param network_id: network id a subnet is created on
:param cidr: subnet IP address range
@ -586,6 +589,7 @@ def port_get(request, port_id, **params):
def port_create(request, network_id, **kwargs):
"""Create a port on a specified network.
:param request: request context
:param network_id: network id a subnet is created on
:param device_id: (optional) device id attached to the port

View File

@ -51,31 +51,33 @@ DEFAULT_QUOTA_NAME = 'default'
class VNCConsole(base.APIDictWrapper):
"""Wrapper for the "console" dictionary returned by the
novaclient.servers.get_vnc_console method.
"""Wrapper for the "console" dictionary.
Returned by the novaclient.servers.get_vnc_console method.
"""
_attrs = ['url', 'type']
class SPICEConsole(base.APIDictWrapper):
"""Wrapper for the "console" dictionary returned by the
novaclient.servers.get_spice_console method.
"""Wrapper for the "console" dictionary.
Returned by the novaclient.servers.get_spice_console method.
"""
_attrs = ['url', 'type']
class RDPConsole(base.APIDictWrapper):
"""Wrapper for the "console" dictionary returned by the
novaclient.servers.get_rdp_console method.
"""Wrapper for the "console" dictionary.
Returned by the novaclient.servers.get_rdp_console method.
"""
_attrs = ['url', 'type']
class Server(base.APIResourceWrapper):
"""Simple wrapper around novaclient.server.Server
Preserves the request info so image name can later be retrieved
"""Simple wrapper around novaclient.server.Server.
Preserves the request info so image name can later be retrieved.
"""
_attrs = ['addresses', 'attrs', 'id', 'image', 'links',
'metadata', 'name', 'private_ip', 'public_ip', 'status', 'uuid',
@ -92,8 +94,9 @@ class Server(base.APIResourceWrapper):
# TODO(gabriel): deprecate making a call to Glance as a fallback.
@property
def image_name(self):
import glanceclient.exc as glance_exceptions
from openstack_dashboard.api import glance
import glanceclient.exc as glance_exceptions # noqa
from openstack_dashboard.api import glance # noqa
if not self.image:
return "-"
if hasattr(self.image, 'name'):
@ -118,6 +121,7 @@ class Server(base.APIResourceWrapper):
class NovaUsage(base.APIResourceWrapper):
"""Simple wrapper around contrib/simple_usage.py."""
_attrs = ['start', 'server_usages', 'stop', 'tenant_id',
'total_local_gb_usage', 'total_memory_mb_usage',
'total_vcpus_usage', 'total_hours']
@ -159,9 +163,11 @@ class NovaUsage(base.APIResourceWrapper):
class SecurityGroup(base.APIResourceWrapper):
"""Wrapper around novaclient.security_groups.SecurityGroup which wraps its
rules in SecurityGroupRule objects and allows access to them.
"""Wrapper around novaclient.security_groups.SecurityGroup.
Wraps its rules in SecurityGroupRule objects and allows access to them.
"""
_attrs = ['id', 'name', 'description', 'tenant_id']
@cached_property
@ -175,6 +181,7 @@ class SecurityGroup(base.APIResourceWrapper):
class SecurityGroupRule(base.APIResourceWrapper):
"""Wrapper for individual rules in a SecurityGroup."""
_attrs = ['id', 'ip_protocol', 'from_port', 'to_port', 'ip_range', 'group']
def __unicode__(self):
@ -759,8 +766,9 @@ def list_extensions(request):
@memoized
def extension_supported(extension_name, request):
"""this method will determine if nova supports a given extension name.
example values for the extension_name include AdminActions, ConsoleOutput,
"""Determine if nova supports a given extension name.
Example values for the extension_name include AdminActions, ConsoleOutput,
etc.
"""
extensions = list_extensions(request)

View File

@ -108,7 +108,8 @@ def backup_delete(request, backup_id):
return troveclient(request).backups.delete(backup_id)
def backup_create(request, name, instance_id, description=None, parent_id=None):
def backup_create(request, name, instance_id, description=None,
parent_id=None):
return troveclient(request).backups.create(name, instance_id,
description, parent_id)

View File

@ -83,11 +83,11 @@ class CreateAggregateWorkflowTests(BaseAggregateWorkflowTests):
api.nova.aggregate_details_list(IsA(http.HttpRequest)).AndReturn([])
workflow_data = self._get_create_workflow_data(aggregate)
api.nova.aggregate_create(IsA(http.HttpRequest),
name=workflow_data['name'],
availability_zone=
workflow_data['availability_zone'])\
.AndReturn(aggregate)
api.nova.aggregate_create(
IsA(http.HttpRequest),
name=workflow_data['name'],
availability_zone=workflow_data['availability_zone'],
).AndReturn(aggregate)
self.mox.ReplayAll()
@ -110,11 +110,11 @@ class CreateAggregateWorkflowTests(BaseAggregateWorkflowTests):
api.nova.aggregate_details_list(IsA(http.HttpRequest)).AndReturn([])
workflow_data = self._get_create_workflow_data(aggregate, hosts)
api.nova.aggregate_create(IsA(http.HttpRequest),
name=workflow_data['name'],
availability_zone=
workflow_data['availability_zone'])\
.AndReturn(aggregate)
api.nova.aggregate_create(
IsA(http.HttpRequest),
name=workflow_data['name'],
availability_zone=workflow_data['availability_zone'],
).AndReturn(aggregate)
compute_hosts = []
for host in hosts:

View File

@ -56,6 +56,7 @@ class ViewFlavorExtras(tables.LinkAction):
url = "horizon:admin:flavors:extras:index"
icon = "pencil"
class ModifyAccess(tables.LinkAction):
name = "projects"
verbose_name = _("Modify Access")
@ -63,7 +64,6 @@ class ModifyAccess(tables.LinkAction):
classes = ("ajax-modal",)
icon = "pencil"
def get_link_url(self, flavor):
step = 'update_flavor_access'
base_url = reverse(self.url, args=[flavor.id])

View File

@ -437,13 +437,13 @@ class UpdateFlavorWorkflowTests(BaseFlavorWorkflowTests):
self.mox.ReplayAll()
#run get test
# run get test
url = reverse('horizon:admin:flavors:update', args=[flavor.id])
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
self.assertTemplateUsed(resp, "admin/flavors/update.html")
#run post test
# run post test
workflow_data = {'flavor_id': flavor.id,
'name': new_flavor.name,
'vcpus': new_flavor.vcpus,

View File

@ -12,21 +12,18 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import tabs
from openstack_dashboard.api import base
from openstack_dashboard.api import cinder
from openstack_dashboard.api import keystone
from openstack_dashboard.api import neutron
from openstack_dashboard.api import nova
from openstack_dashboard.usage import quotas
from openstack_dashboard.dashboards.admin.info import constants
from openstack_dashboard.dashboards.admin.info import tables
from openstack_dashboard.usage import quotas
class ServicesTab(tabs.TableTab):

View File

@ -124,7 +124,7 @@ class AdminInstancesTable(tables.DataTable):
# is an ID, and correlating that at production scale using our current
# techniques isn't practical. It can be added back in when we have names
# returned in a practical manner by the API.
#user = tables.Column("user_id", verbose_name=_("User"))
# user = tables.Column("user_id", verbose_name=_("User"))
host = tables.Column("OS-EXT-SRV-ATTR:host",
verbose_name=_("Host"),
classes=('nowrap-col',))

View File

@ -18,7 +18,7 @@ import json
from django.http import HttpResponse # noqa
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
from django.views import generic
import django.views
from horizon import exceptions
from horizon import tables
@ -39,7 +39,7 @@ class IndexView(tabs.TabbedTableView):
template_name = 'admin/metering/index.html'
class SamplesView(generic.TemplateView):
class SamplesView(django.views.generic.TemplateView):
template_name = "admin/metering/samples.csv"
@staticmethod
@ -130,7 +130,7 @@ class ReportView(tables.MultiTableView):
return context
class CsvReportView(generic.View):
class CsvReportView(django.views.generic.View):
def get(self, request, **response_kwargs):
render_class = ReportCsvRenderer
response_kwargs.setdefault("filename", "usage.csv")

View File

@ -83,7 +83,7 @@ class CreatePort(forms.SelfHandlingForm):
class UpdatePort(project_forms.UpdatePort):
#tenant_id = forms.CharField(widget=forms.HiddenInput())
# tenant_id = forms.CharField(widget=forms.HiddenInput())
device_id = forms.CharField(max_length=100, label=_("Device ID"),
help_text=_("Device ID attached to the port"),
required=False)

View File

@ -74,7 +74,7 @@ class EditNetwork(tables.LinkAction):
return {"project_id": project_id}
#def _get_subnets(network):
# def _get_subnets(network):
# cidrs = [subnet.get('cidr') for subnet in network.subnets]
# return ','.join(cidrs)

View File

@ -308,8 +308,8 @@ class NetworkTests(test.BaseAdminViewTests):
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_network_create_post_network_exception_with_profile(self):
self.test_network_create_post_network_exception(test_with_profile=
True)
self.test_network_create_post_network_exception(
test_with_profile=True)
@test.create_stubs({api.neutron: ('network_get',)})
def test_network_update_get(self):

View File

@ -837,7 +837,6 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
api.cinder: ('tenant_quota_update',),
quotas: ('get_tenant_quota_data',
'get_disabled_quotas')})
def test_update_project_save(self, neutron=False):
keystone_api_version = api.keystone.VERSIONS.active

View File

@ -43,7 +43,7 @@ class IndexView(r_views.IndexView, n_views.IndexView):
tenant_dict = self._get_tenant_list()
ext_net_dict = self._list_external_networks()
for r in routers:
# Set tenant name
# Set tenant name
tenant = tenant_dict.get(r.tenant_id, None)
r.tenant_name = getattr(tenant, 'name', None)
# If name is empty use UUID as name

View File

@ -137,7 +137,7 @@ class UsersTable(tables.DataTable):
defaultfilters.urlize)
)
# Default tenant is not returned from Keystone currently.
#default_tenant = tables.Column('default_tenant',
# default_tenant = tables.Column('default_tenant',
# verbose_name=_('Default Project'))
id = tables.Column('id', verbose_name=_('User ID'))
enabled = tables.Column('enabled', verbose_name=_('Enabled'),

View File

@ -20,17 +20,14 @@ from copy import deepcopy # noqa
from django.core.urlresolvers import reverse
from django import http
from mox import IsA # noqa
from horizon.workflows import views
from openstack_dashboard import api
from openstack_dashboard.dashboards.project.access_and_security import (
api_access)
from openstack_dashboard.test import helpers as test
from openstack_dashboard.usage import quotas
from openstack_dashboard.dashboards.project.access_and_security import (
api_access
)
class AccessAndSecurityTests(test.TestCase):
@ -59,7 +56,6 @@ class AccessAndSecurityTests(test.TestCase):
quotas.tenant_quota_usages(IsA(http.HttpRequest)).MultipleTimes()\
.AndReturn(quota_data)
api.base.is_service_enabled(IsA(http.HttpRequest),
'network').MultipleTimes().AndReturn(True)
api.base.is_service_enabled(IsA(http.HttpRequest),
@ -103,7 +99,6 @@ class AccessAndSecurityTests(test.TestCase):
quotas.tenant_quota_usages(IsA(http.HttpRequest)).MultipleTimes()\
.AndReturn(quota_data)
api.base.is_service_enabled(IsA(http.HttpRequest),
'network').MultipleTimes().AndReturn(True)
api.base.is_service_enabled(IsA(http.HttpRequest),

View File

@ -20,18 +20,19 @@
Views for managing Swift containers.
"""
import os
from django.core.urlresolvers import reverse
from django import http
from django.utils.functional import cached_property # noqa
from django.utils import http as utils_http
from django.utils.translation import ugettext_lazy as _
from django.views import generic
import django.views.generic
from horizon import browsers
from horizon import exceptions
from horizon import forms
from horizon.utils import memoized
from openstack_dashboard import api
from openstack_dashboard.api import swift
from openstack_dashboard.dashboards.project.containers \
@ -40,8 +41,6 @@ from openstack_dashboard.dashboards.project.containers \
import forms as project_forms
from openstack_dashboard.dashboards.project.containers import tables
import os
def for_url(container_name):
"""Build a URL friendly container name.
@ -261,7 +260,8 @@ class CopyView(forms.ModalFormView):
return context
class ContainerDetailView(forms.ModalFormMixin, generic.TemplateView):
class ContainerDetailView(forms.ModalFormMixin,
django.views.generic.TemplateView):
template_name = 'project/containers/container_detail.html'
@memoized.memoized_method
@ -283,7 +283,8 @@ class ContainerDetailView(forms.ModalFormMixin, generic.TemplateView):
return context
class ObjectDetailView(forms.ModalFormMixin, generic.TemplateView):
class ObjectDetailView(forms.ModalFormMixin,
django.views.generic.TemplateView):
template_name = 'project/containers/object_detail.html'
@memoized.memoized_method

View File

@ -43,36 +43,36 @@ class CopyClusterTemplate(create_flow.ConfigureClusterTemplate):
super(CopyClusterTemplate, self).__init__(request, context_seed,
entry_point, *args,
**kwargs)
#init Node Groups
# Initialize node groups.
# TODO(rdopieralski) The same (or very similar) code appears
# multiple times in this dashboard. It should be refactored to
# a function.
for step in self.steps:
if isinstance(step, create_flow.ConfigureNodegroups):
ng_action = step.action
template_ngs = template.node_groups
if 'forms_ids' not in request.POST:
ng_action.groups = []
for id in range(0, len(template_ngs), 1):
group_name = "group_name_" + str(id)
template_id = "template_id_" + str(id)
count = "count_" + str(id)
templ_ng = template_ngs[id]
ng_action.groups.append(
{"name": templ_ng["name"],
"template_id":
templ_ng["node_group_template_id"],
"count": templ_ng["count"],
"id": id,
"deletable": "true"})
wf_helpers.build_node_group_fields(ng_action,
group_name,
template_id,
count)
if 'forms_ids' in request.POST:
continue
ng_action.groups = []
for i, templ_ng in enumerate(template_ngs):
group_name = "group_name_%d" % i
template_id = "template_id_%d" % i
count = "count_%d" % i
ng_action.groups.append({
"name": templ_ng["name"],
"template_id": templ_ng["node_group_template_id"],
"count": templ_ng["count"],
"id": i,
"deletable": "true",
})
wf_helpers.build_node_group_fields(
ng_action, group_name, template_id, count)
elif isinstance(step, create_flow.GeneralConfig):
fields = step.action.fields
fields["cluster_template_name"].initial = \
template.name + "-copy"
fields["cluster_template_name"].initial = (
template.name + "-copy")
fields["description"].initial = template.description
except Exception:

View File

@ -11,15 +11,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import json
import logging
from django.utils.translation import ugettext_lazy as _
import json
from saharaclient.api import base as api_base
from horizon import exceptions
from horizon import forms
from horizon import workflows
from openstack_dashboard.api import sahara as saharaclient
from openstack_dashboard.dashboards.project.data_processing. \
utils import helpers as helpers
@ -28,8 +28,6 @@ from openstack_dashboard.dashboards.project.data_processing. \
import openstack_dashboard.dashboards.project.data_processing. \
utils.workflow_helpers as whelpers
from saharaclient.api import base as api_base
LOG = logging.getLogger(__name__)
@ -283,7 +281,7 @@ class ConfigureClusterTemplate(whelpers.ServiceParametersWorkflow,
plugin, hadoop_version = whelpers.\
get_plugin_and_hadoop_version(request)
#TODO(nkonovalov): Fix client to support default_image_id
# TODO(nkonovalov): Fix client to support default_image_id
saharaclient.cluster_template_create(
request,
context["general_cluster_template_name"],
@ -292,7 +290,8 @@ class ConfigureClusterTemplate(whelpers.ServiceParametersWorkflow,
context["general_description"],
configs_dict,
node_groups,
context["anti_affinity_info"])
context["anti_affinity_info"],
)
return True
except api_base.APIException as e:
self.error_description = str(e)

View File

@ -130,7 +130,7 @@ class InstancesTable(tables.DataTable):
class Meta:
name = "cluster_instances"
#just ignoring the name
# Just ignoring the name.
verbose_name = _(" ")

View File

@ -200,7 +200,7 @@ class ConfigureCluster(whelpers.StatusFormatMixin, workflows.Workflow):
def handle(self, request, context):
try:
#TODO(nkonovalov) Implement AJAX Node Groups
# TODO(nkonovalov) Implement AJAX Node Groups.
node_groups = None
plugin, hadoop_version = whelpers.\

View File

@ -23,8 +23,8 @@ import openstack_dashboard.dashboards.project.data_processing. \
cluster_templates.workflows.create as clt_create_flow
import openstack_dashboard.dashboards.project.data_processing. \
clusters.workflows.create as cl_create_flow
import openstack_dashboard.dashboards.project.data_processing. \
utils.workflow_helpers as whelpers
from openstack_dashboard.dashboards.project.data_processing.utils import (
workflow_helpers)
from saharaclient.api import base as api_base
@ -36,7 +36,7 @@ class NodeGroupsStep(clt_create_flow.ConfigureNodegroups):
class ScaleCluster(cl_create_flow.ConfigureCluster,
whelpers.StatusFormatMixin):
workflow_helpers.StatusFormatMixin):
slug = "scale_cluster"
name = _("Scale Cluster")
finalize_button_name = _("Scale")
@ -54,7 +54,7 @@ class ScaleCluster(cl_create_flow.ConfigureCluster,
plugin = cluster.plugin_name
hadoop_version = cluster.hadoop_version
#init deletable nodegroups
# Initialize deletable node groups.
deletable = dict()
for group in cluster.node_groups:
deletable[group["name"]] = "false"
@ -69,32 +69,29 @@ class ScaleCluster(cl_create_flow.ConfigureCluster,
super(ScaleCluster, self).__init__(request, context_seed,
entry_point, *args,
**kwargs)
#init Node Groups
# Initialize node groups.
for step in self.steps:
if isinstance(step, clt_create_flow.ConfigureNodegroups):
ng_action = step.action
template_ngs = cluster.node_groups
if not isinstance(step, clt_create_flow.ConfigureNodegroups):
continue
ng_action = step.action
template_ngs = cluster.node_groups
if 'forms_ids' not in request.POST:
ng_action.groups = []
for id in range(0, len(template_ngs), 1):
group_name = "group_name_" + str(id)
template_id = "template_id_" + str(id)
count = "count_" + str(id)
templ_ng = template_ngs[id]
ng_action.groups.append(
{"name": templ_ng["name"],
"template_id": templ_ng["node_group_template_id"],
"count": templ_ng["count"],
"id": id,
"deletable": "false"})
whelpers.build_node_group_fields(ng_action,
group_name,
template_id,
count)
if 'forms_ids' in request.POST:
continue
ng_action.groups = []
for i, templ_ng in enumerate(template_ngs):
group_name = "group_name_%d" % i
template_id = "template_id_%d" % i
count = "count_%d" % i
ng_action.groups.append({
"name": templ_ng["name"],
"template_id": templ_ng["node_group_template_id"],
"count": templ_ng["count"],
"id": i,
"deletable": "false",
})
workflow_helpers.build_node_group_fields(
ng_action, group_name, template_id, count)
except Exception:
exceptions.handle(request,
_("Unable to fetch cluster to scale"))

View File

@ -14,10 +14,10 @@
import json
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import forms
from horizon import messages
from openstack_dashboard.api import glance
from openstack_dashboard.api import sahara as saharaclient

View File

@ -18,7 +18,7 @@ from django.core.urlresolvers import reverse_lazy
from django import http
from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _
from django.views import generic
import django.views
from horizon import exceptions
from horizon import forms
@ -73,7 +73,7 @@ class JobBinaryDetailsView(tabs.TabView):
pass
class DownloadJobBinaryView(generic.View):
class DownloadJobBinaryView(django.views.generic.View):
def get(self, request, job_binary_id=None):
try:
jb = saharaclient.job_binary_get(request, job_binary_id)

View File

@ -34,7 +34,8 @@ class GeneralTab(tabs.Tab):
def get_context_data(self, request):
template_id = self.tab_group.kwargs['template_id']
try:
template = saharaclient.nodegroup_template_get(request, template_id)
template = saharaclient.nodegroup_template_get(
request, template_id)
except Exception:
template = {}
exceptions.handle(request,
@ -57,7 +58,8 @@ class ConfigsTab(tabs.Tab):
def get_context_data(self, request):
template_id = self.tab_group.kwargs['template_id']
try:
template = saharaclient.nodegroup_template_get(request, template_id)
template = saharaclient.nodegroup_template_get(
request, template_id)
except Exception:
template = {}
exceptions.handle(request,

View File

@ -76,7 +76,7 @@ class CopyNodegroupTemplate(create_flow.ConfigureNodegroupTemplate):
exceptions.handle(request,
_("Unable to fetch plugin details."))
for process in template.node_processes:
#need to know the service
# need to know the service
_service = None
for service, processes in plugin_node_processes.items():
if process in processes:

View File

@ -11,24 +11,21 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from horizon import forms
import logging
from django.utils.translation import ugettext_lazy as _
from saharaclient.api import base as api_base
from horizon import exceptions
from horizon import forms
from horizon import workflows
from openstack_dashboard.api import network
from openstack_dashboard.api import nova
from openstack_dashboard.api import sahara as saharaclient
import openstack_dashboard.dashboards.project.data_processing. \
utils.helpers as helpers
import openstack_dashboard.dashboards.project.data_processing. \
utils.workflow_helpers as whelpers
from saharaclient.api import base as api_base
from openstack_dashboard.dashboards.project.data_processing.utils import (
helpers)
from openstack_dashboard.dashboards.project.data_processing.utils import (
workflow_helpers)
LOG = logging.getLogger(__name__)
@ -74,8 +71,8 @@ class GeneralConfigAction(workflows.Action):
sahara = saharaclient.client(request)
hlps = helpers.Helpers(sahara)
plugin, hadoop_version = whelpers.\
get_plugin_and_hadoop_version(request)
plugin, hadoop_version = (
workflow_helpers.get_plugin_and_hadoop_version(request))
process_choices = []
try:
version_details = saharaclient.plugin_get_version_details(request,
@ -117,7 +114,7 @@ class GeneralConfigAction(workflows.Action):
node_parameters = hlps.get_general_node_group_configs(plugin,
hadoop_version)
for param in node_parameters:
self.fields[param.name] = whelpers.build_control(param)
self.fields[param.name] = workflow_helpers.build_control(param)
def populate_flavor_choices(self, request, context):
try:
@ -132,8 +129,8 @@ class GeneralConfigAction(workflows.Action):
def get_help_text(self):
extra = dict()
plugin, hadoop_version = whelpers.\
get_plugin_and_hadoop_version(self.request)
plugin, hadoop_version = (
workflow_helpers.get_plugin_and_hadoop_version(self.request))
extra["plugin_name"] = plugin
extra["hadoop_version"] = hadoop_version
return super(GeneralConfigAction, self).get_help_text(extra)
@ -160,8 +157,8 @@ class GeneralConfig(workflows.Step):
return context
class ConfigureNodegroupTemplate(whelpers.ServiceParametersWorkflow,
whelpers.StatusFormatMixin):
class ConfigureNodegroupTemplate(workflow_helpers.ServiceParametersWorkflow,
workflow_helpers.StatusFormatMixin):
slug = "configure_nodegroup_template"
name = _("Create Node Group Template")
finalize_button_name = _("Create")
@ -174,8 +171,8 @@ class ConfigureNodegroupTemplate(whelpers.ServiceParametersWorkflow,
sahara = saharaclient.client(request)
hlps = helpers.Helpers(sahara)
plugin, hadoop_version = whelpers.\
get_plugin_and_hadoop_version(request)
plugin, hadoop_version = (
workflow_helpers.get_plugin_and_hadoop_version(request))
general_parameters = hlps.get_general_node_group_configs(
plugin,
@ -224,11 +221,12 @@ class ConfigureNodegroupTemplate(whelpers.ServiceParametersWorkflow,
for service_process in context["general_processes"]:
processes.append(str(service_process).split(":")[1])
configs_dict = whelpers.parse_configs_from_context(context,
self.defaults)
configs_dict = (
workflow_helpers.parse_configs_from_context(
context, self.defaults))
plugin, hadoop_version = whelpers.\
get_plugin_and_hadoop_version(request)
plugin, hadoop_version = (
workflow_helpers.get_plugin_and_hadoop_version(request))
volumes_per_node = None
volumes_size = None
@ -258,7 +256,7 @@ class ConfigureNodegroupTemplate(whelpers.ServiceParametersWorkflow,
class SelectPluginAction(workflows.Action,
whelpers.PluginAndVersionMixin):
workflow_helpers.PluginAndVersionMixin):
hidden_create_field = forms.CharField(
required=False,
widget=forms.HiddenInput(attrs={"class": "hidden_create_field"}))

View File

@ -14,8 +14,8 @@
# limitations under the License.
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import exceptions
from openstack_dashboard.api import neutron

View File

@ -19,16 +19,16 @@ from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import forms
from horizon import messages
from openstack_dashboard import api
class ResizeVolumeForm(forms.SelfHandlingForm):
instance_id = forms.CharField(widget=forms.HiddenInput())
orig_size = forms.IntegerField(label=_("Current Size (GB)"),
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
), required=False)
orig_size = forms.IntegerField(
label=_("Current Size (GB)"),
widget=forms.TextInput(attrs={'readonly': 'readonly'}),
required=False,
)
new_size = forms.IntegerField(label=_("New Size (GB)"))
def clean(self):

View File

@ -12,13 +12,12 @@
# License for the specific language governing permissions and limitations
# under the License.
from django import template
from django.conf import settings
from django import template
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import tabs
from openstack_dashboard import api
from openstack_dashboard.dashboards.project.databases import tables

View File

@ -98,13 +98,16 @@ class DatabaseTests(test.TestCase):
@test.create_stubs(
{api.trove: ('instance_list', 'flavor_list')})
def test_index_flavor_list_exception(self):
#Mocking instances
# Mocking instances.
databases = common.Paginated(self.databases.list())
api.trove.instance_list(IsA(http.HttpRequest), marker=None)\
.AndReturn(databases)
#Mocking flavor list with raising an exception
api.trove.flavor_list(IsA(http.HttpRequest))\
.AndRaise(self.exceptions.trove)
api.trove.instance_list(
IsA(http.HttpRequest),
marker=None,
).AndReturn(databases)
# Mocking flavor list with raising an exception.
api.trove.flavor_list(
IsA(http.HttpRequest),
).AndRaise(self.exceptions.trove)
self.mox.ReplayAll()
@ -306,8 +309,9 @@ class DatabaseTests(test.TestCase):
res = self.client.post(url, form_data)
self.assertRedirectsNoFollow(res, url)
@test.create_stubs(
{api.trove: ('instance_get', 'instance_resize_volume' )})
@test.create_stubs({
api.trove: ('instance_get', 'instance_resize_volume'),
})
def test_resize_volume(self):
database = self.databases.first()
database_id = database.id
@ -333,8 +337,9 @@ class DatabaseTests(test.TestCase):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs(
{api.trove: ('instance_get', 'instance_resize_volume' )})
@test.create_stubs({
api.trove: ('instance_get', 'instance_resize_volume'),
})
def test_resize_volume_bad_value(self):
database = self.databases.first()
database_id = database.id
@ -355,4 +360,3 @@ class DatabaseTests(test.TestCase):
res = self.client.post(url, post)
self.assertContains(res,
"New size for volume must be greater than current size.")

View File

@ -16,13 +16,14 @@ import logging
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import forms
from horizon.utils import memoized
from horizon import workflows
from openstack_dashboard import api
LOG = logging.getLogger(__name__)
@ -35,7 +36,8 @@ class SetInstanceDetailsAction(workflows.Action):
initial=1,
help_text=_("Size of the volume in GB."))
datastore = forms.ChoiceField(label=_("Datastore"),
help_text=_("Type and version of datastore."))
help_text=_(
"Type and version of datastore."))
class Meta:
name = _("Details")
@ -87,7 +89,7 @@ class SetInstanceDetailsAction(workflows.Action):
if len(versions) >= 2:
set_initial = True
elif len(versions) == 1:
num_datastores_with_one_version = num_datastores_with_one_version + 1
num_datastores_with_one_version += 1
if num_datastores_with_one_version > 1:
set_initial = True
if len(versions) > 0:
@ -227,7 +229,7 @@ class RestoreAction(workflows.Action):
try:
backups = api.trove.backup_list(request)
choices = [(b.id, b.name) for b in backups
if b.status == 'COMPLETED' ]
if b.status == 'COMPLETED']
except Exception:
choices = []

View File

@ -183,27 +183,32 @@ class CreateImageForm(forms.SelfHandlingForm):
class UpdateImageForm(forms.SelfHandlingForm):
image_id = forms.CharField(widget=forms.HiddenInput())
name = forms.CharField(max_length="255", label=_("Name"))
description = forms.CharField(widget=forms.widgets.Textarea(),
label=_("Description"),
required=False)
kernel = forms.CharField(max_length="36", label=_("Kernel ID"),
required=False,
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
))
ramdisk = forms.CharField(max_length="36", label=_("Ramdisk ID"),
required=False,
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
))
architecture = forms.CharField(label=_("Architecture"), required=False,
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
))
disk_format = forms.CharField(label=_("Format"),
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
))
description = forms.CharField(
widget=forms.widgets.Textarea(),
label=_("Description"),
required=False,
)
kernel = forms.CharField(
max_length="36",
label=_("Kernel ID"),
required=False,
widget=forms.TextInput(attrs={'readonly': 'readonly'}),
)
ramdisk = forms.CharField(
max_length="36",
label=_("Ramdisk ID"),
required=False,
widget=forms.TextInput(attrs={'readonly': 'readonly'}),
)
architecture = forms.CharField(
label=_("Architecture"),
required=False,
widget=forms.TextInput(attrs={'readonly': 'readonly'}),
)
disk_format = forms.CharField(
label=_("Format"),
widget=forms.TextInput(attrs={'readonly': 'readonly'}),
)
public = forms.BooleanField(label=_("Public"), required=False)
protected = forms.BooleanField(label=_("Protected"), required=False)

View File

@ -42,15 +42,15 @@ def get_console(request, console_type, instance):
raise exceptions.NotAvailable(msg)
for api_call in check_consoles.values():
# ugly workaround due novaclient API change from 2.17 to 2.18
# Ugly workaround due novaclient API change from 2.17 to 2.18.
try:
httpnotimplemented = nova_exception.HttpNotImplemented
except AttributeError:
httpnotimplemented = nova_exception.HTTPNotImplemented
try:
console = api_call(request, instance.id)
#if not supported don't log it to avoid lot of errors
#in case of AUTO
# If not supported, don't log it to avoid lot of errors in case
# of AUTO.
except httpnotimplemented:
continue
except Exception:

View File

@ -22,24 +22,22 @@ import uuid
from django.conf import settings
from django.core.urlresolvers import reverse
from django import http
from django.test import utils as test_utils
import django.test
from django.utils.datastructures import SortedDict
from django.utils import encoding
from django.utils.http import urlencode
from mox import IgnoreArg # noqa
from mox import IsA # noqa
from horizon import exceptions
from horizon.workflows import views
from openstack_dashboard import api
from openstack_dashboard.api import cinder
from openstack_dashboard.dashboards.project.instances import console
from openstack_dashboard.dashboards.project.instances import tables
from openstack_dashboard.dashboards.project.instances import tabs
from openstack_dashboard.dashboards.project.instances import workflows
from openstack_dashboard.test import helpers as test
from openstack_dashboard.test import helpers
from openstack_dashboard.usage import quotas
@ -48,16 +46,20 @@ SEC_GROUP_ROLE_PREFIX = \
workflows.update_instance.INSTANCE_SEC_GROUP_SLUG + "_role_"
class InstanceTests(test.TestCase):
@test.create_stubs({api.nova: ('flavor_list',
'server_list',
'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network:
('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
class InstanceTests(helpers.TestCase):
@helpers.create_stubs({
api.nova: (
'flavor_list',
'server_list',
'tenant_absolute_limits',
'extension_supported',
),
api.glance: ('image_list_detailed',),
api.network: (
'floating_ip_simple_associate_supported',
'servers_update_addresses',
),
})
def test_index(self):
servers = self.servers.list()
api.nova.extension_supported('AdminActions',
@ -87,7 +89,7 @@ class InstanceTests(test.TestCase):
self.assertItemsEqual(instances, self.servers.list())
self.assertNotContains(res, "Launch Instance (Quota exceeded)")
@test.create_stubs({api.nova: ('server_list',
@helpers.create_stubs({api.nova: ('server_list',
'tenant_absolute_limits',)})
def test_index_server_list_exception(self):
search_opts = {'marker': None, 'paginate': True}
@ -104,16 +106,13 @@ class InstanceTests(test.TestCase):
self.assertEqual(len(res.context['instances_table'].data), 0)
self.assertMessageCount(res, error=1)
@test.create_stubs({api.nova: ('flavor_list',
'server_list',
'flavor_get',
'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network:
('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
@helpers.create_stubs({
api.nova: ('flavor_list', 'server_list', 'flavor_get',
'tenant_absolute_limits', 'extension_supported',),
api.glance: ('image_list_detailed',),
api.network: ('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
def test_index_flavor_list_exception(self):
servers = self.servers.list()
flavors = self.flavors.list()
@ -146,16 +145,13 @@ class InstanceTests(test.TestCase):
self.assertItemsEqual(instances, self.servers.list())
@test.create_stubs({api.nova: ('flavor_list',
'server_list',
'flavor_get',
'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network:
('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
@helpers.create_stubs({
api.nova: ('flavor_list', 'server_list', 'flavor_get',
'tenant_absolute_limits', 'extension_supported',),
api.glance: ('image_list_detailed',),
api.network: ('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
def test_index_flavor_get_exception(self):
servers = self.servers.list()
flavors = self.flavors.list()
@ -192,15 +188,13 @@ class InstanceTests(test.TestCase):
self.assertMessageCount(res, error=len(servers))
self.assertItemsEqual(instances, self.servers.list())
@test.create_stubs({api.nova: ('flavor_list',
'server_list',
'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network:
('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
@helpers.create_stubs({
api.nova: ('flavor_list', 'server_list', 'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network: ('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
def test_index_with_instance_booted_from_volume(self):
volume_server = self.servers.first()
volume_server.image = ""
@ -233,7 +227,7 @@ class InstanceTests(test.TestCase):
self.assertEqual(len(instances), len(servers))
self.assertContains(res, "(not found)")
@test.create_stubs({api.nova: ('server_list',
@helpers.create_stubs({api.nova: ('server_list',
'flavor_list',
'server_delete',),
api.glance: ('image_list_detailed',),
@ -257,7 +251,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_list',
@helpers.create_stubs({api.nova: ('server_list',
'flavor_list',
'server_delete',),
api.glance: ('image_list_detailed',),
@ -283,7 +277,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_pause',
@helpers.create_stubs({api.nova: ('server_pause',
'server_list',
'flavor_list',
'extension_supported',),
@ -313,7 +307,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_pause',
@helpers.create_stubs({api.nova: ('server_pause',
'server_list',
'flavor_list',
'extension_supported',),
@ -344,7 +338,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_unpause',
@helpers.create_stubs({api.nova: ('server_unpause',
'server_list',
'flavor_list',
'extension_supported',),
@ -374,7 +368,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_unpause',
@helpers.create_stubs({api.nova: ('server_unpause',
'server_list',
'flavor_list',
'extension_supported',),
@ -406,7 +400,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_reboot',
@helpers.create_stubs({api.nova: ('server_reboot',
'server_list',
'flavor_list',),
api.glance: ('image_list_detailed',),
@ -432,7 +426,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_reboot',
@helpers.create_stubs({api.nova: ('server_reboot',
'server_list',
'flavor_list',),
api.glance: ('image_list_detailed',),
@ -460,7 +454,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_reboot',
@helpers.create_stubs({api.nova: ('server_reboot',
'server_list',
'flavor_list',),
api.glance: ('image_list_detailed',),
@ -487,7 +481,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_suspend',
@helpers.create_stubs({api.nova: ('server_suspend',
'server_list',
'flavor_list',
'extension_supported',),
@ -517,7 +511,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_suspend',
@helpers.create_stubs({api.nova: ('server_suspend',
'server_list',
'flavor_list',
'extension_supported',),
@ -548,7 +542,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_resume',
@helpers.create_stubs({api.nova: ('server_resume',
'server_list',
'flavor_list',
'extension_supported',),
@ -579,7 +573,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_resume',
@helpers.create_stubs({api.nova: ('server_resume',
'server_list',
'flavor_list',
'extension_supported',),
@ -612,7 +606,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ("server_get",
@helpers.create_stubs({api.nova: ("server_get",
"instance_volumes_list",
"flavor_get"),
api.network: ("server_security_groups",
@ -639,7 +633,7 @@ class InstanceTests(test.TestCase):
self.assertItemsEqual(res.context['instance'].volumes, volumes)
@test.create_stubs({api.nova: ("server_get",
@helpers.create_stubs({api.nova: ("server_get",
"instance_volumes_list",
"flavor_get"),
api.network: ("server_security_groups",
@ -670,7 +664,7 @@ class InstanceTests(test.TestCase):
self.assertEqual(res.context['instance'].volumes[1].device,
"/dev/hdk")
@test.create_stubs({api.nova: ("server_get",
@helpers.create_stubs({api.nova: ("server_get",
"instance_volumes_list",
"flavor_get"),
api.network: ("server_security_groups",
@ -703,10 +697,10 @@ class InstanceTests(test.TestCase):
1)
self.assertContains(res, "<dd>&lt;!--</dd>", 1)
self.assertContains(res, "<dt>empty</dt>", 1)
#TODO(david-lyle): uncomment when fixed with Django 1.6
#self.assertContains(res, "<dd><em>N/A</em></dd>", 1)
# TODO(david-lyle): uncomment when fixed with Django 1.6
# self.assertContains(res, "<dd><em>N/A</em></dd>", 1)
@test.create_stubs({api.nova: ("server_get",
@helpers.create_stubs({api.nova: ("server_get",
"instance_volumes_list",
"flavor_get"),
api.network: ("server_security_groups",
@ -742,7 +736,7 @@ class InstanceTests(test.TestCase):
res = self.client.get(url)
self.assertItemsEqual(res.context['instance'].fault, server.fault)
@test.create_stubs({api.nova: ('server_get',)})
@helpers.create_stubs({api.nova: ('server_get',)})
def test_instance_details_exception(self):
server = self.servers.first()
@ -757,7 +751,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ("server_get",)})
@helpers.create_stubs({api.nova: ("server_get",)})
def test_instance_details_unauthorized(self):
server = self.servers.first()
@ -771,7 +765,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_console_output',)})
@helpers.create_stubs({api.nova: ('server_console_output',)})
def test_instance_log(self):
server = self.servers.first()
CONSOLE_OUTPUT = 'output'
@ -792,7 +786,7 @@ class InstanceTests(test.TestCase):
self.assertIsInstance(res, http.HttpResponse)
self.assertContains(res, CONSOLE_OUTPUT)
@test.create_stubs({api.nova: ('server_console_output',)})
@helpers.create_stubs({api.nova: ('server_console_output',)})
def test_instance_log_exception(self):
server = self.servers.first()
@ -934,7 +928,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_get',
@helpers.create_stubs({api.nova: ('server_get',
'snapshot_create',
'server_list',
'flavor_list',
@ -963,23 +957,23 @@ class InstanceTests(test.TestCase):
res = self.client.post(url, formData)
self.assertRedirects(res, redir_url)
@test_utils.override_settings(OPENSTACK_ENABLE_PASSWORD_RETRIEVE=False)
@django.test.utils.override_settings(
OPENSTACK_ENABLE_PASSWORD_RETRIEVE=False)
def test_instances_index_retrieve_password_action_disabled(self):
self. _test_instances_index_retrieve_password_action()
@test_utils.override_settings(OPENSTACK_ENABLE_PASSWORD_RETRIEVE=True)
@django.test.utils.override_settings(
OPENSTACK_ENABLE_PASSWORD_RETRIEVE=True)
def test_instances_index_retrieve_password_action_enabled(self):
self._test_instances_index_retrieve_password_action()
@test.create_stubs({api.nova: ('flavor_list',
'server_list',
'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network:
('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
@helpers.create_stubs({
api.nova: ('flavor_list', 'server_list', 'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network: ('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
def _test_instances_index_retrieve_password_action(self):
servers = self.servers.list()
api.nova.extension_supported('AdminActions',
@ -1012,7 +1006,7 @@ class InstanceTests(test.TestCase):
else:
self.assertNotContains(res, _action_id)
@test.create_stubs({api.nova: ('get_password',)})
@helpers.create_stubs({api.nova: ('get_password',)})
def test_decrypt_instance_password(self):
server = self.servers.first()
enc_password = "azerty"
@ -1025,7 +1019,7 @@ class InstanceTests(test.TestCase):
res = self.client.get(url)
self.assertTemplateUsed(res, 'project/instances/decryptpassword.html')
@test.create_stubs({api.nova: ('get_password',)})
@helpers.create_stubs({api.nova: ('get_password',)})
def test_decrypt_instance_get_exception(self):
server = self.servers.first()
keypair = self.keypairs.first()
@ -1043,7 +1037,7 @@ class InstanceTests(test.TestCase):
api.network: ('security_group_list',
'server_security_groups',)}
@test.create_stubs(instance_update_get_stubs)
@helpers.create_stubs(instance_update_get_stubs)
def test_instance_update_get(self):
server = self.servers.first()
@ -1060,7 +1054,7 @@ class InstanceTests(test.TestCase):
self.assertTemplateUsed(res, views.WorkflowView.template_name)
@test.create_stubs(instance_update_get_stubs)
@helpers.create_stubs(instance_update_get_stubs)
def test_instance_update_get_server_get_exception(self):
server = self.servers.first()
@ -1091,7 +1085,7 @@ class InstanceTests(test.TestCase):
'server_security_groups',
'server_update_security_groups')}
@test.create_stubs(instance_update_post_stubs)
@helpers.create_stubs(instance_update_post_stubs)
def test_instance_update_post(self):
server = self.servers.first()
secgroups = self.security_groups.list()[:3]
@ -1118,7 +1112,7 @@ class InstanceTests(test.TestCase):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs(instance_update_post_stubs)
@helpers.create_stubs(instance_update_post_stubs)
def test_instance_update_post_api_exception(self):
server = self.servers.first()
@ -1138,7 +1132,7 @@ class InstanceTests(test.TestCase):
res = self._instance_update_post(server.id, server.name, [])
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs(instance_update_post_stubs)
@helpers.create_stubs(instance_update_post_stubs)
def test_instance_update_post_secgroup_api_exception(self):
server = self.servers.first()
@ -1160,7 +1154,7 @@ class InstanceTests(test.TestCase):
res = self._instance_update_post(server.id, server.name, [])
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('extension_supported',
@helpers.create_stubs({api.nova: ('extension_supported',
'flavor_list',
'keypair_list',
'tenant_absolute_limits',
@ -1259,7 +1253,7 @@ class InstanceTests(test.TestCase):
('dddddddd-dddd-dddd-dddd-dddddddddddd', 'm1.secret'),
('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'm1.tiny'),
)
elif custom_flavor_sort == test.my_custom_sort:
elif custom_flavor_sort == helpers.my_custom_sort:
sorted_flavors = (
('dddddddd-dddd-dddd-dddd-dddddddddddd', 'm1.secret'),
('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'm1.tiny'),
@ -1303,7 +1297,7 @@ class InstanceTests(test.TestCase):
else:
self.assertNotContains(res, disk_config_field_label)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_HYPERVISOR_FEATURES={'can_set_password': False})
def test_launch_instance_get_without_password(self):
self.test_launch_instance_get(expect_password_fields=False)
@ -1314,7 +1308,7 @@ class InstanceTests(test.TestCase):
def test_launch_instance_get_no_disk_config_supported(self):
self.test_launch_instance_get(disk_config=False)
@test_utils.override_settings(
@django.test.utils.override_settings(
CREATE_INSTANCE_FLAVOR_SORT={
'key': 'id',
'reverse': True,
@ -1322,7 +1316,7 @@ class InstanceTests(test.TestCase):
def test_launch_instance_get_custom_flavor_sort_by_id(self):
self.test_launch_instance_get(custom_flavor_sort='id')
@test_utils.override_settings(
@django.test.utils.override_settings(
CREATE_INSTANCE_FLAVOR_SORT={
'key': 'name',
'reverse': False,
@ -1330,15 +1324,16 @@ class InstanceTests(test.TestCase):
def test_launch_instance_get_custom_flavor_sort_by_name(self):
self.test_launch_instance_get(custom_flavor_sort='name')
@test_utils.override_settings(
@django.test.utils.override_settings(
CREATE_INSTANCE_FLAVOR_SORT={
'key': test.my_custom_sort,
'key': helpers.my_custom_sort,
'reverse': False,
})
def test_launch_instance_get_custom_flavor_sort_by_callable(self):
self.test_launch_instance_get(custom_flavor_sort=test.my_custom_sort)
self.test_launch_instance_get(
custom_flavor_sort=helpers.my_custom_sort)
@test_utils.override_settings(
@django.test.utils.override_settings(
CREATE_INSTANCE_FLAVOR_SORT={
'key': 'no_such_column',
'reverse': False,
@ -1349,12 +1344,12 @@ class InstanceTests(test.TestCase):
def test_launch_instance_get_with_only_one_network(self):
self.test_launch_instance_get(only_one_network=True)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_instance_get_with_profile(self):
self.test_launch_instance_get(test_with_profile=True)
@test.create_stubs({api.nova: ('extension_supported',
@helpers.create_stubs({api.nova: ('extension_supported',
'flavor_list',
'keypair_list',
'tenant_absolute_limits',
@ -1438,12 +1433,12 @@ class InstanceTests(test.TestCase):
for volume in bootable_volumes:
self.assertTrue(volume in volume_sources_ids)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_instance_get_bootable_volumes_with_profile(self):
self.test_launch_instance_get_bootable_volumes(test_with_profile=True)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.neutron: ('network_list',
'profile_list',
'port_create',),
@ -1564,12 +1559,12 @@ class InstanceTests(test.TestCase):
def test_launch_instance_post_no_disk_config_supported(self):
self.test_launch_instance_post(disk_config=False)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_instance_post_with_profile(self):
self.test_launch_instance_post(test_with_profile=True)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.neutron: ('network_list',
'profile_list',
'port_create',),
@ -1684,12 +1679,12 @@ class InstanceTests(test.TestCase):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_instance_post_boot_from_volume_with_profile(self):
self.test_launch_instance_post_boot_from_volume(test_with_profile=True)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.neutron: ('network_list',
'profile_list',
'port_create'),
@ -1705,7 +1700,8 @@ class InstanceTests(test.TestCase):
quotas: ('tenant_quota_usages',)})
def test_launch_instance_post_no_images_available_boot_from_volume(
self,
test_with_profile=False):
test_with_profile=False,
):
flavor = self.flavors.first()
keypair = self.keypairs.first()
server = self.servers.first()
@ -1786,7 +1782,7 @@ class InstanceTests(test.TestCase):
form_data = {'flavor': flavor.id,
'source_type': 'volume_id',
#'image_id': '',
# 'image_id': '',
'keypair': keypair.name,
'name': server.name,
'customization_script': customization_script,
@ -1808,13 +1804,13 @@ class InstanceTests(test.TestCase):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_lnch_inst_post_no_images_avail_boot_from_vol_with_profile(self):
self.test_launch_instance_post_no_images_available_boot_from_volume(
test_with_profile=True)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.neutron: ('network_list',
'profile_list',),
api.nova: ('extension_supported',
@ -1899,13 +1895,13 @@ class InstanceTests(test.TestCase):
self.assertFormErrors(res, 1, "You must select an image.")
self.assertTemplateUsed(res, views.WorkflowView.template_name)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_instance_post_no_images_available_with_profile(self):
self.test_launch_instance_post_no_images_available(
test_with_profile=True)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.neutron: ('network_list',
'profile_list',),
cinder: ('volume_list',
@ -1967,12 +1963,12 @@ class InstanceTests(test.TestCase):
self.assertTemplateUsed(res, views.WorkflowView.template_name)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_flavorlist_error_with_profile(self):
self.test_launch_flavorlist_error(test_with_profile=True)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.neutron: ('network_list',
'profile_list',
'port_create',),
@ -2086,12 +2082,12 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_form_keystone_exception_with_profile(self):
self.test_launch_form_keystone_exception(test_with_profile=True)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.neutron: ('network_list',
'profile_list',),
api.nova: ('extension_supported',
@ -2184,12 +2180,12 @@ class InstanceTests(test.TestCase):
self.assertContains(res, "greater than or equal to 1")
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_form_instance_count_error_with_profile(self):
self.test_launch_form_instance_count_error(test_with_profile=True)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.neutron: ('network_list',
'profile_list',),
api.nova: ('extension_supported',
@ -2283,7 +2279,8 @@ class InstanceTests(test.TestCase):
def test_launch_form_instance_requirement_error_disk(
self,
test_with_profile=False):
test_with_profile=False,
):
flavor = self.flavors.first()
image = self.images.first()
image.min_ram = flavor.ram
@ -2293,7 +2290,8 @@ class InstanceTests(test.TestCase):
def test_launch_form_instance_requirement_error_ram(
self,
test_with_profile=False):
test_with_profile=False,
):
flavor = self.flavors.first()
image = self.images.first()
image.min_ram = flavor.ram + 1
@ -2301,19 +2299,19 @@ class InstanceTests(test.TestCase):
self._test_launch_form_instance_requirement_error(image, flavor,
test_with_profile)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_form_instance_requirement_error_disk_with_profile(self):
self.test_launch_form_instance_requirement_error_disk(
test_with_profile=True)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_form_instance_requirement_error_ram_with_profile(self):
self.test_launch_form_instance_requirement_error_ram(
test_with_profile=True)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.neutron: ('network_list',
'profile_list',),
api.nova: ('extension_supported',
@ -2420,26 +2418,25 @@ class InstanceTests(test.TestCase):
self._test_launch_form_instance_volume_size(image, 1.5, msg,
test_with_profile)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_form_instance_volume_size_error_with_profile(self):
self.test_launch_form_instance_volume_size_error(
test_with_profile=True)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_launch_form_instance_non_int_volume_size_with_profile(self):
self.test_launch_form_instance_non_int_volume_size(
test_with_profile=True)
@test.create_stubs({api.nova: ('flavor_list', 'server_list',
'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network:
('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
@helpers.create_stubs({
api.nova: ('flavor_list', 'server_list', 'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network: ('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
def test_launch_button_disabled_when_quota_exceeded(self):
servers = self.servers.list()
limits = self.limits['absolute']
@ -2481,14 +2478,13 @@ class InstanceTests(test.TestCase):
self.assertContains(res, expected_string, html=True,
msg_prefix="The launch button is not disabled")
@test.create_stubs({api.nova: ('flavor_list', 'server_list',
'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network:
('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
@helpers.create_stubs({
api.nova: ('flavor_list', 'server_list', 'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network: ('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
def test_index_options_after_migrate(self):
servers = self.servers.list()
server = self.servers.first()
@ -2515,7 +2511,7 @@ class InstanceTests(test.TestCase):
self.assertContains(res, "instances__confirm")
self.assertContains(res, "instances__revert")
@test.create_stubs({api.nova: ('extension_supported',
@helpers.create_stubs({api.nova: ('extension_supported',
'flavor_list',
'keypair_list',
'availability_zone_list',
@ -2582,12 +2578,12 @@ class InstanceTests(test.TestCase):
html=True,
msg_prefix="The default key pair was not selected.")
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_select_default_keypair_if_only_one_with_profile(self):
self.test_select_default_keypair_if_only_one(test_with_profile=True)
@test.create_stubs({api.network: ('floating_ip_target_get_by_instance',
@helpers.create_stubs({api.network: ('floating_ip_target_get_by_instance',
'tenant_floating_ip_allocate',
'floating_ip_associate',
'servers_update_addresses',),
@ -2621,7 +2617,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.network: ('floating_ip_target_list_by_instance',
@helpers.create_stubs({api.network: ('floating_ip_target_list_by_instance',
'tenant_floating_ip_list',
'floating_ip_disassociate',
'servers_update_addresses',),
@ -2656,7 +2652,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_get',
@helpers.create_stubs({api.nova: ('server_get',
'flavor_list',
'tenant_absolute_limits',
'extension_supported')})
@ -2681,7 +2677,7 @@ class InstanceTests(test.TestCase):
self.assertTemplateUsed(res, views.WorkflowView.template_name)
@test.create_stubs({api.nova: ('server_get',
@helpers.create_stubs({api.nova: ('server_get',
'flavor_list',)})
def test_instance_resize_get_server_get_exception(self):
server = self.servers.first()
@ -2697,7 +2693,7 @@ class InstanceTests(test.TestCase):
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_get',
@helpers.create_stubs({api.nova: ('server_get',
'flavor_list',)})
def test_instance_resize_get_flavor_list_exception(self):
server = self.servers.first()
@ -2728,7 +2724,7 @@ class InstanceTests(test.TestCase):
'flavor_list', 'flavor_get',
'extension_supported')}
@test.create_stubs(instance_resize_post_stubs)
@helpers.create_stubs(instance_resize_post_stubs)
def test_instance_resize_post(self):
server = self.servers.first()
flavor = self.flavors.first()
@ -2749,7 +2745,7 @@ class InstanceTests(test.TestCase):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs(instance_resize_post_stubs)
@helpers.create_stubs(instance_resize_post_stubs)
def test_instance_resize_post_api_exception(self):
server = self.servers.first()
flavor = self.flavors.first()
@ -2770,7 +2766,7 @@ class InstanceTests(test.TestCase):
res = self._instance_resize_post(server.id, flavor.id, 'AUTO')
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.glance: ('image_list_detailed',),
@helpers.create_stubs({api.glance: ('image_list_detailed',),
api.nova: ('extension_supported',)})
def test_rebuild_instance_get(self, expect_password_fields=True):
server = self.servers.first()
@ -2799,7 +2795,7 @@ class InstanceTests(test.TestCase):
else:
self.assertNotContains(res, password_field_label)
@test_utils.override_settings(
@django.test.utils.override_settings(
OPENSTACK_HYPERVISOR_FEATURES={'can_set_password': False})
def test_rebuild_instance_get_without_set_password(self):
self.test_rebuild_instance_get(expect_password_fields=False)
@ -2823,7 +2819,7 @@ class InstanceTests(test.TestCase):
'extension_supported'),
api.glance: ('image_list_detailed',)}
@test.create_stubs(instance_rebuild_post_stubs)
@helpers.create_stubs(instance_rebuild_post_stubs)
def test_rebuild_instance_post_with_password(self):
server = self.servers.first()
image = self.images.first()
@ -2855,7 +2851,7 @@ class InstanceTests(test.TestCase):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs(instance_rebuild_post_stubs)
@helpers.create_stubs(instance_rebuild_post_stubs)
def test_rebuild_instance_post_with_password_equals_none(self):
server = self.servers.first()
image = self.images.first()
@ -2886,7 +2882,7 @@ class InstanceTests(test.TestCase):
disk_config='AUTO')
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs(instance_rebuild_post_stubs)
@helpers.create_stubs(instance_rebuild_post_stubs)
def test_rebuild_instance_post_password_do_not_match(self):
server = self.servers.first()
image = self.images.first()
@ -2913,7 +2909,7 @@ class InstanceTests(test.TestCase):
self.assertContains(res, "Passwords do not match.")
@test.create_stubs(instance_rebuild_post_stubs)
@helpers.create_stubs(instance_rebuild_post_stubs)
def test_rebuild_instance_post_with_empty_string(self):
server = self.servers.first()
image = self.images.first()
@ -2944,7 +2940,7 @@ class InstanceTests(test.TestCase):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs(instance_rebuild_post_stubs)
@helpers.create_stubs(instance_rebuild_post_stubs)
def test_rebuild_instance_post_api_exception(self):
server = self.servers.first()
image = self.images.first()
@ -2976,16 +2972,14 @@ class InstanceTests(test.TestCase):
disk_config='AUTO')
self.assertRedirectsNoFollow(res, INDEX_URL)
@test_utils.override_settings(API_RESULT_PAGE_SIZE=2)
@test.create_stubs({api.nova: ('flavor_list',
'server_list',
'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network:
('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
@django.test.utils.override_settings(API_RESULT_PAGE_SIZE=2)
@helpers.create_stubs({
api.nova: ('flavor_list', 'server_list', 'tenant_absolute_limits',
'extension_supported',),
api.glance: ('image_list_detailed',),
api.network: ('floating_ip_simple_associate_supported',
'servers_update_addresses',),
})
def test_index_form_action_with_pagination(self):
"""The form action on the next page should have marker
object from the previous page last element.
@ -3036,8 +3030,8 @@ class InstanceTests(test.TestCase):
# ensure that marker object exists in form action
self.assertContains(res, form_action, count=1)
@test_utils.override_settings(API_RESULT_PAGE_SIZE=2)
@test.create_stubs({api.nova: ('server_list',
@django.test.utils.override_settings(API_RESULT_PAGE_SIZE=2)
@helpers.create_stubs({api.nova: ('server_list',
'flavor_list',
'server_delete',),
api.glance: ('image_list_detailed',),
@ -3072,8 +3066,8 @@ class InstanceTests(test.TestCase):
self.assertMessageCount(success=1)
class InstanceAjaxTests(test.TestCase):
@test.create_stubs({api.nova: ("server_get",
class InstanceAjaxTests(helpers.TestCase):
@helpers.create_stubs({api.nova: ("server_get",
"flavor_get",
"extension_supported"),
api.neutron: ("is_extension_supported",)})
@ -3104,7 +3098,7 @@ class InstanceAjaxTests(test.TestCase):
HTTP_X_REQUESTED_WITH='XMLHttpRequest')
self.assertContains(res, server.name)
@test.create_stubs({api.nova: ("server_get",
@helpers.create_stubs({api.nova: ("server_get",
"flavor_get",
"extension_supported"),
api.neutron: ("is_extension_supported",)})
@ -3157,11 +3151,11 @@ class InstanceAjaxTests(test.TestCase):
self.assertTrue(messages[0][1].startswith('Failed'))
class ConsoleManagerTests(test.TestCase):
class ConsoleManagerTests(helpers.TestCase):
def setup_consoles(self):
#need to refresh with mocks or will fail since mox do not detect
#the api_call() as mocked
# Need to refresh with mocks or will fail since mox do not detect
# the api_call() as mocked.
console.CONSOLES = SortedDict([
('VNC', api.nova.server_vnc_console),
('SPICE', api.nova.server_spice_console),

View File

@ -731,16 +731,15 @@ class LaunchInstance(workflows.Workflow):
# for the use with the plugin supporting port profiles.
# neutron port-create <Network name> --n1kv:profile <Port Profile ID>
# for net_id in context['network_id']:
## HACK for now use first network
# HACK for now use first network.
if api.neutron.is_port_profiles_supported():
net_id = context['network_id'][0]
LOG.debug("Horizon->Create Port with %(netid)s %(profile_id)s",
{'netid': net_id, 'profile_id': context['profile_id']})
port = None
try:
port = api.neutron.port_create(request, net_id,
policy_profile_id=
context['profile_id'])
port = api.neutron.port_create(
request, net_id, policy_profile_id=context['profile_id'])
except Exception:
msg = (_('Port not created for profile-id (%s).') %
context['profile_id'])

View File

@ -21,9 +21,7 @@ from django.views.decorators.debug import sensitive_variables # noqa
from horizon import exceptions
from horizon import forms
from horizon import workflows
from openstack_dashboard import api
from openstack_dashboard.dashboards.project.instances \
import utils as instance_utils
from openstack_dashboard.dashboards.project.instances.workflows \
@ -32,11 +30,11 @@ from openstack_dashboard.dashboards.project.instances.workflows \
class SetFlavorChoiceAction(workflows.Action):
old_flavor_id = forms.CharField(required=False, widget=forms.HiddenInput())
old_flavor_name = forms.CharField(label=_("Old Flavor"),
required=False,
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
))
old_flavor_name = forms.CharField(
label=_("Old Flavor"),
widget=forms.TextInput(attrs={'readonly': 'readonly'}),
required=False,
)
flavor = forms.ChoiceField(label=_("New Flavor"),
help_text=_("Choose the flavor to launch."))

View File

@ -13,11 +13,14 @@
# under the License.
from django.utils.translation import ugettext_lazy as _
from openstack_dashboard.dashboards.project.instances import tables as i_tables
from openstack_dashboard.dashboards.project.instances import tables
class InstancesTable(i_tables.InstancesTable):
class InstancesTable(tables.InstancesTable):
class Meta:
name = "instances"
verbose_name = _("Instances")
row_actions = (i_tables.TerminateInstance,)
row_actions = (
tables.TerminateInstance,
)

View File

@ -14,15 +14,15 @@
from django.utils.translation import ugettext_lazy as _
from openstack_dashboard.dashboards.project.routers.ports import\
tables as p_tables
from openstack_dashboard.dashboards.project.routers.ports import tables
class RemoveInterface(p_tables.RemoveInterface):
class RemoveInterface(tables.RemoveInterface):
failure_url = 'horizon:project:network_topology:router'
class PortsTable(p_tables.PortsTable):
class PortsTable(tables.PortsTable):
class Meta:
name = "interfaces"
verbose_name = _("Interfaces")

View File

@ -13,15 +13,15 @@
# under the License.
from django.utils.translation import ugettext_lazy as _
from openstack_dashboard.dashboards.project.routers import\
tables as r_tables
from openstack_dashboard.dashboards.project.routers import tables
class DeleteRouter(r_tables.DeleteRouter):
class DeleteRouter(tables.DeleteRouter):
redirect_url = "horizon:project:network_topology:router"
class RoutersTable(r_tables.RoutersTable):
class RoutersTable(tables.RoutersTable):
class Meta:
name = "Routers"
verbose_name = _("Routers")

View File

@ -95,8 +95,6 @@ class UpdateSubnetInfoAction(CreateSubnetInfoAction):
# Thus now I use HiddenInput for the ip_version ChoiceField as a work
# around.
ip_version = forms.ChoiceField(choices=[(4, 'IPv4'), (6, 'IPv6')],
#widget=forms.Select(
# attrs={'disabled': 'disabled'}),
widget=forms.HiddenInput(),
label=_("IP Version"))
@ -174,10 +172,9 @@ class UpdateSubnet(network_workflows.CreateNetwork):
elif data['gateway_ip']:
params['gateway_ip'] = data['gateway_ip']
#We should send gateway_ip only when it is changed,
#because updating gateway_ip is prohibited
#when the ip is used.
#see bug 1227268
# We should send gateway_ip only when it is changed, because
# updating gateway_ip is prohibited when the ip is used.
# See bug 1227268.
subnet = api.neutron.subnet_get(request, subnet_id)
if params['gateway_ip'] == subnet.gateway_ip:
del params['gateway_ip']

View File

@ -411,7 +411,8 @@ class NetworkTests(test.TestCase):
'profile_list')})
def test_network_create_post_with_subnet_network_exception(
self,
test_with_profile=False):
test_with_profile=False,
):
network = self.networks.first()
subnet = self.subnets.first()
params = {'name': network.name,
@ -449,7 +450,8 @@ class NetworkTests(test.TestCase):
'profile_list')})
def test_network_create_post_with_subnet_subnet_exception(
self,
test_with_profile=False):
test_with_profile=False,
):
network = self.networks.first()
subnet = self.subnets.first()
params = {'name': network.name,
@ -518,12 +520,14 @@ class NetworkTests(test.TestCase):
@override_settings(OPENSTACK_NEUTRON_NETWORK={'profile_support': 'cisco'})
def test_nw_create_post_w_subnet_no_cidr_w_profile(self):
self.test_network_create_post_with_subnet_nocidr(test_with_profile=True)
self.test_network_create_post_with_subnet_nocidr(
test_with_profile=True)
@test.create_stubs({api.neutron: ('profile_list',)})
def test_network_create_post_with_subnet_cidr_without_mask(
self,
test_with_profile=False):
test_with_profile=False,
):
network = self.networks.first()
subnet = self.subnets.first()
if test_with_profile:
@ -554,7 +558,8 @@ class NetworkTests(test.TestCase):
@test.create_stubs({api.neutron: ('profile_list',)})
def test_network_create_post_with_subnet_cidr_inconsistent(
self,
test_with_profile=False):
test_with_profile=False,
):
network = self.networks.first()
subnet = self.subnets.first()
if test_with_profile:
@ -587,7 +592,8 @@ class NetworkTests(test.TestCase):
@test.create_stubs({api.neutron: ('profile_list',)})
def test_network_create_post_with_subnet_gw_inconsistent(
self,
test_with_profile=False):
test_with_profile=False,
):
network = self.networks.first()
subnet = self.subnets.first()
if test_with_profile:

View File

@ -14,16 +14,15 @@
import logging
import netaddr
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
import netaddr
from horizon import exceptions
from horizon import forms
from horizon import messages
from horizon import workflows
from openstack_dashboard import api
@ -377,7 +376,6 @@ class CreateNetwork(workflows.Workflow):
redirect = self.get_failure_url()
messages.info(request, msg)
raise exceptions.Http302(redirect)
#return exceptions.RecoverableError
except Exception:
msg = _('Failed to delete network "%s"') % network.name
LOG.info(msg)

View File

@ -17,13 +17,14 @@ import logging
from django.core.urlresolvers import reverse
from django.template.defaultfilters import title # noqa
from django.utils.translation import ugettext_lazy as _
from neutronclient.common import exceptions as q_ext
from horizon import exceptions
from horizon import messages
from horizon import tables
from neutronclient.common import exceptions as q_ext
from openstack_dashboard import api
LOG = logging.getLogger(__name__)

View File

@ -229,9 +229,7 @@ class ChangeTemplateForm(TemplateForm):
stack_id = forms.CharField(label=_('Stack ID'),
widget=forms.widgets.HiddenInput)
stack_name = forms.CharField(label=_('Stack Name'),
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
))
widget=forms.TextInput(attrs={'readonly': 'readonly'}))
class CreateStackForm(forms.SelfHandlingForm):
@ -358,9 +356,7 @@ class EditStackForm(CreateStackForm):
stack_id = forms.CharField(label=_('Stack ID'),
widget=forms.widgets.HiddenInput)
stack_name = forms.CharField(label=_('Stack Name'),
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
))
widget=forms.TextInput(attrs={'readonly': 'readonly'}))
@sensitive_variables('password')
def handle(self, request, data):

View File

@ -13,20 +13,18 @@
import json
import logging
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy
from django.http import HttpResponse # noqa
from django.utils.translation import ugettext_lazy as _
import django.views.generic
from horizon import exceptions
from horizon import forms
from horizon import tables
from horizon import tabs
from horizon.utils import memoized
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy
from django.http import HttpResponse # noqa
from django.utils.translation import ugettext_lazy as _
from django.views import generic
from openstack_dashboard import api
from openstack_dashboard.dashboards.project.stacks \
import api as project_api
from openstack_dashboard.dashboards.project.stacks \
@ -246,7 +244,7 @@ class ResourceView(tabs.TabView):
request, resource=resource, metadata=metadata, **kwargs)
class JSONView(generic.View):
class JSONView(django.views.generic.View):
def get(self, request, stack_id=''):
return HttpResponse(project_api.d3_data(request, stack_id=stack_id),
content_type="application/json")

View File

@ -490,14 +490,16 @@ class UpdateForm(forms.SelfHandlingForm):
class ExtendForm(forms.SelfHandlingForm):
name = forms.CharField(label=_("Volume Name"),
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
), required=False)
orig_size = forms.IntegerField(label=_("Current Size (GB)"),
widget=forms.TextInput(
attrs={'readonly': 'readonly'}
), required=False)
name = forms.CharField(
label=_("Volume Name"),
widget=forms.TextInput(attrs={'readonly': 'readonly'}),
required=False,
)
orig_size = forms.IntegerField(
label=_("Current Size (GB)"),
widget=forms.TextInput(attrs={'readonly': 'readonly'}),
required=False,
)
new_size = forms.IntegerField(label=_("New Size (GB)"))
def clean(self):

View File

@ -195,15 +195,14 @@ class UpdateNetworkProfile(forms.SelfHandlingForm):
try:
LOG.debug('request = %(req)s, params = %(params)s',
{'req': request, 'params': data})
profile = api.neutron.profile_update(request,
data['profile_id'],
name=data['name'],
segment_type=
data['segment_type'],
segment_range=
data['segment_range'],
physical_network=
data['physical_network'])
profile = api.neutron.profile_update(
request,
data['profile_id'],
name=data['name'],
segment_type=data['segment_type'],
segment_range=data['segment_range'],
physical_network=data['physical_network'],
)
msg = _('Network Profile %s '
'was successfully updated.') % data['profile_id']
LOG.debug(msg)

View File

@ -18,13 +18,13 @@ from django.conf.urls import url # noqa
from openstack_dashboard.dashboards.router.nexus1000v import views
urlpatterns = patterns('',
url(r'^$', views.IndexView.as_view(), name='index'),
#Network Profile
# Network Profile
url(r'^network_profile/create$', views.CreateNetworkProfileView.as_view(),
name='create_network_profile'),
url(r'^network_profile/(?P<profile_id>[^/]+)/update$',
views.UpdateNetworkProfileView.as_view(),
name='update_network_profile'),
)

View File

@ -13,7 +13,6 @@
# under the License.
from datetime import datetime # noqa
import pytz
import string
from django.conf import settings
@ -21,6 +20,7 @@ from django import shortcuts
from django.utils import encoding
from django.utils import translation
from django.utils.translation import ugettext_lazy as _
import pytz
from horizon import forms
from horizon import messages

View File

@ -13,9 +13,9 @@
# under the License.
from django.conf import settings
from horizon import forms
from horizon.utils import functions as utils
from openstack_dashboard.dashboards.settings.user import forms as user_forms

View File

@ -19,13 +19,12 @@ import logging
import os.path
from django.conf import settings
from openstack_auth import utils as auth_utils
from oslo.config import cfg
from openstack_auth import utils as auth_utils
from openstack_dashboard.openstack.common import policy
LOG = logging.getLogger(__name__)
CONF = cfg.CONF

View File

@ -158,8 +158,7 @@ class CeilometerApiTests(test.APITestCase):
self.assertIn(ret.name, names)
names.remove(ret.name)
#TODO(lsmola)
#test resource aggregates
# TODO(lsmola) Test resource aggregates.
@test.create_stubs({api.ceilometer.CeilometerUsage: ("get_user",
"get_tenant")})

View File

@ -19,6 +19,8 @@
from functools import wraps # noqa
import os
from ceilometerclient.v2 import client as ceilometer_client
from cinderclient import client as cinder_client
from django.conf import settings
from django.contrib.auth.middleware import AuthenticationMiddleware # noqa
from django.contrib.messages.storage import default_storage # noqa
@ -28,30 +30,23 @@ from django import http
from django.test.client import RequestFactory # noqa
from django.utils.importlib import import_module # noqa
from django.utils import unittest
from ceilometerclient.v2 import client as ceilometer_client
from cinderclient import client as cinder_client
import glanceclient
from heatclient import client as heat_client
import httplib2
from keystoneclient.v2_0 import client as keystone_client
import mox
from neutronclient.v2_0 import client as neutron_client
from novaclient.v1_1 import client as nova_client
from openstack_auth import user
from openstack_auth import utils
from saharaclient import client as sahara_client
from swiftclient import client as swift_client
from troveclient import client as trove_client
import httplib2
import mox
from openstack_auth import user
from openstack_auth import utils
from horizon import base
from horizon import conf
from horizon import middleware
from horizon.test import helpers as horizon_helpers
from openstack_dashboard import api
from openstack_dashboard import context_processors
from openstack_dashboard.test.test_data import utils as test_utils
@ -103,8 +98,9 @@ class RequestFactoryWithMessages(RequestFactory):
@unittest.skipIf(os.environ.get('SKIP_UNITTESTS', False),
"The SKIP_UNITTESTS env variable is set.")
class TestCase(horizon_helpers.TestCase):
"""Specialized base test case class for Horizon which gives access to
numerous additional features:
"""Specialized base test case class for Horizon.
It gives access to numerous additional features:
* A full suite of test data through various attached objects and
managers (e.g. ``self.servers``, ``self.user``, etc.). See the
@ -175,7 +171,9 @@ class TestCase(horizon_helpers.TestCase):
utils.get_user = get_user
def assertRedirectsNoFollow(self, response, expected_url):
"""Asserts that the given response issued a 302 redirect without
"""Check for redirect.
Asserts that the given response issued a 302 redirect without
processing the view which is redirected to.
"""
assert (response.status_code / 100 == 3), \
@ -185,7 +183,9 @@ class TestCase(horizon_helpers.TestCase):
self.assertEqual(response.status_code, 302)
def assertNoFormErrors(self, response, context_name="form"):
"""Asserts that the response either does not contain a form in its
"""Checks for no form errors.
Asserts that the response either does not contain a form in its
context, or that if it does, that form has no errors.
"""
context = getattr(response, "context", {})
@ -197,7 +197,9 @@ class TestCase(horizon_helpers.TestCase):
def assertFormErrors(self, response, count=0, message=None,
context_name="form"):
"""Asserts that the response does contain a form in its
"""Check for form errors.
Asserts that the response does contain a form in its
context, and that form has errors, if count were given,
it must match the exact numbers of errors
"""
@ -218,8 +220,9 @@ class TestCase(horizon_helpers.TestCase):
class BaseAdminViewTests(TestCase):
"""A ``TestCase`` subclass which sets an active user with the "admin" role
for testing admin-only views and functionality.
"""Sets an active user with the "admin" role.
For testing admin-only views and functionality.
"""
def setActiveUser(self, *args, **kwargs):
if "roles" not in kwargs:
@ -239,17 +242,19 @@ class BaseAdminViewTests(TestCase):
class APITestCase(TestCase):
"""The ``APITestCase`` class is for use with tests which deal with the
underlying clients rather than stubbing out the
openstack_dashboard.api.* methods.
"""Testing APIs.
For use with tests which deal with the underlying clients rather than
stubbing out the openstack_dashboard.api.* methods.
"""
def setUp(self):
super(APITestCase, self).setUp()
utils.patch_middleware_get_user()
def fake_keystoneclient(request, admin=False):
"""Wrapper function which returns the stub keystoneclient. Only
necessary because the function takes too many arguments to
"""Returns the stub keystoneclient.
Only necessary because the function takes too many arguments to
conveniently be a lambda.
"""
return self.stub_keystoneclient()
@ -410,8 +415,10 @@ class SeleniumTestCase(horizon_helpers.SeleniumTestCase):
class SeleniumAdminTestCase(SeleniumTestCase):
"""A ``TestCase`` subclass which sets an active user with the "admin" role
for testing admin-only views and functionality.
"""Version of AdminTestCase for Selenium.
Sets an active user with the "admin" role for testing admin-only views and
functionality.
"""
def setActiveUser(self, *args, **kwargs):
if "roles" not in kwargs:
@ -429,9 +436,11 @@ def my_custom_sort(flavor):
class PluginTestCase(TestCase):
"""The ``PluginTestCase`` class is for use with tests which deal with the
pluggable dashboard and panel configuration, it takes care of backing up
and restoring the Horizon configuration.
"""Test case for testing plugin system of Horizon.
For use with tests which deal with the pluggable dashboard and panel
configuration, it takes care of backing up and restoring the Horizon
configuration.
"""
def setUp(self):
super(PluginTestCase, self).setUp()
@ -469,7 +478,9 @@ class PluginTestCase(TestCase):
self._reload_urls()
def _reload_urls(self):
"""Clears out the URL caches, reloads the root urls module, and
"""CLeans up URLs.
Clears out the URL caches, reloads the root urls module, and
re-triggers the autodiscovery mechanism for Horizon. Allows URLs
to be re-calculated after registering new dashboards. Useful
only for testing and should never be used on a live site.

View File

@ -10,7 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
#TODO(dkorn): add handle_popup method
# TODO(dkorn): add handle_popup method
import selenium.common.exceptions as Exceptions
import selenium.webdriver.support.ui as Support
@ -19,7 +19,7 @@ import selenium.webdriver.support.ui as Support
class PageObject(object):
"""Base class for page objects."""
def __init__(self, driver, conf):
"""Constructor"""
"""Constructor."""
self.driver = driver
self.conf = conf
self.login_url = self.conf.dashboard.login_url

View File

@ -14,7 +14,6 @@ import os
from horizon.test.settings import * # noqa
from horizon.utils import secret_key
from openstack_dashboard import exceptions
@ -109,7 +108,7 @@ OPENSTACK_NEUTRON_NETWORK = {
'enable_quotas': False, # Enabled in specific tests only
'enable_vpn': True,
'profile_support': None,
#'profile_support': 'cisco'
# 'profile_support': 'cisco'
}
OPENSTACK_HYPERVISOR_FEATURES = {

View File

@ -58,7 +58,7 @@ def data(TEST):
TEST.ceilometer_users.add(users.User(None,
ceilometer_user_dict2))
#tenants
# Tenants.
tenant_dict = {'id': "1",
'name': 'test_tenant',
'description': "a test tenant.",

View File

@ -39,31 +39,27 @@ def data(TEST):
TEST.cinder_availability_zones = utils.TestDataContainer()
# Services
service_1 = services.Service(services.ServiceManager(None),
{
"service": "cinder-scheduler",
"status": "enabled",
"binary": "cinder-scheduler",
"zone": "internal",
"state": "up",
"updated_at": "2013-07-08T05:21:00.000000",
"host": "devstack001",
"disabled_reason": None
}
)
service_1 = services.Service(services.ServiceManager(None), {
"service": "cinder-scheduler",
"status": "enabled",
"binary": "cinder-scheduler",
"zone": "internal",
"state": "up",
"updated_at": "2013-07-08T05:21:00.000000",
"host": "devstack001",
"disabled_reason": None
})
service_2 = services.Service(services.ServiceManager(None),
{
"service": "cinder-volume",
"status": "enabled",
"binary": "cinder-volume",
"zone": "nova",
"state": "up",
"updated_at": "2013-07-08T05:20:51.000000",
"host": "devstack001",
"disabled_reason": None
}
)
service_2 = services.Service(services.ServiceManager(None), {
"service": "cinder-volume",
"status": "enabled",
"binary": "cinder-volume",
"zone": "nova",
"state": "up",
"updated_at": "2013-07-08T05:20:51.000000",
"host": "devstack001",
"disabled_reason": None
})
TEST.cinder_services.add(service_1)
TEST.cinder_services.add(service_2)

View File

@ -340,8 +340,8 @@ def data(TEST):
"parameters": {
'DBUsername': '******',
'InstanceType': 'm1.small',
'AWS::StackId':
'arn:openstack:heat::2ce287:stacks/teststack/88553ec',
'AWS::StackId': (
'arn:openstack:heat::2ce287:stacks/teststack/88553ec'),
'DBRootPassword': '******',
'AWS::StackName': "teststack{0}".format(i),
'DBPassword': '******',

View File

@ -20,12 +20,11 @@ from openstack_dashboard.api import fwaas
from openstack_dashboard.api import lbaas
from openstack_dashboard.api import neutron
from openstack_dashboard.api import vpn
from openstack_dashboard.test.test_data import utils
def data(TEST):
# data returned by openstack_dashboard.api.neutron wrapper
# Data returned by openstack_dashboard.api.neutron wrapper.
TEST.agents = utils.TestDataContainer()
TEST.networks = utils.TestDataContainer()
TEST.subnets = utils.TestDataContainer()
@ -53,7 +52,7 @@ def data(TEST):
TEST.fw_policies = utils.TestDataContainer()
TEST.fw_rules = utils.TestDataContainer()
# data return by neutronclient
# Data return by neutronclient.
TEST.api_agents = utils.TestDataContainer()
TEST.api_networks = utils.TestDataContainer()
TEST.api_subnets = utils.TestDataContainer()
@ -79,8 +78,7 @@ def data(TEST):
TEST.api_fw_policies = utils.TestDataContainer()
TEST.api_fw_rules = utils.TestDataContainer()
#------------------------------------------------------------
# 1st network
# 1st network.
network_dict = {'admin_state_up': True,
'id': '82288d84-e0a5-42ac-95be-e6af08727e42',
'name': 'net1',
@ -111,7 +109,7 @@ def data(TEST):
TEST.networks.add(neutron.Network(network))
TEST.subnets.add(subnet)
# network profile for network when using the cisco n1k plugin
# Network profile for network when using the cisco n1k plugin.
net_profile_dict = {'name': 'net_profile_test1',
'segment_type': 'vlan',
'physical_network': 'phys1',
@ -123,7 +121,7 @@ def data(TEST):
TEST.api_net_profiles.add(net_profile_dict)
TEST.net_profiles.add(neutron.Profile(net_profile_dict))
# policy profile for port when using the cisco n1k plugin
# Policy profile for port when using the cisco n1k plugin.
policy_profile_dict = {'name': 'policy_profile_test1',
'id':
'00000000-9999-9999-9999-000000000000'}
@ -131,7 +129,7 @@ def data(TEST):
TEST.api_policy_profiles.add(policy_profile_dict)
TEST.policy_profiles.add(neutron.Profile(policy_profile_dict))
# network profile binding
# Network profile binding.
network_profile_binding_dict = {'profile_id':
'00000000-1111-1111-1111-000000000000',
'tenant_id': network_dict['tenant_id']}
@ -140,7 +138,7 @@ def data(TEST):
TEST.network_profile_binding.add(neutron.Profile(
network_profile_binding_dict))
# policy profile binding
# Policy profile binding.
policy_profile_binding_dict = {'profile_id':
'00000000-9999-9999-9999-000000000000',
'tenant_id': network_dict['tenant_id']}
@ -149,7 +147,7 @@ def data(TEST):
TEST.policy_profile_binding.add(neutron.Profile(
policy_profile_binding_dict))
# ports on 1st network
# Ports on 1st network.
port_dict = {'admin_state_up': True,
'device_id': 'af75c8e5-a1cc-4567-8d04-44fcd6922890',
'device_owner': 'network:dhcp',
@ -179,8 +177,7 @@ def data(TEST):
TEST.ports.add(neutron.Port(port_dict))
assoc_port = port_dict
#------------------------------------------------------------
# 2nd network
# 2nd network.
network_dict = {'admin_state_up': True,
'id': '72c3ab6c-c80f-4341-9dc5-210fa31ac6c2',
'name': 'net2',
@ -229,8 +226,7 @@ def data(TEST):
TEST.api_ports.add(port_dict)
TEST.ports.add(neutron.Port(port_dict))
#------------------------------------------------------------
# external network
# External network.
network_dict = {'admin_state_up': True,
'id': '9b466b94-213a-4cda-badf-72c102a874da',
'name': 'ext_net',
@ -262,8 +258,7 @@ def data(TEST):
TEST.networks.add(neutron.Network(network))
TEST.subnets.add(subnet)
#------------------------------------------------------------
# Set up router data
# Set up router data.
port_dict = {'admin_state_up': True,
'device_id': '7180cede-bcd8-4334-b19f-f7ef2f331f53',
'device_owner': 'network:router_gateway',
@ -310,9 +305,8 @@ def data(TEST):
TEST.api_routers.add(router_dict)
TEST.routers_with_rules.add(neutron.Router(router_dict))
#------------------------------------------------------------
# floating IP
# unassociated
# Floating IP.
# Unassociated.
fip_dict = {'tenant_id': '1',
'floating_ip_address': '172.16.88.227',
'floating_network_id': ext_net['id'],
@ -323,7 +317,7 @@ def data(TEST):
TEST.api_q_floating_ips.add(fip_dict)
TEST.q_floating_ips.add(neutron.FloatingIp(fip_dict))
# associated (with compute port on 1st network)
# Associated (with compute port on 1st network).
fip_dict = {'tenant_id': '1',
'floating_ip_address': '172.16.88.228',
'floating_network_id': ext_net['id'],
@ -334,8 +328,7 @@ def data(TEST):
TEST.api_q_floating_ips.add(fip_dict)
TEST.q_floating_ips.add(neutron.FloatingIp(fip_dict))
#------------------------------------------------------------
# security group
# Security group.
sec_group_1 = {'tenant_id': '1',
'description': 'default',
@ -414,21 +407,20 @@ def data(TEST):
groups = [sec_group_1, sec_group_2, sec_group_3]
sg_name_dict = dict([(sg['id'], sg['name']) for sg in groups])
for sg in groups:
# Neutron API
# Neutron API.
TEST.api_q_secgroups.add(sg)
for rule in sg['security_group_rules']:
TEST.api_q_secgroup_rules.add(copy.copy(rule))
# OpenStack Dashboard internaly API
# OpenStack Dashboard internaly API.
TEST.q_secgroups.add(
neutron.SecurityGroup(copy.deepcopy(sg), sg_name_dict))
for rule in sg['security_group_rules']:
TEST.q_secgroup_rules.add(
neutron.SecurityGroupRule(copy.copy(rule), sg_name_dict))
#------------------------------------------------------------
# LBaaS
# LBaaS.
# 1st pool
# 1st pool.
pool_dict = {'id': '8913dde8-4915-4b90-8d3e-b95eeedb0d49',
'tenant_id': '1',
'vip_id': 'abcdef-c3eb-4fee-9763-12de3338041e',
@ -445,7 +437,7 @@ def data(TEST):
TEST.api_pools.add(pool_dict)
TEST.pools.add(lbaas.Pool(pool_dict))
# 2nd pool
# 2nd pool.
pool_dict = {'id': '8913dde8-4915-4b90-8d3e-b95eeedb0d50',
'tenant_id': '1',
'vip_id': 'f0881d38-c3eb-4fee-9763-12de3338041d',
@ -461,7 +453,7 @@ def data(TEST):
TEST.api_pools.add(pool_dict)
TEST.pools.add(lbaas.Pool(pool_dict))
# 1st vip
# 1st vip.
vip_dict = {'id': 'abcdef-c3eb-4fee-9763-12de3338041e',
'name': 'vip1',
'address': '10.0.0.100',
@ -481,7 +473,7 @@ def data(TEST):
TEST.api_vips.add(vip_dict)
TEST.vips.add(lbaas.Vip(vip_dict))
# 2nd vip
# 2nd vip.
vip_dict = {'id': 'f0881d38-c3eb-4fee-9763-12de3338041d',
'name': 'vip2',
'address': '10.0.0.110',
@ -501,7 +493,7 @@ def data(TEST):
TEST.api_vips.add(vip_dict)
TEST.vips.add(lbaas.Vip(vip_dict))
# 1st member
# 1st member.
member_dict = {'id': '78a46e5e-eb1a-418a-88c7-0e3f5968b08',
'tenant_id': '1',
'pool_id': pool_dict['id'],
@ -513,7 +505,7 @@ def data(TEST):
TEST.api_members.add(member_dict)
TEST.members.add(lbaas.Member(member_dict))
# 2nd member
# 2nd member.
member_dict = {'id': '41ac1f8d-6d9c-49a4-a1bf-41955e651f91',
'tenant_id': '1',
'pool_id': pool_dict['id'],
@ -525,7 +517,7 @@ def data(TEST):
TEST.api_members.add(member_dict)
TEST.members.add(lbaas.Member(member_dict))
# 1st monitor
# 1st monitor.
monitor_dict = {'id': 'd4a0500f-db2b-4cc4-afcf-ec026febff96',
'type': 'http',
'delay': 10,
@ -541,7 +533,7 @@ def data(TEST):
TEST.api_monitors.add(monitor_dict)
TEST.monitors.add(lbaas.PoolMonitor(monitor_dict))
# 2nd monitor
# 2nd monitor.
monitor_dict = {'id': 'd4a0500f-db2b-4cc4-afcf-ec026febff97',
'type': 'ping',
'delay': 10,
@ -553,8 +545,7 @@ def data(TEST):
TEST.api_monitors.add(monitor_dict)
TEST.monitors.add(lbaas.PoolMonitor(monitor_dict))
#------------------------------------------------------------
# Quotas
# Quotas.
quota_data = {'network': '10',
'subnet': '10',
'port': '50',
@ -565,8 +556,7 @@ def data(TEST):
}
TEST.neutron_quotas.add(base.QuotaSet(quota_data))
#------------------------------------------------------------
# Extensions
# Extensions.
extension_1 = {"name": "security-group",
"alias": "security-group",
"description": "The security groups extension."}
@ -576,8 +566,7 @@ def data(TEST):
TEST.api_extensions.add(extension_1)
TEST.api_extensions.add(extension_2)
#------------------------------------------------------------
# 1st agent
# 1st agent.
agent_dict = {"binary": "neutron-openvswitch-agent",
"description": None,
"admin_state_up": True,
@ -593,7 +582,7 @@ def data(TEST):
TEST.api_agents.add(agent_dict)
TEST.agents.add(neutron.Agent(agent_dict))
# 2nd agent
# 2nd agent.
agent_dict = {"binary": "neutron-dhcp-agent",
"description": None,
"admin_state_up": True,
@ -615,17 +604,15 @@ def data(TEST):
TEST.api_agents.add(agent_dict)
TEST.agents.add(neutron.Agent(agent_dict))
#------------------------------------------------------------
# Service providers
# Service providers.
provider_1 = {"service_type": "LOADBALANCER",
"name": "haproxy",
"default": True}
TEST.providers.add(provider_1)
#------------------------------------------------------------
# VPNaaS
# VPNaaS.
# 1st VPNService
# 1st VPNService.
vpnservice_dict = {'id': '09a26949-6231-4f72-942a-0c8c0ddd4d61',
'tenant_id': '1',
'name': 'cloud_vpn1',
@ -640,7 +627,7 @@ def data(TEST):
TEST.api_vpnservices.add(vpnservice_dict)
TEST.vpnservices.add(vpn.VPNService(vpnservice_dict))
# 2nd VPNService
# 2nd VPNService.
vpnservice_dict = {'id': '09a26949-6231-4f72-942a-0c8c0ddd4d62',
'tenant_id': '1',
'name': 'cloud_vpn2',
@ -892,11 +879,10 @@ def data(TEST):
fw2._apidict['policy'] = policy1
TEST.firewalls.add(fw1)
#------------------------------------------------------------
# Additional Cisco N1K profiles
# Additional Cisco N1K profiles.
# 2nd network profile for network when using the cisco n1k plugin
# Profile applied on 1st network
# 2nd network profile for network when using the cisco n1k plugin.
# Profile applied on 1st network.
net_profile_dict = {'name': 'net_profile_test2',
'segment_type': 'overlay',
'sub_type': 'native_vxlan',
@ -909,7 +895,7 @@ def data(TEST):
TEST.api_net_profiles.add(net_profile_dict)
TEST.net_profiles.add(neutron.Profile(net_profile_dict))
# 2nd network profile binding
# 2nd network profile binding.
network_profile_binding_dict = {'profile_id':
'00000000-2222-2222-2222-000000000000',
'tenant_id': '1'}

View File

@ -545,26 +545,25 @@ def data(TEST):
TEST.certs.add(certificate)
# Availability Zones
TEST.availability_zones.add(
availability_zones.AvailabilityZone(
availability_zones.AvailabilityZoneManager(None),
{
'zoneName': 'nova',
'zoneState': {'available': True},
'hosts': {
"host001": {
"nova-network": {
"active": True,
"available": True
}
}
}
}
)
)
TEST.availability_zones.add(availability_zones.AvailabilityZone(
availability_zones.AvailabilityZoneManager(None),
{
'zoneName': 'nova',
'zoneState': {'available': True},
'hosts': {
"host001": {
"nova-network": {
"active": True,
"available": True,
},
},
},
},
))
# hypervisors
hypervisor_1 = hypervisors.Hypervisor(hypervisors.HypervisorManager(None),
hypervisor_1 = hypervisors.Hypervisor(
hypervisors.HypervisorManager(None),
{
"service": {"host": "devstack001", "id": 3},
"vcpus_used": 1,
@ -585,11 +584,12 @@ def data(TEST):
"disk_available_least": 6,
"local_gb": 29,
"free_ram_mb": 500,
"id": 1
}
"id": 1,
},
)
hypervisor_2 = hypervisors.Hypervisor(hypervisors.HypervisorManager(None),
hypervisor_2 = hypervisors.Hypervisor(
hypervisors.HypervisorManager(None),
{
"service": {"host": "devstack002", "id": 4},
"vcpus_used": 1,
@ -610,10 +610,11 @@ def data(TEST):
"disk_available_least": 6,
"local_gb": 29,
"free_ram_mb": 500,
"id": 2
}
"id": 2,
},
)
hypervisor_3 = hypervisors.Hypervisor(hypervisors.HypervisorManager(None),
hypervisor_3 = hypervisors.Hypervisor(
hypervisors.HypervisorManager(None),
{
"service": {"host": "instance-host", "id": 5},
"vcpus_used": 1,
@ -634,8 +635,8 @@ def data(TEST):
"disk_available_least": 6,
"local_gb": 29,
"free_ram_mb": 500,
"id": 3
}
"id": 3,
},
)
TEST.hypervisors.add(hypervisor_1)
TEST.hypervisors.add(hypervisor_2)
@ -654,98 +655,78 @@ def data(TEST):
"disk_available_least": 12556,
"local_gb": 12563,
"free_ram_mb": 428014,
"memory_mb_used": 55296
"memory_mb_used": 55296,
}
}
# Services
service_1 = services.Service(services.ServiceManager(None),
{
"status": "enabled",
"binary": "nova-conductor",
"zone": "internal",
"state": "up",
"updated_at": "2013-07-08T05:21:00.000000",
"host": "devstack001",
"disabled_reason": None
}
)
service_1 = services.Service(services.ServiceManager(None), {
"status": "enabled",
"binary": "nova-conductor",
"zone": "internal",
"state": "up",
"updated_at": "2013-07-08T05:21:00.000000",
"host": "devstack001",
"disabled_reason": None,
})
service_2 = services.Service(services.ServiceManager(None),
{
"status": "enabled",
"binary": "nova-compute",
"zone": "nova",
"state": "up",
"updated_at": "2013-07-08T05:20:51.000000",
"host": "devstack001",
"disabled_reason": None
}
)
service_2 = services.Service(services.ServiceManager(None), {
"status": "enabled",
"binary": "nova-compute",
"zone": "nova",
"state": "up",
"updated_at": "2013-07-08T05:20:51.000000",
"host": "devstack001",
"disabled_reason": None,
})
TEST.services.add(service_1)
TEST.services.add(service_2)
# Aggregates
aggregate_1 = aggregates.Aggregate(aggregates.AggregateManager(None),
{
"name": "foo",
"availability_zone": "testing",
"deleted": 0,
"created_at": "2013-07-04T13:34:38.000000",
"updated_at": None,
"hosts": ["foo", "bar"],
"deleted_at": None,
"id": 1,
"metadata": {
"foo": "testing",
"bar": "testing"
}
}
)
aggregate_1 = aggregates.Aggregate(aggregates.AggregateManager(None), {
"name": "foo",
"availability_zone": "testing",
"deleted": 0,
"created_at": "2013-07-04T13:34:38.000000",
"updated_at": None,
"hosts": ["foo", "bar"],
"deleted_at": None,
"id": 1,
"metadata": {"foo": "testing", "bar": "testing"},
})
aggregate_2 = aggregates.Aggregate(aggregates.AggregateManager(None),
{
"name": "bar",
"availability_zone": "testing",
"deleted": 0,
"created_at": "2013-07-04T13:34:38.000000",
"updated_at": None,
"hosts": ["foo", "bar"],
"deleted_at": None,
"id": 2,
"metadata": {
"foo": "testing",
"bar": "testing"
}
}
)
aggregate_2 = aggregates.Aggregate(aggregates.AggregateManager(None), {
"name": "bar",
"availability_zone": "testing",
"deleted": 0,
"created_at": "2013-07-04T13:34:38.000000",
"updated_at": None,
"hosts": ["foo", "bar"],
"deleted_at": None,
"id": 2,
"metadata": {"foo": "testing", "bar": "testing"},
})
TEST.aggregates.add(aggregate_1)
TEST.aggregates.add(aggregate_2)
host1 = hosts.Host(hosts.HostManager(None),
{
"host_name": "devstack001",
"service": "compute",
"zone": "testing"
}
)
host1 = hosts.Host(hosts.HostManager(None), {
"host_name": "devstack001",
"service": "compute",
"zone": "testing",
})
host2 = hosts.Host(hosts.HostManager(None),
{
"host_name": "devstack002",
"service": "nova-conductor",
"zone": "testing"
}
)
host2 = hosts.Host(hosts.HostManager(None), {
"host_name": "devstack002",
"service": "nova-conductor",
"zone": "testing",
})
host3 = hosts.Host(hosts.HostManager(None),
{
"host_name": "devstack003",
"service": "compute",
"zone": "testing"
}
)
host3 = hosts.Host(hosts.HostManager(None), {
"host_name": "devstack003",
"service": "compute",
"zone": "testing",
})
TEST.hosts.add(host1)
TEST.hosts.add(host2)
TEST.hosts.add(host3)

View File

@ -43,7 +43,7 @@ def data(TEST):
TEST.plugins.add(plugin1)
#Nodegroup_Templates
# Nodegroup_Templates.
ngt1_dict = {
"created_at": "2014-06-04 14:01:03.701243",
"description": None,
@ -74,7 +74,7 @@ def data(TEST):
TEST.nodegroup_templates.add(ngt1)
#Cluster_templates
# Cluster_templates.
ct1_dict = {
"anti_affinity": [],
"cluster_configs": {},
@ -135,7 +135,7 @@ def data(TEST):
cluster_templates.ClusterTemplateManager(None), ct1_dict)
TEST.cluster_templates.add(ct1)
#Clusters
# Clusters.
cluster1_dict = {
"anti_affinity": [],
"cluster_configs": {},
@ -238,7 +238,7 @@ def data(TEST):
clusters.ClusterManager(None), cluster1_dict)
TEST.clusters.add(cluster1)
#Data Sources
# Data Sources.
data_source1_dict = {
"created_at": "2014-06-04 14:01:10.371562",
"description": "sample output",
@ -268,7 +268,7 @@ def data(TEST):
TEST.data_sources.add(data_source1)
TEST.data_sources.add(data_source2)
#Job Binaries
# Job Binaries.
job_binary1_dict = {
"created_at": "2014-06-05 18:15:15.581285",
"description": "",
@ -283,7 +283,7 @@ def data(TEST):
job_binaries.JobBinariesManager(None), job_binary1_dict)
TEST.job_binaries.add(job_binary1)
#Jobs
# Jobs.
job1_dict = {
"created_at": "2014-06-05 19:23:59.637165",
"description": "",
@ -319,7 +319,7 @@ def data(TEST):
job1 = jobs.Job(jobs.JobsManager(None), job1_dict)
TEST.jobs.add(job1)
#Job Executions
# Job Executions.
jobex1_dict = {
"cluster_id": "ec9a0d28-5cfb-4028-a0b5-40afe23f1533",
"created_at": "2014-06-05 20:03:06.195937",

View File

@ -15,6 +15,7 @@
from django import template
from django.template import loader
from openstack_dashboard.test import helpers as test

View File

@ -140,10 +140,11 @@ class BaseUsage(object):
if not api.base.is_service_enabled(self.request, 'network'):
return
try:
neutron_quotas_supported = \
api.neutron.is_quotas_extension_supported(self.request)
neutron_sg_used = \
api.neutron.is_extension_supported(self.request, 'security-group')
neutron_quotas_supported = (
api.neutron.is_quotas_extension_supported(self.request))
neutron_sg_used = (
api.neutron.is_extension_supported(self.request,
'security-group'))
self._get_neutron_usage(self.limits, 'floatingip')
if neutron_sg_used:
self._get_neutron_usage(self.limits, 'security_group')

View File

@ -238,8 +238,8 @@ def tenant_quota_usages(request):
def tenant_limit_usages(request):
#TODO(licostan): This method shall be removed from Quota module.
#ProjectUsage/BaseUsage maybe used instead on volume/image dashboards.
# TODO(licostan): This method shall be removed from Quota module.
# ProjectUsage/BaseUsage maybe used instead on volume/image dashboards.
limits = {}
try:

View File

@ -11,6 +11,7 @@
# under the License.
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import tables
from openstack_dashboard import api

View File

@ -15,7 +15,6 @@ import logging
import pkgutil
from django.utils import importlib
import six

View File

@ -13,7 +13,7 @@
# under the License.
from django import shortcuts
from django.views.decorators import vary
import django.views.decorators.vary
import horizon
from horizon import base
@ -35,7 +35,7 @@ def get_user_home(user):
return dashboard.get_absolute_url()
@vary.vary_on_cookie
@django.views.decorators.vary.vary_on_cookie
def splash(request):
if request.user.is_authenticated():
return shortcuts.redirect(horizon.get_user_home(request.user))