Update Launch Instance button with ajax

Launch Instance button updates after instance has been terminated:
- added html temlpate for table actions
- ajax-update and update-url classes were added for link actions
- update all required actions via ajax when rows were removed from the table

Closes-Bug: #1192621
Change-Id: I81e8ea4e1921bbf344d210ba3353d51d4c11a7d1
filter always returns the last created item

Problem: if you create several new volumes and then do a search for
the first item you created, the last item *always* shows up
You have to refresh the page to get the proper behavior

This fix updates the quicksearch data cache when a new row is added

Change-Id: I4b5d5b6b9783d09a28460cab7c182f1bb2aa2a3e
Closes-Bug: #1277103
Tell users when there is no data available in Daily Report

Here is the text from the bug:
If there is no metering data from the period selected,
user sees panel with no tables. It would be nicer to tell user that this is because there is no data to show.

The Daily Report displays one table per project. Since there is no data, then there are no tables.
This change displays the string "No data available" in this situation. This is the same
behavior as the Stats tab in the same Resouce Utilization Panel.

Change-Id: I15a5e029ec97d77c95c2567e8ba4493623952de7
Closes-bug: #1287931
Stop altering the glance API URL

Horizon should treat the glance API endpoint URL the way it treats
other API endpoint URLs.
Horizon should trust that the retrieved URL is correct, and let the
python-glanceclient use the URL.

Change-Id: Ie6230b1e4b90f686c8a7ab7368944b6c3412b284
Closes-Bug: 1188182
Create links in LBaaS detail pages

LBaaS detail pages contains many UUIDs and it is not human-friendly.
This commit replaces UUIDs with name or similar strings and
add links to details of corresponding resource.

In addition, some columns are added to health monitor tables
because UUID and monitor type are not enough to identify
health monitors.

Change-Id: I7b13c827d96b57a82e3855743e7d68e564edebd7
Closes-Bug: #1243123
Closes-Bug: #1243126
Make wizard workflow work when non-modal

The JavaScript code that adds the wizard functionality was initialized
only when the page was displayed as a modal.  I moved the call to that
initialization function into the template, so that it is called always
when a wizard is displayed.

Change-Id: Id73116392158ea08b4f04062f4f926286b1f7973
Closes: bug 1273608
Fix excessive ajax session thrash

HorizonMiddleware causes excessive session rewrites
and possible race condition resulting in logouts
for ajax requests

Change-Id: I1e1181a0830e23d43bfcf89729b9a98f6aaad965
Closes-bug: #1253829
use ec2-user instead of ec2_user

Change-Id: Ib630fb65a5f587f0c58eb4edd817126ce1dde689
Closes-Bug: #1301149
Add tox env to build docs

In django-based projects, we need to specify DJANGO_SETTINGS_MODULE
when running docs build. It is required to addresses the warnings of
docs build job in the gate.

This commit also changes run_tests.sh --docs to use "python setup.py
build_sphinx" to match tox docs env. This change addresses all sphinx
build warning except keystone v3 related following warning.
I believe it is useful.
  NoReverseMatch: u'domains' is not a registered namespace
  inside 'horizon:admin'

Closes-Bug: #1302532
Related-Bug: #1257725

Change-Id: I3663b81b58be3c6cb05e4af914f768c28b21ea07
Sync latest Oslo

Sync from oslo-incubator commit 46f2b697b6aacc674bc040a8751997ed70490d1a

Major changes of the import are related to update policy module:
0da5de6b54 Allow policy.json resource vs constant check
5d1f15a778 Documenting policy.json syntax
33533b0d97 Keystone user can't perform revoke_token

Most changes are style-related topics:
* Improve Python3 compatibility
* Remove vim modelines
* Support Per-log-level logging translations

Closes-Bug: #1296337
Change-Id: I09f61b10b1b36015d248de25c5c6ed994717a565
Add go_to_home_page method and two more properties

I added the brand property which is used by the go_to_home_page
method. This method will generally be used for tests.
In particular, it will be part of the TestCase class, which is planned
to be the base class for all tests (on top of helpers's BaseTestCase
class), except login tests.

In addition, I modified the css selector in the _user_indicator_locator
and made the user property from it.

https://wiki.openstack.org/wiki/Horizon/Testing/UI

Partially implements blueprint: selenium-integration-testing

Change-Id: Ic614c6a37ea04aeccf1a06312f4bcd20e5fe2c76
Better tab name on Hosts Aggregate modal.

Change the Tab name on "Create Host Aggregate"
modal for a better match with the action.

Change-Id: I87d1ae63d719afcb6d5f9827171f8392d6dc3a8d
Closes-Bug: #1291120
Fix DynamicSelectWidget.get_add_item_url() method.

Do not wrap self.add_item_link_args in an additional list because it
makes impossible to pass more than one arg (i.e. tuple or list of
args) to url resolver.

Change-Id: Idf6d5d1f27c9176f1de93a475e0f1abbae5ee275
Closes-Bug: #1297317
Check host is not none in host aggregate page

Check that host is not none before trying to parse
the services that are up in each availability zone

Change-Id: I757f35ca2fa84da3441b544280c1c430bf3e8fb8
Closes-Bug: #1297920
Introduces escaping in Horizon/Orchestration

1) Escape help_text a second time to avoid bootstrap tooltip XSS issue

The "Description" parameter in a Heat template is used to populate
a help_text tooltip in the dynamically generated Heat form. Bootstrap
inserts this tooltip into the DOM using .html() which undoes any
escaping we do in Django (it should be using .text()).

This was fixed by forcing the help_text content to be escaped a second
time. The issue itself is mitigated in bootstrap.js release 2.0.3
(ours is currently 2.0.1).

2) Properly escape untrusted Heat template 'outputs'

The 'outputs' parameter in a Heat template was included in a Django
template with HTML autoescaping turned off. Malicious HTML content
could be included in a Heat template and would be rendered by Horizon
when details about a created stack were displayed.

This was fixed by not disabling autoescaping and explicitly escaping
untrusted values in any strings that are later marked "safe" to render
without further escaping.

Change-Id: Icd9f9d9ca77068b12227d77469773a325c840001
Closes-Bug: #1289033
Co-Authored-By: Kieran Spear <kispear@gmail.com>
Fix KeyError in router:AddInterface error handle

Under some circumstances the exception handling on adding an interface
to a router will produce a KeyError.

The exception happens in
openstack_dashboard/dashboards/project/routers/ports/forms.py in
AddInterface.populate_subnet_id_choices.

In the exception handling code, a reverse() is called an argument of
request.REQUEST['router_id'] which doesn't always exist.

The fix is quite simple: try to look for it in the initial form data as
well, and if 'router_id' is in neither location, fall-back to the index
page.

Change-Id: I74eaf8cd024d2929fed3d4e00b644e5850e2d5b3
Closes-Bug: 1304533
Daily Usage report format value column

Also fix small capitalization issue

Change-Id: Ibb32d4181eb00c0fd8856002522d70c1edf33ec0
Closes-Bug: #1304066
TypeError in database view error handle

In error handling code inside
openstack_dashboard/dashboards/project/databases/views.py,
DetailView.get_data, on the logging line:
            LOG.error('Unable to retrieve flavor details'
                      ' for database instance: %s') % instance_id

That line will always produce the following error:
    openstack_dashboard.dashboards.project.databases.views in get_data
    TypeError: unsupported operand type(s) for %: 'NoneType' and 'unicode'

It's just a parenthesis issue.

Change-Id: Id3b551bf393a4a10ee18b570e91ac3e474692f8b
Closes-Bug: 1304623
Use "python -m coverage" rather than use "coverage" explicitly

When coverage module is installed using a package from Debian/Ubuntu,
the command name is "python-coverage". By using "python -m coverage"
the coverage module is detected in both cases.

Change-Id: Icf9084855b83d0cc721de5325f38cf72ac85ff81
Closes-Bug: #1241332
Co-Authored-By: florent <florent.flament-ext@cloudwatt.com>
Fix timestampSorter parser

Remove non-existing formatInt function as getTime() already returns an int.

Change-Id: I15a93cd8ed226b9032e12b85e4175ae7319b5d1f