More fixes for customization_module method
This commit is contained in:
parent
9253e0bac6
commit
d932640781
28
.gitignore
vendored
Normal file
28
.gitignore
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
*.pyc
|
||||||
|
*.swp
|
||||||
|
*.sqlite3
|
||||||
|
.environment_version
|
||||||
|
.selenium_log
|
||||||
|
.coverage*
|
||||||
|
.noseids
|
||||||
|
.DS_STORE
|
||||||
|
*.egg/
|
||||||
|
*.egg-info/
|
||||||
|
coverage.xml
|
||||||
|
nosetests.xml
|
||||||
|
pep8.txt
|
||||||
|
pylint.txt
|
||||||
|
reports
|
||||||
|
horizon.egg-info
|
||||||
|
tuskar_ui/test/.secret_key_store
|
||||||
|
doc/build/
|
||||||
|
doc/source/sourcecode
|
||||||
|
/static/
|
||||||
|
.venv
|
||||||
|
.tox
|
||||||
|
build
|
||||||
|
dist
|
||||||
|
AUTHORS
|
||||||
|
ChangeLog
|
||||||
|
tags
|
||||||
|
openstack_dashboard/dummydb.sqlite
|
60
HACKING.rst
60
HACKING.rst
@ -1,60 +0,0 @@
|
|||||||
Contributing
|
|
||||||
============
|
|
||||||
|
|
||||||
The code repository is located at `OpenStack <https://github.com/openstack>`__.
|
|
||||||
Please go there if you want to check it out:
|
|
||||||
|
|
||||||
git clone https://github.com/openstack/tuskar-ui.git
|
|
||||||
|
|
||||||
The list of bugs and blueprints is on Launchpad:
|
|
||||||
|
|
||||||
`<https://launchpad.net/tuskar-ui>`__
|
|
||||||
|
|
||||||
We use OpenStack's Gerrit for the code contributions:
|
|
||||||
|
|
||||||
`<https://review.openstack.org/#/q/status:open+project:openstack/tuskar-ui,n,z>`__
|
|
||||||
|
|
||||||
and we follow the `OpenStack Gerrit Workflow <https://wiki.openstack.org/wiki/Gerrit_Workflow>`__.
|
|
||||||
|
|
||||||
If you're interested in the code, here are some key places to start:
|
|
||||||
|
|
||||||
* `tuskar_ui/api.py <https://github.com/openstack/tuskar-ui/blob/master/tuskar_ui/api.py>`_
|
|
||||||
- This file contains all the API calls made to the Tuskar API
|
|
||||||
(through python-tuskarclient).
|
|
||||||
* `tuskar_ui/infrastructure <https://github.com/openstack/tuskar-ui/tree/master/tuskar_ui/infrastructure>`_
|
|
||||||
- The Tuskar UI code is contained within this directory.
|
|
||||||
|
|
||||||
Running tests
|
|
||||||
=============
|
|
||||||
|
|
||||||
There are several ways to run tests for tuskar-ui.
|
|
||||||
|
|
||||||
Using ``tox``:
|
|
||||||
|
|
||||||
This is the easiest way to run tests. When run, tox installs dependencies,
|
|
||||||
prepares the virtual python environment, then runs test commands. The gate
|
|
||||||
tests in gerrit usually also use tox to run tests. For avaliable tox
|
|
||||||
environments, see ``tox.ini``.
|
|
||||||
|
|
||||||
By running ``run_tests.sh``:
|
|
||||||
|
|
||||||
Tests can also be run using the ``run_tests.sh`` script, to see available
|
|
||||||
options, run it with the ``--help`` option. It handles preparing the
|
|
||||||
virtual environment and executing tests, but in contrast with tox, it does
|
|
||||||
not install all dependencies, e.g. ``jshint`` must be installed before
|
|
||||||
running the jshint testcase.
|
|
||||||
|
|
||||||
Manual tests:
|
|
||||||
|
|
||||||
To manually check tuskar-ui, it is possible to run a development server
|
|
||||||
for tuskar-ui by running ``run_tests.sh --runserver``.
|
|
||||||
|
|
||||||
To run the server with the settings used by the test environment:
|
|
||||||
``run_tests.sh --runserver 0.0.0.0:8000 --settings=tuskar_ui.test.settings``
|
|
||||||
|
|
||||||
OpenStack Style Commandments
|
|
||||||
============================
|
|
||||||
|
|
||||||
- Step 1: Read http://www.python.org/dev/peps/pep-0008/
|
|
||||||
- Step 2: Read http://www.python.org/dev/peps/pep-0008/ again
|
|
||||||
- Step 3: Read https://github.com/openstack-dev/hacking/blob/master/HACKING.rst
|
|
@ -1,2 +0,0 @@
|
|||||||
DASHBOARD = 'admin'
|
|
||||||
DISABLED = True
|
|
@ -1,12 +0,0 @@
|
|||||||
from tuskar_ui import exceptions
|
|
||||||
|
|
||||||
DASHBOARD = 'infrastructure'
|
|
||||||
ADD_INSTALLED_APPS = [
|
|
||||||
'tuskar_ui.infrastructure',
|
|
||||||
]
|
|
||||||
ADD_EXCEPTIONS = {
|
|
||||||
'recoverable': exceptions.RECOVERABLE,
|
|
||||||
'not_found': exceptions.NOT_FOUND,
|
|
||||||
'unauthorized': exceptions.UNAUTHORIZED,
|
|
||||||
}
|
|
||||||
DEFAULT = True
|
|
@ -1,375 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
from tuskar_ui import exceptions
|
|
||||||
|
|
||||||
DEBUG = True
|
|
||||||
TEMPLATE_DEBUG = DEBUG
|
|
||||||
|
|
||||||
# Required for Django 1.5.
|
|
||||||
# If horizon is running in production (DEBUG is False), set this
|
|
||||||
# with the list of host/domain names that the application can serve.
|
|
||||||
# For more information see:
|
|
||||||
# https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
|
|
||||||
#ALLOWED_HOSTS = ['horizon.example.com', ]
|
|
||||||
|
|
||||||
# Set SSL proxy settings:
|
|
||||||
# For Django 1.4+ pass this header from the proxy after terminating the SSL,
|
|
||||||
# and don't forget to strip it from the client's request.
|
|
||||||
# For more information see:
|
|
||||||
# https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header
|
|
||||||
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
|
|
||||||
|
|
||||||
# If Horizon is being served through SSL, then uncomment the following two
|
|
||||||
# settings to better secure the cookies from security exploits
|
|
||||||
#CSRF_COOKIE_SECURE = True
|
|
||||||
#SESSION_COOKIE_SECURE = True
|
|
||||||
|
|
||||||
# Overrides for OpenStack API versions. Use this setting to force the
|
|
||||||
# OpenStack dashboard to use a specific API version for a given service API.
|
|
||||||
# NOTE: The version should be formatted as it appears in the URL for the
|
|
||||||
# service API. For example, The identity service APIs have inconsistent
|
|
||||||
# use of the decimal point, so valid options would be "2.0" or "3".
|
|
||||||
# OPENSTACK_API_VERSIONS = {
|
|
||||||
# "identity": 3
|
|
||||||
# }
|
|
||||||
|
|
||||||
# Set this to True if running on multi-domain model. When this is enabled, it
|
|
||||||
# will require user to enter the Domain name in addition to username for login.
|
|
||||||
# OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = False
|
|
||||||
|
|
||||||
# Overrides the default domain used when running on single-domain model
|
|
||||||
# with Keystone V3. All entities will be created in the default domain.
|
|
||||||
# OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
|
|
||||||
|
|
||||||
# Set Console type:
|
|
||||||
# valid options would be "AUTO", "VNC" or "SPICE"
|
|
||||||
# CONSOLE_TYPE = "AUTO"
|
|
||||||
|
|
||||||
# Default OpenStack Dashboard configuration.
|
|
||||||
HORIZON_CONFIG = {
|
|
||||||
'dashboards': ('project', 'admin', 'settings',),
|
|
||||||
'default_dashboard': 'project',
|
|
||||||
'user_home': 'openstack_dashboard.views.get_user_home',
|
|
||||||
'ajax_queue_limit': 10,
|
|
||||||
'auto_fade_alerts': {
|
|
||||||
'delay': 3000,
|
|
||||||
'fade_duration': 1500,
|
|
||||||
'types': ['alert-success', 'alert-info']
|
|
||||||
},
|
|
||||||
'help_url': "http://docs.openstack.org",
|
|
||||||
'exceptions': {'recoverable': exceptions.RECOVERABLE,
|
|
||||||
'not_found': exceptions.NOT_FOUND,
|
|
||||||
'unauthorized': exceptions.UNAUTHORIZED},
|
|
||||||
}
|
|
||||||
|
|
||||||
# Specify a regular expression to validate user passwords.
|
|
||||||
# HORIZON_CONFIG["password_validator"] = {
|
|
||||||
# "regex": '.*',
|
|
||||||
# "help_text": _("Your password does not meet the requirements.")
|
|
||||||
# }
|
|
||||||
|
|
||||||
# Disable simplified floating IP address management for deployments with
|
|
||||||
# multiple floating IP pools or complex network requirements.
|
|
||||||
# HORIZON_CONFIG["simple_ip_management"] = False
|
|
||||||
|
|
||||||
# Turn off browser autocompletion for the login form if so desired.
|
|
||||||
# HORIZON_CONFIG["password_autocomplete"] = "off"
|
|
||||||
|
|
||||||
LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
|
|
||||||
# Set custom secret key:
|
|
||||||
# You can either set it to a specific value or you can let horizion generate a
|
|
||||||
# default secret key that is unique on this machine, e.i. regardless of the
|
|
||||||
# amount of Python WSGI workers (if used behind Apache+mod_wsgi): However, there
|
|
||||||
# may be situations where you would want to set this explicitly, e.g. when
|
|
||||||
# multiple dashboard instances are distributed on different machines (usually
|
|
||||||
# behind a load-balancer). Either you have to make sure that a session gets all
|
|
||||||
# requests routed to the same dashboard instance or you set the same SECRET_KEY
|
|
||||||
# for all of them.
|
|
||||||
from horizon.utils import secret_key
|
|
||||||
SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH, '.secret_key_store'))
|
|
||||||
|
|
||||||
# We recommend you use memcached for development; otherwise after every reload
|
|
||||||
# of the django development server, you will have to login again. To use
|
|
||||||
# memcached set CACHES to something like
|
|
||||||
# CACHES = {
|
|
||||||
# 'default': {
|
|
||||||
# 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
|
|
||||||
# 'LOCATION' : '127.0.0.1:11211',
|
|
||||||
# }
|
|
||||||
#}
|
|
||||||
|
|
||||||
CACHES = {
|
|
||||||
'default': {
|
|
||||||
'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Send email to the console by default
|
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
|
|
||||||
# Or send them to /dev/null
|
|
||||||
#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
|
|
||||||
|
|
||||||
# Configure these for your outgoing email host
|
|
||||||
# EMAIL_HOST = 'smtp.my-company.com'
|
|
||||||
# EMAIL_PORT = 25
|
|
||||||
# EMAIL_HOST_USER = 'djangomail'
|
|
||||||
# EMAIL_HOST_PASSWORD = 'top-secret!'
|
|
||||||
|
|
||||||
# For multiple regions uncomment this configuration, and add (endpoint, title).
|
|
||||||
# AVAILABLE_REGIONS = [
|
|
||||||
# ('http://cluster1.example.com:5000/v2.0', 'cluster1'),
|
|
||||||
# ('http://cluster2.example.com:5000/v2.0', 'cluster2'),
|
|
||||||
# ]
|
|
||||||
|
|
||||||
OPENSTACK_HOST = "stormsend.usersys.redhat.com"
|
|
||||||
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST
|
|
||||||
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
|
|
||||||
|
|
||||||
# Disable SSL certificate checks (useful for self-signed certificates):
|
|
||||||
# OPENSTACK_SSL_NO_VERIFY = True
|
|
||||||
|
|
||||||
# The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the
|
|
||||||
# capabilities of the auth backend for Keystone.
|
|
||||||
# If Keystone has been configured to use LDAP as the auth backend then set
|
|
||||||
# can_edit_user to False and name to 'ldap'.
|
|
||||||
#
|
|
||||||
# TODO(tres): Remove these once Keystone has an API to identify auth backend.
|
|
||||||
OPENSTACK_KEYSTONE_BACKEND = {
|
|
||||||
'name': 'native',
|
|
||||||
'can_edit_user': True,
|
|
||||||
'can_edit_group': True,
|
|
||||||
'can_edit_project': True,
|
|
||||||
'can_edit_domain': True,
|
|
||||||
'can_edit_role': True
|
|
||||||
}
|
|
||||||
|
|
||||||
OPENSTACK_HYPERVISOR_FEATURES = {
|
|
||||||
'can_set_mount_point': True,
|
|
||||||
|
|
||||||
# NOTE: as of Grizzly this is not yet supported in Nova so enabling this
|
|
||||||
# setting will not do anything useful
|
|
||||||
'can_encrypt_volumes': False
|
|
||||||
}
|
|
||||||
|
|
||||||
# The OPENSTACK_NEUTRON_NETWORK settings can be used to enable optional
|
|
||||||
# services provided by neutron. Currently only the load balancer service
|
|
||||||
# is available.
|
|
||||||
OPENSTACK_NEUTRON_NETWORK = {
|
|
||||||
'enable_security_group': True,
|
|
||||||
'enable_lb': False,
|
|
||||||
}
|
|
||||||
|
|
||||||
# OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints
|
|
||||||
# in the Keystone service catalog. Use this setting when Horizon is running
|
|
||||||
# external to the OpenStack environment. The default is 'publicURL'.
|
|
||||||
#OPENSTACK_ENDPOINT_TYPE = "publicURL"
|
|
||||||
|
|
||||||
# SECONDARY_ENDPOINT_TYPE specifies the fallback endpoint type to use in the
|
|
||||||
# case that OPENSTACK_ENDPOINT_TYPE is not present in the endpoints
|
|
||||||
# in the Keystone service catalog. Use this setting when Horizon is running
|
|
||||||
# external to the OpenStack environment. The default is None. This
|
|
||||||
# value should differ from OPENSTACK_ENDPOINT_TYPE if used.
|
|
||||||
#SECONDARY_ENDPOINT_TYPE = "publicURL"
|
|
||||||
|
|
||||||
# The number of objects (Swift containers/objects or images) to display
|
|
||||||
# on a single page before providing a paging element (a "more" link)
|
|
||||||
# to paginate results.
|
|
||||||
API_RESULT_LIMIT = 1000
|
|
||||||
API_RESULT_PAGE_SIZE = 20
|
|
||||||
|
|
||||||
# The timezone of the server. This should correspond with the timezone
|
|
||||||
# of your entire OpenStack installation, and hopefully be in UTC.
|
|
||||||
TIME_ZONE = "UTC"
|
|
||||||
|
|
||||||
# When launching an instance, the menu of available flavors is
|
|
||||||
# sorted by RAM usage, ascending. Provide a callback method here
|
|
||||||
# (and/or a flag for reverse sort) for the sorted() method if you'd
|
|
||||||
# like a different behaviour. For more info, see
|
|
||||||
# http://docs.python.org/2/library/functions.html#sorted
|
|
||||||
# CREATE_INSTANCE_FLAVOR_SORT = {
|
|
||||||
# 'key': my_awesome_callback_method,
|
|
||||||
# 'reverse': False,
|
|
||||||
# }
|
|
||||||
|
|
||||||
LOGGING = {
|
|
||||||
'version': 1,
|
|
||||||
# When set to True this will disable all logging except
|
|
||||||
# for loggers specified in this configuration dictionary. Note that
|
|
||||||
# if nothing is specified here and disable_existing_loggers is True,
|
|
||||||
# django.db.backends will still log unless it is disabled explicitly.
|
|
||||||
'disable_existing_loggers': False,
|
|
||||||
'handlers': {
|
|
||||||
'null': {
|
|
||||||
'level': 'DEBUG',
|
|
||||||
'class': 'django.utils.log.NullHandler',
|
|
||||||
},
|
|
||||||
'console': {
|
|
||||||
# Set the level to "DEBUG" for verbose output logging.
|
|
||||||
'level': 'INFO',
|
|
||||||
'class': 'logging.StreamHandler',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'loggers': {
|
|
||||||
# Logging from django.db.backends is VERY verbose, send to null
|
|
||||||
# by default.
|
|
||||||
'django.db.backends': {
|
|
||||||
'handlers': ['null'],
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'requests': {
|
|
||||||
'handlers': ['null'],
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'horizon': {
|
|
||||||
'handlers': ['console'],
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'openstack_dashboard': {
|
|
||||||
'handlers': ['console'],
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'novaclient': {
|
|
||||||
'handlers': ['console'],
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'cinderclient': {
|
|
||||||
'handlers': ['console'],
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'keystoneclient': {
|
|
||||||
'handlers': ['console'],
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'glanceclient': {
|
|
||||||
'handlers': ['console'],
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'heatclient': {
|
|
||||||
'handlers': ['console'],
|
|
||||||
'propagate': False,
|
|
||||||
},
|
|
||||||
'nose.plugins.manager': {
|
|
||||||
'handlers': ['console'],
|
|
||||||
'propagate': False,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECURITY_GROUP_RULES = {
|
|
||||||
'all_tcp': {
|
|
||||||
'name': 'ALL TCP',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '1',
|
|
||||||
'to_port': '65535',
|
|
||||||
},
|
|
||||||
'all_udp': {
|
|
||||||
'name': 'ALL UDP',
|
|
||||||
'ip_protocol': 'udp',
|
|
||||||
'from_port': '1',
|
|
||||||
'to_port': '65535',
|
|
||||||
},
|
|
||||||
'all_icmp': {
|
|
||||||
'name': 'ALL ICMP',
|
|
||||||
'ip_protocol': 'icmp',
|
|
||||||
'from_port': '-1',
|
|
||||||
'to_port': '-1',
|
|
||||||
},
|
|
||||||
'ssh': {
|
|
||||||
'name': 'SSH',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '22',
|
|
||||||
'to_port': '22',
|
|
||||||
},
|
|
||||||
'smtp': {
|
|
||||||
'name': 'SMTP',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '25',
|
|
||||||
'to_port': '25',
|
|
||||||
},
|
|
||||||
'dns': {
|
|
||||||
'name': 'DNS',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '53',
|
|
||||||
'to_port': '53',
|
|
||||||
},
|
|
||||||
'http': {
|
|
||||||
'name': 'HTTP',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '80',
|
|
||||||
'to_port': '80',
|
|
||||||
},
|
|
||||||
'pop3': {
|
|
||||||
'name': 'POP3',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '110',
|
|
||||||
'to_port': '110',
|
|
||||||
},
|
|
||||||
'imap': {
|
|
||||||
'name': 'IMAP',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '143',
|
|
||||||
'to_port': '143',
|
|
||||||
},
|
|
||||||
'ldap': {
|
|
||||||
'name': 'LDAP',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '389',
|
|
||||||
'to_port': '389',
|
|
||||||
},
|
|
||||||
'https': {
|
|
||||||
'name': 'HTTPS',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '443',
|
|
||||||
'to_port': '443',
|
|
||||||
},
|
|
||||||
'smtps': {
|
|
||||||
'name': 'SMTPS',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '465',
|
|
||||||
'to_port': '465',
|
|
||||||
},
|
|
||||||
'imaps': {
|
|
||||||
'name': 'IMAPS',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '993',
|
|
||||||
'to_port': '993',
|
|
||||||
},
|
|
||||||
'pop3s': {
|
|
||||||
'name': 'POP3S',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '995',
|
|
||||||
'to_port': '995',
|
|
||||||
},
|
|
||||||
'ms_sql': {
|
|
||||||
'name': 'MS SQL',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '1443',
|
|
||||||
'to_port': '1443',
|
|
||||||
},
|
|
||||||
'mysql': {
|
|
||||||
'name': 'MYSQL',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '3306',
|
|
||||||
'to_port': '3306',
|
|
||||||
},
|
|
||||||
'rdp': {
|
|
||||||
'name': 'RDP',
|
|
||||||
'ip_protocol': 'tcp',
|
|
||||||
'from_port': '3389',
|
|
||||||
'to_port': '3389',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
TUSKAR_ENDPOINT_URL = "http://127.0.0.1:8585"
|
|
||||||
|
|
||||||
HORIZON_CONFIG['user_home'] = ''
|
|
||||||
|
|
||||||
OVERCLOUD_CREDS = {
|
|
||||||
'user': 'admin',
|
|
||||||
'password': 'password',
|
|
||||||
'tenant': 'admin',
|
|
||||||
'auth_url': 'http://localhost:5000/v2.0/',
|
|
||||||
}
|
|
@ -19,6 +19,3 @@ pytz>=2010h
|
|||||||
# Horizon Utility Requirements
|
# Horizon Utility Requirements
|
||||||
# for SECURE_KEY generation
|
# for SECURE_KEY generation
|
||||||
lockfile>=0.8
|
lockfile>=0.8
|
||||||
|
|
||||||
python-ironicclient
|
|
||||||
http://tarballs.openstack.org/python-tuskarclient/python-tuskarclient-master.tar.gz#egg=python-tuskarclient
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
name = tuskar-ui
|
name = tuskar-sat-ui
|
||||||
version = 2013.2
|
version = 2014.1
|
||||||
summary = Tuskar Management Dashboard
|
summary = Tuskar Management Dashboard Satellite Plugin
|
||||||
description-file =
|
description-file =
|
||||||
README.rst
|
README.rst
|
||||||
author = OpenStack
|
author = OpenStack
|
||||||
@ -29,7 +29,7 @@ setup-hooks =
|
|||||||
|
|
||||||
[files]
|
[files]
|
||||||
packages =
|
packages =
|
||||||
tuskar_ui
|
tuskar_sat_ui
|
||||||
|
|
||||||
[build_sphinx]
|
[build_sphinx]
|
||||||
all_files = 1
|
all_files = 1
|
||||||
|
2
tuskar_sat_ui/__init__.py
Normal file
2
tuskar_sat_ui/__init__.py
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
from tuskar_sat_ui.infrastructure import nodes
|
||||||
|
from tuskar_sat_ui.api import node
|
@ -0,0 +1,8 @@
|
|||||||
|
{% block custom_js_files %}
|
||||||
|
<script src='{{ STATIC_URL }}infrastructure/js/angular/horizon.base64.js' type='text/javascript' charset='utf-8'></script>
|
||||||
|
<script src='{{ STATIC_URL }}infrastructure/js/angular/horizon.node_errata.js' type='text/javascript' charset='utf-8'></script>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% comment %} Tuskar-UI Client-side Templates (These should *not* be inside the "compress" tag.) {% endcomment %}
|
||||||
|
{% include "client_side/templates.html" %}
|
@ -1,66 +0,0 @@
|
|||||||
Metadata-Version: 1.1
|
|
||||||
Name: tuskar-ui
|
|
||||||
Version: 2013.2.dev66.ga4cfd9c
|
|
||||||
Summary: Tuskar Management Dashboard
|
|
||||||
Home-page: http://www.openstack.org/
|
|
||||||
Author: OpenStack
|
|
||||||
Author-email: openstack-dev@lists.openstack.org
|
|
||||||
License: UNKNOWN
|
|
||||||
Description: =========
|
|
||||||
Tuskar UI
|
|
||||||
=========
|
|
||||||
|
|
||||||
**Tuskar UI** is a user interface for
|
|
||||||
`Tuskar <https://github.com/openstack/tuskar>`__, a management API for
|
|
||||||
OpenStack deployments. It is a plugin for `OpenStack
|
|
||||||
Horizon <https://wiki.openstack.org/wiki/Horizon>`__.
|
|
||||||
|
|
||||||
High-Level Overview
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
Tuskar UI endeavours to be a stateless UI, relying on Tuskar API calls
|
|
||||||
as much as possible. We use existing Horizon libraries and components
|
|
||||||
where possible. If added libraries and components are needed, we will
|
|
||||||
work with the OpenStack community to push those changes back into Horizon.
|
|
||||||
|
|
||||||
Interested in seeing Tuskar and Tuskar UI in action?
|
|
||||||
`Watch a demo! <https://www.youtube.com/watch?v=-6whFIqCqLU>`_
|
|
||||||
|
|
||||||
|
|
||||||
Installation Guide
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Use the `Installation Guide <http://tuskar-ui.readthedocs.org/en/latest/install.html>`_ to install Tuskar UI.
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
|
|
||||||
This project is licensed under the Apache License, version 2. More
|
|
||||||
information can be found in the LICENSE file.
|
|
||||||
|
|
||||||
Contact Us
|
|
||||||
----------
|
|
||||||
|
|
||||||
Join us on IRC (Internet Relay Chat)::
|
|
||||||
|
|
||||||
Network: Freenode (irc.freenode.net/tuskar)
|
|
||||||
Channel: #tuskar
|
|
||||||
|
|
||||||
Or send an email to openstack-dev@lists.openstack.org.
|
|
||||||
|
|
||||||
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: OpenStack
|
|
||||||
Classifier: Framework :: Django
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: Intended Audience :: Information Technology
|
|
||||||
Classifier: Intended Audience :: System Administrators
|
|
||||||
Classifier: License :: OSI Approved :: Apache Software License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Operating System :: POSIX :: Linux
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 2.6
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP
|
|
@ -1,197 +0,0 @@
|
|||||||
.mailmap
|
|
||||||
.pylintrc
|
|
||||||
HACKING.rst
|
|
||||||
LICENSE
|
|
||||||
MANIFEST.in
|
|
||||||
Makefile
|
|
||||||
README.rst
|
|
||||||
_10_admin.py.example
|
|
||||||
_20_project.py.example
|
|
||||||
_50_tuskar.py.example
|
|
||||||
local_settings.py.example
|
|
||||||
manage.py
|
|
||||||
requirements.txt
|
|
||||||
run_tests.sh
|
|
||||||
setup.cfg
|
|
||||||
setup.py
|
|
||||||
test-requirements.txt
|
|
||||||
tox.ini
|
|
||||||
.tx/config
|
|
||||||
bin/less/lessc
|
|
||||||
bin/lib/less/browser.js
|
|
||||||
bin/lib/less/colors.js
|
|
||||||
bin/lib/less/cssmin.js
|
|
||||||
bin/lib/less/functions.js
|
|
||||||
bin/lib/less/index.js
|
|
||||||
bin/lib/less/parser.js
|
|
||||||
bin/lib/less/rhino.js
|
|
||||||
bin/lib/less/tree.js
|
|
||||||
bin/lib/less/tree/alpha.js
|
|
||||||
bin/lib/less/tree/anonymous.js
|
|
||||||
bin/lib/less/tree/assignment.js
|
|
||||||
bin/lib/less/tree/call.js
|
|
||||||
bin/lib/less/tree/color.js
|
|
||||||
bin/lib/less/tree/comment.js
|
|
||||||
bin/lib/less/tree/condition.js
|
|
||||||
bin/lib/less/tree/dimension.js
|
|
||||||
bin/lib/less/tree/directive.js
|
|
||||||
bin/lib/less/tree/element.js
|
|
||||||
bin/lib/less/tree/expression.js
|
|
||||||
bin/lib/less/tree/import.js
|
|
||||||
bin/lib/less/tree/javascript.js
|
|
||||||
bin/lib/less/tree/keyword.js
|
|
||||||
bin/lib/less/tree/media.js
|
|
||||||
bin/lib/less/tree/mixin.js
|
|
||||||
bin/lib/less/tree/operation.js
|
|
||||||
bin/lib/less/tree/paren.js
|
|
||||||
bin/lib/less/tree/quoted.js
|
|
||||||
bin/lib/less/tree/rule.js
|
|
||||||
bin/lib/less/tree/ruleset.js
|
|
||||||
bin/lib/less/tree/selector.js
|
|
||||||
bin/lib/less/tree/url.js
|
|
||||||
bin/lib/less/tree/value.js
|
|
||||||
bin/lib/less/tree/variable.js
|
|
||||||
doc/Makefile
|
|
||||||
doc/make.bat
|
|
||||||
doc/source/HACKING.rst
|
|
||||||
doc/source/README.rst
|
|
||||||
doc/source/conf.py
|
|
||||||
doc/source/devstack_baremetal.rst
|
|
||||||
doc/source/index.rst
|
|
||||||
doc/source/install.rst
|
|
||||||
tools/install_venv.py
|
|
||||||
tools/with_venv.sh
|
|
||||||
tuskar_ui/__init__.py
|
|
||||||
tuskar_ui/cached_property.py
|
|
||||||
tuskar_ui/exceptions.py
|
|
||||||
tuskar_ui/forms.py
|
|
||||||
tuskar_ui/handle_errors.py
|
|
||||||
tuskar_ui/tables.py
|
|
||||||
tuskar_ui/utils.py
|
|
||||||
tuskar_ui/workflows.py
|
|
||||||
tuskar_ui.egg-info/PKG-INFO
|
|
||||||
tuskar_ui.egg-info/SOURCES.txt
|
|
||||||
tuskar_ui.egg-info/dependency_links.txt
|
|
||||||
tuskar_ui.egg-info/not-zip-safe
|
|
||||||
tuskar_ui.egg-info/requires.txt
|
|
||||||
tuskar_ui.egg-info/top_level.txt
|
|
||||||
tuskar_ui/api/__init__.py
|
|
||||||
tuskar_ui/api/flavor.py
|
|
||||||
tuskar_ui/api/heat.py
|
|
||||||
tuskar_ui/api/node.py
|
|
||||||
tuskar_ui/api/tuskar.py
|
|
||||||
tuskar_ui/infrastructure/__init__.py
|
|
||||||
tuskar_ui/infrastructure/dashboard.py
|
|
||||||
tuskar_ui/infrastructure/flavors/__init__.py
|
|
||||||
tuskar_ui/infrastructure/flavors/panel.py
|
|
||||||
tuskar_ui/infrastructure/flavors/tables.py
|
|
||||||
tuskar_ui/infrastructure/flavors/tabs.py
|
|
||||||
tuskar_ui/infrastructure/flavors/tests.py
|
|
||||||
tuskar_ui/infrastructure/flavors/urls.py
|
|
||||||
tuskar_ui/infrastructure/flavors/views.py
|
|
||||||
tuskar_ui/infrastructure/flavors/workflows.py
|
|
||||||
tuskar_ui/infrastructure/flavors/templates/flavors/create.html
|
|
||||||
tuskar_ui/infrastructure/flavors/templates/flavors/details.html
|
|
||||||
tuskar_ui/infrastructure/flavors/templates/flavors/index.html
|
|
||||||
tuskar_ui/infrastructure/nodes/__init__.py
|
|
||||||
tuskar_ui/infrastructure/nodes/forms.py
|
|
||||||
tuskar_ui/infrastructure/nodes/panel.py
|
|
||||||
tuskar_ui/infrastructure/nodes/tables.py
|
|
||||||
tuskar_ui/infrastructure/nodes/tabs.py
|
|
||||||
tuskar_ui/infrastructure/nodes/tests.py
|
|
||||||
tuskar_ui/infrastructure/nodes/urls.py
|
|
||||||
tuskar_ui/infrastructure/nodes/views.py
|
|
||||||
tuskar_ui/infrastructure/nodes/templates/nodes/_nodes_formset_field.html
|
|
||||||
tuskar_ui/infrastructure/nodes/templates/nodes/_nodes_formset_form.html
|
|
||||||
tuskar_ui/infrastructure/nodes/templates/nodes/_overview.html
|
|
||||||
tuskar_ui/infrastructure/nodes/templates/nodes/_register.html
|
|
||||||
tuskar_ui/infrastructure/nodes/templates/nodes/details.html
|
|
||||||
tuskar_ui/infrastructure/nodes/templates/nodes/index.html
|
|
||||||
tuskar_ui/infrastructure/nodes/templates/nodes/register.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/__init__.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/forms.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/panel.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/tables.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/tabs.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/tests.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/urls.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/views.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/_detail_overview.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/_role_edit.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/_undeploy_confirmation.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/_undeploy_in_progress.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/detail.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/node_counts.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/overcloud_role.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/role_edit.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/scale_node_counts.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/undeploy_confirmation.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/undeployed_configuration.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/templates/overcloud/undeployed_overview.html
|
|
||||||
tuskar_ui/infrastructure/overcloud/workflows/__init__.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/workflows/scale.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/workflows/scale_node_counts.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/workflows/undeployed.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/workflows/undeployed_configuration.py
|
|
||||||
tuskar_ui/infrastructure/overcloud/workflows/undeployed_overview.py
|
|
||||||
tuskar_ui/infrastructure/static/bootstrap/less/variables.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/angular_templates/numberpicker.html
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/js/horizon.capacity.js
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/js/horizon.d3circleschart.js
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/js/horizon.d3singlebarchart.js
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/js/tuskar.formset_table.js
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/js/tuskar.js
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/js/tuskar.menu_formset.js
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/js/tuskar.templates.js
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/js/angular/horizon.number_picker.js
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/bootstrap.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/breadcrumbs.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/buttons.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/capacities.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/flavor_usages.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/formsets.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/horizon_upgrades.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/individual_pages.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/infrastructure.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/numberpicker.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/less/tables.less
|
|
||||||
tuskar_ui/infrastructure/static/infrastructure/tests/formset_table.js
|
|
||||||
tuskar_ui/infrastructure/templates/client_side/_modal_chart.html
|
|
||||||
tuskar_ui/infrastructure/templates/client_side/templates.html
|
|
||||||
tuskar_ui/infrastructure/templates/formset_table/_row.html
|
|
||||||
tuskar_ui/infrastructure/templates/formset_table/_table.html
|
|
||||||
tuskar_ui/infrastructure/templates/formset_table/menu_formset.html
|
|
||||||
tuskar_ui/infrastructure/templates/horizon/common/_form_errors.html
|
|
||||||
tuskar_ui/infrastructure/templates/horizon/common/_form_field.html
|
|
||||||
tuskar_ui/infrastructure/templates/horizon/common/_form_fields.html
|
|
||||||
tuskar_ui/infrastructure/templates/horizon/common/_horizontal_field.html
|
|
||||||
tuskar_ui/infrastructure/templates/horizon/common/_horizontal_fields.html
|
|
||||||
tuskar_ui/infrastructure/templates/horizon/common/_items_count_domain_page_header.html
|
|
||||||
tuskar_ui/infrastructure/templates/horizon/common/_items_count_tab_group.html
|
|
||||||
tuskar_ui/infrastructure/templates/infrastructure/_fullscreen_workflow.html
|
|
||||||
tuskar_ui/infrastructure/templates/infrastructure/_fullscreen_workflow_base.html
|
|
||||||
tuskar_ui/infrastructure/templates/infrastructure/_performance_chart.html
|
|
||||||
tuskar_ui/infrastructure/templates/infrastructure/_scripts.html
|
|
||||||
tuskar_ui/infrastructure/templates/infrastructure/_workflow_base.html
|
|
||||||
tuskar_ui/infrastructure/templates/infrastructure/base.html
|
|
||||||
tuskar_ui/infrastructure/templates/infrastructure/base_detail.html
|
|
||||||
tuskar_ui/infrastructure/templates/infrastructure/qunit.html
|
|
||||||
tuskar_ui/infrastructure/templatetags/__init__.py
|
|
||||||
tuskar_ui/infrastructure/templatetags/chart_helpers.py
|
|
||||||
tuskar_ui/test/__init__.py
|
|
||||||
tuskar_ui/test/formset_table_tests.py
|
|
||||||
tuskar_ui/test/helpers.py
|
|
||||||
tuskar_ui/test/selenium.py
|
|
||||||
tuskar_ui/test/settings.py
|
|
||||||
tuskar_ui/test/urls.py
|
|
||||||
tuskar_ui/test/api_tests/__init__.py
|
|
||||||
tuskar_ui/test/api_tests/heat_tests.py
|
|
||||||
tuskar_ui/test/api_tests/node_tests.py
|
|
||||||
tuskar_ui/test/api_tests/tuskar_tests.py
|
|
||||||
tuskar_ui/test/test_data/__init__.py
|
|
||||||
tuskar_ui/test/test_data/exceptions.py
|
|
||||||
tuskar_ui/test/test_data/flavor_data.py
|
|
||||||
tuskar_ui/test/test_data/heat_data.py
|
|
||||||
tuskar_ui/test/test_data/node_data.py
|
|
||||||
tuskar_ui/test/test_data/tuskar_data.py
|
|
||||||
tuskar_ui/test/test_data/utils.py
|
|
@ -1 +0,0 @@
|
|||||||
http://tarballs.openstack.org/python-tuskarclient/python-tuskarclient-master.tar.gz#egg=python-tuskarclient
|
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
pbr>=0.6,!=0.7,<1.0
|
|
||||||
django>=1.4,<1.6
|
|
||||||
django_compressor>=1.3
|
|
||||||
django_openstack_auth>=1.1.3
|
|
||||||
eventlet>=0.13.0
|
|
||||||
kombu>=2.4.8
|
|
||||||
iso8601>=0.1.8
|
|
||||||
netaddr>=0.7.6
|
|
||||||
python-cinderclient>=1.0.6
|
|
||||||
python-glanceclient>=0.9.0
|
|
||||||
python-heatclient>=0.2.3
|
|
||||||
python-keystoneclient>=0.4.1
|
|
||||||
python-novaclient>=2.15.0
|
|
||||||
python-neutronclient>=2.3.0,<3
|
|
||||||
python-swiftclient>=1.5
|
|
||||||
python-ceilometerclient>=1.0.6
|
|
||||||
pytz>=2010h
|
|
||||||
lockfile>=0.8
|
|
||||||
python-ironicclient
|
|
||||||
python>=tuskarclient
|
|
@ -1 +0,0 @@
|
|||||||
tuskar_ui
|
|
@ -1,59 +0,0 @@
|
|||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
from django import forms
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
import netaddr
|
|
||||||
|
|
||||||
|
|
||||||
def fieldset(self, *args, **kwargs):
|
|
||||||
"""A helper function for grouping fields based on their names."""
|
|
||||||
|
|
||||||
prefix = kwargs.pop('prefix', None)
|
|
||||||
names = args or self.fields.keys()
|
|
||||||
for name in names:
|
|
||||||
if prefix is None or name.startswith(prefix):
|
|
||||||
yield forms.forms.BoundField(self, self.fields[name], name)
|
|
||||||
|
|
||||||
|
|
||||||
class NumberInput(forms.widgets.TextInput):
|
|
||||||
input_type = 'number'
|
|
||||||
|
|
||||||
|
|
||||||
class NumberPickerInput(NumberInput):
|
|
||||||
def __init__(self, attrs=None):
|
|
||||||
default_attrs = {'hr-number-picker': '', 'ng-cloak': '', }
|
|
||||||
if attrs:
|
|
||||||
default_attrs.update(attrs)
|
|
||||||
super(NumberPickerInput, self).__init__(default_attrs)
|
|
||||||
|
|
||||||
|
|
||||||
class MACField(forms.fields.Field):
|
|
||||||
def clean(self, value):
|
|
||||||
class mac_dialect(netaddr.mac_eui48):
|
|
||||||
"""Same validation as Nova uses."""
|
|
||||||
word_fmt = '%.02x'
|
|
||||||
word_sep = ':'
|
|
||||||
try:
|
|
||||||
return str(netaddr.EUI(
|
|
||||||
value.strip(), version=48, dialect=mac_dialect)).upper()
|
|
||||||
except (netaddr.AddrFormatError, TypeError):
|
|
||||||
raise forms.ValidationError(_(u'Enter a valid MAC address.'))
|
|
||||||
|
|
||||||
|
|
||||||
class NetworkField(forms.fields.Field):
|
|
||||||
def clean(self, value):
|
|
||||||
try:
|
|
||||||
return str(netaddr.IPNetwork(value, version=4))
|
|
||||||
except netaddr.AddrFormatError:
|
|
||||||
raise forms.ValidationError(_("Enter valid IPv4 network address."))
|
|
Loading…
x
Reference in New Issue
Block a user