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
|
||||
# for SECURE_KEY generation
|
||||
lockfile>=0.8
|
||||
|
||||
python-ironicclient
|
||||
http://tarballs.openstack.org/python-tuskarclient/python-tuskarclient-master.tar.gz#egg=python-tuskarclient
|
||||
|
@ -1,7 +1,7 @@
|
||||
[metadata]
|
||||
name = tuskar-ui
|
||||
version = 2013.2
|
||||
summary = Tuskar Management Dashboard
|
||||
name = tuskar-sat-ui
|
||||
version = 2014.1
|
||||
summary = Tuskar Management Dashboard Satellite Plugin
|
||||
description-file =
|
||||
README.rst
|
||||
author = OpenStack
|
||||
@ -29,7 +29,7 @@ setup-hooks =
|
||||
|
||||
[files]
|
||||
packages =
|
||||
tuskar_ui
|
||||
tuskar_sat_ui
|
||||
|
||||
[build_sphinx]
|
||||
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…
Reference in New Issue
Block a user