From ae759df3790261e0d39044b2f7db76a59c9ba6d6 Mon Sep 17 00:00:00 2001
From: Pino de Candia <32303022+pinodeca@users.noreply.github.com>
Date: Tue, 9 Jan 2018 00:09:20 -0600
Subject: [PATCH] Draft panel for SSH Hosts list.

---
 .gitreview                                    |   2 +-
 .zuul.yaml                                    |   4 +-
 CONTRIBUTING.rst                              |   2 +-
 HACKING.rst                                   |   2 +-
 README.rst                                    |  18 +-
 doc/source/conf.py                            |   6 +-
 doc/source/index.rst                          |   4 +-
 doc/source/install/index.rst                  |   6 +-
 doc/source/user/index.rst                     |   4 +-
 karma.conf.js                                 |   8 +-
 manage.py                                     |   2 +-
 openstack-common.conf                         |   2 +-
 package.json                                  |   8 +-
 releasenotes/source/conf.py                   |  30 +-
 releasenotes/source/index.rst                 |   6 +-
 .../locale/cs/LC_MESSAGES/releasenotes.po     |  45 --
 .../locale/de/LC_MESSAGES/releasenotes.po     |  46 --
 .../locale/en_GB/LC_MESSAGES/releasenotes.po  |  45 --
 .../locale/fr/LC_MESSAGES/releasenotes.po     |  21 -
 .../locale/id/LC_MESSAGES/releasenotes.po     |  45 --
 .../locale/ko_KR/LC_MESSAGES/releasenotes.po  |  47 --
 .../locale/pt_BR/LC_MESSAGES/releasenotes.po  |  46 --
 .../locale/ru/LC_MESSAGES/releasenotes.po     |  37 --
 .../locale/zh_CN/LC_MESSAGES/releasenotes.po  |  42 --
 releasenotes/source/mitaka.rst                |   6 -
 releasenotes/source/newton.rst                |   6 -
 releasenotes/source/{ocata.rst => queens.rst} |   4 +-
 requirements.txt                              |   2 +-
 setup.cfg                                     |  16 +-
 tatudashboard/__init__.py                     |   2 +-
 tatudashboard/api/__init__.py                 |   2 +-
 tatudashboard/api/rest/passthrough.py         |   4 +-
 tatudashboard/api/{designate.py => tatu.py}   |   6 +-
 .../dashboards/project/dns_domains/forms.py   | 549 ------------------
 .../dashboards/project/dns_domains/panel.py   |  26 -
 .../dashboards/project/dns_domains/tables.py  | 224 -------
 .../templates/dns_domains/_create_domain.html |  38 --
 .../templates/dns_domains/_create_record.html |  37 --
 .../templates/dns_domains/_domain_detail.html |  32 -
 .../templates/dns_domains/_record_detail.html |  36 --
 .../templates/dns_domains/_update_domain.html |  36 --
 .../templates/dns_domains/_update_record.html |   9 -
 .../templates/dns_domains/create_domain.html  |  11 -
 .../templates/dns_domains/create_record.html  |  11 -
 .../templates/dns_domains/domain_detail.html  |  11 -
 .../templates/dns_domains/index.html          |  11 -
 .../dns_domains/prefix_field_style.html       |   4 -
 .../dns_domains/prefix_html_widget.html       |   2 -
 .../templates/dns_domains/record_detail.html  |  11 -
 .../templates/dns_domains/records.html        |  32 -
 .../templates/dns_domains/update_domain.html  |  11 -
 .../templates/dns_domains/update_record.html  |  11 -
 .../dashboards/project/dns_domains/urls.py    |  52 --
 .../dashboards/project/dns_domains/utils.py   |  20 -
 .../dashboards/project/dns_domains/views.py   | 243 --------
 .../{dns_domains => hosts}/__init__.py        |   0
 .../project/{ngdns/zones => hosts}/panel.py   |  10 +-
 .../project/{ngdns/zones => hosts}/urls.py    |   2 +-
 .../{ngdns/reverse_dns => hosts}/views.py     |   0
 .../dashboards/project/ngdns/__init__.py      |   1 -
 .../project/ngdns/reverse_dns/__init__.py     |   0
 .../project/ngdns/reverse_dns/panel.py        |  25 -
 .../project/ngdns/reverse_dns/urls.py         |  22 -
 .../project/ngdns/zones/__init__.py           |   0
 .../dashboards/project/ngdns/zones/views.py   |  19 -
 ...up.py => _1710_project_ssh_panel_group.py} |   4 +-
 .../enabled/_1721_dns_zones_panel.py          |  40 --
 .../enabled/_1722_dns_reversedns_panel.py     |  38 --
 ..._dns_panel.py => _1722_ssh_hosts_panel.py} |  16 +-
 tatudashboard/exceptions.py                   |  82 ++-
 tatudashboard/locale/cs/LC_MESSAGES/django.mo | Bin 6965 -> 0 bytes
 tatudashboard/locale/cs/LC_MESSAGES/django.po | 348 -----------
 tatudashboard/locale/de/LC_MESSAGES/django.mo | Bin 7264 -> 0 bytes
 tatudashboard/locale/de/LC_MESSAGES/django.po | 351 -----------
 .../locale/en_GB/LC_MESSAGES/django.mo        | Bin 6783 -> 0 bytes
 .../locale/en_GB/LC_MESSAGES/django.po        | 351 -----------
 tatudashboard/locale/es/LC_MESSAGES/django.mo | Bin 7000 -> 0 bytes
 tatudashboard/locale/es/LC_MESSAGES/django.po | 342 -----------
 tatudashboard/locale/fr/LC_MESSAGES/django.mo | Bin 7398 -> 0 bytes
 tatudashboard/locale/fr/LC_MESSAGES/django.po | 362 ------------
 tatudashboard/locale/id/LC_MESSAGES/django.mo | Bin 7183 -> 0 bytes
 tatudashboard/locale/id/LC_MESSAGES/django.po | 350 -----------
 tatudashboard/locale/ja/LC_MESSAGES/django.mo | Bin 7759 -> 0 bytes
 tatudashboard/locale/ja/LC_MESSAGES/django.po | 347 -----------
 .../locale/ko_KR/LC_MESSAGES/django.mo        | Bin 7499 -> 0 bytes
 .../locale/ko_KR/LC_MESSAGES/django.po        | 350 -----------
 .../locale/pt_BR/LC_MESSAGES/django.mo        | Bin 7192 -> 0 bytes
 .../locale/pt_BR/LC_MESSAGES/django.po        | 352 -----------
 tatudashboard/locale/ru/LC_MESSAGES/django.mo | Bin 8541 -> 0 bytes
 tatudashboard/locale/ru/LC_MESSAGES/django.po | 361 ------------
 .../locale/tr_TR/LC_MESSAGES/django.mo        | Bin 6928 -> 0 bytes
 .../locale/tr_TR/LC_MESSAGES/django.po        | 360 ------------
 .../locale/zh_CN/LC_MESSAGES/django.mo        | Bin 6537 -> 0 bytes
 .../locale/zh_CN/LC_MESSAGES/django.po        | 353 -----------
 .../actions/actions.module.js                 |  66 ---
 .../actions/set.service.js                    | 170 ------
 .../actions/unset.service.js                  | 139 -----
 .../os-designate-floatingip/api.service.js    | 121 ----
 .../details/details.module.js                 |  66 ---
 .../details/drawer.html                       |  10 -
 .../details/overview.controller.js            |  46 --
 .../details/overview.html                     |  11 -
 .../os-designate-floatingip.module.js         | 156 -----
 .../actions/actions.module.js                 |  79 ---
 .../actions/common-forms.service.js           | 165 ------
 .../actions/create.service.js                 | 132 -----
 .../actions/delete.service.js                 | 182 ------
 .../actions/update.service.js                 | 159 -----
 .../details/details.module.js                 | 109 ----
 .../details/drawer.html                       |  10 -
 .../details/overview.controller.js            |  46 --
 .../details/overview.html                     |  45 --
 .../details/zone-recordsets.controller.js     |  39 --
 .../details/zone-recordsets.html              |   8 -
 .../os-designate-recordset.module.js          | 240 --------
 .../os-designate-zone/api.service.js          | 152 -----
 .../os-designate-zone.module.js               | 204 -------
 .../actions/actions.module.js                 |  16 +-
 .../actions/actions.module.spec.js            |  12 +-
 .../actions/common-forms.service.js           |  24 +-
 .../actions/create.html                       |   0
 .../actions/create.service.js                 |  42 +-
 .../actions/delete.service.js                 |  74 +--
 .../actions/update.service.js                 |  52 +-
 .../api.service.js                            |  47 +-
 .../details/details.module.js                 |  22 +-
 .../details/drawer.html                       |   2 +-
 .../details/overview.controller.js            |   6 +-
 .../details/overview.html                     |  10 +-
 .../os-tatu-host/os-tatu-host.module.js       | 134 +++++
 .../resources/resources.module.js             |  10 +-
 .../tatudashboard/resources/util.service.js   |   4 +-
 .../static/tatudashboard/reverse_dns.html     |   4 -
 .../static/tatudashboard/ssh_hosts.html       |   4 +
 .../tatudashboard/tatudashboard.module.js     |  23 +-
 tatudashboard/static/tatudashboard/zones.html |   4 -
 tatudashboard/tests/.secret_key_store         |   1 -
 tatudashboard/tests/__init__.py               |   0
 tatudashboard/tests/base.py                   | 100 ----
 tatudashboard/tests/settings.py               |  83 ---
 .../tests/test_designatedashboard.py          | 406 -------------
 tatudashboard/tests/test_ptr_record_form.py   |  85 ---
 tatudashboard/tests/test_spf_record_form.py   |  70 ---
 tatudashboard/tests/test_sshfp_record_form.py |  92 ---
 tox.ini                                       |   6 +-
 145 files changed, 470 insertions(+), 9647 deletions(-)
 delete mode 100644 releasenotes/source/locale/cs/LC_MESSAGES/releasenotes.po
 delete mode 100644 releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po
 delete mode 100644 releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
 delete mode 100644 releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po
 delete mode 100644 releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po
 delete mode 100644 releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po
 delete mode 100644 releasenotes/source/locale/pt_BR/LC_MESSAGES/releasenotes.po
 delete mode 100644 releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po
 delete mode 100644 releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po
 delete mode 100644 releasenotes/source/mitaka.rst
 delete mode 100644 releasenotes/source/newton.rst
 rename releasenotes/source/{ocata.rst => queens.rst} (60%)
 rename tatudashboard/api/{designate.py => tatu.py} (96%)
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/forms.py
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/panel.py
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/tables.py
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_create_domain.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_create_record.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_domain_detail.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_record_detail.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_update_domain.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_update_record.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/create_domain.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/create_record.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/domain_detail.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/index.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/prefix_field_style.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/prefix_html_widget.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/record_detail.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/records.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/update_domain.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/templates/dns_domains/update_record.html
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/urls.py
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/utils.py
 delete mode 100644 tatudashboard/dashboards/project/dns_domains/views.py
 rename tatudashboard/dashboards/project/{dns_domains => hosts}/__init__.py (100%)
 rename tatudashboard/dashboards/project/{ngdns/zones => hosts}/panel.py (83%)
 rename tatudashboard/dashboards/project/{ngdns/zones => hosts}/urls.py (91%)
 rename tatudashboard/dashboards/project/{ngdns/reverse_dns => hosts}/views.py (100%)
 delete mode 100644 tatudashboard/dashboards/project/ngdns/__init__.py
 delete mode 100644 tatudashboard/dashboards/project/ngdns/reverse_dns/__init__.py
 delete mode 100644 tatudashboard/dashboards/project/ngdns/reverse_dns/panel.py
 delete mode 100644 tatudashboard/dashboards/project/ngdns/reverse_dns/urls.py
 delete mode 100644 tatudashboard/dashboards/project/ngdns/zones/__init__.py
 delete mode 100644 tatudashboard/dashboards/project/ngdns/zones/views.py
 rename tatudashboard/enabled/{_1710_project_dns_panel_group.py => _1710_project_ssh_panel_group.py} (94%)
 delete mode 100644 tatudashboard/enabled/_1721_dns_zones_panel.py
 delete mode 100644 tatudashboard/enabled/_1722_dns_reversedns_panel.py
 rename tatudashboard/enabled/{_1720_project_dns_panel.py => _1722_ssh_hosts_panel.py} (79%)
 delete mode 100644 tatudashboard/locale/cs/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/cs/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/de/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/de/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/en_GB/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/en_GB/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/es/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/es/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/fr/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/fr/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/id/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/id/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/ja/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/ja/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/ko_KR/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/ko_KR/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/pt_BR/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/pt_BR/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/ru/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/ru/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/tr_TR/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/tr_TR/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/locale/zh_CN/LC_MESSAGES/django.mo
 delete mode 100644 tatudashboard/locale/zh_CN/LC_MESSAGES/django.po
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/actions.module.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/set.service.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/unset.service.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-floatingip/api.service.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/details.module.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/drawer.html
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/overview.controller.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/overview.html
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-floatingip/os-designate-floatingip.module.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/actions.module.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/common-forms.service.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/create.service.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/delete.service.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/update.service.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/details.module.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/drawer.html
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/overview.controller.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/overview.html
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/zone-recordsets.controller.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/zone-recordsets.html
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-recordset/os-designate-recordset.module.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-zone/api.service.js
 delete mode 100644 tatudashboard/static/tatudashboard/resources/os-designate-zone/os-designate-zone.module.js
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/actions/actions.module.js (76%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/actions/actions.module.spec.js (74%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/actions/common-forms.service.js (88%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/actions/create.html (100%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/actions/create.service.js (68%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/actions/delete.service.js (65%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/actions/update.service.js (69%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-recordset => os-tatu-host}/api.service.js (74%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/details/details.module.js (69%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/details/drawer.html (71%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/details/overview.controller.js (85%)
 rename tatudashboard/static/tatudashboard/resources/{os-designate-zone => os-tatu-host}/details/overview.html (83%)
 create mode 100644 tatudashboard/static/tatudashboard/resources/os-tatu-host/os-tatu-host.module.js
 delete mode 100644 tatudashboard/static/tatudashboard/reverse_dns.html
 create mode 100644 tatudashboard/static/tatudashboard/ssh_hosts.html
 delete mode 100644 tatudashboard/static/tatudashboard/zones.html
 delete mode 100644 tatudashboard/tests/.secret_key_store
 delete mode 100644 tatudashboard/tests/__init__.py
 delete mode 100644 tatudashboard/tests/base.py
 delete mode 100644 tatudashboard/tests/settings.py
 delete mode 100644 tatudashboard/tests/test_designatedashboard.py
 delete mode 100644 tatudashboard/tests/test_ptr_record_form.py
 delete mode 100644 tatudashboard/tests/test_spf_record_form.py
 delete mode 100644 tatudashboard/tests/test_sshfp_record_form.py

diff --git a/.gitreview b/.gitreview
index 0607a92..1de52bf 100644
--- a/.gitreview
+++ b/.gitreview
@@ -1,4 +1,4 @@
 [gerrit]
 host=review.openstack.org
 port=29418
-project=openstack/designate-dashboard.git
+project=openstack/tatu-dashboard.git
diff --git a/.zuul.yaml b/.zuul.yaml
index d76eafb..e62cfbf 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -1,4 +1,4 @@
 - project:
-    name: openstack/designate-dashboard
+    name: openstack/tatu-dashboard
     templates:
-      - designate-devstack-jobs
+      - tatu-devstack-jobs
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index 51e5d63..569b7aa 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -14,4 +14,4 @@ Pull requests submitted through GitHub will be ignored.
 
 Bugs should be filed on Launchpad, not GitHub:
 
-   https://bugs.launchpad.net/designatedashboard
\ No newline at end of file
+   https://bugs.launchpad.net/tatudashboard
\ No newline at end of file
diff --git a/HACKING.rst b/HACKING.rst
index e0ddef5..3c671c6 100644
--- a/HACKING.rst
+++ b/HACKING.rst
@@ -1,4 +1,4 @@
-designatedashboard Style Commandments
+tatudashboard Style Commandments
 ===============================================
 
 Read the OpenStack Style Commandments http://docs.openstack.org/developer/hacking/
\ No newline at end of file
diff --git a/README.rst b/README.rst
index 4c030ee..74e089b 100644
--- a/README.rst
+++ b/README.rst
@@ -8,10 +8,10 @@ Team and repository tags
 .. Change things from this point on
 
 ===============================
-designatedashboard
+tatudashboard
 ===============================
 
-Designate Horizon UI bits
+Tatu Horizon UI bits
 
 * Free software: Apache license
 
@@ -24,7 +24,7 @@ Features
 Howto
 -----
 
-1. Package the designatedashboard by running::
+1. Package the tatudashboard by running::
 
     python setup.py sdist
 
@@ -42,24 +42,24 @@ Howto
 
    this seems to be a result of mismatched pbr versioning.  A hacking workaround for development
    purposes is replacing the pbr call with a hard-coded version (e.g. '1.0.1') in
-   designatedashboard/__init__.py.
+   tatudashboard/__init__.py.
 
-2. Copy panel plugin files into your Horizon config.  These files can be found in designatedashboard/enabled
+2. Copy panel plugin files into your Horizon config.  These files can be found in tatudashboard/enabled
    and should be copied to /usr/share/openstack-dashboard/openstack_dashboard/local/enabled or the
    equivalent directory for your openstack-dashboard install.
 
 3. Make sure your keystone catalog contains endpoints for service type 'dns'.  If no such endpoints are
-   found, the designatedashboard panels will not render.
+   found, the tatudashboard panels will not render.
 
-4. (Optional) Copy the designate policy file into horizon's policy files folder, and add this config::
+4. (Optional) Copy the tatu policy file into horizon's policy files folder, and add this config::
 
-    'dns': 'designate_policy.json',
+    'ssh': 'tatu_policy.json',
 
 5. (Optional) Within your horizon settings file(s) (either the local settings or the other settings.py), add
    the line below.  This will make it so the record create/update screen uses a drop down of your floating ip
    addresses instead of a free form text field::
 
-    DESIGNATE = { 'records_use_fips': True }
+    TATU = { 'records_use_fips': True }
 
 
 Test
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 67602e2..2571f34 100755
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -27,8 +27,8 @@ extensions = [
 ]
 
 # openstackdocstheme options
-repository_name = 'openstack/designate-dashboard'
-bug_project = 'designate-dashboard'
+repository_name = 'openstack/tatu-dashboard'
+bug_project = 'tatu-dashboard'
 bug_tag = ''
 html_last_updated_fmt = '%Y-%m-%d %H:%M'
 html_theme = 'openstackdocs'
@@ -44,7 +44,7 @@ source_suffix = '.rst'
 master_doc = 'index'
 
 # General information about the project.
-project = u'designate_dashboard'
+project = u'tatu_dashboard'
 copyright = u'2013, OpenStack Foundation'
 
 # If true, '()' will be appended to :func: etc. cross-reference text.
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 2bced7e..f3a645a 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -1,10 +1,10 @@
-.. designate_ui documentation master file, created by
+.. tatu_ui documentation master file, created by
    sphinx-quickstart on Tue Jul  9 22:26:36 2013.
    You can adapt this file completely to your liking, but it should at least
    contain the root `toctree` directive.
 
 ================================================
- Welcome to designatedashboard's documentation!
+ Welcome to tatudashboard's documentation!
 ================================================
 
 .. toctree::
diff --git a/doc/source/install/index.rst b/doc/source/install/index.rst
index af26cf0..afa489d 100644
--- a/doc/source/install/index.rst
+++ b/doc/source/install/index.rst
@@ -4,9 +4,9 @@ Installation
 
 At the command line::
 
-    $ pip install designate_dashboard
+    $ pip install tatu_dashboard
 
 Or, if you have virtualenvwrapper installed::
 
-    $ mkvirtualenv designate_dashboard
-    $ pip install designate_dashboard
\ No newline at end of file
+    $ mkvirtualenv tatu_dashboard
+    $ pip install tatu_dashboard
\ No newline at end of file
diff --git a/doc/source/user/index.rst b/doc/source/user/index.rst
index 8ca3de4..0ac6f3b 100644
--- a/doc/source/user/index.rst
+++ b/doc/source/user/index.rst
@@ -2,6 +2,6 @@
 Usage
 ========
 
-To use designate_dashboard in a project::
+To use tatu_dashboard in a project::
 
-	import designate_dashboard
\ No newline at end of file
+	import tatu_dashboard
\ No newline at end of file
diff --git a/karma.conf.js b/karma.conf.js
index f437037..1ffcaae 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -87,7 +87,7 @@ module.exports = function (config) {
        * Those files have extension of `.module.js`. The order among them is
        * not significant.
        */
-      './designatedashboard/static/**/*.module.js',
+      './tatudashboard/static/**/*.module.js',
 
       /**
        * Followed by other JavaScript files that defines angular providers
@@ -95,7 +95,7 @@ module.exports = function (config) {
        * files or spec files defined below. The order among them is not
        * significant.
        */
-      './designatedashboard/static/**/!(*.spec|*.mock).js',
+      './tatudashboard/static/**/!(*.spec|*.mock).js',
 
       /**
        * Then, list files for mocks with `mock.js` extension. The order
@@ -108,12 +108,12 @@ module.exports = function (config) {
        * Finally, list files for spec with `spec.js` extension. The order
        * among them should not be significant.
        */
-      './designatedashboard/static/**/*.spec.js',
+      './tatudashboard/static/**/*.spec.js',
 
       /**
        * Angular external templates
        */
-      './designatedashboard/static/**/*.html',
+      './tatudashboard/static/**/*.html',
 
     ],
 
diff --git a/manage.py b/manage.py
index 3cb4f27..0018453 100755
--- a/manage.py
+++ b/manage.py
@@ -18,6 +18,6 @@ import sys
 
 if __name__ == "__main__":
     os.environ.setdefault(
-        "DJANGO_SETTINGS_MODULE", "designatedashboard.settings")
+        "DJANGO_SETTINGS_MODULE", "tatudashboard.settings")
     from django.core.management import execute_from_command_line  # noqa
     execute_from_command_line(sys.argv)
diff --git a/openstack-common.conf b/openstack-common.conf
index 1d8dcca..5e3cb03 100644
--- a/openstack-common.conf
+++ b/openstack-common.conf
@@ -3,4 +3,4 @@
 # The list of modules to copy from oslo-incubator.git
 
 # The base module to hold the copy of openstack.common
-base=designatedashboard
+base=tatudashboard
diff --git a/package.json b/package.json
index 6ee7760..be6cd5d 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
   "version": "0.0.0",
   "private": true,
-  "name": "designate-dashboard",
-  "description": "Designate Dashboard",
+  "name": "tatu-dashboard",
+  "description": "Tatu Dashboard",
   "repository": "none",
   "license": "Apache 2.0",
   "devDependencies": {
@@ -17,8 +17,8 @@
   },
   "scripts": {
     "postinstall": "if [ ! -d .venv ]; then tox -epy27 --notest; fi",
-    "lint": "eslint --no-color designatedashboard/static",
-    "lintq": "eslint --quiet designatedashboard/static",
+    "lint": "eslint --no-color tatudashboard/static",
+    "lintq": "eslint --quiet tatudashboard/static",
     "test": "karma start karma.conf.js --single-run"
   },
   "dependencies": {}
diff --git a/releasenotes/source/conf.py b/releasenotes/source/conf.py
index fd620eb..5464837 100644
--- a/releasenotes/source/conf.py
+++ b/releasenotes/source/conf.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Designate dashboard Release Notes documentation build configuration file.
+# Tatu dashboard Release Notes documentation build configuration file.
 #
 # This file is execfile()d with the current directory set to its
 # containing dir.
@@ -31,8 +31,8 @@ extensions = [
 ]
 
 # openstackdocstheme options
-repository_name = 'openstack/designate-dashboard'
-bug_project = 'designate-dashboard'
+repository_name = 'openstack/tatu-dashboard'
+bug_project = 'tatu-dashboard'
 bug_tag = ''
 html_last_updated_fmt = '%Y-%m-%d %H:%M'
 html_theme = 'openstackdocs'
@@ -54,8 +54,8 @@ master_doc = 'index'
 
 # General information about the project.
 
-project = u'Designate dashboard Client Release Notes'
-copyright = u'2016, Designate dashboard developers'
+project = u'Tatu dashboard Client Release Notes'
+copyright = u'2016, Tatu dashboard developers'
 
 # Release notes are version independent
 # The short X.Y version.
@@ -189,7 +189,7 @@ html_static_path = ['_static']
 
 # Output file base name for HTML help builder.
 
-htmlhelp_basename = 'DesignatedashboardReleaseNotestdoc'
+htmlhelp_basename = 'TatudashboardReleaseNotestdoc'
 
 
 # -- Options for LaTeX output ---------------------------------------------
@@ -211,9 +211,9 @@ latex_elements = {
 # author, documentclass [howto, manual, or own class]).
 
 latex_documents = [
-    ('index', 'PythonDesignatedashboard.tex',
-     u'Designate dashboard Release Notes Documentation',
-     u'Designate dashboard developers', 'manual'),
+    ('index', 'PythonTatudashboard.tex',
+     u'Tatu dashboard Release Notes Documentation',
+     u'Tatu dashboard developers', 'manual'),
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
@@ -243,9 +243,9 @@ latex_documents = [
 # (source start file, name, description, authors, manual section).
 
 man_pages = [
-    ('index', 'designatedashboard',
-     u'Designate dashboard Release Notes Documentation',
-     [u'Designate dashboard developers'], 1)
+    ('index', 'tatudashboard',
+     u'Tatu dashboard Release Notes Documentation',
+     [u'Tatu dashboard developers'], 1)
 ]
 
 # If true, show URL addresses after external links.
@@ -259,9 +259,9 @@ man_pages = [
 # dir menu entry, description, category)
 
 texinfo_documents = [
-    ('index', 'Designate dashboard',
-     u'Designate dashboard Release Notes Documentation',
-     u'Designate dashboard developers', 'Designate dashboard',
+    ('index', 'Tatu dashboard',
+     u'Tatu dashboard Release Notes Documentation',
+     u'Tatu dashboard developers', 'Tatu dashboard',
      'One line description of project.', 'Miscellaneous'),
 ]
 
diff --git a/releasenotes/source/index.rst b/releasenotes/source/index.rst
index 5b98ad9..9ae55a0 100644
--- a/releasenotes/source/index.rst
+++ b/releasenotes/source/index.rst
@@ -1,4 +1,4 @@
-Welcome to Designate dashboard Agent Release Notes documentation!
+Welcome to Tatu dashboard Agent Release Notes documentation!
 =================================================================
 
 Contents
@@ -8,10 +8,8 @@ Contents
    :maxdepth: 2
 
    unreleased
+   queens
    pike
-   ocata
-   newton
-   mitaka
 
 Indices and tables
 ==================
diff --git a/releasenotes/source/locale/cs/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/cs/LC_MESSAGES/releasenotes.po
deleted file mode 100644
index 7144149..0000000
--- a/releasenotes/source/locale/cs/LC_MESSAGES/releasenotes.po
+++ /dev/null
@@ -1,45 +0,0 @@
-# Zbyněk Schwarz <zbynek.schwarz@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: Designate dashboard Client Release Notes\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-21 15:00+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-11-17 09:17+0000\n"
-"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n"
-"Language-Team: Czech\n"
-"Language: cs\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-
-msgid ":ref:`genindex`"
-msgstr ":ref:`genindex`"
-
-msgid ":ref:`search`"
-msgstr ":ref:`search`"
-
-msgid "Contents"
-msgstr "Obsah"
-
-msgid "Current Series Release Notes"
-msgstr "Poznámky k vydání současné verze"
-
-msgid "Indices and tables"
-msgstr "Rejstříky a tabulky"
-
-msgid "Mitaka Series Release Notes"
-msgstr "Poznámky k vydání verze Mitaka"
-
-msgid "Newton Series Release Notes"
-msgstr "Poznámky k vydání verze Newton"
-
-msgid "Ocata Series Release Notes"
-msgstr "Poznámky k vydání verze Ocata"
-
-msgid "Pike Series Release Notes"
-msgstr "Poznámky k vydání verze Pike"
-
-msgid "Welcome to Designate dashboard Agent Release Notes documentation!"
-msgstr "Vítejte v dokumentaci poznámek k vydání agenta nástěnky Designate!"
diff --git a/releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po
deleted file mode 100644
index cebef79..0000000
--- a/releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po
+++ /dev/null
@@ -1,46 +0,0 @@
-# Adriano Perri <adriano.perri@telekom.de>, 2017. #zanata
-# Frank Kloeker <eumel@arcor.de>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: Designate dashboard Client Release Notes 5.0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-08-24 13:30+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-08-25 12:08+0000\n"
-"Last-Translator: Adriano Perri <adriano.perri@telekom.de>\n"
-"Language-Team: German\n"
-"Language: de\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-msgid ":ref:`genindex`"
-msgstr ":ref:`genindex`"
-
-msgid ":ref:`search`"
-msgstr ":ref:`search`"
-
-msgid "Contents"
-msgstr "Inhalt"
-
-msgid "Current Series Release Notes"
-msgstr "Aktuelle Serie Releasenotes"
-
-msgid "Indices and tables"
-msgstr "Indizes und Tabellen"
-
-msgid "Mitaka Series Release Notes"
-msgstr "Mitaka Serie Releasenotes"
-
-msgid "Newton Series Release Notes"
-msgstr "Newton Serie Releasenotes"
-
-msgid "Ocata Series Release Notes"
-msgstr "Ocata Serie Releasenotes"
-
-msgid "Pike Series Release Notes"
-msgstr "Pike Serien Versionshinweise"
-
-msgid "Welcome to Designate dashboard Agent Release Notes documentation!"
-msgstr "Willkommen bei den Releasenotes für den Designate Dashboard Agent"
diff --git a/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
deleted file mode 100644
index e30bd4c..0000000
--- a/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
+++ /dev/null
@@ -1,45 +0,0 @@
-# Andi Chandler <andi@gowling.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: Designate dashboard Client Release Notes 5.0.1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-21 16:35+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-09-28 02:18+0000\n"
-"Last-Translator: Andi Chandler <andi@gowling.com>\n"
-"Language-Team: English (United Kingdom)\n"
-"Language: en-GB\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-msgid ":ref:`genindex`"
-msgstr ":ref:`genindex`"
-
-msgid ":ref:`search`"
-msgstr ":ref:`search`"
-
-msgid "Contents"
-msgstr "Contents"
-
-msgid "Current Series Release Notes"
-msgstr "Current Series Release Notes"
-
-msgid "Indices and tables"
-msgstr "Indices and tables"
-
-msgid "Mitaka Series Release Notes"
-msgstr "Mitaka Series Release Notes"
-
-msgid "Newton Series Release Notes"
-msgstr "Newton Series Release Notes"
-
-msgid "Ocata Series Release Notes"
-msgstr "Ocata Series Release Notes"
-
-msgid "Pike Series Release Notes"
-msgstr "Pike Series Release Notes"
-
-msgid "Welcome to Designate dashboard Agent Release Notes documentation!"
-msgstr "Welcome to Designate dashboard Agent Release Notes documentation!"
diff --git a/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po
deleted file mode 100644
index e732216..0000000
--- a/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po
+++ /dev/null
@@ -1,21 +0,0 @@
-# Gaelle <pattedeph@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: Designate dashboard Client Release Notes\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-21 15:00+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-11-14 07:50+0000\n"
-"Last-Translator: Gaelle <pattedeph@gmail.com>\n"
-"Language-Team: French\n"
-"Language: fr\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-
-msgid "Contents"
-msgstr "Contenus"
-
-msgid "Current Series Release Notes"
-msgstr "Notes sur la Release Actuelle"
diff --git a/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po
deleted file mode 100644
index fe7e7fc..0000000
--- a/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po
+++ /dev/null
@@ -1,45 +0,0 @@
-# suhartono <cloudsuhartono@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: Designate dashboard Client Release Notes 5.0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-08-23 14:30+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-08-23 02:39+0000\n"
-"Last-Translator: suhartono <cloudsuhartono@gmail.com>\n"
-"Language-Team: Indonesian\n"
-"Language: id\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-msgid ":ref:`genindex`"
-msgstr ":ref:`genindex`"
-
-msgid ":ref:`search`"
-msgstr ":ref:`search`"
-
-msgid "Contents"
-msgstr "Contents (Isi)"
-
-msgid "Current Series Release Notes"
-msgstr "Series Release Notes saat ini"
-
-msgid "Indices and tables"
-msgstr "Indices and tables (indeks dan tabel)"
-
-msgid "Mitaka Series Release Notes"
-msgstr "Mitaka Series Release Notes"
-
-msgid "Newton Series Release Notes"
-msgstr "Newton Series Release Notes"
-
-msgid "Ocata Series Release Notes"
-msgstr "Ocata Series Release Notes"
-
-msgid "Pike Series Release Notes"
-msgstr "Catatan Rilis Seri Pike"
-
-msgid "Welcome to Designate dashboard Agent Release Notes documentation!"
-msgstr "Selamat Datang di dokumentasi Designate dashboard Agent Release Notes!"
diff --git a/releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po
deleted file mode 100644
index f8e4e36..0000000
--- a/releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po
+++ /dev/null
@@ -1,47 +0,0 @@
-# Ian Y. Choi <ianyrchoi@gmail.com>, 2017. #zanata
-# Sungjin Kang <gang.sungjin@gmail.com>, 2017. #zanata
-# minwook-shin <minwook0106@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: Designate dashboard Client Release Notes 5.0.1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-20 03:15+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-09-20 05:25+0000\n"
-"Last-Translator: minwook-shin <minwook0106@gmail.com>\n"
-"Language-Team: Korean (South Korea)\n"
-"Language: ko-KR\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-msgid ":ref:`genindex`"
-msgstr ":ref:`genindex`"
-
-msgid ":ref:`search`"
-msgstr ":ref:`search`"
-
-msgid "Contents"
-msgstr "내용"
-
-msgid "Current Series Release Notes"
-msgstr "최신 시리즈에 대한 릴리즈 노트"
-
-msgid "Indices and tables"
-msgstr "인텍스 및 테이블"
-
-msgid "Mitaka Series Release Notes"
-msgstr "Mitaka 시리즈에 대한 릴리즈 노트"
-
-msgid "Newton Series Release Notes"
-msgstr "Newton 시리즈에 대한 릴리즈 노트"
-
-msgid "Ocata Series Release Notes"
-msgstr "Ocata 시리즈에 대한 릴리즈 노트"
-
-msgid "Pike Series Release Notes"
-msgstr "Pike 시리즈에 대한 릴리즈 노트"
-
-msgid "Welcome to Designate dashboard Agent Release Notes documentation!"
-msgstr "대시 보드 에이전트 릴리스 노트 문서에 오신 것을 환영합니다!"
diff --git a/releasenotes/source/locale/pt_BR/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/pt_BR/LC_MESSAGES/releasenotes.po
deleted file mode 100644
index 073a2e5..0000000
--- a/releasenotes/source/locale/pt_BR/LC_MESSAGES/releasenotes.po
+++ /dev/null
@@ -1,46 +0,0 @@
-# André Franciosi <andre@franciosi.org>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: Designate dashboard Client Release Notes 5.0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-08-22 13:02+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-08-22 10:43+0000\n"
-"Last-Translator: André Franciosi <andre@franciosi.org>\n"
-"Language-Team: Portuguese (Brazil)\n"
-"Language: pt-BR\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-msgid ":ref:`genindex`"
-msgstr ":ref:`genindex`"
-
-msgid ":ref:`search`"
-msgstr ":ref:`search`"
-
-msgid "Contents"
-msgstr "Conteúdo"
-
-msgid "Current Series Release Notes"
-msgstr "Atual - Série de Notas de Versão"
-
-msgid "Indices and tables"
-msgstr "Índices e tabelas"
-
-msgid "Mitaka Series Release Notes"
-msgstr "Mitaka - Série de Notas de Versão"
-
-msgid "Newton Series Release Notes"
-msgstr "Newton - Série de Notas de Versão"
-
-msgid "Ocata Series Release Notes"
-msgstr "Ocata - Série de Notas de Versão"
-
-msgid "Pike Series Release Notes"
-msgstr "Pike - Série de Notas de Versão"
-
-msgid "Welcome to Designate dashboard Agent Release Notes documentation!"
-msgstr ""
-"Bemvindo a documentação de Notas de Versão do Agente dashboard do Designate!"
diff --git a/releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po
deleted file mode 100644
index 2d3e798..0000000
--- a/releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po
+++ /dev/null
@@ -1,37 +0,0 @@
-# Fedor Tarasenko <feodor.tarasenko@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: Designate dashboard Client Release Notes 4.0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-02-03 00:10+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-02-03 08:41+0000\n"
-"Last-Translator: Fedor Tarasenko <feodor.tarasenko@gmail.com>\n"
-"Language-Team: Russian\n"
-"Language: ru\n"
-"X-Generator: Zanata 3.7.3\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-
-msgid ":ref:`genindex`"
-msgstr ":ref:`genindex`"
-
-msgid ":ref:`search`"
-msgstr ":ref:`search`"
-
-msgid "Contents"
-msgstr "Содержание"
-
-msgid "Current Series Release Notes"
-msgstr "Примечания к текущему релизу"
-
-msgid "Mitaka Series Release Notes"
-msgstr "Примечания к релизу Mitaka"
-
-msgid "Newton Series Release Notes"
-msgstr "Примечания к релизу Newton"
-
-msgid "Ocata Series Release Notes"
-msgstr "Примечания к релизу Ocata"
diff --git a/releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po
deleted file mode 100644
index 7ae05c7..0000000
--- a/releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po
+++ /dev/null
@@ -1,42 +0,0 @@
-# TigerFang <tigerfun@126.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: Designate dashboard Client Release Notes 5.0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-05-04 14:35+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-05-15 09:55+0000\n"
-"Last-Translator: TigerFang <tigerfun@126.com>\n"
-"Language-Team: Chinese (China)\n"
-"Language: zh-CN\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-msgid ":ref:`genindex`"
-msgstr ":ref:`genindex`"
-
-msgid ":ref:`search`"
-msgstr ":ref:`search`"
-
-msgid "Contents"
-msgstr "内容"
-
-msgid "Current Series Release Notes"
-msgstr "当前版本发布说明"
-
-msgid "Indices and tables"
-msgstr "索引和表格"
-
-msgid "Mitaka Series Release Notes"
-msgstr "Mitaka 版本发布说明"
-
-msgid "Newton Series Release Notes"
-msgstr "Newton版本发布说明"
-
-msgid "Ocata Series Release Notes"
-msgstr "Ocata版本发布说明"
-
-msgid "Welcome to Designate dashboard Agent Release Notes documentation!"
-msgstr "欢迎使用Designate控制台代理发布说明文档!"
diff --git a/releasenotes/source/mitaka.rst b/releasenotes/source/mitaka.rst
deleted file mode 100644
index 97ab8d1..0000000
--- a/releasenotes/source/mitaka.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-============================
- Mitaka Series Release Notes
-============================
-
-.. release-notes::
-   :branch: origin/stable/mitaka
diff --git a/releasenotes/source/newton.rst b/releasenotes/source/newton.rst
deleted file mode 100644
index be21859..0000000
--- a/releasenotes/source/newton.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-============================
- Newton Series Release Notes
-============================
-
-.. release-notes::
-   :branch: origin/stable/newton
diff --git a/releasenotes/source/ocata.rst b/releasenotes/source/queens.rst
similarity index 60%
rename from releasenotes/source/ocata.rst
rename to releasenotes/source/queens.rst
index ebe62f4..36ac616 100644
--- a/releasenotes/source/ocata.rst
+++ b/releasenotes/source/queens.rst
@@ -1,6 +1,6 @@
 ===================================
- Ocata Series Release Notes
+ Queens Series Release Notes
 ===================================
 
 .. release-notes::
-   :branch: origin/stable/ocata
+   :branch: stable/queens
diff --git a/requirements.txt b/requirements.txt
index e7b376a..2f0f69b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,4 +4,4 @@
 oslo.log>=3.30.0 # Apache-2.0
 pbr!=2.1.0,>=2.0.0 # Apache-2.0
 Babel!=2.4.0,>=2.3.4 # BSD
-python-designateclient>=2.7.0 # Apache-2.0
+keystoneauth
\ No newline at end of file
diff --git a/setup.cfg b/setup.cfg
index 0a48004..89b9c90 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,11 +1,11 @@
 [metadata]
-name = designate-dashboard
-summary = Designate Horizon UI bits
+name = tatu-dashboard
+summary = Tatu Horizon UI bits
 description-file =
     README.rst
 author = OpenStack
 author-email = openstack-dev@lists.openstack.org
-home-page = http://docs.openstack.org/developer/designate-dashboard/
+home-page = http://docs.openstack.org/developer/tatu-dashboard/
 classifier =
     Environment :: OpenStack
     Intended Audience :: Information Technology
@@ -20,7 +20,7 @@ classifier =
 
 [files]
 packages =
-    designatedashboard
+    tatudashboard
 
 [build_sphinx]
 source-dir = doc/source
@@ -32,15 +32,15 @@ warning-is-error = 1
 upload-dir = doc/build/html
 
 [compile_catalog]
-directory = designatedashboard/locale
+directory = tatudashboard/locale
 domain = django
 
 [update_catalog]
 domain = django
-output_dir = designatedashboard/locale
-input_file = designatedashboard/locale/django.pot
+output_dir = tatudashboard/locale
+input_file = tatudashboard/locale/django.pot
 
 [extract_messages]
 keywords = _ gettext ngettext l_ lazy_gettext
 mapping_file = babel-django.cfg
-output_file = designatedashboard/locale/django.pot
+output_file = tatudashboard/locale/django.pot
diff --git a/tatudashboard/__init__.py b/tatudashboard/__init__.py
index a415499..01ba61d 100644
--- a/tatudashboard/__init__.py
+++ b/tatudashboard/__init__.py
@@ -16,4 +16,4 @@ import pbr.version
 
 
 __version__ = pbr.version.VersionInfo(
-    'designate-dashboard').version_string()
+    'tatu-dashboard').version_string()
diff --git a/tatudashboard/api/__init__.py b/tatudashboard/api/__init__.py
index 97ba638..e334e49 100644
--- a/tatudashboard/api/__init__.py
+++ b/tatudashboard/api/__init__.py
@@ -1 +1 @@
-from designatedashboard.api import designate  # noqa
+from tatudashboard.api import tatu  # noqa
diff --git a/tatudashboard/api/rest/passthrough.py b/tatudashboard/api/rest/passthrough.py
index 00e1228..2cd5632 100644
--- a/tatudashboard/api/rest/passthrough.py
+++ b/tatudashboard/api/rest/passthrough.py
@@ -40,7 +40,7 @@ def _passthrough_request(request_method, url,
     if getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False):
         verify = False
 
-    service_url = _get_service_url(request, 'dns')
+    service_url = _get_service_url(request, 'ssh')
     request_url = '{}{}'.format(
         service_url,
         url if service_url.endswith('/') else ('/' + url)
@@ -93,7 +93,7 @@ class Passthrough(generic.View):
 
        Horizon only adds auth and CORS proxying.
     """
-    url_regex = r'dns/(?P<path>.+)$'
+    url_regex = r'ssh/(?P<path>.+)$'
 
     @rest_utils.ajax()
     def get(self, request, path):
diff --git a/tatudashboard/api/designate.py b/tatudashboard/api/tatu.py
similarity index 96%
rename from tatudashboard/api/designate.py
rename to tatudashboard/api/tatu.py
index 6095410..aa90126 100644
--- a/tatudashboard/api/designate.py
+++ b/tatudashboard/api/tatu.py
@@ -14,9 +14,9 @@
 
 from __future__ import absolute_import
 
-from designateclient.v1 import Client  # noqa
-from designateclient.v1.domains import Domain  # noqa
-from designateclient.v1.records import Record  # noqa
+from keystoneauth1 import session as keystone_session
+from keystoneauth1.identity import v3
+
 from django.conf import settings  # noqa
 
 from horizon import exceptions
diff --git a/tatudashboard/dashboards/project/dns_domains/forms.py b/tatudashboard/dashboards/project/dns_domains/forms.py
deleted file mode 100644
index 852c2d9..0000000
--- a/tatudashboard/dashboards/project/dns_domains/forms.py
+++ /dev/null
@@ -1,549 +0,0 @@
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-#
-# 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.
-import functools
-import re
-import six
-
-from designateclient import exceptions as designate_exceptions
-from django.core.exceptions import ValidationError  # noqa
-from django.core import validators
-from django.template.loader import render_to_string
-from django.utils.translation import ugettext_lazy as _  # noqa
-
-from horizon import forms
-from horizon import messages
-
-from designatedashboard import api
-from designatedashboard.dashboards.project.dns_domains.utils\
-    import limit_records_to_fips
-from oslo_log import log as logging
-
-
-LOG = logging.getLogger(__name__)
-
-MAX_TTL = 2147483647
-# These regexes were given to me by Kiall Mac Innes here:
-# https://gerrit.hpcloud.net/#/c/25300/2/
-DOMAIN_NAME_REGEX = r'^(?!.{255,})(?:(?!\-)[A-Za-z0-9_\-]{1,63}(?<!\-)\.)+$'
-WILDCARD_DOMAIN_NAME_REGEX = r'^(?!.{255,})(?:(^\*|(?!\-)[A-Za-z0-9_\-]{1,63})(?<!\-)\.)+$'  # noqa
-SRV_NAME_REGEX = r'^(?:_[A-Za-z0-9_\-]{1,62}\.){2}'
-SRV_DATA_REGEX = r'^(?:(?:6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])\s){2}(?!.{255,})((?!\-)[A-Za-z0-9_\-]{1,63}(?<!\-)\.)+$'  # noqa
-SSHFP_DATA_REGEX = r'^[1-4]\s[1-2]\s\b([0-9a-fA-F]{5,40}|[0-9a-fA-F]{64})\b$'
-# The max length for a dns label
-NAME_MAX_LENGTH = 63
-
-
-def handle_exc(func):
-    @functools.wraps(func)
-    def wrapped(form, request, *args, **kwargs):
-        try:
-            return func(form, request, *args, **kwargs)
-        except designate_exceptions.RemoteError as ex:
-            msg = ""
-            data = {}
-
-            if six.text_type(ex) is not None:
-                data['message'] = six.text_type(ex)
-                msg += "Error: %(message)s"
-            else:
-                data["type"] = ex.type
-                msg += "Error Type: %(type)s"
-
-            if ex.code >= 500:
-                msg += " (Request ID: %(request_id)s"
-                data["request_id"] = ex.request_id
-
-            form.api_error(_(msg) % data)  # noqa
-
-            return False
-        except Exception:
-            messages.error(request, form.exc_message)
-            return True
-
-    return wrapped
-
-
-class DomainForm(forms.SelfHandlingForm):
-
-    '''Base class for DomainCreate and DomainUpdate forms.
-
-    Sets-up all of the common form fields.
-    '''
-
-    name = forms.RegexField(
-        label=_("Domain Name"),
-        regex=DOMAIN_NAME_REGEX,
-        error_messages={'invalid': _('Enter a valid domain name.')},
-    )
-
-    email = forms.EmailField(
-        label=_("Email"),
-        max_length=255,
-    )
-
-    ttl = forms.IntegerField(
-        label=_("TTL (seconds)"),
-        min_value=1,
-        max_value=MAX_TTL,
-        required=False,
-    )
-
-    description = forms.CharField(
-        label=_("Description"),
-        required=False,
-        max_length=160,
-        widget=forms.Textarea(),
-    )
-
-
-class DomainCreate(DomainForm):
-
-    '''Form for creating new domain records.
-
-    Name and email address are
-    required.
-    '''
-    exc_message = _("Unable to create domain.")
-
-    @handle_exc
-    def handle(self, request, data):
-        domain = api.designate.domain_create(
-            request,
-            name=data['name'],
-            email=data['email'],
-            ttl=data['ttl'],
-            description=data['description'])
-        messages.success(request,
-                         _('Domain %(name)s created.') %
-                         {"name": domain.name})
-        return domain
-
-
-class DomainUpdate(DomainForm):
-
-    '''Form for displaying domain record details and updating them.'''
-    exc_message = _('Unable to update domain.')
-
-    id = forms.CharField(
-        required=False,
-        widget=forms.HiddenInput()
-    )
-
-    serial = forms.CharField(
-        label=_("Serial"),
-        required=False,
-        widget=forms.TextInput(attrs={'readonly': 'readonly'}),
-    )
-
-    created_at = forms.CharField(
-        label=_("Created At"),
-        required=False,
-        widget=forms.TextInput(attrs={'readonly': 'readonly'}),
-    )
-
-    updated_at = forms.CharField(
-        label=_("Updated At"),
-        required=False,
-        widget=forms.TextInput(attrs={'readonly': 'readonly'}),
-    )
-
-    def __init__(self, request, *args, **kwargs):
-        super(DomainUpdate, self).__init__(request, *args, **kwargs)
-
-        # Mark name as read-only
-        self.fields['name'].required = False
-        self.fields['name'].widget.attrs['readonly'] = 'readonly'
-
-        self.fields['ttl'].required = True
-
-        # Customize display order for fields
-        self.fields.keyOrder = [
-            'id',
-            'name',
-            'serial',
-            'email',
-            'ttl',
-            'description',
-            'created_at',
-            'updated_at',
-        ]
-
-    @handle_exc
-    def handle(self, request, data):
-        domain = api.designate.domain_update(
-            request,
-            domain_id=data['id'],
-            email=data['email'],
-            ttl=data['ttl'],
-            description=data['description'])
-        messages.success(request,
-                         _('Domain %(name)s updated.') %
-                         {"name": domain.name})
-        return domain
-
-
-class PrefixWidget(forms.TextInput):
-
-    def render(self, name, value, attrs=None):
-        template_name = 'project/dns_domains/prefix_html_widget.html'
-        result = super(PrefixWidget, self).render(name, value, attrs)
-        view_data = {'input': result,
-                     'suffix': getattr(self, "suffix", '')}
-        return render_to_string(template_name, view_data)
-
-
-class RecordForm(forms.SelfHandlingForm):
-
-    '''Base class for RecordCreate and RecordUpdate forms.
-
-    Sets-up all of
-    the form fields and implements the complex validation logic.
-    '''
-
-    domain_id = forms.CharField(
-        widget=forms.HiddenInput())
-
-    domain_name = forms.CharField(
-        widget=forms.HiddenInput())
-
-    type = forms.ChoiceField(
-        label=_("Record Type"),
-        required=False,
-        choices=[
-            ('a', _('A - Address record')),
-            ('aaaa', _('AAAA - IPv6 address record')),
-            ('cname', _('CNAME - Canonical name record')),
-            ('mx', _('MX - Mail exchange record')),
-            ('ptr', _('PTR - Pointer record')),
-            ('spf', _('SPF - Sender Policy Framework')),
-            ('srv', _('SRV - Service locator')),
-            ('sshfp', _('SSHFP - SSH Public Key Fingerprint')),
-            ('txt', _('TXT - Text record')),
-        ],
-        widget=forms.Select(attrs={
-            'class': 'switchable',
-            'data-slug': 'record_type',
-        }),
-    )
-
-    name = forms.CharField(
-        required=False,
-        widget=PrefixWidget(attrs={
-            'class': 'switched',
-            'data-switch-on': 'record_type',
-            'data-record_type-a': _('Name'),
-            'data-record_type-aaaa': _('Name'),
-            'data-record_type-cname': _('Name'),
-            'data-record_type-mx': _('Name'),
-            'data-record_type-ns': _('Name'),
-            'data-record_type-ptr': _('Name'),
-            'data-record_type-soa': _('Name'),
-            'data-record_type-spf': _('Name'),
-            'data-record_type-srv': _('Name'),
-            'data-record_type-sshfp': _('Name'),
-            'data-record_type-txt': _('Name'),
-        }),
-    )
-
-    data = forms.CharField(
-        required=False,
-        widget=forms.TextInput(attrs={
-            'class': 'switched',
-            'data-switch-on': 'record_type',
-            'data-record_type-a': _('IP Address'),
-            'data-record_type-aaaa': _('IP Address'),
-            'data-record_type-cname': _('Canonical Name'),
-            'data-record_type-ns': _('Name Server'),
-            'data-record_type-mx': _('Mail Server'),
-            'data-record_type-ptr': _('PTR Domain Name'),
-            'data-record_type-soa': _('Value'),
-            'data-record_type-srv': _('Value'),
-        }),
-    )
-
-    ip_addr = forms.ChoiceField(
-        required=False,
-        widget=forms.Select(attrs={
-            'class': 'switched',
-            'data-switch-on': 'record_type',
-            'data-record_type-a': _('IP Address'),
-            'data-record_type-aaaa': _('IP Address'),
-        }),
-    )
-
-    txt = forms.CharField(
-        label=_('TXT'),
-        required=False,
-        widget=forms.Textarea(attrs={
-            'class': 'switched',
-            'data-switch-on': 'record_type',
-            'data-record_type-txt': _('Text'),
-            'data-record_type-spf': _('Text'),
-            'data-record_type-sshfp': _('Text'),
-        }),
-    )
-
-    priority = forms.IntegerField(
-        min_value=0,
-        max_value=65535,
-        required=False,
-        widget=forms.TextInput(attrs={
-            'class': 'switched',
-            'data-switch-on': 'record_type',
-            'data-record_type-mx': _('Priority'),
-            'data-record_type-srv': _('Priority'),
-        }),
-    )
-
-    ttl = forms.IntegerField(
-        label=_('TTL'),
-        min_value=1,
-        max_value=MAX_TTL,
-        required=False,
-        widget=forms.TextInput(attrs={
-            'class': 'switched',
-            'data-switch-on': 'record_type',
-            'data-record_type-a': _('TTL'),
-            'data-record_type-aaaa': _('TTL'),
-            'data-record_type-cname': _('TTL'),
-            'data-record_type-mx': _('TTL'),
-            'data-record_type-ptr': _('TTL'),
-            'data-record_type-soa': _('TTL'),
-            'data-record_type-spf': _('TTL'),
-            'data-record_type-srv': _('TTL'),
-            'data-record_type-sshfp': _('TTL'),
-            'data-record_type-txt': _('TTL'),
-        }),
-    )
-
-    description = forms.CharField(
-        label=_("Description"),
-        required=False,
-        max_length=160,
-        widget=forms.Textarea(),
-    )
-
-    def __init__(self, request, *args, **kwargs):
-        super(RecordForm, self).__init__(request, *args, **kwargs)
-        initial = kwargs.get('initial', {})
-        domain_suffix = "." + initial['domain_name']
-        self.fields['name'].widget.suffix = domain_suffix
-        self.fields['name'].max_length = min(NAME_MAX_LENGTH,
-                                             255 - len(domain_suffix))
-        if limit_records_to_fips():
-            del self.fields['data'].widget.attrs['data-record_type-a']
-            del self.fields['data'].widget.attrs['data-record_type-aaaa']
-            self.fields['ip_addr'].choices = \
-                self.populate_ip_addr_choices(request,
-                                              initial)
-        else:
-            del self.fields['ip_addr']
-
-    def _generate_fip_list(self, fips, instances):
-        instance_dict = {instance.id: instance for instance in instances}
-        for fip in fips:
-            instance_name = _("Unknown instance name")
-            if getattr(fip, "instance_id", "None") in instance_dict:
-                instance_name = instance_dict[getattr(fip, "instance_id")].name
-            yield (fip.ip, "%s (%s)" % (fip.ip, instance_name))
-
-    def populate_ip_addr_choices(self, request, initial):
-        results = [(None, _('Select an IP')), ]
-        if (initial.get('ip_addr') and
-                initial['ip_addr'] not in [fip.ip for fip in initial['fips']]):
-            """The record is currently using an ip not in the list
-            of fips - this can happen when instance goes away or in
-            multi region setups
-            """
-            results.append((initial['ip_addr'], initial['ip_addr']))
-        results.extend(self._generate_fip_list(initial['fips'],
-                                               initial['instances']))
-        if len(results) == 1:
-            messages.warning(request, _("There are no floating IP addresses "
-                                        "currently in use to select from."))
-        return results
-
-    def clean_type(self):
-        '''Type value needs to be uppercased before it is sent to the API.'''
-        return self.cleaned_data['type'].upper()
-
-    def clean(self):
-        '''Handles the validation logic for the domain record form.
-
-        Validation gets pretty complicated due to the fact that the different
-        record types (A, AAAA, MX, etc) have different requirements for
-        each of the fields.
-        '''
-
-        cleaned_data = super(RecordForm, self).clean()
-        record_type = cleaned_data['type']
-        domain_name = cleaned_data['domain_name']
-        if limit_records_to_fips():
-            ip_addr = cleaned_data.pop('ip_addr')
-            if (record_type in ['AAAA', 'A'] and limit_records_to_fips()):
-                cleaned_data['data'] = ip_addr
-
-        #  Name field
-        if self._is_field_blank(cleaned_data, 'name'):
-            if record_type in ['CNAME', 'SRV']:
-                self._add_required_field_error('name')
-            elif record_type in ['MX', 'A', 'AAAA', 'TXT', 'PTR']:
-                cleaned_data['name'] = domain_name
-        else:
-            if record_type == 'SRV':
-                if not re.match(SRV_NAME_REGEX, cleaned_data['name']):
-                    self._add_field_error('name', _('Enter a valid SRV name'))
-                else:
-                    cleaned_data['name'] += domain_name
-            else:
-                cleaned_data['name'] += "." + domain_name
-                if not re.match(WILDCARD_DOMAIN_NAME_REGEX,
-                                cleaned_data['name']):
-                    self._add_field_error('name',
-                                          _('Enter a valid hostname. The '
-                                            'hostname should contain letters '
-                                            'and numbers, and be no more than '
-                                            '63 characters.'))
-        # Data field
-        if self._is_field_blank(cleaned_data, 'data'):
-            if record_type in ['A', 'AAAA', 'CNAME', 'MX', 'SRV']:
-                self._add_required_field_error('data')
-        else:
-            if record_type == 'A':
-                try:
-                    validators.validate_ipv4_address(cleaned_data['data'])
-                except ValidationError:
-                    self._add_field_error('data',
-                                          _('Enter a valid IPv4 address'))
-
-            elif record_type == 'AAAA':
-                try:
-                    validators.validate_ipv6_address(cleaned_data['data'])
-                except ValidationError:
-                    self._add_field_error('data',
-                                          _('Enter a valid IPv6 address'))
-
-            elif record_type in ['CNAME', 'MX', 'PTR']:
-                if not re.match(DOMAIN_NAME_REGEX, cleaned_data['data']):
-                    self._add_field_error('data', _('Enter a valid hostname'))
-
-            elif record_type == 'SRV':
-                if not re.match(SRV_DATA_REGEX, cleaned_data['data']):
-                    self._add_field_error('data',
-                                          _('Enter a valid SRV record'))
-
-        # Txt field
-        if self._is_field_blank(cleaned_data, 'txt'):
-            if record_type == 'TXT':
-                self._add_required_field_error('txt')
-        else:
-            if record_type == 'TXT':
-                cleaned_data['data'] = cleaned_data['txt']
-
-        if record_type == 'SSHFP':
-            if not re.match(SSHFP_DATA_REGEX, cleaned_data['txt']):
-                self._add_field_error('txt',
-                                      _('Enter a valid SSHFP record'))
-            cleaned_data['data'] = cleaned_data['txt']
-
-        cleaned_data.pop('txt')
-
-        # Priority field
-        # Check against '' instead of using _is_field_blank because we need to
-        # allow a valud of 0.
-        if ('priority' not in cleaned_data or
-                cleaned_data['priority'] == '' or
-                cleaned_data['priority'] is None):
-            if record_type in ['MX', 'SRV']:
-                self._add_required_field_error('priority')
-
-        # Rename 'id' to 'record_id'
-        if 'id' in cleaned_data:
-            cleaned_data['record_id'] = cleaned_data.pop('id')
-
-        # Remove domain_name
-        cleaned_data.pop('domain_name')
-
-        return cleaned_data
-
-    def _add_required_field_error(self, field):
-        '''Set a required field error on the specified field.'''
-        self._add_field_error(field, _('This field is required'))
-
-    def _add_field_error(self, field, msg):
-        '''Set the specified msg as an error on the field.'''
-        self._errors[field] = self.error_class([msg])
-
-    def _is_field_blank(self, cleaned_data, field):
-        '''Returns a flag indicating whether the specified field is blank.'''
-        return field in cleaned_data and not cleaned_data[field]
-
-
-class RecordCreate(RecordForm):
-
-    '''Form for creating a new domain record.'''
-    exc_message = _('Unable to create record.')
-
-    @handle_exc
-    def handle(self, request, data):
-        record = api.designate.record_create(request, **data)
-        messages.success(request,
-                         _('Domain record %(name)s created.') %
-                         {"name": record.name})
-        return record
-
-
-class RecordUpdate(RecordForm):
-
-    '''Form for editing a domain record.'''
-    exc_message = _('Unable to create record.')
-
-    id = forms.CharField(widget=forms.HiddenInput())
-
-    def __init__(self, request, *args, **kwargs):
-        super(RecordUpdate, self).__init__(request, *args, **kwargs)
-
-        # Force the type field to be read-only
-        self.fields['type'].widget.attrs['readonly'] = 'readonly'
-
-        if self['type'].value() in ('soa', 'ns'):
-            self.fields['type'].choices.append(('ns', _('NS')))
-            self.fields['type'].choices.append(('soa', _('SOA')))
-
-            self.fields['name'].widget.attrs['readonly'] = 'readonly'
-            self.fields['data'].widget.attrs['readonly'] = 'readonly'
-            self.fields['description'].widget.attrs['readonly'] = 'readonly'
-            self.fields['ttl'].widget.attrs['readonly'] = 'readonly'
-
-        # Filter the choice list so that it only contains the type for
-        # the current record. Ideally, we would just disable the select
-        # field, but that has the unfortunate side-effect of breaking
-        # the 'selectable' javascript code.
-        self.fields['type'].choices = (
-            [choice for choice in self.fields['type'].choices
-             if choice[0] == self.initial['type']])
-
-    @handle_exc
-    def handle(self, request, data):
-
-        if data['type'] in ('SOA', 'NS'):
-            return True
-
-        record = api.designate.record_update(request, **data)
-
-        messages.success(request,
-                         _('Domain record %(name)s updated.') %
-                         {"name": record.name})
-
-        return record
diff --git a/tatudashboard/dashboards/project/dns_domains/panel.py b/tatudashboard/dashboards/project/dns_domains/panel.py
deleted file mode 100644
index a7df87f..0000000
--- a/tatudashboard/dashboards/project/dns_domains/panel.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-#
-# 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.utils.translation import ugettext_lazy as _  # noqa
-
-import horizon
-from openstack_dashboard.dashboards.project import dashboard
-
-
-class DNSDomains(horizon.Panel):
-    name = _("Domains")
-    slug = 'dns_domains'
-    permissions = ('openstack.services.dns',)
-
-
-dashboard.Project.register(DNSDomains)
diff --git a/tatudashboard/dashboards/project/dns_domains/tables.py b/tatudashboard/dashboards/project/dns_domains/tables.py
deleted file mode 100644
index 07b4f8e..0000000
--- a/tatudashboard/dashboards/project/dns_domains/tables.py
+++ /dev/null
@@ -1,224 +0,0 @@
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-#
-# 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.core import urlresolvers
-from django.utils.translation import ugettext_lazy as _  # noqa
-
-from horizon import messages
-from horizon import tables
-from horizon.utils import memoized
-
-from designatedashboard import api
-
-from openstack_dashboard import policy
-from oslo_log import log as logging
-
-LOG = logging.getLogger(__name__)
-
-EDITABLE_RECORD_TYPES = (
-    "A",
-    "AAAA",
-    "CNAME",
-    "MX",
-    "PTR",
-    "SPF",
-    "SRV",
-    "SSHFP",
-    "TXT",
-)
-
-
-class CreateDomain(tables.LinkAction):
-
-    '''Link action for navigating to the CreateDomain view.'''
-    name = "create_domain"
-    verbose_name = _("Create Domain")
-    url = "horizon:project:dns_domains:create_domain"
-    classes = ("ajax-modal", "btn-create")
-    policy_rules = (("dns", "create_domain"),)
-
-    @memoized.memoized_method
-    def allowed(self, request, datum):
-        if policy.check((("dns", "get_quota"),), request):
-            try:
-                if self.table:
-                    quota = api.designate.quota_get(request)
-                    return quota['domains'] > len(self.table.data)
-            except Exception:
-                msg = _("The quotas could not be retrieved.")
-                messages.warning(request, msg)
-        return True
-
-
-class EditDomain(tables.LinkAction):
-
-    '''Link action for navigating to the UpdateDomain view.'''
-    name = "edit_domain"
-    verbose_name = _("Edit Domain")
-    url = "horizon:project:dns_domains:update_domain"
-    classes = ("ajax-modal", "btn-edit")
-    policy_rules = (("dns", "update_domain"),)
-
-
-class ManageRecords(tables.LinkAction):
-
-    '''Link action for navigating to the ManageRecords view.'''
-    name = "manage_records"
-    verbose_name = _("Manage Records")
-    url = "horizon:project:dns_domains:records"
-    classes = ("btn-edit")
-    policy_rules = (("dns", "get_records"),)
-
-
-class DeleteDomain(tables.BatchAction):
-
-    '''Batch action for deleting domains.'''
-    name = "delete"
-    action_present = _("Delete")
-    action_past = _("Deleted")
-    data_type_singular = _("Domain")
-    data_type_plural = _("Domains")
-    classes = ('btn-danger', 'btn-delete')
-    policy_rules = (("dns", "delete_domain"),)
-
-    def action(self, request, domain_id):
-        api.designate.domain_delete(request, domain_id)
-
-
-class CreateRecord(tables.LinkAction):
-
-    '''Link action for navigating to the CreateRecord view.'''
-    name = "create_record"
-    verbose_name = _("Create Record")
-    classes = ("ajax-modal", "btn-create")
-    policy_rules = (("dns", "create_record"),)
-
-    def get_link_url(self, datum=None):
-        url = "horizon:project:dns_domains:create_record"
-        return urlresolvers.reverse(url, kwargs=self.table.kwargs)
-
-
-class EditRecord(tables.LinkAction):
-
-    '''Link action for navigating to the UpdateRecord view.'''
-    name = "edit_record"
-    verbose_name = _("Edit Record")
-    classes = ("ajax-modal", "btn-edit")
-    policy_rules = (("dns", "update_record"),)
-
-    def get_link_url(self, datum=None):
-        url = "horizon:project:dns_domains:update_record"
-        kwargs = {
-            'domain_id': datum.domain_id,
-            'record_id': datum.id,
-        }
-
-        return urlresolvers.reverse(url, kwargs=kwargs)
-
-    def allowed(self, request, record=None):
-        return record.type in EDITABLE_RECORD_TYPES
-
-
-class DeleteRecord(tables.DeleteAction):
-
-    '''Link action for navigating to the UpdateRecord view.'''
-    data_type_singular = _("Record")
-    policy_rules = (("dns", "delete_record"),)
-
-    def delete(self, request, record_id):
-        domain_id = self.table.kwargs['domain_id']
-        return api.designate.record_delete(request, domain_id, record_id)
-
-    def allowed(self, request, record=None):
-        return record.type in EDITABLE_RECORD_TYPES
-
-
-class BatchDeleteRecord(tables.BatchAction):
-
-    '''Batch action for deleting domain records.'''
-
-    name = "delete"
-    action_present = _("Delete")
-    action_past = _("Deleted")
-    data_type_singular = _("Record")
-    classes = ('btn-danger', 'btn-delete')
-    policy_rules = (("dns", "delete_record"),)
-
-    def action(self, request, record_id):
-        domain_id = self.table.kwargs['domain_id']
-        api.designate.record_delete(request, domain_id, record_id)
-
-
-class DomainsTable(tables.DataTable):
-
-    '''Data table for displaying domain summary information.'''
-
-    name = tables.Column("name",
-                         verbose_name=_("Name"),
-                         link=("horizon:project:dns_domains:domain_detail"))
-
-    email = tables.Column("email",
-                          verbose_name=_("Email"))
-
-    ttl = tables.Column("ttl",
-                        verbose_name=_("TTL"))
-
-    serial = tables.Column("serial",
-                           verbose_name=_("Serial"))
-
-    class Meta(object):
-        name = "domains"
-        verbose_name = _("Domains")
-        table_actions = (CreateDomain, DeleteDomain,)
-        row_actions = (ManageRecords, EditDomain, DeleteDomain,)
-
-
-def record__details_link(record):
-    '''Returns a link to the view for updating DNS records.'''
-
-    return urlresolvers.reverse(
-        "horizon:project:dns_domains:view_record",
-        args=(record.domain_id, record.id))
-
-
-class RecordsTable(tables.DataTable):
-
-    '''Data table for displaying summary information for a domains records.'''
-
-    name = tables.Column("name",
-                         verbose_name=_("Name"),
-                         link=record__details_link,
-                         )
-
-    type = tables.Column("type",
-                         verbose_name=_("Type")
-                         )
-
-    data = tables.Column("data",
-                         verbose_name=_("Data")
-                         )
-
-    priority = tables.Column("priority",
-                             verbose_name=_("Priority"),
-                             )
-
-    ttl = tables.Column("ttl",
-                        verbose_name=_("TTL")
-                        )
-
-    class Meta(object):
-        name = "records"
-        verbose_name = _("Records")
-        table_actions = (CreateRecord,)
-        row_actions = (EditRecord, DeleteRecord,)
-        multi_select = False
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_create_domain.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_create_domain.html
deleted file mode 100644
index 3aa22ca..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_create_domain.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{% extends "horizon/common/_modal_form.html" %}
-{% load i18n horizon humanize %}
-
-{% block form_id %}{% endblock %}
-{% block form_action %}{% url 'horizon:project:dns_domains:create_domain' %}{% endblock %}
-
-{% block modal_id %}create_domain_modal{% endblock %}
-{% block modal-header %}{% trans "Create Domain" %}{% endblock %}
-
-{% block modal-body %}
-  <div class="left">
-    <fieldset>
-      {% include "horizon/common/_form_fields.html" %}
-    </fieldset>
-  </div>
-
-  <div class="right quota-dynamic">
-    <h3>{% trans "Description" %}:</h3>
-    <p>{% blocktrans %}
-      The Name field should contain a full-qualified domain name (with
-      trailing period).
-    {% endblocktrans %}</p>
-    <p>{% blocktrans %}
-      The Email field should contain a valid email address to be associated
-      with the domain.
-    {% endblocktrans %}</p>
-    <p>{% blocktrans %}
-      The optional TTL field can be any value between 1 and 2147483647
-      seconds.
-    {% endblocktrans %}</p>
-  </div>
-
-{% endblock %}
-
-{% block modal-footer %}
-  <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Domain" %}" />
-  <a href="{% url 'horizon:project:dns_domains:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a>
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_create_record.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_create_record.html
deleted file mode 100644
index 197443b..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_create_record.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{% extends "horizon/common/_modal_form.html" %}
-{% load i18n horizon humanize %}
-
-{% block form_id %}{% endblock %}
-{% block form_action %}{% url 'horizon:project:dns_domains:create_record' domain.id %}{% endblock %}
-
-{% block modal_id %}create_record_modal{% endblock %}
-{% block modal-header %}{% trans "Create Record for" %} {{ domain.name }}{% endblock %}
-
-{% block modal-body %}
-
-   <div id="scoped-content">
-   {% include 'project/dns_domains/prefix_field_style.html' %}
-     <fieldset>
-     {% include "horizon/common/_form_fields.html" %}
-     </fieldset>
-   </div>
-
-  {% blocktrans %}
-  <p>
-    <strong>TTL</strong>
-    The TTL is the time-to-live for the record, in seconds.
-  </p>
-  <p>
-    See <a href="http://en.wikipedia.org/wiki/List_of_DNS_record_types" target="_designate_record_defs">more info</a> on record types.
-  </p>
-  {% endblocktrans %}
-  <script type="text/javascript">
-    // Empty hidden form fields when the record type is switched
-    // https://bugs.launchpad.net/designate/+bug/1525199
-    $("select#id_type.form-control.switchable").eq(0).change(function() {
-      $(this).closest('fieldset')
-        .find("input[type=text], textarea").filter(":hidden")
-        .val("");
-    })
-  </script>
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_domain_detail.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_domain_detail.html
deleted file mode 100644
index 2643938..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_domain_detail.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{% load i18n sizeformat %}
-
-<h3>{% trans "Domain Overview" %}</h3>
-
-<div class="info detail">
-  <dl class="dl-horizontal">
-    <dt>{% trans "ID" %}</dt>
-    <dd>{{ domain.id|default:_("None") }}</dd>
-    <dt>{% trans "Name" %}</dt>
-    <dd>{{ domain.name|default:_("None") }}</dd>
-    <dt>{% trans "Description" %}</dt>
-    <dd>{{ domain.description|default:_("None") }}</dd>
-    <dt>{% trans "Serial" %}</dt>
-    <dd>{{ domain.serial|yesno|capfirst }}</dd>
-    <dt>{% trans "Email" %}</dt>
-    <dd>{{ domain.email|default:_("Unknown") }}</dd>
-    <dt>{% trans "TTL" %}</dt>
-    <dd>{{ domain.ttl|default:_("Unknown") }}</dd>
-    <dt>{% trans "Created" %}</dt>
-    {% if domain.created_at %}
-      <dd>{{ domain.created_at|parse_isotime }}</dd>
-    {% else %}
-      <dd>{% trans "Unknown" %}</dd>
-    {% endif %}
-    <dt>{% trans "Updated" %}</dt>
-    {% if domain.updated_at %}
-      <dd>{{ domain.updated_at|parse_isotime }}</dd>
-    {% else %}
-      <dd>{% trans "Unknown" %}</dd>
-    {% endif %}
-  </dl>
-</div>
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_record_detail.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_record_detail.html
deleted file mode 100644
index eb86adc..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_record_detail.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{% load i18n sizeformat %}
-
-<h3><a href="{% url 'horizon:project:dns_domains:records' domain_id %}">{% trans "All Records" %}</a></h3>
-
-<h4>{{ record.name|default:_("None") }}</h4>
-
-<div class="info detail">
-  <dl class="dl-horizontal">
-    <dt>{% trans "Name" %}</dt>
-    <dd>{{ record.name|default:_("None") }}</dd>
-    <dt>{% trans "ID" %}</dt>
-    <dd>{{ record.id|default:_("None") }}</dd>
-    <dt>{% trans "Type" %}</dt>
-    <dd>{{ record.type|default:_("Unknown") }}</dd>
-    <dt>{% trans "Description" %}</dt>
-    <dd>{{ record.description|default:_("None") }}</dd>
-    <dt>{% trans "Record Data" %}</dt>
-    <dd>{{ record.data|default:_("None") }}</dd>
-    <dt>{% trans "Priority" %}</dt>
-    <dd>{{ record.priority|yesno|capfirst }}</dd>
-    <dt>{% trans "TTL" %}</dt>
-    <dd>{{ record.ttl|default:_("None") }}</dd>
-    <dt>{% trans "Created" %}</dt>
-    {% if record.created_at %}
-      <dd>{{ record.created_at|parse_isotime }}</dd>
-    {% else %}
-      <dd>{% trans "Unknown" %}</dd>
-    {% endif %}
-    <dt>{% trans "Updated" %}</dt>
-    {% if record.updated_at %}
-      <dd>{{ record.updated_at|parse_isotime }}</dd>
-    {% else %}
-      <dd>{% trans "Unknown" %}</dd>
-    {% endif %}
-  </dl>
-</div>
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_update_domain.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_update_domain.html
deleted file mode 100644
index e8f6ba9..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_update_domain.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{% extends "horizon/common/_modal_form.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block form_id %}update_domain_form{% endblock %}
-{% block form_action %}{% url 'horizon:project:dns_domains:update_domain' domain.id %}{% endblock %}
-
-{% block modal-header %}{% trans "Update Domain" %}{% endblock %}
-
-{% block modal-body %}
-  <div class="left">
-    <fieldset>
-    {% include "horizon/common/_form_fields.html" %}
-    </fieldset>
-  </div>
-
-  <div class="right">
-    <h3>{% trans "Description" %}:</h3>
-    <p>{% blocktrans %}
-      From here you can edit the email address and TTL associated with a domain.
-    {% endblocktrans %}</p>
-    <p>{% blocktrans %}
-      The Email field should contain a valid email address to be associated
-      with the domain.
-    {% endblocktrans %}</p>
-    <p>{% blocktrans %}
-      The optional TTL field can be any value between 1 and 2147483647
-      seconds.
-    {% endblocktrans %}</p>
-  </div>
-{% endblock %}
-
-{% block modal-footer %}
-  <input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Domain" %}" />
-  <a href="{% url 'horizon:project:dns_domains:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a>
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_update_record.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_update_record.html
deleted file mode 100644
index 4344f36..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/_update_record.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{% extends "project/dns_domains/_create_record.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block form_id %}update_record_form{% endblock %}
-{% block form_action %}{% url 'horizon:project:dns_domains:update_record' record.domain_id record.id %}{% endblock %}
-
-{% block modal-header %}{% trans "Update Domain Record" %}{% endblock %}
-
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/create_domain.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/create_domain.html
deleted file mode 100644
index fe6380c..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/create_domain.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends 'base.html' %}
-{% load i18n %}
-{% block title %}{% trans "Create Domain" %}{% endblock %}
-
-{% block page_header %}
-  {% include "horizon/common/_page_header.html" with title=_("Create Domain") %}
-{% endblock page_header %}
-
-{% block main %}
-    {% include 'project/dns_domains/_create_domain.html' %}
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/create_record.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/create_record.html
deleted file mode 100644
index 4414f32..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/create_record.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends 'base.html' %}
-{% load i18n %}
-{% block title %}{% trans "Create Domain Record" %}{% endblock %}
-
-{% block page_header %}
-  {% include "horizon/common/_page_header.html" with title=_("Create Domain Record") %}
-{% endblock page_header %}
-
-{% block main %}
-    {% include 'project/dns_domains/_create_record.html' %}
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/domain_detail.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/domain_detail.html
deleted file mode 100644
index 1137660..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/domain_detail.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends 'base.html' %}
-{% load i18n %}
-{% block title %}{% trans 'Domain Detail' %}{% endblock %}
-
-{% block page_header %}
-  {% include "horizon/common/_page_header.html" with title=_("Domain") %}
-{% endblock page_header %}
-
-{% block main %}
-    {% include 'project/dns_domains/_domain_detail.html' %}
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/index.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/index.html
deleted file mode 100644
index a7d629b..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends 'base.html' %}
-{% load i18n %}
-{% block title %}{% trans "Domains" %}{% endblock %}
-
-{% block page_header %}
-  {% include "horizon/common/_page_header.html" with title=_("Domains") %}
-{% endblock page_header %}
-
-{% block main %}
-  {{ table.render }}
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/prefix_field_style.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/prefix_field_style.html
deleted file mode 100644
index 90078a1..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/prefix_field_style.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<style type = "text/css" scoped>
- .form_field_suffix { float: right; padding-top:10px; }
- .form_field_prefix { display: block; overflow: hidden; }
-</style>
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/prefix_html_widget.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/prefix_html_widget.html
deleted file mode 100644
index 78f1154..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/prefix_html_widget.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<label class="form_field_suffix">{{ suffix }}</label>
-<span class="form_field_prefix">{{ input }}</span>
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/record_detail.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/record_detail.html
deleted file mode 100644
index bb94f9f..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/record_detail.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends 'base.html' %}
-{% load i18n %}
-{% block title %}{% trans 'Record Detail' %}{% endblock %}
-
-{% block page_header %}
-  {% include "horizon/common/_page_header.html" with title="Record Detail" %}
-{% endblock page_header %}
-
-{% block main %}
-    {% include 'project/dns_domains/_record_detail.html' %}
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/records.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/records.html
deleted file mode 100644
index b8de38c..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/records.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{% extends 'base.html' %}
-{% load i18n %}
-{% block title %}{% trans 'Domain Records' %}{% endblock %}
-
-{% block page_header %}
-  {% include "horizon/common/_page_header.html" with title=_("Domain Records") %}
-{% endblock page_header %}
-
-{% block main %}
-    <div class="sub-content grid-content">
-        <div class="page_title table_header">
-            <div>
-                <h3>
-                    <a href="{% url 'horizon:project:dns_domains:index' %}">{% trans "Domains" %}</a> : {{ domain.name }} &rarr;
-                    {% trans "Records" %}
-                </h3>
-            </div>
-            <div class="table_actions">
-                <a href="{% url 'horizon:project:dns_domains:index' %}" class="close">&times;</a>
-            </div>
-        </div>
-    <div class="nameservers_wrapper">
-      <h3>{% trans "Nameservers" %}</h3>
-      <ul>
-      {% for server in servers %}
-        <li>{{ server.name }}</li>
-      {% endfor %}
-      </ul>
-    </div>
-
-    {{ table.render }}
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/update_domain.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/update_domain.html
deleted file mode 100644
index e1a2752..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/update_domain.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends 'base.html' %}
-{% load i18n %}
-{% block title %}{% trans 'Update Domain' %}{% endblock %}
-
-{% block page_header %}
-  {% include "horizon/common/_page_header.html" with title="Domain" %}
-{% endblock page_header %}
-
-{% block main %}
-    {% include 'project/dns_domains/_update_domain.html' %}
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/update_record.html b/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/update_record.html
deleted file mode 100644
index ca2b7a7..0000000
--- a/tatudashboard/dashboards/project/dns_domains/templates/dns_domains/update_record.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends 'base.html' %}
-{% load i18n %}
-{% block title %}{% trans 'Update Domain Record' %}{% endblock %}
-
-{% block page_header %}
-  {% include "horizon/common/_page_header.html" with title="Domain Record" %}
-{% endblock page_header %}
-
-{% block main %}
-    {% include 'project/dns_domains/_update_record.html' %}
-{% endblock %}
diff --git a/tatudashboard/dashboards/project/dns_domains/urls.py b/tatudashboard/dashboards/project/dns_domains/urls.py
deleted file mode 100644
index 1a2231b..0000000
--- a/tatudashboard/dashboards/project/dns_domains/urls.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-#
-# 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.conf.urls import url, patterns  # noqa
-
-from .views import CreateDomainView  # noqa
-from .views import CreateRecordView  # noqa
-from .views import DomainDetailView  # noqa
-from .views import IndexView  # noqa
-from .views import RecordsView  # noqa
-from .views import UpdateDomainView  # noqa
-from .views import UpdateRecordView  # noqa
-from .views import ViewRecordDetailsView  # noqa
-
-
-urlpatterns = patterns(
-    '',
-    url(r'^$',
-        IndexView.as_view(),
-        name='index'),
-    url(r'^create/$',
-        CreateDomainView.as_view(),
-        name='create_domain'),
-    url(r'^(?P<domain_id>[^/]+)/update$',
-        UpdateDomainView.as_view(),
-        name='update_domain'),
-    url(r'^(?P<domain_id>[^/]+)$',
-        DomainDetailView.as_view(),
-        name='domain_detail'),
-    url(r'^(?P<domain_id>[^/]+)/records$',
-        RecordsView.as_view(),
-        name='records'),
-    url(r'^(?P<domain_id>[^/]+)/records/create$',
-        CreateRecordView.as_view(),
-        name='create_record'),
-    url(r'^(?P<domain_id>[^/]+)/records/(?P<record_id>[^/]+)/update$',
-        UpdateRecordView.as_view(),
-        name='update_record'),
-    url(r'^(?P<domain_id>[^/]+)/records/(?P<record_id>[^/]+)/$',
-        ViewRecordDetailsView.as_view(),
-        name='view_record'),
-)
diff --git a/tatudashboard/dashboards/project/dns_domains/utils.py b/tatudashboard/dashboards/project/dns_domains/utils.py
deleted file mode 100644
index eaa74c7..0000000
--- a/tatudashboard/dashboards/project/dns_domains/utils.py
+++ /dev/null
@@ -1,20 +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.conf import settings
-
-
-def limit_records_to_fips():
-    # This method checks the settings to determine if the
-    # record creation / update screen should limit the ip input
-    # to be a dropdown of floating ips
-    return getattr(settings, "DESIGNATE",
-                   {}).get("records_use_fips", False)
diff --git a/tatudashboard/dashboards/project/dns_domains/views.py b/tatudashboard/dashboards/project/dns_domains/views.py
deleted file mode 100644
index 287bba2..0000000
--- a/tatudashboard/dashboards/project/dns_domains/views.py
+++ /dev/null
@@ -1,243 +0,0 @@
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-#
-# 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.core.urlresolvers import reverse, reverse_lazy  # noqa
-from django.utils.translation import ugettext_lazy as _  # noqa
-
-from horizon import exceptions
-from horizon import forms
-from horizon import tables
-from horizon.views import HorizonTemplateView   # noqa
-
-from openstack_dashboard.api.network import tenant_floating_ip_list
-from openstack_dashboard.api.nova import server_list
-
-from designatedashboard import api
-from designatedashboard.api import rest  # noqa
-
-from .forms import DomainCreate  # noqa
-from .forms import DomainUpdate  # noqa
-from .forms import RecordCreate  # noqa
-from .forms import RecordUpdate  # noqa
-from .tables import DomainsTable  # noqa
-from .tables import RecordsTable  # noqa
-from .utils import limit_records_to_fips  # noqa
-
-
-class IndexView(tables.DataTableView):
-    table_class = DomainsTable
-    template_name = 'project/dns_domains/index.html'
-
-    def get_data(self):
-        try:
-            return api.designate.domain_list(self.request)
-        except Exception:
-            exceptions.handle(self.request,
-                              _('Unable to retrieve domain list.'))
-            return []
-
-
-class CreateDomainView(forms.ModalFormView):
-    form_class = DomainCreate
-    template_name = 'project/dns_domains/create_domain.html'
-    success_url = reverse_lazy('horizon:project:dns_domains:index')
-
-    def get_object_display(self, obj):
-        return obj.ip
-
-
-class DomainDetailView(HorizonTemplateView):
-    template_name = 'project/dns_domains/domain_detail.html'
-
-    def get_context_data(self, **kwargs):
-        context = super(DomainDetailView, self).get_context_data(**kwargs)
-        domain_id = self.kwargs['domain_id']
-        try:
-            context["domain"] = api.designate.domain_get(self.request,
-                                                         domain_id)
-            table = DomainsTable(self.request)
-            context["actions"] = table.render_row_actions(context["domain"])
-        except Exception:
-            redirect = reverse('horizon:project:dns_domains:index')
-            exceptions.handle(self.request,
-                              _('Unable to retrieve domain record.'),
-                              redirect=redirect)
-        return context
-
-
-class UpdateDomainView(forms.ModalFormView):
-    form_class = DomainUpdate
-    template_name = 'project/dns_domains/update_domain.html'
-    success_url = reverse_lazy('horizon:project:dns_domains:index')
-
-    def get_object(self):
-        domain_id = self.kwargs['domain_id']
-        try:
-            return api.designate.domain_get(self.request, domain_id)
-        except Exception:
-            redirect = reverse('horizon:project:dns_domains:index')
-            exceptions.handle(self.request,
-                              _('Unable to retrieve domain record.'),
-                              redirect=redirect)
-
-    def get_initial(self):
-        self.domain = self.get_object()
-        return self.domain
-
-    def get_context_data(self, **kwargs):
-        context = super(UpdateDomainView, self).get_context_data(**kwargs)
-        context["domain"] = self.domain
-        return context
-
-
-class RecordsView(tables.DataTableView):
-    table_class = RecordsTable
-    template_name = 'project/dns_domains/records.html'
-
-    def get_data(self):
-        domain_id = self.kwargs['domain_id']
-        records = []
-        try:
-            self.domain = api.designate.domain_get(self.request, domain_id)
-            self.servers = api.designate.server_list(self.request, domain_id)
-            records = api.designate.record_list(self.request, domain_id)
-        except Exception:
-            redirect = reverse('horizon:project:dns_domains:index')
-            exceptions.handle(self.request,
-                              _('Unable to retrieve record list.'),
-                              redirect=redirect)
-
-        return records
-
-    def get_context_data(self, **kwargs):
-        context = super(RecordsView, self).get_context_data(**kwargs)
-        context['domain'] = self.domain
-        context['servers'] = self.servers
-
-        return context
-
-
-class BaseRecordFormView(forms.ModalFormView):
-    cancel_label = _("Cancel")
-
-    def get_success_url(self):
-        return reverse('horizon:project:dns_domains:records',
-                       args=(self.kwargs['domain_id'],))
-
-    def get_domain(self):
-        domain_id = self.kwargs['domain_id']
-        try:
-            return api.designate.domain_get(self.request, domain_id)
-        except Exception:
-            redirect = reverse('horizon:project:dns_domains:records',
-                               args=(self.kwargs['domain_id'],))
-            exceptions.handle(self.request,
-                              ('Unable to retrieve domain record.'),
-                              redirect=redirect)
-            # NotAuthorized errors won't be redirected automatically. Need
-            # to force the issue
-            raise exceptions.Http302(redirect)
-
-    def get_initial(self):
-        self.domain = self.get_domain()
-        results = {'domain_id': self.domain.id,
-                   'domain_name': self.domain.name, }
-        if limit_records_to_fips():
-            results.update({'fips': tenant_floating_ip_list(self.request),
-                            'instances': server_list(self.request)[0]})
-        return results
-
-    def get_context_data(self, **kwargs):
-        """Set the cancel url
-
-        the cancel_url needs a variable in it
-        so we cannot do this with a simple class attr
-        this is critical to perform before the super.get_context_data
-        """
-        self.cancel_url = reverse('horizon:project:dns_domains:records',
-                                  args=(self.kwargs['domain_id'],))
-        context = super(BaseRecordFormView, self).get_context_data(**kwargs)
-        context['domain'] = self.domain
-        return context
-
-
-class CreateRecordView(BaseRecordFormView):
-    form_class = RecordCreate
-    submit_label = _("Create Record")
-    template_name = 'project/dns_domains/create_record.html'
-
-
-class ViewRecordDetailsView(HorizonTemplateView):
-    template_name = 'project/dns_domains/record_detail.html'
-
-    def get_record(self):
-        domain_id = self.kwargs['domain_id']
-        record_id = self.kwargs['record_id']
-        try:
-            return api.designate.record_get(self.request, domain_id, record_id)
-        except Exception:
-            redirect = reverse('horizon:project:dns_domains:records',
-                               args=(self.kwargs['domain_id'],))
-            exceptions.handle(self.request,
-                              _('Unable to retrieve domain record.'),
-                              redirect=redirect)
-
-    def get_context_data(self, **kwargs):
-        context = super(ViewRecordDetailsView, self).get_context_data(**kwargs)
-        self.record = self.get_record()
-        context["record"] = self.record
-        context["domain_id"] = self.kwargs['domain_id']
-        return context
-
-
-class UpdateRecordView(BaseRecordFormView):
-    form_class = RecordUpdate
-    submit_label = _("Update Record")
-    template_name = 'project/dns_domains/update_record.html'
-
-    def get_record(self):
-        domain_id = self.kwargs['domain_id']
-        record_id = self.kwargs['record_id']
-
-        try:
-            return api.designate.record_get(self.request, domain_id, record_id)
-        except Exception:
-            redirect = reverse('horizon:project:dns_domains:records',
-                               args=(self.kwargs['domain_id'],))
-            exceptions.handle(self.request,
-                              _('Unable to retrieve domain record.'),
-                              redirect=redirect)
-
-    def get_initial(self):
-        initial = super(UpdateRecordView, self).get_initial()
-        self.record = self.get_record()
-
-        initial.update({
-            'id': self.record.id,
-            'name': self.record.name.replace("." + initial['domain_name'], ''),
-            'data': self.record.data,
-            'txt': self.record.data,
-            'priority': self.record.priority,
-            'ttl': self.record.ttl,
-            'type': self.record.type.lower(),
-            'description': self.record.description,
-        })
-        if limit_records_to_fips():
-            initial.update({'ip_addr': self.record.data})
-
-        return initial
-
-    def get_context_data(self, **kwargs):
-        context = super(UpdateRecordView, self).get_context_data(**kwargs)
-        context["record"] = self.record
-        return context
diff --git a/tatudashboard/dashboards/project/dns_domains/__init__.py b/tatudashboard/dashboards/project/hosts/__init__.py
similarity index 100%
rename from tatudashboard/dashboards/project/dns_domains/__init__.py
rename to tatudashboard/dashboards/project/hosts/__init__.py
diff --git a/tatudashboard/dashboards/project/ngdns/zones/panel.py b/tatudashboard/dashboards/project/hosts/panel.py
similarity index 83%
rename from tatudashboard/dashboards/project/ngdns/zones/panel.py
rename to tatudashboard/dashboards/project/hosts/panel.py
index e3fdaba..2dd14a3 100644
--- a/tatudashboard/dashboards/project/ngdns/zones/panel.py
+++ b/tatudashboard/dashboards/project/hosts/panel.py
@@ -17,9 +17,9 @@ import horizon
 from openstack_dashboard.dashboards.project import dashboard
 
 
-class Zones(horizon.Panel):
-    name = _("Zones")
-    slug = 'dnszones'
-    permissions = ('openstack.services.dns',)
+class Hosts(horizon.Panel):
+    name = _("Hosts")
+    slug = 'ssh_hosts'
+    permissions = ('openstack.services.ssh',)
 
-dashboard.Project.register(Zones)
+dashboard.Project.register(Hosts)
diff --git a/tatudashboard/dashboards/project/ngdns/zones/urls.py b/tatudashboard/dashboards/project/hosts/urls.py
similarity index 91%
rename from tatudashboard/dashboards/project/ngdns/zones/urls.py
rename to tatudashboard/dashboards/project/hosts/urls.py
index 0eacf22..415036d 100644
--- a/tatudashboard/dashboards/project/ngdns/zones/urls.py
+++ b/tatudashboard/dashboards/project/hosts/urls.py
@@ -14,7 +14,7 @@
 
 from django.conf.urls import url
 
-from designatedashboard.dashboards.project.ngdns.zones import views
+from tatudashboard.dashboards.project.hosts import views
 
 
 urlpatterns = [
diff --git a/tatudashboard/dashboards/project/ngdns/reverse_dns/views.py b/tatudashboard/dashboards/project/hosts/views.py
similarity index 100%
rename from tatudashboard/dashboards/project/ngdns/reverse_dns/views.py
rename to tatudashboard/dashboards/project/hosts/views.py
diff --git a/tatudashboard/dashboards/project/ngdns/__init__.py b/tatudashboard/dashboards/project/ngdns/__init__.py
deleted file mode 100644
index 2c57778..0000000
--- a/tatudashboard/dashboards/project/ngdns/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from designatedashboard.api import rest  # noqa
diff --git a/tatudashboard/dashboards/project/ngdns/reverse_dns/__init__.py b/tatudashboard/dashboards/project/ngdns/reverse_dns/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/tatudashboard/dashboards/project/ngdns/reverse_dns/panel.py b/tatudashboard/dashboards/project/ngdns/reverse_dns/panel.py
deleted file mode 100644
index 41f0c7c..0000000
--- a/tatudashboard/dashboards/project/ngdns/reverse_dns/panel.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#    (c) Copyright 2015 Hewlett-Packard Development Company, L.P.
-#
-# 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.utils.translation import ugettext_lazy as _
-
-import horizon
-from openstack_dashboard.dashboards.project import dashboard
-
-
-class ReverseDns(horizon.Panel):
-    name = _("Reverse DNS")
-    slug = 'reverse_dns'
-    permissions = ('openstack.services.dns',)
-
-dashboard.Project.register(ReverseDns)
diff --git a/tatudashboard/dashboards/project/ngdns/reverse_dns/urls.py b/tatudashboard/dashboards/project/ngdns/reverse_dns/urls.py
deleted file mode 100644
index 7977633..0000000
--- a/tatudashboard/dashboards/project/ngdns/reverse_dns/urls.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#    (c) Copyright 2015 Hewlett-Packard Development Company, L.P.
-#
-# 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.conf.urls import url
-
-from designatedashboard.dashboards.project.ngdns.reverse_dns import views
-
-
-urlpatterns = [
-    url('', views.IndexView.as_view(), name='index'),
-]
diff --git a/tatudashboard/dashboards/project/ngdns/zones/__init__.py b/tatudashboard/dashboards/project/ngdns/zones/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/tatudashboard/dashboards/project/ngdns/zones/views.py b/tatudashboard/dashboards/project/ngdns/zones/views.py
deleted file mode 100644
index e072aea..0000000
--- a/tatudashboard/dashboards/project/ngdns/zones/views.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#    (c) Copyright 2015 Hewlett-Packard Development Company, L.P.
-#
-# 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.views import generic
-
-
-class IndexView(generic.TemplateView):
-    template_name = 'angular.html'
diff --git a/tatudashboard/enabled/_1710_project_dns_panel_group.py b/tatudashboard/enabled/_1710_project_ssh_panel_group.py
similarity index 94%
rename from tatudashboard/enabled/_1710_project_dns_panel_group.py
rename to tatudashboard/enabled/_1710_project_ssh_panel_group.py
index 4473e40..de2c80c 100644
--- a/tatudashboard/enabled/_1710_project_dns_panel_group.py
+++ b/tatudashboard/enabled/_1710_project_ssh_panel_group.py
@@ -13,8 +13,8 @@
 # under the License.
 
 # The name of the panel group to be added to HORIZON_CONFIG. Required.
-PANEL_GROUP = 'dns'
+PANEL_GROUP = 'ssh'
 # The display name of the PANEL_GROUP. Required.
-PANEL_GROUP_NAME = 'DNS'
+PANEL_GROUP_NAME = 'SSH'
 # The name of the dashboard the PANEL_GROUP associated with. Required.
 PANEL_GROUP_DASHBOARD = 'project'
diff --git a/tatudashboard/enabled/_1721_dns_zones_panel.py b/tatudashboard/enabled/_1721_dns_zones_panel.py
deleted file mode 100644
index da72368..0000000
--- a/tatudashboard/enabled/_1721_dns_zones_panel.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-#
-# 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 designatedashboard import exceptions
-
-# The name of the panel to be added to HORIZON_CONFIG. Required.
-PANEL = 'dnszones'
-# The name of the dashboard the PANEL associated with. Required.
-PANEL_DASHBOARD = 'project'
-# The name of the panel group the PANEL is associated with.
-PANEL_GROUP = 'dns'
-
-ADD_EXCEPTIONS = {
-    'recoverable': exceptions.RECOVERABLE,
-    'not_found': exceptions.NOT_FOUND,
-    'unauthorized': exceptions.UNAUTHORIZED,
-}
-
-ADD_INSTALLED_APPS = ['designatedashboard']
-
-# Python panel class of the PANEL to be added.
-ADD_PANEL = (
-    'designatedashboard.dashboards.project.ngdns.zones.panel.Zones')
-
-ADD_ANGULAR_MODULES = ['designatedashboard']
-
-ADD_SCSS_FILES = ['designatedashboard/designatedashboard.scss']
-
-AUTO_DISCOVER_STATIC_FILES = True
diff --git a/tatudashboard/enabled/_1722_dns_reversedns_panel.py b/tatudashboard/enabled/_1722_dns_reversedns_panel.py
deleted file mode 100644
index 1728715..0000000
--- a/tatudashboard/enabled/_1722_dns_reversedns_panel.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-#
-# 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 designatedashboard import exceptions
-
-# The name of the panel to be added to HORIZON_CONFIG. Required.
-PANEL = 'reverse_dns'
-# The name of the dashboard the PANEL associated with. Required.
-PANEL_DASHBOARD = 'project'
-# The name of the panel group the PANEL is associated with.
-PANEL_GROUP = 'dns'
-
-ADD_EXCEPTIONS = {
-    'recoverable': exceptions.RECOVERABLE,
-    'not_found': exceptions.NOT_FOUND,
-    'unauthorized': exceptions.UNAUTHORIZED,
-}
-
-# Python panel class of the PANEL to be added.
-ADD_PANEL = (
-    'designatedashboard.dashboards.project.ngdns.reverse_dns.panel.ReverseDns')
-
-ADD_ANGULAR_MODULES = ['designatedashboard']
-
-ADD_SCSS_FILES = ['designatedashboard/designatedashboard.scss']
-
-AUTO_DISCOVER_STATIC_FILES = True
diff --git a/tatudashboard/enabled/_1720_project_dns_panel.py b/tatudashboard/enabled/_1722_ssh_hosts_panel.py
similarity index 79%
rename from tatudashboard/enabled/_1720_project_dns_panel.py
rename to tatudashboard/enabled/_1722_ssh_hosts_panel.py
index c1494d8..0f70ae1 100644
--- a/tatudashboard/enabled/_1720_project_dns_panel.py
+++ b/tatudashboard/enabled/_1722_ssh_hosts_panel.py
@@ -12,16 +12,14 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-from designatedashboard import exceptions
+from tatudashboard import exceptions
 
 # The name of the panel to be added to HORIZON_CONFIG. Required.
-PANEL = 'domains'
+PANEL = 'ssh_hosts'
 # The name of the dashboard the PANEL associated with. Required.
 PANEL_DASHBOARD = 'project'
 # The name of the panel group the PANEL is associated with.
-PANEL_GROUP = 'dns'
-
-ADD_INSTALLED_APPS = ['designatedashboard']
+PANEL_GROUP = 'ssh'
 
 ADD_EXCEPTIONS = {
     'recoverable': exceptions.RECOVERABLE,
@@ -31,6 +29,10 @@ ADD_EXCEPTIONS = {
 
 # Python panel class of the PANEL to be added.
 ADD_PANEL = (
-    'designatedashboard.dashboards.project.dns_domains.panel.DNSDomains')
+    'tatudashboard.dashboards.project.hosts.panel.Hosts')
 
-DISABLED = True
+ADD_ANGULAR_MODULES = ['tatudashboard']
+
+ADD_SCSS_FILES = ['tatudashboard/tatudashboard.scss']
+
+AUTO_DISCOVER_STATIC_FILES = True
diff --git a/tatudashboard/exceptions.py b/tatudashboard/exceptions.py
index 677fba6..874dad1 100644
--- a/tatudashboard/exceptions.py
+++ b/tatudashboard/exceptions.py
@@ -12,18 +12,86 @@
 # implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-from designateclient import exceptions as designateclient
-
 from openstack_dashboard import exceptions
 
+
+class Base(Exception):
+    def __init__(self, message=None):
+        if not message:
+            message = self.__class__.__name__
+        super(Base, self).__init__(message)
+
+
+class UnsupportedVersion(Base):
+    pass
+
+
+class ResourceNotFound(Base):
+    pass
+
+
+class NoUniqueMatch(Base):
+    pass
+
+
+class RemoteError(Base):
+    def __init__(self, message=None, code=None, type=None, errors=None,
+                 request_id=None, **ignore):
+        err_message = self._get_error_message(message, type, errors)
+        self.message = err_message
+        self.code = code
+        self.type = type
+        self.errors = errors
+        self.request_id = request_id
+
+        super(RemoteError, self).__init__(err_message)
+
+    def _get_error_message(self, _message, _type, _errors):
+        # Try to get a useful error msg if 'message' has nothing
+        if not _message:
+            if _errors and 'errors' in _errors:
+                err_msg = list()
+                for err in _errors['errors']:
+                    if 'message' in err:
+                        err_msg.append(err['message'])
+                _message = '. '.join(err_msg)
+            elif _type:
+                _message = str(_type)
+        return _message
+
+
+class Unknown(RemoteError):
+    pass
+
+
+class BadRequest(RemoteError):
+    pass
+
+
+class Forbidden(RemoteError):
+    pass
+
+
+class Conflict(RemoteError):
+    pass
+
+
+class NotFound(RemoteError):
+    pass
+
+
+class OverQuota(RemoteError):
+    pass
+
+
 NOT_FOUND = exceptions.NOT_FOUND + (
-    designateclient.ResourceNotFound,
-    designateclient.NotFound,
+    ResourceNotFound,
+    NotFound,
     )
 RECOVERABLE = exceptions.RECOVERABLE + (
-    designateclient.BadRequest,
-    designateclient.Conflict,
+    BadRequest,
+    Conflict,
     )
 UNAUTHORIZED = exceptions.UNAUTHORIZED + (
-    designateclient.Forbidden,
+    Forbidden,
     )
diff --git a/tatudashboard/locale/cs/LC_MESSAGES/django.mo b/tatudashboard/locale/cs/LC_MESSAGES/django.mo
deleted file mode 100644
index b49d51a4915733806c247f36c651aae2deedcaca..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6965
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
G7W*%dBZN2r

diff --git a/tatudashboard/locale/cs/LC_MESSAGES/django.po b/tatudashboard/locale/cs/LC_MESSAGES/django.po
deleted file mode 100644
index 4204093..0000000
--- a/tatudashboard/locale/cs/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,348 +0,0 @@
-# Stanislav Ulrych <stanislav.ulrych@ultimum.io>, 2016. #zanata
-# Zbyněk Schwarz <zbynek.schwarz@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 6.0.0.0b2.dev3\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2017-11-21 15:00+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-11-17 07:24+0000\n"
-"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n"
-"Language-Team: Czech\n"
-"Language: cs\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"     Zde můžete upravit emailovou adresu a TTL patřící k doméně.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"  Pole Email by mělo obsahovat platnou emailovou adresu, která je spojená\n"
-"   s doménou.\n"
-"   "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"     Pole Název by mělo obsahovat plně kvalifikovaný název domény (s \n"
-"     tečkou na \n"
-"     konci)."
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"    TTL (volitelné) může být hodnota mezi 1 a 2147483647\n"
-"     sekund.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    TTL je time-to-live záznamu, v sekundách.\n"
-"  </p>\n"
-"  <p>\n"
-"    Viz <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">více informací</a> o typech záznamů.\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - adresní záznam"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - adresní záznam IPv6"
-
-msgid "All Records"
-msgstr "Všechny záznamy"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - záznam kanonického jména"
-
-msgid "Cancel"
-msgstr "Zrušit"
-
-msgid "Canonical Name"
-msgstr "Kanonické jméno"
-
-msgid "Create Domain"
-msgstr "Vytvořit doménu"
-
-msgid "Create Domain Record"
-msgstr "Vytvořit doménový záznam"
-
-msgid "Create Record"
-msgstr "Vytvořit záznam"
-
-msgid "Create Record for"
-msgstr "Vytvořit záznam pro"
-
-msgid "Created"
-msgstr "Vytvořeno"
-
-msgid "Created At"
-msgstr "Vytvořeno"
-
-msgid "Data"
-msgstr "Data"
-
-msgid "Delete"
-msgstr "Smazat"
-
-msgid "Deleted"
-msgstr "Smazáno"
-
-msgid "Description"
-msgstr "Popis"
-
-msgid "Domain"
-msgstr "Doména"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "Doména %(name)s vytvořena."
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "Doména %(name)s aktualizována."
-
-msgid "Domain Detail"
-msgstr "Detail domény"
-
-msgid "Domain Name"
-msgstr "Název domény"
-
-msgid "Domain Overview"
-msgstr "Přehled domén"
-
-msgid "Domain Records"
-msgstr "Doménové záznamy"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "Doménový záznam %(name)s vytvořen."
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "Doménový záznam %(name)s aktualizován."
-
-msgid "Domains"
-msgstr "Domény"
-
-msgid "Edit Domain"
-msgstr "Upravit doménu"
-
-msgid "Edit Record"
-msgstr "Upravit záznam"
-
-msgid "Email"
-msgstr "E-mail"
-
-msgid "Enter a valid IPv4 address"
-msgstr "Zadejte platnou IPv4 adresu"
-
-msgid "Enter a valid IPv6 address"
-msgstr "Zadejte platnou IPv6 adresu"
-
-msgid "Enter a valid SRV name"
-msgstr "Zadejte platné SRV jméno"
-
-msgid "Enter a valid SRV record"
-msgstr "Zadejte platný SRV záznam"
-
-msgid "Enter a valid SSHFP record"
-msgstr "Zadejte platný SSHFP záznam"
-
-msgid "Enter a valid domain name."
-msgstr "Zadejte platný název domény."
-
-msgid "Enter a valid hostname"
-msgstr "Zadejte platné jméno hostitele"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"Zadejte platný název hostitele. Název hostitele by měl obsahovat písmena a "
-"číslice a musí být maximálně 63 znaků."
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "IP adresa"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - mailový záznam"
-
-msgid "Mail Server"
-msgstr "Mailový server"
-
-msgid "Manage Records"
-msgstr "Spravovat záznamy"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "Název"
-
-msgid "Name Server"
-msgstr "Název serveru"
-
-msgid "Nameservers"
-msgstr "Jmenné servery"
-
-msgid "None"
-msgstr "Žádný"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - záznam ukazatele"
-
-msgid "PTR Domain Name"
-msgstr "PTR doménové jméno"
-
-msgid "Priority"
-msgstr "Priorita"
-
-msgid "Record"
-msgstr "Záznam"
-
-msgid "Record Data"
-msgstr "Zaznamenat data"
-
-msgid "Record Detail"
-msgstr "Zaznamenat detail"
-
-msgid "Record Type"
-msgstr "Typ záznamu"
-
-msgid "Records"
-msgstr "Záznamy"
-
-msgid "Reverse DNS"
-msgstr "Reverzní DNS"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - Sender Policy Framework"
-
-msgid "SRV - Service locator"
-msgstr "SRV - lokátor služby"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - Otisk veřejného klíče SSH"
-
-msgid "Select an IP"
-msgstr "Vyberte IP adresu"
-
-msgid "Serial"
-msgstr "Sériový"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (ve vteřinách)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - textový záznam"
-
-msgid "Text"
-msgstr "Text"
-
-msgid "The quotas could not be retrieved."
-msgstr "Nelze získat kvóty."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "Žádné plovoucí IP nejsou k dispozici pro výběr."
-
-msgid "This field is required"
-msgstr "Toto pole je povinné"
-
-msgid "Type"
-msgstr "Typ"
-
-msgid "Unable to create domain."
-msgstr "Nelze vytvořit doménu."
-
-msgid "Unable to create record."
-msgstr "Nelze vytvořit záznam."
-
-msgid "Unable to retrieve domain list."
-msgstr "Nelze získat seznam domén."
-
-msgid "Unable to retrieve domain record."
-msgstr "Nelze získat doménový záznam."
-
-msgid "Unable to retrieve record list."
-msgstr "Nelze získat záznamy."
-
-msgid "Unable to update domain."
-msgstr "Nelze aktualizovat doménu."
-
-msgid "Unknown"
-msgstr "Neznámé"
-
-msgid "Unknown instance name"
-msgstr "Neznámé jméno instance"
-
-msgid "Update Domain"
-msgstr "Aktualizovat doménu"
-
-msgid "Update Domain Record"
-msgstr "Aktualizovat záznam domény"
-
-msgid "Update Record"
-msgstr "Aktualizovat záznam"
-
-msgid "Updated"
-msgstr "Aktualizováno"
-
-msgid "Updated At"
-msgstr "Aktualizováno"
-
-msgid "Value"
-msgstr "Hodnota"
-
-msgid "Zones"
-msgstr "Zóny"
diff --git a/tatudashboard/locale/de/LC_MESSAGES/django.mo b/tatudashboard/locale/de/LC_MESSAGES/django.mo
deleted file mode 100644
index 0f7d07ec9d4be8d897dad2293907f3899f83352f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7264
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
E0m;vzVgLXD

diff --git a/tatudashboard/locale/de/LC_MESSAGES/django.po b/tatudashboard/locale/de/LC_MESSAGES/django.po
deleted file mode 100644
index 5c42e43..0000000
--- a/tatudashboard/locale/de/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,351 +0,0 @@
-# Frank Kloeker <eumel@arcor.de>, 2016. #zanata
-# Robert Simai <robert.simai@suse.com>, 2016. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 3.0.0.0rc2.dev5\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2016-09-29 13:19+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-10-13 04:32+0000\n"
-"Last-Translator: Andreas Jaeger <jaegerandi@gmail.com>\n"
-"Language-Team: German\n"
-"Language: de\n"
-"X-Generator: Zanata 3.7.3\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Hier können Sie die E-Mail-Adresse und TTL mit dazugehöriger Domäne "
-"editieren.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Das E-Mail-Feld sollte eine gültige E-Mail-Adresse enthalten,\n"
-"  die der Domäne zugewiesen wird.\n"
-"   "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      Das Namensfeld sollte einen vollqualifizierten Domänennamen enthalten "
-"(mit\n"
-"      abschließendem Punkt).\n"
-"    "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"      Das optionale TTL Feld kann einen Wert zwischen 1 und 2147483647\n"
-"      Sekunden haben.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    Die TTL ist die time-to-live für den Datensatz,  in Sekunden.\n"
-"  </p>\n"
-"  <p>\n"
-"    Hier finden Sie <a href=\"http://en.wikipedia.org/wiki/"
-"List_of_DNS_record_types\" target=\"_designate_record_defs\">mehr "
-"Informationen</a> zu Datensatztypen.\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - Adress Datensatz"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - IPv6 Adress Datensatz"
-
-msgid "All Records"
-msgstr "Alle Datensätze"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - Canonical Name Datensatz"
-
-msgid "Cancel"
-msgstr "Abbrechen"
-
-msgid "Canonical Name"
-msgstr "Canonical Name"
-
-msgid "Create Domain"
-msgstr "Domäne erstellen"
-
-msgid "Create Domain Record"
-msgstr "Erzeuge Datensatz für Domäne"
-
-msgid "Create Record"
-msgstr "Datensatz erzeugen"
-
-msgid "Create Record for"
-msgstr "Erzeuge Datensatz für"
-
-msgid "Created"
-msgstr "Erstellt"
-
-msgid "Created At"
-msgstr "Erstellt am"
-
-msgid "Data"
-msgstr "Daten"
-
-msgid "Delete"
-msgstr "Löschen"
-
-msgid "Deleted"
-msgstr "Gelöscht"
-
-msgid "Description"
-msgstr "Beschreibung"
-
-msgid "Domain"
-msgstr "Domäne"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "Domäne %(name)s erstellt."
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "Domäne %(name)s wurde geändert."
-
-msgid "Domain Detail"
-msgstr "Domänen Details"
-
-msgid "Domain Name"
-msgstr "Domänenname"
-
-msgid "Domain Overview"
-msgstr "Domänenübersicht"
-
-msgid "Domain Records"
-msgstr "Domänendatensatz"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "Domändatensatz %(name)s erstellt."
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "Domänendatensatz %(name)s aktualisiert."
-
-msgid "Domains"
-msgstr "Domänen"
-
-msgid "Edit Domain"
-msgstr "Domäne bearbeiten"
-
-msgid "Edit Record"
-msgstr "Datensatze bearbeiten"
-
-msgid "Email"
-msgstr "E-Mail"
-
-msgid "Enter a valid IPv4 address"
-msgstr "Geben Sie eine gültige IPv4 Addresse ein"
-
-msgid "Enter a valid IPv6 address"
-msgstr "Geben Sie eine gültige IPv6 Addresse ein"
-
-msgid "Enter a valid SRV name"
-msgstr "Geben Sie einen gültigen SRV Namen ein"
-
-msgid "Enter a valid SRV record"
-msgstr "Geben Sie einen gültigen SRV Datensatz ein"
-
-msgid "Enter a valid SSHFP record"
-msgstr "Geben Sie einen gültigen SSHFP Datensatz ein"
-
-msgid "Enter a valid domain name."
-msgstr "Geben Sie einen gültigen Domänennamen ein."
-
-msgid "Enter a valid hostname"
-msgstr "Geben Sie einen gültigen Hostnamen ein"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"Geben Sie einen gültien Hostnamen ein. Der Hostname darf nur Buchstaben und "
-"Nummern enthalten und darf nicht mehr als 63 Zeichen lang sein."
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "IP-Adresse"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - Mail Austausch Datensatz"
-
-msgid "Mail Server"
-msgstr "Mailserver"
-
-msgid "Manage Records"
-msgstr "Datensätze verwalten"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "Name"
-
-msgid "Name Server"
-msgstr "Nameserver"
-
-msgid "Nameservers"
-msgstr "Namensserver"
-
-msgid "None"
-msgstr "Keine"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - Pointer Datensatz"
-
-msgid "PTR Domain Name"
-msgstr "PTR Domänenname"
-
-msgid "Priority"
-msgstr "Priorität"
-
-msgid "Record"
-msgstr "Datensatz"
-
-msgid "Record Data"
-msgstr "Datensatz"
-
-msgid "Record Detail"
-msgstr "Datensatzdetails"
-
-msgid "Record Type"
-msgstr "Datensatztyp"
-
-msgid "Records"
-msgstr "Datensätze"
-
-msgid "Reverse DNS"
-msgstr "Reverse DNS"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - Sender Policy Framework"
-
-msgid "SRV - Service locator"
-msgstr "SRV - Dienstezeiger"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - SSH Fingerprint für öffentlichen Schlüssel"
-
-msgid "Select an IP"
-msgstr "Wähle eine IP"
-
-msgid "Serial"
-msgstr "Seriennummer"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (Sekunden)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - Text Datensatz"
-
-msgid "Text"
-msgstr "Text"
-
-msgid "The quotas could not be retrieved."
-msgstr "Die Kontingente konnten nicht abgerufen werden."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "Es stehen derzeit keine Floating IP-Adressen zur Auswahl."
-
-msgid "This field is required"
-msgstr "Dieses Feld ist erforderlich"
-
-msgid "Type"
-msgstr "Typ"
-
-msgid "Unable to create domain."
-msgstr "Die Domäne kann nicht erstellt werden."
-
-msgid "Unable to create record."
-msgstr "Datensatz konnte nicht erzeugt werden."
-
-msgid "Unable to retrieve domain list."
-msgstr "Domänen-Liste kann nicht abgerufen werden."
-
-msgid "Unable to retrieve domain record."
-msgstr "Domänendatensatz kann nicht abgerufen werden."
-
-msgid "Unable to retrieve record list."
-msgstr "Die Datensatzliste kann nicht abgerufen werden."
-
-msgid "Unable to update domain."
-msgstr "Die Domäne kann nicht geändert werden."
-
-msgid "Unknown"
-msgstr "Unbekannt"
-
-msgid "Unknown instance name"
-msgstr "Unbekannter Instanzname"
-
-msgid "Update Domain"
-msgstr "Domain ändern"
-
-msgid "Update Domain Record"
-msgstr "Domänendatensatz aktualisieren"
-
-msgid "Update Record"
-msgstr "Datensatz aktualisieren"
-
-msgid "Updated"
-msgstr "Aktualisiert"
-
-msgid "Updated At"
-msgstr "Aktualisiert am"
-
-msgid "Value"
-msgstr "Wert"
-
-msgid "Zones"
-msgstr "Zonen"
diff --git a/tatudashboard/locale/en_GB/LC_MESSAGES/django.mo b/tatudashboard/locale/en_GB/LC_MESSAGES/django.mo
deleted file mode 100644
index 5d868462887f6f5487757ee90d97f3214c157176..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6783
zcmeH~-ESR76~Lz@E##KcFQ6$<n1lpulD*g0b{*%|cH_i$;wDZmzBeC)BD20b_T6~B
zd$YUOt`VgY67Wz72@tI!Ktg@s0R;&}K~zFWfWkurQsDtYRUz>J666Ji7rqqnJG--X
z;*g3zz!RVQ+nF;vbLN~gvy(qOyzQ%s@(l7m<Ue;S^*nsz9)2iS->TGU_<PufeQ#6B
zgBRh);SKmtcy7B=55s0jsrSG|cpv;Md>noe-U~0mcfjw%`{B>vJK<}#{wMel^}j==
zRQE6lkLrH74eo$4&f`$@yCHvSpKTw8JE%Wpc^1k%7a)J?d43*%FF>*5Yw!c`+m=_L
zjQdx}pSo^&1By#ZZ_n5FpygipZrZ1y%=-!3zGC?$tG@)7(El9bVpYK?Syw-N430vX
z?+g^XT2T7MP}beG`cGMY-nM@kivM1MvaU;zkf<L+@zZ4}<Ngxzr>@%ipP{Vtx~=~U
zzJ>a|OfK;%!FRzPxC@R!Ojj<HaYHEmyO3Aanyr5UO8j1cV)r+oy#F#h3@=0R*LI8*
zy@ukqJ(goo;&BG<gsZlG(du7?V)t*L*!Mb=`TqvR4>xT6kq7gBJE8cw7fSpFEo<<1
zcPVucN`CJkdD}389=r-AzegX*^ZO!{{Qe4)NPd3{ieG;U#b3XI;+JcXC93OC?79mh
zc~lQTsqcp3pMEIon1Ev6aVY*c17)0NtiA<ho+aD93dLWav3v>2xZj1+?<Wu!s4GzH
zcpZvA|6;iv=gYjkQ2JLbN1^y<8p`@kTAqjesn78v^M2j7|G@G!$e+5#&l0@*(L8TM
zDC@caCBHunWxf}o*!41${Qe%4b-!ZuuUcNV?Z1ZNzu!Vx*EJ~l{ck9K+J;dw?tM`F
z@TjftfwIo3tsj7ruai*XH4SlzT7;6H&q2xWZ$cUOJ5c(+0%hDE+4?V_#P13eyWfEF
z{vV;__cj(Q{x}LnKL=4M&+<7a@putRe*e(cuUh>-pxFHoK@j^MgED^wiXTR8eHKc;
zPeSo?8%q2V%QZ-PXSQ)PXXX9;lE!KeBEEExBglSa4EYcuYx^i7MdCDooRNwx@|}?K
z1oAPYhKS#aa@sz8uxNnd2iZ$v-xMNc7Lo6b6p2R}IUp5V#FtMaPa#9LZP2m_r;#4y
zAhH(`ABi7uUslfYD{&Oxe;9c$Qj`%MaF6;((Ey)BcH6qduMd$tlRYm*VkQ2UT$8*V
zMvBsJA5Ox3_PMuE!YU#$mv~7TM~)#JJ*t5mMI_dwv^s}Kk=&a=jw6%E403ZhWh)g}
zM-CwxIf0BKs-&|r6-UduZDOO>qONYap*EhM>a=aNS$6$EyPg-DB++i@>1Ok|c9SG(
z`EF`Fz3QiJ?P@QgV_41xEQW3J{$%$4f^Py(C+(;UT2YwNmzP%D!1p#ykw$vn+%$nT
zF`GsVy3<4_+-0NhFwa6a2%HODW}|~=htQ$C(IW%fIntQ5`r)GPnAnfJ-rH9bby7bH
z-5_&9KACt+3=Y?1IbA~~T{R}u)y!M{)xrIP!vjNu`|Tu&Vf|jRG4@DjEK`jnX&i-%
zWB7NZVxKdGxKW($Cs{;Nf7v)`<OKc-3y$KfF=o`*+oy5sO%se%vayR98ph}mSGQxc
zFuJRqrkz@)V#4yOzvOoaxLc0m#fsD_$NeOoix%c4PBiB7q36=Ij!Aau)QuNSI=XAl
zGl{<#k^)5s&nzUn#+D<p$PX8yk%~K}qfqCs>+E$|w6#f%Ye$dUw95OaaSE-|^_8LZ
zj4M<@pl7o+ChG8s@tH~b9d^Sg^jkzDi=^#IYs&;`Ln(=&4#x&l^+cAXx7O^qMPok8
ztu=A8ZSe}~@l;K?sjDVTU{Yh@!K4-YS)M36T@JmcN9^oPbSpE)D_i}BqTBIgPpvB^
z3>zgVx@8NoW1U<v@rrL&3tizGtImC~G4SRYH|sY|oTy3J|JMBM*}5g$&T2ADO}xH;
ziPvBeuiI7Yq1>cu%%0BT_CK0)>ozMIN2lsGn>MMuEUMXP<xQ$~l%(SIJ2aQIY_6iy
z<^zhjvd;X}3%kqnJnzdkHTyk`be8IAoBcmDpj&M>c3aZDtfnW_biGJ!HFK6+osm=2
zJWH=|(G;u58XE-C#A?P3T{O9y6Lq4YvT)0fwq4{o$$F!YLZj-<S%$7heijbvHEFb2
zkd091D2x4cP1y+M&{^sh&v}~JT9b`#J0}q15;hJ7HBOGJMtzDY8z%HffO-`8tu;Lr
zW7ujGFDZ$sXi3eM(LvO5Q#MW`iyZBZqq^Rm=N)~_@ERwri90dYs|I_hmEv1AKb6>b
z1I3XiqI>Lt)~lLln<7lnG|#4m7v)(=7%z0A)Ma;NADJ*p<yekQ8vCq)Jw+FeCKn-g
z3qj<ja?}$j`*Ab8+Kpoqrooz=qg|HG$0*57Ti_EZV{i!P=ROayxzP1v<EhMLr$To=
z$X>~JTk)k*w<+T6AS>UbD9kKAO#$cco9W+Vgj}UJkC5;1n`~MNqty@-GP2$zm4h?i
zlBcqBsM!Cv)O4OD$~N9o^K7dpXX9!47^-vRX`<?Jbe{M+)1Gshbm9|Q)9c?4$8(eR
zeB{QS9w_(8zqr+3_RPvqY1VY2ICW-{Mc;D{br%z-8P&9Wxe`8I^E8wLw;Q(F9oH*|
zCapvrBMWIQIev9Gtd!~}n@)E0Go?eyo0{(Ls}4EUKBqdUt9`X6s(bq=rJ3oO$qn18
z<-XEkZYkt~BeAXNlq9Qk0<JAjW?Mbs8+fWY<qU81i`_6;FtIZkwjz(zs_Ef*Kg9%x
zP2|g>H(Ag>p!*Kg`UY|fj=Kqy$smF3nwlODxpR@vPrHVFqDRhW<Ob#+T$D>yxfLys
zm5y_ubU8Vkrg4{RdNN!j@@?I7D)i-cb__!}9(&jO)wBtnBZo?7og*eRaX!^K4xiM;
z{rk%UrFzhf-N2cO;^m~K!%kLBM*E-C`QvC$sCSO)YHz8y=WSgdvs?7m^>OR^SR9Yp
jp;LU$x2}(cTehx`@;~UU>*Ln-aqIdh{~!PVu8;o(SpvJ5

diff --git a/tatudashboard/locale/en_GB/LC_MESSAGES/django.po b/tatudashboard/locale/en_GB/LC_MESSAGES/django.po
deleted file mode 100644
index 22fa28a..0000000
--- a/tatudashboard/locale/en_GB/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,351 +0,0 @@
-# OpenStack Infra <zanata@openstack.org>, 2015. #zanata
-# Rob Cresswell <robert.cresswell@outlook.com>, 2015. #zanata
-# Andi Chandler <andi@gowling.com>, 2016. #zanata
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 3.0.0.0rc2.dev6\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2016-10-14 10:51+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-10-23 09:03+0000\n"
-"Last-Translator: Andreas Jaeger <jaegerandi@gmail.com>\n"
-"Language-Team: English (United Kingdom)\n"
-"Language: en-GB\n"
-"X-Generator: Zanata 3.7.3\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - Address record"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - IPv6 address record"
-
-msgid "All Records"
-msgstr "All Records"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - Canonical name record"
-
-msgid "Cancel"
-msgstr "Cancel"
-
-msgid "Canonical Name"
-msgstr "Canonical Name"
-
-msgid "Create Domain"
-msgstr "Create Domain"
-
-msgid "Create Domain Record"
-msgstr "Create Domain Record"
-
-msgid "Create Record"
-msgstr "Create Record"
-
-msgid "Create Record for"
-msgstr "Create Record for"
-
-msgid "Created"
-msgstr "Created"
-
-msgid "Created At"
-msgstr "Created At"
-
-msgid "Data"
-msgstr "Data"
-
-msgid "Delete"
-msgstr "Delete"
-
-msgid "Deleted"
-msgstr "Deleted"
-
-msgid "Description"
-msgstr "Description"
-
-msgid "Domain"
-msgstr "Domain"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "Domain %(name)s created."
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "Domain %(name)s updated."
-
-msgid "Domain Detail"
-msgstr "Domain Detail"
-
-msgid "Domain Name"
-msgstr "Domain Name"
-
-msgid "Domain Overview"
-msgstr "Domain Overview"
-
-msgid "Domain Records"
-msgstr "Domain Records"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "Domain record %(name)s created."
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "Domain record %(name)s updated."
-
-msgid "Domains"
-msgstr "Domains"
-
-msgid "Edit Domain"
-msgstr "Edit Domain"
-
-msgid "Edit Record"
-msgstr "Edit Record"
-
-msgid "Email"
-msgstr "Email"
-
-msgid "Enter a valid IPv4 address"
-msgstr "Enter a valid IPv4 address"
-
-msgid "Enter a valid IPv6 address"
-msgstr "Enter a valid IPv6 address"
-
-msgid "Enter a valid SRV name"
-msgstr "Enter a valid SRV name"
-
-msgid "Enter a valid SRV record"
-msgstr "Enter a valid SRV record"
-
-msgid "Enter a valid SSHFP record"
-msgstr "Enter a valid SSHFP record"
-
-msgid "Enter a valid domain name."
-msgstr "Enter a valid domain name."
-
-msgid "Enter a valid hostname"
-msgstr "Enter a valid hostname"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "IP Address"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - Mail exchange record"
-
-msgid "Mail Server"
-msgstr "Mail Server"
-
-msgid "Manage Records"
-msgstr "Manage Records"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "Name"
-
-msgid "Name Server"
-msgstr "Name Server"
-
-msgid "Nameservers"
-msgstr "Nameservers"
-
-msgid "None"
-msgstr "None"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - Pointer record"
-
-msgid "PTR Domain Name"
-msgstr "PTR Domain Name"
-
-msgid "Priority"
-msgstr "Priority"
-
-msgid "Record"
-msgstr "Record"
-
-msgid "Record Data"
-msgstr "Record Data"
-
-msgid "Record Detail"
-msgstr "Record Detail"
-
-msgid "Record Type"
-msgstr "Record Type"
-
-msgid "Records"
-msgstr "Records"
-
-msgid "Reverse DNS"
-msgstr "Reverse DNS"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - Sender Policy Framework"
-
-msgid "SRV - Service locator"
-msgstr "SRV - Service locator"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - SSH Public Key Fingerprint"
-
-msgid "Select an IP"
-msgstr "Select an IP"
-
-msgid "Serial"
-msgstr "Serial"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (seconds)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - Text record"
-
-msgid "Text"
-msgstr "Text"
-
-msgid "The quotas could not be retrieved."
-msgstr "The quotas could not be retrieved."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "There are no floating IP addresses currently in use to select from."
-
-msgid "This field is required"
-msgstr "This field is required"
-
-msgid "Type"
-msgstr "Type"
-
-msgid "Unable to create domain."
-msgstr "Unable to create domain."
-
-msgid "Unable to create record."
-msgstr "Unable to create record."
-
-msgid "Unable to retrieve domain list."
-msgstr "Unable to retrieve domain list."
-
-msgid "Unable to retrieve domain record."
-msgstr "Unable to retrieve domain record."
-
-msgid "Unable to retrieve record list."
-msgstr "Unable to retrieve record list."
-
-msgid "Unable to update domain."
-msgstr "Unable to update domain."
-
-msgid "Unknown"
-msgstr "Unknown"
-
-msgid "Unknown instance name"
-msgstr "Unknown instance name"
-
-msgid "Update Domain"
-msgstr "Update Domain"
-
-msgid "Update Domain Record"
-msgstr "Update Domain Record"
-
-msgid "Update Record"
-msgstr "Update Record"
-
-msgid "Updated"
-msgstr "Updated"
-
-msgid "Updated At"
-msgstr "Updated At"
-
-msgid "Value"
-msgstr "Value"
-
-msgid "Zones"
-msgstr "Zones"
diff --git a/tatudashboard/locale/es/LC_MESSAGES/django.mo b/tatudashboard/locale/es/LC_MESSAGES/django.mo
deleted file mode 100644
index a920e4e0ca873afb5bcb82b5517c66c272b4b405..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7000
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

diff --git a/tatudashboard/locale/es/LC_MESSAGES/django.po b/tatudashboard/locale/es/LC_MESSAGES/django.po
deleted file mode 100644
index d647e74..0000000
--- a/tatudashboard/locale/es/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,342 +0,0 @@
-# Marian Tort <marian.tort@gmail.com>, 2015. #zanata
-# OpenStack Infra <zanata@openstack.org>, 2015. #zanata
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-# Eugènia Torrella <tester03@es.ibm.com>, 2016. #zanata
-# Alberto Molina Coballes <alb.molina@gmail.com>, 2017. #zanata
-# Zeus Arias Lucero <zeusariaslucero@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 5.0.0.0rc2.dev4\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2017-08-23 14:30+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-08-24 09:39+0000\n"
-"Last-Translator: Zeus Arias Lucero <zeusariaslucero@gmail.com>\n"
-"Language-Team: Spanish\n"
-"Language: es\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Desde aquí puede editar la dirección de correo y el TTL asociado a un "
-"dominio.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      El campo nombre debe contener un full-qualified domain name (con \n"
-"      punto final).\n"
-"    "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"      El campo opcional TTL puede tener un valor entre 1 y 2147483647\n"
-"      segundos.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    El  TTL es el tiempo de vida del registro en segundos.\n"
-"  </p>\n"
-"  <p>\n"
-"    Vea <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">más info</a> sobre tipos de registros.\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - Registro de dirección IPv4"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - Registro de dirección IPv6"
-
-msgid "All Records"
-msgstr "Todos los registros"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - Registro de nombre canónico"
-
-msgid "Cancel"
-msgstr "Cancelar "
-
-msgid "Canonical Name"
-msgstr "Nombre canónico"
-
-msgid "Create Domain"
-msgstr "Crear dominio"
-
-msgid "Create Domain Record"
-msgstr "Crear registro del dominio"
-
-msgid "Create Record"
-msgstr "Crear registro"
-
-msgid "Create Record for"
-msgstr "Crear registro para"
-
-msgid "Created"
-msgstr "Creado"
-
-msgid "Created At"
-msgstr "Creado el"
-
-msgid "Data"
-msgstr "Datos"
-
-msgid "Delete"
-msgstr "Eliminar"
-
-msgid "Deleted"
-msgstr "Eliminado"
-
-msgid "Description"
-msgstr "Descripción"
-
-msgid "Domain"
-msgstr "Dominio"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "Dominio %(name)s creado."
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "Dominio %(name)s actualizado."
-
-msgid "Domain Detail"
-msgstr "Detalles del dominio"
-
-msgid "Domain Name"
-msgstr "Nombre de dominio"
-
-msgid "Domain Overview"
-msgstr "Visión general del dominio"
-
-msgid "Domain Records"
-msgstr "Registros del dominio"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "Registro de dominio %(name)s creado"
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "Registro de dominio %(name)s actualizado"
-
-msgid "Domains"
-msgstr "Dominios"
-
-msgid "Edit Domain"
-msgstr "Editar dominio"
-
-msgid "Edit Record"
-msgstr "Editar registro"
-
-msgid "Email"
-msgstr "Correo electrónico"
-
-msgid "Enter a valid IPv4 address"
-msgstr "Introduzca una dirección IPv4 válida"
-
-msgid "Enter a valid IPv6 address"
-msgstr "Introduzca una dirección IPv6 válida"
-
-msgid "Enter a valid SRV name"
-msgstr "Introduzca un nombre SRV válido"
-
-msgid "Enter a valid SRV record"
-msgstr "Introduzca un registro SRV válido"
-
-msgid "Enter a valid SSHFP record"
-msgstr "Introduzca un registro SSHFP válido"
-
-msgid "Enter a valid domain name."
-msgstr "Introduzca un nombre de dominio válido."
-
-msgid "Enter a valid hostname"
-msgstr "Introduzca un hostname válido"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"Introduzca un hostname válido. El hostname puede incluir letras, números y "
-"no tener más de 63 caracteres."
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "Dirección IP"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - Registro de Mail exchange"
-
-msgid "Mail Server"
-msgstr "Servidor de correo"
-
-msgid "Manage Records"
-msgstr "Gestionar registros"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "Nombre"
-
-msgid "Name Server"
-msgstr "Servidor de nombres"
-
-msgid "Nameservers"
-msgstr "Servidores de nombres"
-
-msgid "None"
-msgstr "Ninguno"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - Registro de puntero"
-
-msgid "PTR Domain Name"
-msgstr "Nombre de dominio PTR"
-
-msgid "Priority"
-msgstr "Prioridad"
-
-msgid "Record"
-msgstr "Registro"
-
-msgid "Record Data"
-msgstr "Registro"
-
-msgid "Record Detail"
-msgstr "Detalles del registro"
-
-msgid "Record Type"
-msgstr "Tipo de registro"
-
-msgid "Records"
-msgstr "Registros"
-
-msgid "Reverse DNS"
-msgstr "DNS inverso"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - Sender Policy Framework"
-
-msgid "SRV - Service locator"
-msgstr "SRV - Servicio locator"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - Huella digital de clave SSH pública"
-
-msgid "Select an IP"
-msgstr "Seleccione una IP"
-
-msgid "Serial"
-msgstr "Serial"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (segundos)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - Registro de texto"
-
-msgid "Text"
-msgstr "Texto"
-
-msgid "The quotas could not be retrieved."
-msgstr "No ha sido posible obtener las cuotas."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "Actualmente no hay direcciones IP flotantes en uso para seleccionar."
-
-msgid "This field is required"
-msgstr "Este campo es obligatorio"
-
-msgid "Type"
-msgstr "Tipo"
-
-msgid "Unable to create domain."
-msgstr "No ha sido posible crear el dominio."
-
-msgid "Unable to create record."
-msgstr "No ha sido posible crear el registro."
-
-msgid "Unable to retrieve domain list."
-msgstr "No ha sido posible obtener la lista de dominios."
-
-msgid "Unable to retrieve domain record."
-msgstr "No ha sido posible obtener el registro del dominio."
-
-msgid "Unable to retrieve record list."
-msgstr "No ha sido posible obtener la lista de registros."
-
-msgid "Unable to update domain."
-msgstr "No ha sido posible actualizar el dominio."
-
-msgid "Unknown"
-msgstr "Desconocido"
-
-msgid "Unknown instance name"
-msgstr "Nombre de instancia desconicodo"
-
-msgid "Update Domain"
-msgstr "Actualizar dominio"
-
-msgid "Update Domain Record"
-msgstr "Actualizar registro del dominio"
-
-msgid "Update Record"
-msgstr "Actualizar registro"
-
-msgid "Updated"
-msgstr "Actualizada"
-
-msgid "Updated At"
-msgstr "Actualizado el"
-
-msgid "Value"
-msgstr "Valor"
-
-msgid "Zones"
-msgstr "Zonas"
diff --git a/tatudashboard/locale/fr/LC_MESSAGES/django.mo b/tatudashboard/locale/fr/LC_MESSAGES/django.mo
deleted file mode 100644
index 95b355df71d4bfeb6bcf144a549f1b9c211870f5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7398
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
YT-#aCsM*b{sr4N}<s(JnJO4`gH-p5}e*gdg

diff --git a/tatudashboard/locale/fr/LC_MESSAGES/django.po b/tatudashboard/locale/fr/LC_MESSAGES/django.po
deleted file mode 100644
index 95efa45..0000000
--- a/tatudashboard/locale/fr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,362 +0,0 @@
-# Translations template for designate-dashboard.
-# Copyright (C) 2015 ORGANIZATION
-# This file is distributed under the same license as the designate-dashboard
-# project.
-#
-# Translators:
-# Lucas Mascaro <mascaro.lucas@yahoo.fr>, 2015
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-# Gael Rehault <gael_rehault@dell.com>, 2016. #zanata
-# Gérald LONLAS <g.lonlas@gmail.com>, 2016. #zanata
-# Gaelle <pattedeph@gmail.com>, 2017. #zanata
-# JF Taltavull <jftalta@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 6.0.0.0b2.dev3\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2017-11-21 15:00+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-11-14 07:52+0000\n"
-"Last-Translator: Gaelle <pattedeph@gmail.com>\n"
-"Language: fr\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"Generated-By: Babel 2.0\n"
-"X-Generator: Zanata 3.9.6\n"
-"Language-Team: French\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Ici vous pouvez éditer l'adresse email e t le TTL associés à un "
-"domaine.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Le champ Email doit contenir un email valide qui sera associé \n"
-"      avec le domaine.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      Le champ Nom doit contenir un nom de domaine (FQDN avec le\n"
-"      point \".\" de terminaison).\n"
-"    "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"      La valeur du champ optionnel TTL doit être comprise entre 1 et "
-"2147483647\n"
-"      secondes.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    Le TTL est le time-to-live de l'enregistrement, en secondes.\n"
-"  </p>\n"
-"  <p>\n"
-"    Voir <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">plus de détails</a> sur les types "
-"d'enregistrement.\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - Enregistrement d'Adresse"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - Enregistrement d'Adresse IPv6"
-
-msgid "All Records"
-msgstr "Tous les enregistrements"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - Enregistrement de Nom Canonique"
-
-msgid "Cancel"
-msgstr "Annuler"
-
-msgid "Canonical Name"
-msgstr "Nom canonique"
-
-msgid "Create Domain"
-msgstr "Créer un domaine"
-
-msgid "Create Domain Record"
-msgstr "Créer un enregistrement de domaine"
-
-msgid "Create Record"
-msgstr "Créer un enregistrement"
-
-msgid "Create Record for"
-msgstr "Créer un enregistrement pour"
-
-msgid "Created"
-msgstr "Créé"
-
-msgid "Created At"
-msgstr "Créé le"
-
-msgid "Data"
-msgstr "Données"
-
-msgid "Delete"
-msgstr "Supprimer"
-
-msgid "Deleted"
-msgstr "Supprimé"
-
-msgid "Description"
-msgstr "Description"
-
-msgid "Domain"
-msgstr "Domaine"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "Domaine %(name)s créé."
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "Domaine %(name)s mis à jour."
-
-msgid "Domain Detail"
-msgstr "Détail du domaine"
-
-msgid "Domain Name"
-msgstr "Nom de domaine"
-
-msgid "Domain Overview"
-msgstr "Vue d'ensemble du domaine"
-
-msgid "Domain Records"
-msgstr "Enregistrements de domaine"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "Enregistrement Domaine %(name)s créé"
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "Enregistrement Domaine %(name)s mis à jour."
-
-msgid "Domains"
-msgstr "Domaines"
-
-msgid "Edit Domain"
-msgstr "Editer le domaine"
-
-msgid "Edit Record"
-msgstr "Editer l'enregistrement"
-
-msgid "Email"
-msgstr "Courriel"
-
-msgid "Enter a valid IPv4 address"
-msgstr "Entrer une adresse IPv4 valide"
-
-msgid "Enter a valid IPv6 address"
-msgstr "Entrer une adresse IPv6 valide"
-
-msgid "Enter a valid SRV name"
-msgstr "Entrer un nom SRV valide"
-
-msgid "Enter a valid SRV record"
-msgstr "Entrer un enregistrement SRV valide"
-
-msgid "Enter a valid SSHFP record"
-msgstr "Entrer un enregistrement SSHFP valide"
-
-msgid "Enter a valid domain name."
-msgstr "Entrer un nom de domaine valide."
-
-msgid "Enter a valid hostname"
-msgstr "Entrer un nom d'hôte valide"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"Entrer un nom d'hôte valide. Le nom d'hôte ne doit contenir que des lettres "
-"et des chiffres, et ne doit pas dépasser 63 caractères."
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "Adresse IP"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - Enregistrement de Serveur de messagerie"
-
-msgid "Mail Server"
-msgstr "Serveur de messagerie"
-
-msgid "Manage Records"
-msgstr "Gérer les enregistrements"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "Nom"
-
-msgid "Name Server"
-msgstr "Nom de serveur"
-
-msgid "Nameservers"
-msgstr "Serveurs de nom"
-
-msgid "None"
-msgstr "Aucun"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - Enregistrement de Pointeur"
-
-msgid "PTR Domain Name"
-msgstr "Nom de domaine PTR"
-
-msgid "Priority"
-msgstr "Priorité"
-
-msgid "Record"
-msgstr "Enregistrement"
-
-msgid "Record Data"
-msgstr "Enregistrer les données"
-
-msgid "Record Detail"
-msgstr "Détail de l'enregistrement"
-
-msgid "Record Type"
-msgstr "Type d'enregistrement"
-
-msgid "Records"
-msgstr "Enregistrements"
-
-msgid "Reverse DNS"
-msgstr "Reverse DNS"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - Politique d’émission"
-
-msgid "SRV - Service locator"
-msgstr "SRV - Enregistrement de Service"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - Somme de contrôle de la clé SSH publique"
-
-msgid "Select an IP"
-msgstr "Sélectionner une IP"
-
-msgid "Serial"
-msgstr "Numéro de série"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (secondes)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - Enregistrement Texte"
-
-msgid "Text"
-msgstr "Texte"
-
-msgid "The quotas could not be retrieved."
-msgstr "Les quotas n'ont pas pu être récupérés."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "Aucune adresse IP flottante en cours d'utilisation à sélectionner."
-
-msgid "This field is required"
-msgstr "Ce champ est requis"
-
-msgid "Type"
-msgstr "Type"
-
-msgid "Unable to create domain."
-msgstr "Impossible de créer le domaine."
-
-msgid "Unable to create record."
-msgstr "Impossible de créer un enregistrement"
-
-msgid "Unable to retrieve domain list."
-msgstr "Impossible de récupérer la liste des domaines."
-
-msgid "Unable to retrieve domain record."
-msgstr "Impossible de récupérer l'enregistrement de domaine."
-
-msgid "Unable to retrieve record list."
-msgstr "Impossible de récupérer la liste des enregistrements."
-
-msgid "Unable to update domain."
-msgstr "Impossible de mettre à jour le domaine."
-
-msgid "Unknown"
-msgstr "Inconnu"
-
-msgid "Unknown instance name"
-msgstr "Nom d'instance inconnu"
-
-msgid "Update Domain"
-msgstr "Mettre à jour le domaine"
-
-msgid "Update Domain Record"
-msgstr "Mettre à jour  l'enregistrement de domaine"
-
-msgid "Update Record"
-msgstr "Mettre à jour l'enregistrement"
-
-msgid "Updated"
-msgstr "Mis à jour"
-
-msgid "Updated At"
-msgstr "Mis à jour le"
-
-msgid "Value"
-msgstr "Valeur"
-
-msgid "Zones"
-msgstr "Zones"
diff --git a/tatudashboard/locale/id/LC_MESSAGES/django.mo b/tatudashboard/locale/id/LC_MESSAGES/django.mo
deleted file mode 100644
index 46ae6703b34b27ef71a86b4f5f31aec18c6b2a9e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7183
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

diff --git a/tatudashboard/locale/id/LC_MESSAGES/django.po b/tatudashboard/locale/id/LC_MESSAGES/django.po
deleted file mode 100644
index 25ba70e..0000000
--- a/tatudashboard/locale/id/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,350 +0,0 @@
-# OpenStack Infra <zanata@openstack.org>, 2015. #zanata
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-# suhartono <cloudsuhartono@gmail.com>, 2016. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 3.0.0.0rc2.dev5\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2016-09-29 13:19+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-10-13 04:32+0000\n"
-"Last-Translator: suhartono <cloudsuhartono@gmail.com>\n"
-"Language-Team: Indonesian\n"
-"Language: id\n"
-"X-Generator: Zanata 3.7.3\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Dari sini Anda dapat mengedit alamat email dan TTL terkait dengan "
-"domain.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"Kolom email harus berisi alamat email yang valid terkait\n"
-"       dengan domain.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"      Kolom TTL opsional dapat berupa nilai antara 1 dan 2147483647\n"
-"      detik.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    TTL adalah time-to-live untuk rekor, dalam hitungan detik.\n"
-"  </p>\n"
-"  <p>\n"
-"    Lihat <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> pada tipe rekor.\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - Address record"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - IPv6 address record"
-
-msgid "All Records"
-msgstr "All Records (semua rekor)"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - Canonical name record"
-
-msgid "Cancel"
-msgstr "Batal"
-
-msgid "Canonical Name"
-msgstr "Canonical Name (nama canonical)"
-
-msgid "Create Domain"
-msgstr "Membuat Domain"
-
-msgid "Create Domain Record"
-msgstr "Create Domain Record (buat rekor domain)"
-
-msgid "Create Record"
-msgstr "Buat rekor"
-
-msgid "Create Record for"
-msgstr "Buat rekor"
-
-msgid "Created"
-msgstr "Created (dibuat)"
-
-msgid "Created At"
-msgstr "Created At (dibuat pada)"
-
-msgid "Data"
-msgstr "Data"
-
-msgid "Delete"
-msgstr "Hapus"
-
-msgid "Deleted"
-msgstr "Terhapus"
-
-msgid "Description"
-msgstr "Deskripsi"
-
-msgid "Domain"
-msgstr "Domain"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "Domain %(name)s dibuat."
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "Domain %(name)s diperbaharui."
-
-msgid "Domain Detail"
-msgstr "Domain Detail (rincian domain)"
-
-msgid "Domain Name"
-msgstr "Nama domain"
-
-msgid "Domain Overview"
-msgstr "Domain Overview (ikhtisar domain)"
-
-msgid "Domain Records"
-msgstr "Domain Records (rekor domain)"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "Rekor domain %(name)s dibuat."
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "Rekor domain %(name)s diperbaharui"
-
-msgid "Domains"
-msgstr "Domain"
-
-msgid "Edit Domain"
-msgstr "Mengedit domain"
-
-msgid "Edit Record"
-msgstr "Mengedit recor"
-
-msgid "Email"
-msgstr "Surat elektronik"
-
-msgid "Enter a valid IPv4 address"
-msgstr "Masukkan alamat IPv4 yang valid"
-
-msgid "Enter a valid IPv6 address"
-msgstr "Masukkan alamat IPv6 yang valid"
-
-msgid "Enter a valid SRV name"
-msgstr "Masukkan nama SRV valid"
-
-msgid "Enter a valid SRV record"
-msgstr "Masukkan rekor SRV valid"
-
-msgid "Enter a valid SSHFP record"
-msgstr "Masukkan rekor SSHFP valid"
-
-msgid "Enter a valid domain name."
-msgstr "Masukkan nama domain yang valid."
-
-msgid "Enter a valid hostname"
-msgstr "Masukkan hostname yang valid"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"Masukkan hostname yang valid. Hostname harus berisi huruf dan angka, dan "
-"tidak lebih dari 63 karakter."
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "IP Address (alamat IP)"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - Mail exchange record"
-
-msgid "Mail Server"
-msgstr "Mail Server (server mail)"
-
-msgid "Manage Records"
-msgstr "Mengelola rekor"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "Name (nama)"
-
-msgid "Name Server"
-msgstr "Name Server (server nama)"
-
-msgid "Nameservers"
-msgstr "Nameservers"
-
-msgid "None"
-msgstr "None (tak satupun)"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - Pointer record"
-
-msgid "PTR Domain Name"
-msgstr "PTR Domain Name (nama domain PTR)"
-
-msgid "Priority"
-msgstr "Priority (prioritas)"
-
-msgid "Record"
-msgstr "Record (rekor)"
-
-msgid "Record Data"
-msgstr "Record Data (data rekam)"
-
-msgid "Record Detail"
-msgstr "Record Detail (rincian rekor)"
-
-msgid "Record Type"
-msgstr "Record Type (tipe rekam)"
-
-msgid "Records"
-msgstr "Records (rekor)"
-
-msgid "Reverse DNS"
-msgstr "Reverse DNS "
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - Sender Policy Framework"
-
-msgid "SRV - Service locator"
-msgstr "SRV - Service locator"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - SSH Public Key Fingerprint"
-
-msgid "Select an IP"
-msgstr "Pilih IP"
-
-msgid "Serial"
-msgstr "Serial (serial)"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (detik)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - Text record"
-
-msgid "Text"
-msgstr "Text"
-
-msgid "The quotas could not be retrieved."
-msgstr "Kuota tidak dapat diambil."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "Tidak ada alamat IP mengambang saat ini yang digunakan untuk memilih."
-
-msgid "This field is required"
-msgstr "Bagian ini diperlukan"
-
-msgid "Type"
-msgstr "Tipe"
-
-msgid "Unable to create domain."
-msgstr "Tidak dapat membuat domain."
-
-msgid "Unable to create record."
-msgstr "Tidak dapat membuat rekor."
-
-msgid "Unable to retrieve domain list."
-msgstr "Tidak dapat mengambil daftar domain."
-
-msgid "Unable to retrieve domain record."
-msgstr "Tidak dapat mengambil rekor domain."
-
-msgid "Unable to retrieve record list."
-msgstr "Tidak dapat mengambil daftar rekor."
-
-msgid "Unable to update domain."
-msgstr "Tidak dapat memperbarui domain."
-
-msgid "Unknown"
-msgstr "Unknown (tidak diketahui)"
-
-msgid "Unknown instance name"
-msgstr " nama instance tidak diketahui"
-
-msgid "Update Domain"
-msgstr "Update Domain (pembaharui domain)"
-
-msgid "Update Domain Record"
-msgstr "Update Domain Record (pembaharuan rekor domain)"
-
-msgid "Update Record"
-msgstr "Pembaruan rekor"
-
-msgid "Updated"
-msgstr "Updated (sudah di perbaharui)"
-
-msgid "Updated At"
-msgstr "Diperbarui pada"
-
-msgid "Value"
-msgstr "Value (nilai)"
-
-msgid "Zones"
-msgstr "Zones (zona)"
diff --git a/tatudashboard/locale/ja/LC_MESSAGES/django.mo b/tatudashboard/locale/ja/LC_MESSAGES/django.mo
deleted file mode 100644
index 1681c82ae8a0aeb4bf9c00a0183ecf97d10631c3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7759
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
Z>h#a`uNr<Mt!i-5L;&GBjFozv{U6$IR1W|E

diff --git a/tatudashboard/locale/ja/LC_MESSAGES/django.po b/tatudashboard/locale/ja/LC_MESSAGES/django.po
deleted file mode 100644
index 3c9f714..0000000
--- a/tatudashboard/locale/ja/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,347 +0,0 @@
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-# Mie Yamamoto <myamamot@redhat.com>, 2016. #zanata
-# Yoshiki Eguchi <yoshiki.eguchi@gmail.com>, 2016. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 3.0.0.0rc2.dev5\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2016-09-29 13:19+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-10-13 04:32+0000\n"
-"Last-Translator: Akihiro Motoki <amotoki@gmail.com>\n"
-"Language-Team: Japanese\n"
-"Language: ja\n"
-"X-Generator: Zanata 3.7.3\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"      ここでドメインに関連付けられたメールアドレスと TTL を編集できます。\n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"      メールフィールドには、ドメインに関連付ける\n"
-"      有効なメールアドレスを指定する必要があります。\n"
-"    "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      名前フィールドには、\n"
-"      (末尾がピリオドの) 完全修飾ドメイン名を指定する必要があります。\n"
-"    "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"      オプションの TTL フィールドは\n"
-"      1 秒から 2147483647 秒までの任意の値にできます。\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    TTL はこのレコードの生存時間 (time-to-live) で、単位は秒です。\n"
-"  </p>\n"
-"  <p>\n"
-"    レコードタイプの詳細は<a href=\"http://en.wikipedia.org/wiki/"
-"List_of_DNS_record_types\" target=\"_designate_record_defs\">こちら</a>を参照"
-"してください。\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - アドレスレコード"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - IPv6 アドレスレコード"
-
-msgid "All Records"
-msgstr "全レコード"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - 別名レコード"
-
-msgid "Cancel"
-msgstr "取り消し"
-
-msgid "Canonical Name"
-msgstr "正規名"
-
-msgid "Create Domain"
-msgstr "ドメインの作成"
-
-msgid "Create Domain Record"
-msgstr "ドメインレコードの作成"
-
-msgid "Create Record"
-msgstr "レコードの作成"
-
-msgid "Create Record for"
-msgstr "レコードの作成: ドメイン"
-
-msgid "Created"
-msgstr "作成時刻"
-
-msgid "Created At"
-msgstr "作成時刻"
-
-msgid "Data"
-msgstr "データ"
-
-msgid "Delete"
-msgstr "削除"
-
-msgid "Deleted"
-msgstr "削除"
-
-msgid "Description"
-msgstr "説明"
-
-msgid "Domain"
-msgstr "ドメイン"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "ドメイン %(name)s が作成されました。"
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "ドメイン %(name)s が更新されました。"
-
-msgid "Domain Detail"
-msgstr "ドメインの詳細"
-
-msgid "Domain Name"
-msgstr "ドメイン名"
-
-msgid "Domain Overview"
-msgstr "ドメインの概要"
-
-msgid "Domain Records"
-msgstr "ドメインレコード"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "ドメインレコード %(name)s が作成されました。"
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "ドメインレコード %(name)s が更新されました。"
-
-msgid "Domains"
-msgstr "ドメイン"
-
-msgid "Edit Domain"
-msgstr "ドメインの編集"
-
-msgid "Edit Record"
-msgstr "レコードの編集"
-
-msgid "Email"
-msgstr "メール"
-
-msgid "Enter a valid IPv4 address"
-msgstr "有効な IPv4 アドレスを入力してください。"
-
-msgid "Enter a valid IPv6 address"
-msgstr "有効な IPv6 アドレスを入力してください。"
-
-msgid "Enter a valid SRV name"
-msgstr "有効な SRV 名を入力してください。"
-
-msgid "Enter a valid SRV record"
-msgstr "有効な SRV レコードを入力してください。"
-
-msgid "Enter a valid SSHFP record"
-msgstr "有効な SSHFP レコードを入力してください。"
-
-msgid "Enter a valid domain name."
-msgstr "有効なドメイン名を入力してください。"
-
-msgid "Enter a valid hostname"
-msgstr "有効なホスト名を入力してください。"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"有効なホスト名を入力してください。ホスト名は、文字と数字で 63 文字以内に設定"
-"してください。"
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "IP アドレス"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - Mail exchange レコード"
-
-msgid "Mail Server"
-msgstr "メールサーバー"
-
-msgid "Manage Records"
-msgstr "レコードの管理"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "名前"
-
-msgid "Name Server"
-msgstr "ネームサーバー"
-
-msgid "Nameservers"
-msgstr "ネームサーバー"
-
-msgid "None"
-msgstr "なし"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - ポインターレコード"
-
-msgid "PTR Domain Name"
-msgstr "PTR ドメイン名"
-
-msgid "Priority"
-msgstr "優先度"
-
-msgid "Record"
-msgstr "レコード"
-
-msgid "Record Data"
-msgstr "レコードデータ"
-
-msgid "Record Detail"
-msgstr "レコードの詳細"
-
-msgid "Record Type"
-msgstr "レコード種別"
-
-msgid "Records"
-msgstr "レコード"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - Sender Policy Framework"
-
-msgid "SRV - Service locator"
-msgstr "SRV - サービスロケーター"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - SSH 公開鍵フィンガープリント"
-
-msgid "Select an IP"
-msgstr "IP を選択してください"
-
-msgid "Serial"
-msgstr "シリアル"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (秒)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - テキストレコード"
-
-msgid "Text"
-msgstr "テキスト"
-
-msgid "The quotas could not be retrieved."
-msgstr "クォータを取得できませんでした。"
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "選択可能な現在使用中の Floating IP がありません。"
-
-msgid "This field is required"
-msgstr "このフィールドは必須です"
-
-msgid "Type"
-msgstr "種別"
-
-msgid "Unable to create domain."
-msgstr "ドメインを作成できません。"
-
-msgid "Unable to create record."
-msgstr "レコードを作成できません。"
-
-msgid "Unable to retrieve domain list."
-msgstr "ドメインの一覧を取得できません。"
-
-msgid "Unable to retrieve domain record."
-msgstr "ドメインレコードを取得できません。"
-
-msgid "Unable to retrieve record list."
-msgstr "レコードの一覧を取得できません。"
-
-msgid "Unable to update domain."
-msgstr "ドメインを更新できません。"
-
-msgid "Unknown"
-msgstr "不明"
-
-msgid "Unknown instance name"
-msgstr "不明なインスタンス名"
-
-msgid "Update Domain"
-msgstr "ドメインの更新"
-
-msgid "Update Domain Record"
-msgstr "ドメインレコードの更新"
-
-msgid "Update Record"
-msgstr "レコードの更新"
-
-msgid "Updated"
-msgstr "更新時刻"
-
-msgid "Updated At"
-msgstr "最終更新"
-
-msgid "Value"
-msgstr "値"
-
-msgid "Zones"
-msgstr "ゾーン"
diff --git a/tatudashboard/locale/ko_KR/LC_MESSAGES/django.mo b/tatudashboard/locale/ko_KR/LC_MESSAGES/django.mo
deleted file mode 100644
index 854f3e744f8279ddad9ec8316eff7f343f3d8d0e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7499
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

diff --git a/tatudashboard/locale/ko_KR/LC_MESSAGES/django.po b/tatudashboard/locale/ko_KR/LC_MESSAGES/django.po
deleted file mode 100644
index 08577b0..0000000
--- a/tatudashboard/locale/ko_KR/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,350 +0,0 @@
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-# Ian Y. Choi <ianyrchoi@gmail.com>, 2016. #zanata
-# Sungjin Kang <gang.sungjin@gmail.com>, 2016. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 3.0.0.0rc2.dev5\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2016-09-29 13:19+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-09-20 12:11+0000\n"
-"Last-Translator: Ian Y. Choi <ianyrchoi@gmail.com>\n"
-"Language-Team: Korean (South Korea)\n"
-"Language: ko-KR\n"
-"X-Generator: Zanata 3.7.3\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"      여기서부터 도메인과 연결된 이메일 주소와 TTL을 편집할 수 있습니다.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"      이메일 피드는 도메인에 연결된 유료한 이메일 주소 값을\n"
-"      포함해야 합니다.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      이름 필드는 정규화된 도메인 이름 (끝 마침표와 함께)을\n"
-"      포함해야 합니다.\n"
-"    "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"      옵션인 TTL 필드는 1 에서 2147483647 초 사이 임의의 값을\n"
-"      사용할 수 있습니다.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    TTL은 초 단위의 레코드에 대한 time-to-live 값입니다.\n"
-"  </p>\n"
-"  <p>\n"
-"    레코드 유형에 관한 <a href=\"http://en.wikipedia.org/wiki/"
-"List_of_DNS_record_types\" target=\"_designate_record_defs\">자세한 정보를</"
-"a> 살펴봅니다.\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - 주소 레코드"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - IPv6 주소 레코드"
-
-msgid "All Records"
-msgstr "모든 레코드"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - 대체 이름 레코드"
-
-msgid "Cancel"
-msgstr "취소"
-
-msgid "Canonical Name"
-msgstr "대체 이름"
-
-msgid "Create Domain"
-msgstr "도메인 생성"
-
-msgid "Create Domain Record"
-msgstr "도메인 레코드 생성"
-
-msgid "Create Record"
-msgstr "레코드 생성"
-
-msgid "Create Record for"
-msgstr "다음에 대한 레코드 생성"
-
-msgid "Created"
-msgstr "생성됨"
-
-msgid "Created At"
-msgstr "생성 시점"
-
-msgid "Data"
-msgstr "데이터"
-
-msgid "Delete"
-msgstr "삭제"
-
-msgid "Deleted"
-msgstr "삭제됨"
-
-msgid "Description"
-msgstr "설명"
-
-msgid "Domain"
-msgstr "도메인"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "도메인 %(name)s 이 생성되었습니다."
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "도메인 %(name)s 이 수정되었습니다."
-
-msgid "Domain Detail"
-msgstr "도메인 세부 사항"
-
-msgid "Domain Name"
-msgstr "도메인 이름"
-
-msgid "Domain Overview"
-msgstr "도메인 개요"
-
-msgid "Domain Records"
-msgstr "도메인 레코드"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "도메인 레코드 %(name)s 가 생성되었습니다."
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "도메인 레코드 %(name)s 가 업데이트되었습니다."
-
-msgid "Domains"
-msgstr "도메인"
-
-msgid "Edit Domain"
-msgstr "도메인 수정"
-
-msgid "Edit Record"
-msgstr "레코드 수정"
-
-msgid "Email"
-msgstr "이메일"
-
-msgid "Enter a valid IPv4 address"
-msgstr "유효한 IPv4 주소를 입력합니다"
-
-msgid "Enter a valid IPv6 address"
-msgstr "유요한 IPv6 주소를 입력합니다"
-
-msgid "Enter a valid SRV name"
-msgstr "유효한 SRV 이름을 입력합니다"
-
-msgid "Enter a valid SRV record"
-msgstr "유효한 SRV 레코드를 입력합니다"
-
-msgid "Enter a valid SSHFP record"
-msgstr "유효한 SSHFP 레코드를 입력합니다"
-
-msgid "Enter a valid domain name."
-msgstr "유효한 도메인 이름을 입력하시오."
-
-msgid "Enter a valid hostname"
-msgstr "유효한 호스트명을 입력합니다"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"유효한 호스트명을 입력합니다. 호스트명은 문자 및 숫자로 구성되어야 하며, 63 "
-"문자를 초과할 수 없습니다."
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "IP 주소"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - 메일 교환 레코드"
-
-msgid "Mail Server"
-msgstr "메일 서버"
-
-msgid "Manage Records"
-msgstr "레코드 관리"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "이름"
-
-msgid "Name Server"
-msgstr "네임 서버"
-
-msgid "Nameservers"
-msgstr "이름 서버"
-
-msgid "None"
-msgstr "없음"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - 포인터 레코드"
-
-msgid "PTR Domain Name"
-msgstr "PTR 도메인 이름"
-
-msgid "Priority"
-msgstr "우선순위"
-
-msgid "Record"
-msgstr "레코드"
-
-msgid "Record Data"
-msgstr "레코드 데이터"
-
-msgid "Record Detail"
-msgstr "레코드 세부 사항"
-
-msgid "Record Type"
-msgstr "레코드 타입"
-
-msgid "Records"
-msgstr "레코드"
-
-msgid "Reverse DNS"
-msgstr "Reverse DNS"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - 발송자 정책 프레임워크"
-
-msgid "SRV - Service locator"
-msgstr "SRV - 서비스 위치"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - SSH 공개키 Fingerprint"
-
-msgid "Select an IP"
-msgstr "IP를 선택합니다"
-
-msgid "Serial"
-msgstr "시리얼"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (초)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - 텍스트 레코드"
-
-msgid "Text"
-msgstr "텍스트"
-
-msgid "The quotas could not be retrieved."
-msgstr "할당량을 가져올 수 없습니다."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "선택할 수 있는 사용 중인 floating IP 주소가 없습니다."
-
-msgid "This field is required"
-msgstr "해당 필드는 필수입니다"
-
-msgid "Type"
-msgstr "타입"
-
-msgid "Unable to create domain."
-msgstr "도메인을 생성할 수 없습니다."
-
-msgid "Unable to create record."
-msgstr "레코드를 생성할 수 없습니다."
-
-msgid "Unable to retrieve domain list."
-msgstr "도메인 목록을 가져올 수 없습니다."
-
-msgid "Unable to retrieve domain record."
-msgstr "도메인 레코드를 가져올 수 없습니다."
-
-msgid "Unable to retrieve record list."
-msgstr "레코드 목록을 가져올 수 없습니다."
-
-msgid "Unable to update domain."
-msgstr "도메인을 업데이트할 수 없습니다."
-
-msgid "Unknown"
-msgstr "알 수 없음"
-
-msgid "Unknown instance name"
-msgstr "알려지지 않은 인스턴스 이름"
-
-msgid "Update Domain"
-msgstr "도메인 업데이트"
-
-msgid "Update Domain Record"
-msgstr "도메인 레코드 업데이트"
-
-msgid "Update Record"
-msgstr "레코드 업데이트"
-
-msgid "Updated"
-msgstr "업데이트됨"
-
-msgid "Updated At"
-msgstr "갱신 시점"
-
-msgid "Value"
-msgstr "값"
-
-msgid "Zones"
-msgstr "존"
diff --git a/tatudashboard/locale/pt_BR/LC_MESSAGES/django.mo b/tatudashboard/locale/pt_BR/LC_MESSAGES/django.mo
deleted file mode 100644
index 45113d43589246fe33edf8ebb553c9bbe489381f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7192
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
b8{+lZ-R((Ouju6naQ%?i+eGsEAXWbbP3DP8

diff --git a/tatudashboard/locale/pt_BR/LC_MESSAGES/django.po b/tatudashboard/locale/pt_BR/LC_MESSAGES/django.po
deleted file mode 100644
index c79632c..0000000
--- a/tatudashboard/locale/pt_BR/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,352 +0,0 @@
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-# Eric Baum <ecbaum@gmail.com>, 2016. #zanata
-# Marcio <marciofoz@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 4.0.0.0rc2.dev10\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2017-03-10 19:52+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-03-15 07:16+0000\n"
-"Last-Translator: Marcio <marciofoz@gmail.com>\n"
-"Language-Team: Portuguese (Brazil)\n"
-"Language: pt-BR\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"    Aqui você pode editar o endereço de e-mail e o TTL associado ao "
-"domínio.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"    O campo de Email deve conter um endereço de e-mail válido para ser\n"
-"    associado ao domínio.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      O campo de nome deve conter um nome de domínio completamente "
-"qualificado\n"
-"      ( com ponto final).\n"
-"      "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"    O campo opcional de TTL pode ter qualquer valor entre 1 e 2147483647\n"
-"    segundos.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    O TTL é o tempo de vida do registro, em segundos.\n"
-"  </p>\n"
-"  <p>\n"
-"    Veja <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\"> para mais informações </a> nos tipos de "
-"registro.\n"
-" </p>\n"
-"    "
-
-msgid "A - Address record"
-msgstr "A - Registro do endereço"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - Registro do endereço IPv6"
-
-msgid "All Records"
-msgstr "Todos os Registros"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - Registro Canonical name "
-
-msgid "Cancel"
-msgstr "Cancelar"
-
-msgid "Canonical Name"
-msgstr "Canonical Name"
-
-msgid "Create Domain"
-msgstr "Criar Domínio"
-
-msgid "Create Domain Record"
-msgstr "Criar Registro do Domínio"
-
-msgid "Create Record"
-msgstr "Criar Registro"
-
-msgid "Create Record for"
-msgstr "Criar Registro para"
-
-msgid "Created"
-msgstr "Criado"
-
-msgid "Created At"
-msgstr "Criado em"
-
-msgid "Data"
-msgstr "Dados"
-
-msgid "Delete"
-msgstr "Remover"
-
-msgid "Deleted"
-msgstr "Removido"
-
-msgid "Description"
-msgstr "Descrição"
-
-msgid "Domain"
-msgstr "Domínio"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "Domínio %(name)s criado."
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "Domínio %(name)s atualizado."
-
-msgid "Domain Detail"
-msgstr "Detalhes do Domínio"
-
-msgid "Domain Name"
-msgstr "Nome do Domínio"
-
-msgid "Domain Overview"
-msgstr "Visão Geral do Domínio"
-
-msgid "Domain Records"
-msgstr "Registros do Domínio"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "Registro de domínio %(name)s criado."
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "Registro de domínio %(name)s atualizado."
-
-msgid "Domains"
-msgstr "Domínios"
-
-msgid "Edit Domain"
-msgstr "Editar Domínio"
-
-msgid "Edit Record"
-msgstr "Editar Registro"
-
-msgid "Email"
-msgstr "Email"
-
-msgid "Enter a valid IPv4 address"
-msgstr "Entre com um endereço IPv4 válido"
-
-msgid "Enter a valid IPv6 address"
-msgstr "Entre com um endereço IPv6 válido"
-
-msgid "Enter a valid SRV name"
-msgstr "Entre com um nome SRV válido."
-
-msgid "Enter a valid SRV record"
-msgstr "Entre com um registro SRV válido"
-
-msgid "Enter a valid SSHFP record"
-msgstr "Entre com um registro SSHFP válido"
-
-msgid "Enter a valid domain name."
-msgstr "Entre com um nome de domínio válido."
-
-msgid "Enter a valid hostname"
-msgstr "Entre com um nome de host válido"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"Insira um nome de host válido. O Nome de host deve conter letras e números, "
-"e não pode ter mais de 63 caracteres."
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "Endereço IP"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - Registro Mail exchange"
-
-msgid "Mail Server"
-msgstr "Servidor de Email"
-
-msgid "Manage Records"
-msgstr "Gerenciar Registros"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "Nome"
-
-msgid "Name Server"
-msgstr "Servidor de Nome"
-
-msgid "Nameservers"
-msgstr "Servidores de Nome"
-
-msgid "None"
-msgstr "Nenhum"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - Registro Pointer record"
-
-msgid "PTR Domain Name"
-msgstr "PTR Nome do Domínio"
-
-msgid "Priority"
-msgstr "Prioridade"
-
-msgid "Record"
-msgstr "Registro"
-
-msgid "Record Data"
-msgstr "Dados do Registro"
-
-msgid "Record Detail"
-msgstr "Detalhes do Registro"
-
-msgid "Record Type"
-msgstr "Tipo de Registro"
-
-msgid "Records"
-msgstr "Registros"
-
-msgid "Reverse DNS"
-msgstr "DNS Reverso"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - Sender Policy Framework"
-
-msgid "SRV - Service locator"
-msgstr "SRV - Service locator"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - SSH Public Key Fingerprint"
-
-msgid "Select an IP"
-msgstr "Selecione um IP"
-
-msgid "Serial"
-msgstr "Serial"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (segundos)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - Text record"
-
-msgid "Text"
-msgstr "Text"
-
-msgid "The quotas could not be retrieved."
-msgstr "Não foi possível recuperar as cotas."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "Nenhum endereço IP flutuante atualmente em uso para ser selecionado."
-
-msgid "This field is required"
-msgstr "Este campo é necessário"
-
-msgid "Type"
-msgstr "Tipo"
-
-msgid "Unable to create domain."
-msgstr "Não foi possível criar o domínio."
-
-msgid "Unable to create record."
-msgstr "Não é possível criar o registro."
-
-msgid "Unable to retrieve domain list."
-msgstr "Não foi possível recuperar a lista de domínios."
-
-msgid "Unable to retrieve domain record."
-msgstr "Não foi possível recuperar o registro de domínio."
-
-msgid "Unable to retrieve record list."
-msgstr "Não é possível recuperar lista de registros."
-
-msgid "Unable to update domain."
-msgstr "Não foi possível atualizar o domínio."
-
-msgid "Unknown"
-msgstr "Desconhecido"
-
-msgid "Unknown instance name"
-msgstr "Nome de Instância desconhecida"
-
-msgid "Update Domain"
-msgstr "Atualizar Domínio"
-
-msgid "Update Domain Record"
-msgstr "Atualizar Registro do Domínio"
-
-msgid "Update Record"
-msgstr "Atualizar Registro"
-
-msgid "Updated"
-msgstr "Atualizado"
-
-msgid "Updated At"
-msgstr "Atualizado em"
-
-msgid "Value"
-msgstr "Valor"
-
-msgid "Zones"
-msgstr "Zonas"
diff --git a/tatudashboard/locale/ru/LC_MESSAGES/django.mo b/tatudashboard/locale/ru/LC_MESSAGES/django.mo
deleted file mode 100644
index f4cf4ec7e111b29c1d55753e60cf6466d4c1185d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8541
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

diff --git a/tatudashboard/locale/ru/LC_MESSAGES/django.po b/tatudashboard/locale/ru/LC_MESSAGES/django.po
deleted file mode 100644
index 7352687..0000000
--- a/tatudashboard/locale/ru/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,361 +0,0 @@
-# Translations template for designate-dashboard.
-# Copyright (C) 2015 ORGANIZATION
-# This file is distributed under the same license as the designate-dashboard
-# project.
-#
-# Translators:
-# Denis Gubanov <v12aml@gmail.com>, 2015
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-# Ivan Startsev <istartsev67@gmail.com>, 2016. #zanata
-# Ilya Alekseyev <ilyaalekseyev@acm.org>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 4.0.0.0rc2.dev10\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2017-03-10 19:52+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-03-23 08:04+0000\n"
-"Last-Translator: Ilya Alekseyev <ilyaalekseyev@acm.org>\n"
-"Language: ru\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
-"%100>=11 && n%100<=14)? 2 : 3);\n"
-"Generated-By: Babel 2.0\n"
-"X-Generator: Zanata 3.9.6\n"
-"Language-Team: Russian\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Отсюда вы можете отредактировать адрес почты и ассоциированный с "
-"доменом TTL \n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Поле Почта должно содержать валидный почтовый адрес\n"
-"      который может быть ассоциирован с доменом.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      Поле Имя должно содержать полностью определённое имя домена (FQDN) "
-"( с\n"
-"      завершающей точкой).\n"
-"    "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"      Опциональное поле TTL может принимать любое значение \n"
-"      между 1 и 2147483647 секундами.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    TTL - это time-to-live для записи, в секундах.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">больше информации</a> на типах записи.\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - IPv4 адрес"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - IPv6 адрес"
-
-msgid "All Records"
-msgstr "Все Записи"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME - каноническое имя"
-
-msgid "Cancel"
-msgstr "Отмена"
-
-msgid "Canonical Name"
-msgstr "Каноническое имя"
-
-msgid "Create Domain"
-msgstr "Создать домен"
-
-msgid "Create Domain Record"
-msgstr "Создать Доменную Запись"
-
-msgid "Create Record"
-msgstr "Создать запись"
-
-msgid "Create Record for"
-msgstr "Создать запись для"
-
-msgid "Created"
-msgstr "Создано"
-
-msgid "Created At"
-msgstr "Создано"
-
-msgid "Data"
-msgstr "Данные"
-
-msgid "Delete"
-msgstr "Удалить"
-
-msgid "Deleted"
-msgstr "Удалено"
-
-msgid "Description"
-msgstr "Описание"
-
-msgid "Domain"
-msgstr "Домен"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "Домен %(name)s создан."
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "Домен %(name)s обновлен."
-
-msgid "Domain Detail"
-msgstr "Детали Домена"
-
-msgid "Domain Name"
-msgstr "Имя домена"
-
-msgid "Domain Overview"
-msgstr "Обзор Домена"
-
-msgid "Domain Records"
-msgstr "Записи Домена"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "Доменная запись %(name)s создана."
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "Доменная запись %(name)s обновлена."
-
-msgid "Domains"
-msgstr "Домены"
-
-msgid "Edit Domain"
-msgstr "Редактировать домен"
-
-msgid "Edit Record"
-msgstr "Редактировать запись"
-
-msgid "Email"
-msgstr "Email"
-
-msgid "Enter a valid IPv4 address"
-msgstr "Введите корректный IPv4 адрес"
-
-msgid "Enter a valid IPv6 address"
-msgstr "Введите корректный IPv6 адрес"
-
-msgid "Enter a valid SRV name"
-msgstr "Введите верное SRV имя"
-
-msgid "Enter a valid SRV record"
-msgstr "Введите корректную SRV запись"
-
-msgid "Enter a valid SSHFP record"
-msgstr "Введите корректныю SSHFP запись"
-
-msgid "Enter a valid domain name."
-msgstr "Введите корректное имя домена"
-
-msgid "Enter a valid hostname"
-msgstr "Введите корректное имя узла"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"Введите верное имя узла. Имя узла должно содержать буквы, цифры и быть не "
-"длиннее 63 символов."
-
-msgid "ID"
-msgstr "ID"
-
-msgid "IP Address"
-msgstr "IP адрес"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - почтовый узел"
-
-msgid "Mail Server"
-msgstr "Почтовый сервер"
-
-msgid "Manage Records"
-msgstr "Управление записями"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "Имя"
-
-msgid "Name Server"
-msgstr "Сервер имен"
-
-msgid "Nameservers"
-msgstr "сервера"
-
-msgid "None"
-msgstr "Нет"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - указатель на каноническое имя"
-
-msgid "PTR Domain Name"
-msgstr "Имя домена PTR"
-
-msgid "Priority"
-msgstr "Приоритет"
-
-msgid "Record"
-msgstr "Запись"
-
-msgid "Record Data"
-msgstr "Запись Данных"
-
-msgid "Record Detail"
-msgstr "Детали Записи"
-
-msgid "Record Type"
-msgstr "Тип записи"
-
-msgid "Records"
-msgstr "Записи"
-
-msgid "Reverse DNS"
-msgstr "Обратный DNS"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - инфраструктура политики отправителя"
-
-msgid "SRV - Service locator"
-msgstr "SRV - указатель сервиса"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - отпечаток публичного ключа SSH"
-
-msgid "Select an IP"
-msgstr "Выберите IP"
-
-msgid "Serial"
-msgstr "Серийный номер"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (секунды)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - тестовая запись"
-
-msgid "Text"
-msgstr "Текст"
-
-msgid "The quotas could not be retrieved."
-msgstr "Невозможно получить квоты."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "Отсутствуют используемые плавающие IP-адреса для выбора."
-
-msgid "This field is required"
-msgstr "Это поле обязательно"
-
-msgid "Type"
-msgstr "Тип"
-
-msgid "Unable to create domain."
-msgstr "Невозможно создать домен."
-
-msgid "Unable to create record."
-msgstr "Невозможно создать запись."
-
-msgid "Unable to retrieve domain list."
-msgstr "Невозможно получить список доменов."
-
-msgid "Unable to retrieve domain record."
-msgstr "Невозможно получить список записей."
-
-msgid "Unable to retrieve record list."
-msgstr "Невозможно получить список записей."
-
-msgid "Unable to update domain."
-msgstr "Невозможно обновить домен."
-
-msgid "Unknown"
-msgstr "Неизвестно"
-
-msgid "Unknown instance name"
-msgstr "Неизвестное имя инстанса"
-
-msgid "Update Domain"
-msgstr "Обновить Домен"
-
-msgid "Update Domain Record"
-msgstr "Обновить Доменную Запись"
-
-msgid "Update Record"
-msgstr "Обновить запись"
-
-msgid "Updated"
-msgstr "Обновлено"
-
-msgid "Updated At"
-msgstr "Обновлено"
-
-msgid "Value"
-msgstr "Значение"
-
-msgid "Zones"
-msgstr "Зоны"
diff --git a/tatudashboard/locale/tr_TR/LC_MESSAGES/django.mo b/tatudashboard/locale/tr_TR/LC_MESSAGES/django.mo
deleted file mode 100644
index 8a1bf5e0f1a6200dad3ef5bca274342bd4c86088..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6928
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
JfnNiu`Y)<cY3Tp}

diff --git a/tatudashboard/locale/tr_TR/LC_MESSAGES/django.po b/tatudashboard/locale/tr_TR/LC_MESSAGES/django.po
deleted file mode 100644
index 29a1e1b..0000000
--- a/tatudashboard/locale/tr_TR/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,360 +0,0 @@
-# Translations template for designate-dashboard.
-# Copyright (C) 2015 ORGANIZATION
-# This file is distributed under the same license as the designate-dashboard
-# project.
-#
-# Translators:
-# Alper Çiftçi <alprciftci@gmail.com>, 2015
-# Mücahit Büyükyılmaz <mucahit@deltanoc.com>, 2015. #zanata
-# OpenStack Infra <zanata@openstack.org>, 2015. #zanata
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-# işbaran akçayır <isbaran@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 5.0.0.0b2.dev8\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2017-05-18 22:12+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-05-22 08:57+0000\n"
-"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
-"Language: tr-TR\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"Generated-By: Babel 2.0\n"
-"X-Generator: Zanata 3.9.6\n"
-"Language-Team: Turkish (Turkey)\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Burdan alan ile ilişkili eposta adresini ve TTL değerini "
-"düzenleyebilirsiniz.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"      Eposta alanı alan ile ilişkilendirilecek geçerli bir\n"
-"      eposta adresi içermelidir.\n"
-"    "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"      İsim alanı tam-nitelikli alan adı içermelidir\n"
-"      (sonunda nokta ile).\n"
-"    "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"      İsteğe bağlı TTL alanı 1 ve 2147483647 saniye arasında\n"
-"      bir sayı olabilir.\n"
-"    "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    TTL kaydın yaşam süresidir, saniye olarak.\n"
-"  </p>\n"
-"  <p>\n"
-"    Kayıt türleri hakkında <a href=\"http://en.wikipedia.org/wiki/"
-"List_of_DNS_record_types\" target=\"_designate_record_defs\">daha fazla "
-"bilgi için</a> bakınız.\n"
-"  </p>\n"
-"  "
-
-msgid "A - Address record"
-msgstr "A - Adres kaydı"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA - IPv6 adres kaydı"
-
-msgid "All Records"
-msgstr "Tüm Kayıtlar"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME -  Meşru isim kaydı"
-
-msgid "Cancel"
-msgstr "İptal"
-
-msgid "Canonical Name"
-msgstr "Meşru isim"
-
-msgid "Create Domain"
-msgstr "Alan Oluştur"
-
-msgid "Create Domain Record"
-msgstr "Alan Kaydı Oluştur"
-
-msgid "Create Record"
-msgstr "Kayıt Oluştur"
-
-msgid "Create Record for"
-msgstr "Kayıt oluştur"
-
-msgid "Created"
-msgstr "Oluşturuldu"
-
-msgid "Created At"
-msgstr "Oluşturulduğu zaman"
-
-msgid "Data"
-msgstr "Veri"
-
-msgid "Delete"
-msgstr "Sil"
-
-msgid "Deleted"
-msgstr "Silindi"
-
-msgid "Description"
-msgstr "Açıklama"
-
-msgid "Domain"
-msgstr "Alan"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "%(name)s alanı oluşturuldu"
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "%(name)s alanı güncellendi"
-
-msgid "Domain Detail"
-msgstr "Alan Ayrıntısı"
-
-msgid "Domain Name"
-msgstr "Alan Adı"
-
-msgid "Domain Overview"
-msgstr "Alan Genel Görünümü"
-
-msgid "Domain Records"
-msgstr "Alan Kayıtları"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "%(name)s alan kaydı oluşturuldu"
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "%(name)s alan kaydı güncellendi"
-
-msgid "Domains"
-msgstr "Alanlar"
-
-msgid "Edit Domain"
-msgstr "Alan Değiştir"
-
-msgid "Edit Record"
-msgstr "Kaydı Düzenle"
-
-msgid "Email"
-msgstr "E-posta"
-
-msgid "Enter a valid IPv4 address"
-msgstr "Geçerli bir IPv4 adresi girin"
-
-msgid "Enter a valid IPv6 address"
-msgstr "Geçerli bir IPv6 adresi girin"
-
-msgid "Enter a valid SRV name"
-msgstr "Geçerli bir SRV adı girin"
-
-msgid "Enter a valid SRV record"
-msgstr "Geçerli bir SRV kaydı girin"
-
-msgid "Enter a valid SSHFP record"
-msgstr "Geçerli bir SSHFP kaydı girin"
-
-msgid "Enter a valid domain name."
-msgstr "Geçerli bir alan adı girin"
-
-msgid "Enter a valid hostname"
-msgstr "Geçerli bir sunucu adı girin"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr ""
-"Geçerli bir sunucu adı girin. Sunucu adı 63 karakterden az olmayan harf ve "
-"sayılar içermektedir."
-
-msgid "ID"
-msgstr "KİMLİK"
-
-msgid "IP Address"
-msgstr "IP Adresi"
-
-msgid "MX - Mail exchange record"
-msgstr "MX - Posta değişim kaydı"
-
-msgid "Mail Server"
-msgstr "Posta Sunucusu"
-
-msgid "Manage Records"
-msgstr "Kayıtları Yönet"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "İsim"
-
-msgid "Name Server"
-msgstr "İsim Sunucusu"
-
-msgid "Nameservers"
-msgstr "İsim sunucular"
-
-msgid "None"
-msgstr "Yok"
-
-msgid "PTR - Pointer record"
-msgstr "PTR - İşaretçi kaydı"
-
-msgid "PTR Domain Name"
-msgstr "PTR Alan Adı"
-
-msgid "Priority"
-msgstr "Öncelik"
-
-msgid "Record"
-msgstr "Kayıt"
-
-msgid "Record Data"
-msgstr "Kayıt Verisi"
-
-msgid "Record Detail"
-msgstr "Kayıt Ayrıntısı"
-
-msgid "Record Type"
-msgstr "Kayıt Tipi"
-
-msgid "Records"
-msgstr "Kayıtlar"
-
-msgid "Reverse DNS"
-msgstr "Ters DNS"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF - Gönderen İlkesi Çatısı"
-
-msgid "SRV - Service locator"
-msgstr "SRV - Servis konumlandırıcı"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP - SSH Açık Anahtar Parmakizi"
-
-msgid "Select an IP"
-msgstr "Bir IP seçiniz"
-
-msgid "Serial"
-msgstr "Seri"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "TTL (saniye)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT - Yazı Kaydı"
-
-msgid "Text"
-msgstr "Yazı"
-
-msgid "The quotas could not be retrieved."
-msgstr "Kotalar alınamadı."
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "Seçilecek kullanılabilir değişken IP adresi yok."
-
-msgid "This field is required"
-msgstr "Bu alanın doldurulması gerekmektedir."
-
-msgid "Type"
-msgstr "Tip"
-
-msgid "Unable to create domain."
-msgstr "Alan yaratılamıyor"
-
-msgid "Unable to create record."
-msgstr "Kayıt oluşturulamıyor"
-
-msgid "Unable to retrieve domain list."
-msgstr "Alan listesi alınamıyor."
-
-msgid "Unable to retrieve domain record."
-msgstr "Alan kaydı alınamadı."
-
-msgid "Unable to retrieve record list."
-msgstr "Kayıt listesi alınamadı."
-
-msgid "Unable to update domain."
-msgstr "Alan güncellenemiyor."
-
-msgid "Unknown"
-msgstr "Bilinmeyen"
-
-msgid "Unknown instance name"
-msgstr "Bilinmeyen mesafe adı"
-
-msgid "Update Domain"
-msgstr "Alanı Güncelle"
-
-msgid "Update Domain Record"
-msgstr "Alan Kaydını Güncelle"
-
-msgid "Update Record"
-msgstr "Kaydı Güncelle"
-
-msgid "Updated"
-msgstr "Güncellendi"
-
-msgid "Updated At"
-msgstr "Güncellendiği Zaman"
-
-msgid "Value"
-msgstr "Değer"
-
-msgid "Zones"
-msgstr "Bölgeler"
diff --git a/tatudashboard/locale/zh_CN/LC_MESSAGES/django.mo b/tatudashboard/locale/zh_CN/LC_MESSAGES/django.mo
deleted file mode 100644
index 34173bdbd05e694d3f99ab68080a75f284705efb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6537
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
ND`*>K!8VZt{|oY|ii!XL

diff --git a/tatudashboard/locale/zh_CN/LC_MESSAGES/django.po b/tatudashboard/locale/zh_CN/LC_MESSAGES/django.po
deleted file mode 100644
index ff78785..0000000
--- a/tatudashboard/locale/zh_CN/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,353 +0,0 @@
-# OpenStack Infra <zanata@openstack.org>, 2015. #zanata
-# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
-# Gaoxiao Zhu <zhu.gaoxiao@h3c.com>, 2016. #zanata
-# Linda <duleish@cn.ibm.com>, 2016. #zanata
-# Wu Han <wu.han@h3c.com>, 2016. #zanata
-# ZHIYUAN SU <suzhiyuan@inspur.com>, 2016. #zanata
-# vuuv <froms2008@gmail.com>, 2016. #zanata
-# zzxwill <zzxwill@gmail.com>, 2016. #zanata
-# vuuv <froms2008@gmail.com>, 2017. #zanata
-msgid ""
-msgstr ""
-"Project-Id-Version: designate-dashboard 4.0.0.0rc2.dev10\n"
-"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2017-03-10 19:52+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2017-03-23 08:04+0000\n"
-"Last-Translator: vuuv <froms2008@gmail.com>\n"
-"Language-Team: Chinese (China)\n"
-"Language: zh-CN\n"
-"X-Generator: Zanata 3.9.6\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-msgid ""
-"\n"
-"      From here you can edit the email address and TTL associated with a "
-"domain.\n"
-"    "
-msgstr ""
-"\n"
-"从这里可以编辑邮件地址和关联到一个域的TTL\n"
-" "
-
-msgid ""
-"\n"
-"      The Email field should contain a valid email address to be associated\n"
-"      with the domain.\n"
-"    "
-msgstr ""
-"\n"
-"电子邮件项应包括一个有效的邮件地址来\n"
-"跟域名进行关联。\n"
-" "
-
-msgid ""
-"\n"
-"      The Name field should contain a full-qualified domain name (with\n"
-"      trailing period).\n"
-"    "
-msgstr ""
-"\n"
-"名称项应该包含一个完全合格的域名(有一个\n"
-"尾随句点)。\n"
-" "
-
-msgid ""
-"\n"
-"      The optional TTL field can be any value between 1 and 2147483647\n"
-"      seconds.\n"
-"    "
-msgstr ""
-"\n"
-"可选的TTL项可以是1到2147483647之间的任何\n"
-"秒数。\n"
-" "
-
-msgid ""
-"\n"
-"  <p>\n"
-"    <strong>TTL</strong>\n"
-"    The TTL is the time-to-live for the record, in seconds.\n"
-"  </p>\n"
-"  <p>\n"
-"    See <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types\" "
-"target=\"_designate_record_defs\">more info</a> on record types.\n"
-"  </p>\n"
-"  "
-msgstr ""
-"\n"
-"<p>\n"
-"<strong>TTL</strong>\n"
-"TTL是指 记录的存活时间或者存在时间,单位为秒。\n"
-"</p>\n"
-"<p>\n"
-"见记录类型的 <a href=\"http://en.wikipedia.org/wiki/List_of_DNS_record_types"
-"\" target=\"_designate_record_defs\">更多信息</a>。\n"
-"</p>\n"
-" "
-
-msgid "A - Address record"
-msgstr "A-地址记录"
-
-msgid "AAAA - IPv6 address record"
-msgstr "AAAA-IPv6地址记录"
-
-msgid "All Records"
-msgstr "所有记录"
-
-msgid "CNAME - Canonical name record"
-msgstr "CNAME-标准名称记录"
-
-msgid "Cancel"
-msgstr "取消"
-
-msgid "Canonical Name"
-msgstr "规范名称"
-
-msgid "Create Domain"
-msgstr "创建域"
-
-msgid "Create Domain Record"
-msgstr "创建域记录"
-
-msgid "Create Record"
-msgstr "创建记录"
-
-msgid "Create Record for"
-msgstr "创建记录为:"
-
-msgid "Created"
-msgstr "已创建"
-
-msgid "Created At"
-msgstr "创建于"
-
-msgid "Data"
-msgstr "数据"
-
-msgid "Delete"
-msgstr "删除"
-
-msgid "Deleted"
-msgstr "已删除"
-
-msgid "Description"
-msgstr "描述"
-
-msgid "Domain"
-msgstr "域"
-
-#, python-format
-msgid "Domain %(name)s created."
-msgstr "域 %(name)s 已创建"
-
-#, python-format
-msgid "Domain %(name)s updated."
-msgstr "域%(name)s已更新"
-
-msgid "Domain Detail"
-msgstr "域明细"
-
-msgid "Domain Name"
-msgstr "域名"
-
-msgid "Domain Overview"
-msgstr "域概览"
-
-msgid "Domain Records"
-msgstr "域记录"
-
-#, python-format
-msgid "Domain record %(name)s created."
-msgstr "创建的域记录数 %(name)s "
-
-#, python-format
-msgid "Domain record %(name)s updated."
-msgstr "更新的域记录数 %(name)s"
-
-msgid "Domains"
-msgstr "域"
-
-msgid "Edit Domain"
-msgstr "编辑域"
-
-msgid "Edit Record"
-msgstr "编辑记录"
-
-msgid "Email"
-msgstr "邮箱"
-
-msgid "Enter a valid IPv4 address"
-msgstr "输入一个有效的IPv4地址"
-
-msgid "Enter a valid IPv6 address"
-msgstr "输入一个有效的IPv6地址"
-
-msgid "Enter a valid SRV name"
-msgstr "输入一个有效的SRV名"
-
-msgid "Enter a valid SRV record"
-msgstr "输入一个有效的SRV记录"
-
-msgid "Enter a valid SSHFP record"
-msgstr "输入一个有效的SSHFP记录"
-
-msgid "Enter a valid domain name."
-msgstr "输入一个有效域名"
-
-msgid "Enter a valid hostname"
-msgstr "输入一个有效的主机名"
-
-msgid ""
-"Enter a valid hostname. The hostname should contain letters and numbers, and "
-"be no more than 63 characters."
-msgstr "输入一个有效的主机名。该主机名应包含字母和数字且不多余63个字符。"
-
-msgid "ID"
-msgstr "标识"
-
-msgid "IP Address"
-msgstr "IP 地址"
-
-msgid "MX - Mail exchange record"
-msgstr "MX-邮件交换记录"
-
-msgid "Mail Server"
-msgstr "邮件服务器"
-
-msgid "Manage Records"
-msgstr "管理记录"
-
-msgid "NS"
-msgstr "NS"
-
-msgid "Name"
-msgstr "名称"
-
-msgid "Name Server"
-msgstr "域名服务器"
-
-msgid "Nameservers"
-msgstr "名称服务器数"
-
-msgid "None"
-msgstr "无"
-
-msgid "PTR - Pointer record"
-msgstr "PTR-指针记录"
-
-msgid "PTR Domain Name"
-msgstr "域名"
-
-msgid "Priority"
-msgstr "优先级"
-
-msgid "Record"
-msgstr "记录"
-
-msgid "Record Data"
-msgstr "记录数据"
-
-msgid "Record Detail"
-msgstr "记录明细"
-
-msgid "Record Type"
-msgstr "记录类型"
-
-msgid "Records"
-msgstr "记录数"
-
-msgid "Reverse DNS"
-msgstr "反向解析域名"
-
-msgid "SOA"
-msgstr "SOA"
-
-msgid "SPF - Sender Policy Framework"
-msgstr "SPF-发送方策略框架"
-
-msgid "SRV - Service locator"
-msgstr "SRV-服务定位器"
-
-msgid "SSHFP - SSH Public Key Fingerprint"
-msgstr "SSHFP-SSH公钥指纹"
-
-msgid "Select an IP"
-msgstr "选择一个IP"
-
-msgid "Serial"
-msgstr "序列号"
-
-msgid "TTL"
-msgstr "TTL"
-
-msgid "TTL (seconds)"
-msgstr "生存时间(秒)"
-
-msgid "TXT"
-msgstr "TXT"
-
-msgid "TXT - Text record"
-msgstr "TXT-文本记录"
-
-msgid "Text"
-msgstr "文本"
-
-msgid "The quotas could not be retrieved."
-msgstr "无法获取配额"
-
-msgid "There are no floating IP addresses currently in use to select from."
-msgstr "没有可以从中选择的使用中的浮动IP地址"
-
-msgid "This field is required"
-msgstr "需要此字段"
-
-msgid "Type"
-msgstr "类型"
-
-msgid "Unable to create domain."
-msgstr "无法创建域"
-
-msgid "Unable to create record."
-msgstr "不能创建记录。"
-
-msgid "Unable to retrieve domain list."
-msgstr "无法获取域列表。"
-
-msgid "Unable to retrieve domain record."
-msgstr "无法获取域记录"
-
-msgid "Unable to retrieve record list."
-msgstr "无法获取记录列表"
-
-msgid "Unable to update domain."
-msgstr "无法更新域"
-
-msgid "Unknown"
-msgstr "未知"
-
-msgid "Unknown instance name"
-msgstr "未知实例名"
-
-msgid "Update Domain"
-msgstr "更新域"
-
-msgid "Update Domain Record"
-msgstr "更新域记录"
-
-msgid "Update Record"
-msgstr "更新记录"
-
-msgid "Updated"
-msgstr "已更新"
-
-msgid "Updated At"
-msgstr "已更新于"
-
-msgid "Value"
-msgstr "值"
-
-msgid "Zones"
-msgstr "区域"
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/actions.module.js b/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/actions.module.js
deleted file mode 100644
index 1efe950..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/actions.module.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- *
- * 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.
- */
-
-(function() {
-  'use strict';
-
-  /**
-   * @ngdoc overview
-   * @ngname designatedashboard.resources.os-designate-floatingip.actions
-   *
-   * @description
-   * Provides all of the actions for DNS Floating IPs.
-   */
-  angular.module('designatedashboard.resources.os-designate-floatingip.actions', [
-    'horizon.framework.conf',
-    'horizon.app.core'
-  ])
-    .run(run);
-
-  run.$inject = [
-    'horizon.framework.conf.resource-type-registry.service',
-    'designatedashboard.resources.os-designate-floatingip.resourceType',
-    'designatedashboard.resources.os-designate-floatingip.actions.set',
-    'designatedashboard.resources.os-designate-floatingip.actions.unset'
-  ];
-
-  function run(
-    registry,
-    resourceTypeString,
-    setAction,
-    unsetAction)
-  {
-    var resourceType = registry.getResourceType(resourceTypeString);
-
-    resourceType
-      .itemActions
-      .append({
-        id: 'setFloatingIp',
-        service: setAction,
-        template: {
-          text: gettext('Set')
-        }
-      })
-      .append({
-        id: 'unsetFloatingIp',
-        service: unsetAction,
-        template: {
-          text: gettext('Unset')
-        }
-      });
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/set.service.js b/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/set.service.js
deleted file mode 100644
index 89e63f0..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/set.service.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/**
- *
- * (c) Copyright 2016 Hewlett Packard Enterprise Development Company LP
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use self 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.
- */
-
-(function () {
-  'use strict';
-
-  angular
-    .module('designatedashboard.resources.os-designate-floatingip.actions')
-    .factory('designatedashboard.resources.os-designate-floatingip.actions.set', action);
-
-  action.$inject = [
-    '$q',
-    'designatedashboard.resources.os-designate-floatingip.api',
-    'designatedashboard.resources.os-designate-floatingip.resourceType',
-    'designatedashboard.resources.util',
-    'horizon.app.core.openstack-service-api.serviceCatalog',
-    'horizon.framework.widgets.form.ModalFormService',
-    'horizon.framework.widgets.toast.service',
-    'horizon.framework.widgets.modal-wait-spinner.service'
-  ];
-
-  /**
-   * @ngDoc factory
-   * @name designatedashboard.resources.os-designate-floatingip.actions.set
-   *
-   * @Description
-   * Brings up the Set Floating IP modal.
-   */
-  function action($q,
-                  api,
-                  resourceTypeName,
-                  util,
-                  serviceCatalog,
-                  schemaFormModalService,
-                  toast,
-                  waitSpinner) {
-    var dnsServiceEnabled;
-    var title = null; // Set once perform is called
-    var formConfig = {
-      "schema": {
-        "type": "object",
-        "properties": {
-          "ptrdname": {
-            "type": "string",
-            "pattern": /^.+\.$/
-          },
-          "description": {
-            "type": "string"
-          },
-          "ttl": {
-            "type": "integer",
-            "minimum": 0,
-            "maximum": 2147483647
-          },
-        }
-      },
-      "form": [
-        {
-          "key": "ptrdname",
-          "title": gettext("Domain Name"),
-          "description": gettext("Domain name ending in '.'"),
-          "validationMessage": gettext("Domain must end with '.'"),
-          "placeholder": "smtp.example.com.",
-          "type": "text",
-          "required": true
-        },
-        {
-          "key": "description",
-          "type": "textarea",
-          "title": gettext("Description"),
-          "description": gettext("Details about the PTR record.")
-        },
-        {
-          "key": "ttl",
-          "title": gettext("TTL"),
-          "description": gettext("Time To Live in seconds."),
-          "type": "number"
-        }
-      ]
-    };
-
-    var message = {
-      success: gettext('Domain name PTR %s was successfully set.')
-    };
-
-    var service = {
-      initScope: initScope,
-      allowed: allowed,
-      perform: perform
-    };
-
-    return service;
-
-    /////////////////
-
-    function initScope() {
-      dnsServiceEnabled = serviceCatalog.ifTypeEnabled('dns');
-    }
-
-    function allowed(item) {
-      return $q.all([
-        // TODO (tyr) designate currently has no floating ips policy rules
-        dnsServiceEnabled,
-        util.notPending(item)
-      ]);
-    }
-
-    function perform(item) {
-      // Initialize the per-item title for use now and during submit
-      title = gettext("Set Domain Name PTR for ") + item.address;
-      formConfig.title = title;
-
-      // Get a form model based on the current item
-      formConfig.model = util.getModel(formConfig.form, item);
-
-      // Initialize default data
-      formConfig.model.ttl = formConfig.model.ttl || 3600;
-
-      // Remember the ID for use during submit
-      formConfig.model.floatingIpId = item.id;
-
-      return schemaFormModalService.open(formConfig).then(onSubmit, onCancel);
-    }
-
-    function onSubmit(context) {
-      var model = angular.copy(context.model);
-      var floatingIpId = formConfig.model.floatingIpId;
-
-      waitSpinner.showModalSpinner(title);
-      return api.set(floatingIpId, model).then(onSuccess, onFailure);
-    }
-
-    function onCancel() {
-      waitSpinner.hideModalSpinner();
-    }
-
-    function onSuccess(response) {
-      waitSpinner.hideModalSpinner();
-      var floatingIp = response.data;
-      toast.add('success', interpolate(message.success, [floatingIp.ptrdname]));
-
-      // To make the result of this action generically useful, reformat the return
-      // from the deleteModal into a standard form
-      return {
-        created: [],
-        updated: [{type: resourceTypeName, id: floatingIp.id}],
-        deleted: [],
-        failed: []
-      };
-    }
-
-    function onFailure() {
-      waitSpinner.hideModalSpinner();
-    }
-  }
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/unset.service.js b/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/unset.service.js
deleted file mode 100644
index 11be68a..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/actions/unset.service.js
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- *
- * (c) Copyright 2016 Hewlett Packard Enterprise Development Company LP
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use self 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.
- */
-
-(function () {
-  'use strict';
-
-  angular
-    .module('designatedashboard.resources.os-designate-floatingip.actions')
-    .factory('designatedashboard.resources.os-designate-floatingip.actions.unset', action);
-
-  action.$inject = [
-    '$q',
-    'designatedashboard.resources.os-designate-floatingip.api',
-    'designatedashboard.resources.os-designate-floatingip.resourceType',
-    'designatedashboard.resources.util',
-    'horizon.app.core.openstack-service-api.serviceCatalog',
-    'horizon.framework.util.q.extensions',
-    'horizon.framework.widgets.form.ModalFormService',
-    'horizon.framework.widgets.toast.service',
-    'horizon.framework.widgets.modal-wait-spinner.service'
-  ];
-
-  /**
-   * @ngDoc factory
-   * @name designatedashboard.resources.os-designate-floatingip.actions.unset
-   *
-   * @Description
-   * Brings up the Unset Floating IP modal.
-   */
-  function action($q,
-                  api,
-                  resourceTypeName,
-                  util,
-                  serviceCatalog,
-                  $qExtensions,
-                  schemaFormModalService,
-                  toast,
-                  waitSpinner) {
-    var dnsServiceEnabled;
-    var title = null; // Set on perform
-    var currentFloatingIpId;  // Used to remember the ID we are modifying since it isn't returned by the unset API call
-
-    // Unset it just a simple case of "set", but with ptrdname of 'null'
-    var formConfig = {
-      "schema": {
-        "type": "object",
-        "properties": {
-        }
-      },
-      "form": [
-      ],
-      "model": {
-      }
-    };
-
-    var message = {
-      success: gettext('Domain name PTR successfully unset.')
-    };
-
-    var service = {
-      initScope: initScope,
-      allowed: allowed,
-      perform: perform
-    };
-
-    return service;
-
-    /////////////////
-
-    function initScope() {
-      dnsServiceEnabled = serviceCatalog.ifTypeEnabled('dns');
-    }
-
-    function allowed(item) {
-      return $q.all([
-        // TODO (tyr) designate currently has no floating ip policy rules
-        dnsServiceEnabled,
-        domainNameSet(item),
-        util.notPending(item)
-      ]);
-    }
-
-    function domainNameSet(item) {
-      return $qExtensions.booleanAsPromise(
-        angular.isString(item.ptrdname)
-      );
-    }
-
-    function perform(item) {
-      title = gettext("Unset Domain Name PTR for ") + item.address;
-      // Store the zone ID so it can be used on submit
-      formConfig.model.floatingIpId = item.id;
-      formConfig.title = title;
-      return schemaFormModalService.open(formConfig).then(onSubmit, onCancel);
-    }
-
-    function onSubmit(context) {
-      waitSpinner.showModalSpinner(title);
-      currentFloatingIpId = context.model.floatingIpId;
-      return api.unset(currentFloatingIpId).then(onSuccess, onFailure);
-    }
-
-    function onCancel() {
-      waitSpinner.hideModalSpinner();
-    }
-
-    function onSuccess(response) {
-      waitSpinner.hideModalSpinner();
-      toast.add('success', message.success);
-
-      // To make the result of this action generically useful, reformat the return
-      // from the deleteModal into a standard form
-      return {
-        created: [],
-        updated: [{type: resourceTypeName, id: currentFloatingIpId}],
-        deleted: [],
-        failed: []
-      };
-    }
-
-    function onFailure() {
-      waitSpinner.hideModalSpinner();
-    }
-  }
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/api.service.js b/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/api.service.js
deleted file mode 100644
index 5881dca..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/api.service.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- *
- * 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.
- */
-(function () {
-  'use strict';
-
-  angular
-    .module('designatedashboard.resources.os-designate-floatingip')
-    .factory('designatedashboard.resources.os-designate-floatingip.api', apiService);
-
-  apiService.$inject = [
-    'designatedashboard.apiPassthroughUrl',
-    'horizon.framework.util.http.service',
-    'horizon.framework.widgets.toast.service'
-  ];
-
-  /**
-   * @ngdoc service
-   * @param {Object} httpService
-   * @param {Object} toastService
-   * @name apiService
-   * @description Provides direct access to Designate Floating IP APIs.
-   * @returns {Object} The service
-   */
-  function apiService(apiPassthroughUrl, httpService, toastService) {
-    var service = {
-      list: list,
-      get: get,
-      set: set,
-      unset: unset
-    };
-
-    return service;
-
-    ///////////////
-
-    /**
-     * @name list
-     * @description
-     * Get a list of DNS floating ips.
-     *
-     * The listing result is an object with property "items." Each item is
-     * a floating IP PTR record.
-     *
-     * @param {Object} params
-     * Query parameters. Optional.
-     *
-     * @returns {Object} The result of the API call
-     */
-    function list(params) {
-      var config = params ? {'params': params} : {};
-      return httpService.get(apiPassthroughUrl + 'v2/reverse/floatingips', config)
-        .error(function () {
-          toastService.add('error', gettext('Unable to retrieve the floating ip PTRs.'));
-        });
-    }
-
-    function get(id, params) {
-      var config = params ? {'params': params} : {};
-      return httpService.get(apiPassthroughUrl + 'v2/reverse/floatingips/' + id, config)
-        .error(function () {
-          toastService.add('error', gettext('Unable to get the floating ip PTR ' + id));
-        });
-    }
-
-    /**
-     * @name set
-     * @description
-     * Set a floating ip PTR record
-     *
-     * @param {string} floatingIpID - ID of PTR record to unset
-     * @param {Object} data
-     * Specifies the PTR information to set
-     *
-     * @returns {Object} The updated DNS floating IP object
-     */
-    function set(floatingIpID, data) {
-      // The update API will not accept extra data. Restrict the input to only the allowed
-      // fields
-      var apiData = {
-        ptrdname: data.ptrdname,
-        description: data.description,
-        ttl: data.ttl
-      };
-      return httpService.patch(apiPassthroughUrl + 'v2/reverse/floatingips/' + floatingIpID, apiData)
-        .error(function () {
-          toastService.add('error', gettext('Unable to set the floating IP PTR record.'));
-        })
-    }
-
-    /**
-     * @name unset
-     * @description
-     * Unset a floating ip PTR record
-     *
-     * @param {string} floatingIpID - ID of PTR record to unset
-     *
-     * @returns {Object} The updated DNS floating IP object
-     */
-    function unset(floatingIpID) {
-      // Unset is just a special case of 'set'
-      return set(floatingIpID, {
-        ptrdname: null,
-        description: null,
-        ttl: null
-      })
-    }
-  }
-}());
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/details.module.js b/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/details.module.js
deleted file mode 100644
index 99130cd..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/details.module.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- *
- * 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.
- */
-
-(function() {
-  'use strict';
-
-  /**
-   * @ngdoc overview
-   * @ngname designatedashboard.resources.os-designate-floatingip.details
-   *
-   * @description
-   * Provides details features for floating IPs.
-   */
-  angular.module('designatedashboard.resources.os-designate-floatingip.details',
-    ['horizon.framework.conf', 'horizon.app.core'])
-    .run(run);
-
-  run.$inject = [
-    'designatedashboard.resources.os-designate-floatingip.resourceType',
-    'designatedashboard.resources.os-designate-floatingip.api',
-    'designatedashboard.resources.os-designate-floatingip.basePath',
-    'horizon.framework.conf.resource-type-registry.service'
-  ];
-
-  function run(
-    resourceTypeName,
-    api,
-    basePath,
-    registry
-  ) {
-    var resourceType = registry.getResourceType(resourceTypeName);
-    resourceType
-      .setLoadFunction(loadFunction)
-      .setSummaryTemplateUrl(basePath + 'details/drawer.html')
-      .setItemNameFunction(itemNameFunction);
-
-    resourceType.detailsViews
-      .prepend({
-        id: 'floatingIpDetailsOverview',
-        name: gettext('Overview'),
-        template: basePath + 'details/overview.html'
-      }, 0);
-
-    function loadFunction(identifier) {
-      return api.get(identifier);
-    }
-
-    function itemNameFunction(floatingIp) {
-      return floatingIp.address;
-    }
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/drawer.html b/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/drawer.html
deleted file mode 100644
index d9bc4e9..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/drawer.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<hz-resource-property-list
-    ng-if="item"
-    resource-type-name="OS::Designate::FloatingIp"
-    item="item"
-    cls="dl-horizontal"
-    property-groups="[
-      ['description'],
-      ['id']
-    ]">
-</hz-resource-property-list>
\ No newline at end of file
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/overview.controller.js b/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/overview.controller.js
deleted file mode 100644
index 13446bd..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/overview.controller.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- * 
- * 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.
- */
-(function() {
-  "use strict";
-
-  angular
-    .module('designatedashboard.resources.os-designate-floatingip.details')
-    .controller('designatedashboard.resources.os-designate-floatingip.details.overviewController', controller);
-
-  controller.$inject = [
-    'designatedashboard.resources.os-designate-floatingip.resourceType',
-    'horizon.framework.conf.resource-type-registry.service',
-    '$scope'
-  ];
-
-  function controller(
-    resourceTypeCode,
-    registry,
-    $scope
-  ) {
-    var ctrl = this;
-
-    ctrl.item;
-    ctrl.resourceType = registry.getResourceType(resourceTypeCode);
-
-    $scope.context.loadPromise.then(onGetResponse);
-
-    function onGetResponse(response) {
-      ctrl.item = response.data;
-    }
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/overview.html b/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/overview.html
deleted file mode 100644
index 6cef428..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/details/overview.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<div ng-controller="designatedashboard.resources.os-designate-floatingip.details.overviewController as ctrl">
-  <hz-resource-property-list
-      ng-if="ctrl.item"
-      resource-type-name="OS::Designate::FloatingIp"
-      item="ctrl.item"
-      cls="dl-horizontal"
-      property-groups="[
-            ['ptrdname', 'description', 'id', 'ttl', 'status', 'action']
-          ]">
-  </hz-resource-property-list>
-</div>
\ No newline at end of file
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/os-designate-floatingip.module.js b/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/os-designate-floatingip.module.js
deleted file mode 100644
index 7872ad9..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-floatingip/os-designate-floatingip.module.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- *
- * 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.
- */
-
-(function() {
-  'use strict';
-
-  /**
-   * @ngdoc overview
-   * @ngname designatedashboard.resources.os-designate-floatingip
-   *
-   * @description
-   * Provides all of the services and widgets required
-   * to support and display DNS (designate) floating ip related content.
-   */
-  angular
-    .module('designatedashboard.resources.os-designate-floatingip', [
-      'ngRoute',
-      'designatedashboard.resources.os-designate-floatingip.actions',
-      'designatedashboard.resources.os-designate-floatingip.details'
-    ])
-    .constant(
-      'designatedashboard.resources.os-designate-floatingip.resourceType',
-      'OS::Designate::FloatingIp')
-    .config(config)
-    .run(run);
-
-  config.$inject = [ '$provide', '$windowProvider' ];
-
-  function config($provide, $windowProvider) {
-    var path = $windowProvider.$get().STATIC_URL + 'designatedashboard/resources/os-designate-floatingip/';
-    $provide.constant('designatedashboard.resources.os-designate-floatingip.basePath', path);
-  }
-
-  run.$inject = [
-    'horizon.app.core.detailRoute',
-    'horizon.framework.conf.resource-type-registry.service',
-    'designatedashboard.resources.os-designate-floatingip.api',
-    'designatedashboard.resources.os-designate-floatingip.resourceType',
-    'designatedashboard.resources.util'
-  ];
-
-  function run(
-    detailRoute,
-    registry,
-    api,
-    resourceTypeString,
-    util)
-  {
-    var resourceType = registry.getResourceType(resourceTypeString);
-    resourceType
-      .setNames(gettext('Floating IP'), gettext('Floating IPs'))
-      .setListFunction(listFloatingIps)
-      .setProperty('id', {
-        label: gettext('ID')
-      })
-      .setProperty('ptrdname', {
-        label: gettext('PTR Domain Name'),
-        filters: ['noName']
-      })
-      .setProperty('description', {
-        label: gettext('Description'),
-        filters: ['noName']
-      })
-      .setProperty('ttl', {
-        label: gettext('Time To Live'),
-        filters: ['noValue']
-      })
-      .setProperty('address', {
-        label: gettext('Address'),
-        filters: ['noName']
-      })
-      .setProperty('status', {
-        label: gettext('Status'),
-        filters: ['lowercase', 'noName'],
-        values: util.statusMap()
-      })
-      .setProperty('action', {
-        label: gettext('Action'),
-        filters: ['lowercase', 'noName'],
-        values: util.actionMap()
-      });
-
-    resourceType
-      .tableColumns
-      .append({
-        id: 'address',
-        priority: 1,
-        sortDefault: true,
-        template: '<a ng-href="{$ \'' + detailRoute + 'OS::Designate::FloatingIp/\' + item.id $}">{$ item.address $}</a>'
-      })
-      .append({
-        id: 'ptrdname',
-        filters: ['noValue'],
-        priority: 1,
-      })
-      .append({
-        id: 'status',
-        filters: ['lowercase'],
-        values: util.statusMap(),
-        priority: 2
-      });
-
-    resourceType
-      .filterFacets
-      .append({
-        label: gettext('Address'),
-        name: 'address',
-        isServer: false,
-        singleton: true,
-        persistent: false
-      })
-      .append({
-        label: gettext('PTR Domain Name'),
-        name: 'ptrdname',
-        isServer: false,
-        singleton: true,
-        persistent: false
-      })
-      .append({
-        label: gettext('Status'),
-        name: 'status',
-        isServer: false,
-        singleton: true,
-        persistent: false,
-        options: [
-          {label: gettext('Active'), key: 'active'},
-          {label: gettext('Pending'), key: 'pending'}
-        ]
-      });
-
-    function listFloatingIps() {
-      return api.list().then(function onList(response) {
-        // listFunctions are expected to return data in "items"
-        response.data.items = response.data.floatingips;
-
-        util.addTimestampIds(response.data.items);
-
-        return response;
-      });
-    }
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/actions.module.js b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/actions.module.js
deleted file mode 100644
index 542c689..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/actions.module.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- *
- * 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.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc overview
-   * @ngname designatedashboard.resources.os-designate-recordset.actions
-   *
-   * @description
-   * Provides all of the actions for DNS Recordsets.
-   */
-  angular.module('designatedashboard.resources.os-designate-recordset.actions', [
-    'horizon.framework.conf',
-    'horizon.app.core'
-  ])
-    .run(run);
-
-  run.$inject = [
-    'horizon.framework.conf.resource-type-registry.service',
-    'designatedashboard.resources.os-designate-recordset.resourceType',
-    'designatedashboard.resources.os-designate-recordset.actions.create',
-    'designatedashboard.resources.os-designate-recordset.actions.delete',
-    'designatedashboard.resources.os-designate-recordset.actions.update'
-  ];
-
-  function run(registry,
-               resourceTypeString,
-               createAction,
-               deleteAction,
-               updateAction) {
-    var resourceType = registry.getResourceType(resourceTypeString);
-
-    resourceType
-      .itemActions
-      .append({
-        id: 'updateRecordset',
-        service: updateAction,
-        template: {
-          text: gettext('Update')
-        }
-      })
-      .append({
-        id: 'deleteRecordset',
-        service: deleteAction,
-        template: {
-          text: gettext('Delete'),
-          type: 'delete'
-        }
-      });
-
-    // Append a record set view to the zones actions
-    var zoneResourceType = registry.getResourceType("OS::Designate::Zone");
-    zoneResourceType
-      .itemActions
-      .append({
-        id: 'createRecordset',
-        service: createAction,
-        template: {
-          text: gettext('Create Record Set')
-        }
-      });
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/common-forms.service.js b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/common-forms.service.js
deleted file mode 100644
index 3f18bcc..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/common-forms.service.js
+++ /dev/null
@@ -1,165 +0,0 @@
-/**
- *
- * (c) Copyright 2016 Hewlett Packard Enterprise Development Company LP
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use self 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.
- */
-
-(function () {
-  'use strict';
-
-  angular
-    .module('designatedashboard.resources.os-designate-recordset.actions')
-    .factory('designatedashboard.resources.os-designate-recordset.actions.common-forms', service);
-
-  service.$inject = [
-    'designatedashboard.resources.os-designate-recordset.editableTypes',
-    'designatedashboard.resources.os-designate-recordset.typeMap'
-  ];
-
-  /**
-   * Service to return a schema form config for action forms. Especially useful for forms
-   * like create and update that differ only in the readonly state of certain form fields.
-   *
-   * @returns {object} A schema form config
-   */
-  function service(editableTypes, typeMap) {
-    var service = {
-      getCreateFormConfig: getCreateFormConfig,
-      getUpdateFormConfig: getUpdateFormConfig
-    };
-
-    return service;
-
-    /////////////////
-
-    /**
-     * Returns the create form config
-     * @returns {{schema, form, model}|*}
-     */
-    function getCreateFormConfig() {
-      return getCreateUpdateFormConfig(false);
-    }
-
-    /**
-     * Return the update form config
-     * @returns {{schema, form, model}|*}
-     */
-    function getUpdateFormConfig() {
-      return getCreateUpdateFormConfig(true);
-    }
-
-    /**
-     * Return the create/update form.  The two forms are identical except for
-     * during update, some fields are read-only.
-     *
-     * @param readonly - sets readonly value on form fields that change between update and create
-     * @returns {object} a schema form config, including default model
-     */
-    function getCreateUpdateFormConfig(readonly) {
-      return {
-        "schema": {
-          "type": "object",
-          "properties": {
-            "name": {
-              "type": "string",
-              "pattern": /^.+\.$/
-            },
-            "description": {
-              "type": "string"
-            },
-            "type": {
-              "type": "string",
-              "enum": editableTypes
-            },
-            "ttl": {
-              "type": "integer",
-              "minimum": 1,
-              "maximum": 2147483647
-            },
-            "records": {
-              "type": "array",
-              "items": {
-                "type": "object",
-                "properties": {
-                  "record": {
-                    "type": "string"
-                  }
-                }
-              },
-              "minItems": 1,
-              "uniqueItems": true
-            }
-          }
-        },
-        "form": [
-          {
-            "key": "type",
-            "readonly": readonly,
-            "title": gettext("Type"),
-            "description": gettext("Select the type of record set"),
-            "type": "select",
-            "titleMap": editableTypes.map(function toTitleMap(type) {
-              return {
-                "value": type,
-                "name": typeMap[type]
-              }
-            }),
-            "required": true
-          },
-          {
-            "key": "name",
-            "readonly": readonly,
-            "type": "text",
-            "title": gettext("Name"),
-            "description": gettext("DNS name for the record set, ending in '.'"),
-            "validationMessage": gettext("DNS name must end with '.'"),
-            "placeholder": "www.example.com.",
-            "required": true
-          },
-          {
-            "key": "description",
-            "type": "textarea",
-            "title": gettext("Description"),
-            "description": gettext("Details about the zone.")
-          },
-          {
-            "key": "ttl",
-            "title": gettext("TTL"),
-            "description": gettext("Time To Live in seconds."),
-            "type": "number",
-            "required": true
-          },
-          {
-            "key": "records",
-            "title": gettext("Records"),
-            "type": "array",
-            "description": gettext("Records for the record set."),
-            "add": gettext("Add Record"),
-            "items": [
-              {
-                "key": "records[].record",
-                "title": gettext("Record")
-              }
-            ],
-            "required": true
-          }
-        ],
-        "model": {
-          "type": "A",
-          "ttl": 3600
-        }
-      };
-    }
-  }
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/create.service.js b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/create.service.js
deleted file mode 100644
index 84c65e2..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/create.service.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- *
- * (c) Copyright 2016 Hewlett Packard Enterprise Development Company LP
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use self 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.
- */
-
-(function () {
-  'use strict';
-
-  angular
-    .module('designatedashboard.resources.os-designate-recordset.actions')
-    .factory('designatedashboard.resources.os-designate-recordset.actions.create', action);
-
-  action.$inject = [
-    '$q',
-    'designatedashboard.resources.os-designate-recordset.actions.common-forms',
-    'designatedashboard.resources.os-designate-recordset.api',
-    'designatedashboard.resources.os-designate-recordset.resourceType',
-    'horizon.app.core.openstack-service-api.policy',
-    'horizon.app.core.openstack-service-api.serviceCatalog',
-    'horizon.framework.conf.resource-type-registry.service',
-    'horizon.framework.widgets.form.ModalFormService',
-    'horizon.framework.widgets.toast.service',
-    'horizon.framework.widgets.modal-wait-spinner.service'
-  ];
-
-  /**
-   * @ngDoc factory
-   * @name designatedashboard.resources.os-designate-recordset.actions.create
-   *
-   * @Description
-   * Brings up the Create Record Set modal.
-   */
-  function action($q,
-                  forms,
-                  api,
-                  resourceTypeName,
-                  policy,
-                  serviceCatalog,
-                  registry,
-                  schemaFormModalService,
-                  toast,
-                  waitSpinner) {
-    var createRecordSetPolicy, dnsServiceEnabled;
-    var title = gettext("Create Record Set");
-    var message = {
-      success: gettext('Record Set %s was successfully created.')
-    };
-
-    var service = {
-      initScope: initScope,
-      allowed: allowed,
-      perform: perform
-    };
-
-    return service;
-
-    /////////////////
-
-    function initScope() {
-      createRecordSetPolicy = policy.ifAllowed({rules: [['dns', 'create_recordset']]});
-      dnsServiceEnabled = serviceCatalog.ifTypeEnabled('dns');
-    }
-
-    function allowed(item) {
-      return $q.all([
-        createRecordSetPolicy,
-        dnsServiceEnabled
-      ]);
-    }
-
-    function perform(item) {
-      var formConfig = forms.getCreateFormConfig();
-
-      // Store the zone ID so it can be used on submit
-      formConfig.model.zoneId = item.id;
-
-      formConfig.title = title;
-      return schemaFormModalService.open(formConfig).then(onSubmit, onCancel);
-    }
-
-    function onSubmit(context) {
-      var model = angular.copy(context.model);
-      var zoneId = model.zoneId;
-      delete model.zoneId;
-
-      // schema form doesn't appear to support populating arrays directly
-      // Map the records objects to simple array of records
-      var records = context.model.records.map(function (item) {
-        return item.record;
-      });
-      model.records = records;
-
-      waitSpinner.showModalSpinner(gettext('Creating Record Set'));
-      return api.create(zoneId, model).then(onSuccess, onFailure);
-    }
-
-    function onCancel() {
-      waitSpinner.hideModalSpinner();
-    }
-
-    function onSuccess(response) {
-      waitSpinner.hideModalSpinner();
-      var zone = response.data;
-      toast.add('success', interpolate(message.success, [zone.name]));
-
-      // To make the result of this action generically useful, reformat the return
-      // from the deleteModal into a standard form
-      return {
-        created: [{type: resourceTypeName, id: zone.id}],
-        updated: [],
-        deleted: [],
-        failed: []
-      };
-    }
-
-    function onFailure() {
-      waitSpinner.hideModalSpinner();
-    }
-  }
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/delete.service.js b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/delete.service.js
deleted file mode 100644
index 1d36e9a..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/delete.service.js
+++ /dev/null
@@ -1,182 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use self 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.
- */
-
-(function() {
-  'use strict';
-
-  angular
-    .module('designatedashboard.resources.os-designate-recordset.actions')
-    .factory('designatedashboard.resources.os-designate-recordset.actions.delete', action);
-
-  action.$inject = [
-    '$q',
-    'designatedashboard.resources.os-designate-recordset.api',
-    'designatedashboard.resources.os-designate-recordset.editableTypes',
-    'designatedashboard.resources.os-designate-recordset.resourceType',
-    'horizon.app.core.openstack-service-api.policy',
-    'horizon.framework.util.actions.action-result.service',
-    'horizon.framework.util.i18n.gettext',
-    'horizon.framework.util.q.extensions',
-    'horizon.framework.widgets.modal.deleteModalService',
-    'horizon.framework.widgets.toast.service'
-  ];
-
-  /*
-   * @ngdoc factory
-   * @name designatedashboard.resources.os-designate-recordset.actions.delete
-   *
-   * @Description
-   * Brings up the delete recordset confirmation modal dialog.
-
-   * On submit, delete given recordset.
-   * On cancel, do nothing.
-   */
-  function action(
-    $q,
-    recordsetApi,
-    editableTypes,
-    resourceType,
-    policy,
-    actionResultService,
-    gettext,
-    $qExtensions,
-    deleteModal,
-    toast
-  ) {
-    var scope, context, deletePromise;
-    var notAllowedMessage = gettext("You are not allowed to delete record sets: %s");
-    var allowedRecordsets = [];
-
-    var service = {
-      initScope: initScope,
-      allowed: allowed,
-      perform: perform
-    };
-
-    return service;
-
-    //////////////
-
-    function initScope(newScope) {
-      scope = newScope;
-      context = { };
-      deletePromise = policy.ifAllowed({rules: [['dns', 'delete_recordset']]});
-    }
-
-    function perform(items) {
-      var recordsets = angular.isArray(items) ? items : [items];
-      context.labels = labelize(recordsets.length);
-      context.deleteEntity = deleteRecordSet;
-      return $qExtensions.allSettled(recordsets.map(checkPermission)).then(afterCheck);
-    }
-
-    function allowed(recordset) {
-      // only row actions pass in recordset
-      // otherwise, assume it is a batch action
-      if (recordset) {
-        return $q.all([
-          deletePromise,
-          editableRecordType(recordset)
-        ]);
-      } else {
-        return policy.ifAllowed({ rules: [['dns', 'delete_recordset']] });
-      }
-    }
-
-    function checkPermission(recordset) {
-      return {promise: allowed(recordset), context: recordset};
-    }
-
-    function afterCheck(result) {
-      var outcome = $q.reject();  // Reject the promise by default
-      if (result.fail.length > 0) {
-        toast.add('error', getMessage(notAllowedMessage, result.fail));
-        outcome = $q.reject(result.fail);
-      }
-      if (result.pass.length > 0) {
-        // Remember the record sets we are allowed to delete so that on delete modal submit
-        // we can map the recordset ID back to the full recordset. Then we can fetch the
-        // corresponding zone ID
-        allowedRecordsets = result.pass.map(getEntity)
-        outcome = deleteModal.open(scope, allowedRecordsets, context).then(createResult);
-      }
-      return outcome;
-    }
-
-    function createResult(deleteModalResult) {
-      // To make the result of this action generically useful, reformat the return
-      // from the deleteModal into a standard form
-      var actionResult = actionResultService.getActionResult();
-      deleteModalResult.pass.forEach(function markDeleted(item) {
-        actionResult.deleted(resourceType, getEntity(item).id);
-      });
-      deleteModalResult.fail.forEach(function markFailed(item) {
-        actionResult.failed(resourceType, getEntity(item).id);
-      });
-      return actionResult.result;
-    }
-
-    function labelize(count) {
-      return {
-
-        title: ngettext(
-          'Confirm Delete Record Set',
-          'Confirm Delete Record Sets', count),
-
-        message: ngettext(
-          'You have selected "%s". Deleted record set is not recoverable.',
-          'You have selected "%s". Deleted record sets are not recoverable.', count),
-
-        submit: ngettext(
-          'Delete Record Set',
-          'Delete Record Sets', count),
-
-        success: ngettext(
-          'Deleted Record Set: %s.',
-          'Deleted Record Sets: %s.', count),
-
-        error: ngettext(
-          'Unable to delete Record Set: %s.',
-          'Unable to delete Record Sets: %s.', count)
-      };
-    }
-
-    function editableRecordType(recordset) {
-      return $qExtensions.booleanAsPromise(
-        editableTypes.indexOf(recordset.type) > -1
-      );
-    }
-
-    function deleteRecordSet(recordSetId) {
-      var recordSet = allowedRecordsets.find(function(element) {
-        return element.id === recordSetId;
-      })
-      return recordsetApi.deleteRecordSet(recordSet.zone_id, recordSet.id);
-    }
-
-    function getMessage(message, entities) {
-      return interpolate(message, [entities.map(getName).join(", ")]);
-    }
-
-    function getName(result) {
-      return getEntity(result).name;
-    }
-
-    function getEntity(result) {
-      return result.context;
-    }
-  }
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/update.service.js b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/update.service.js
deleted file mode 100644
index caca961..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/actions/update.service.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- *
- * (c) Copyright 2016 Hewlett Packard Enterprise Development Company LP
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use self 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.
- */
-
-(function () {
-  'use strict';
-
-  angular
-    .module('designatedashboard.resources.os-designate-recordset.actions')
-    .factory('designatedashboard.resources.os-designate-recordset.actions.update', action);
-
-  action.$inject = [
-    '$q',
-    'designatedashboard.resources.util',
-    'designatedashboard.resources.os-designate-recordset.actions.common-forms',
-    'designatedashboard.resources.os-designate-recordset.api',
-    'designatedashboard.resources.os-designate-recordset.editableTypes',
-    'designatedashboard.resources.os-designate-recordset.resourceType',
-    'horizon.app.core.openstack-service-api.policy',
-    'horizon.app.core.openstack-service-api.serviceCatalog',
-    'horizon.framework.util.q.extensions',
-    'horizon.framework.widgets.form.ModalFormService',
-    'horizon.framework.widgets.toast.service',
-    'horizon.framework.widgets.modal-wait-spinner.service'
-  ];
-
-  /**
-   * @ngDoc factory
-   * @name designatedashboard.resources.os-designate-recordset.actions.update
-   *
-   * @Description
-   * Brings up the Update modal.
-   */
-  function action($q,
-                  util,
-                  forms,
-                  api,
-                  editableTypes,
-                  resourceTypeName,
-                  policy,
-                  serviceCatalog,
-                  $qExtensions,
-                  schemaFormModalService,
-                  toast,
-                  waitSpinner) {
-    var updateRecordSetPolicy, dnsServiceEnabled;
-    var title = gettext("Update Record Set");
-    var message = {
-      success: gettext('Record Set %s was successfully updated.')
-    };
-
-    var service = {
-      initScope: initScope,
-      allowed: allowed,
-      perform: perform
-    };
-
-    return service;
-
-    /////////////////
-
-    function initScope() {
-      updateRecordSetPolicy = policy.ifAllowed({rules: [['dns', 'update_recordset']]});
-      dnsServiceEnabled = serviceCatalog.ifTypeEnabled('dns');
-    }
-
-    function allowed(recordset) {
-      // only supports row action (exactly 1 recordset)
-      if (recordset) {
-        return $q.all([
-          updateRecordSetPolicy,
-          util.notDeleted(recordset),
-          util.notPending(recordset),
-          editableRecordType(recordset)
-        ]);
-      } else {
-        return false;
-      }
-    }
-
-    function editableRecordType(recordset) {
-      return $qExtensions.booleanAsPromise(
-        editableTypes.indexOf(recordset.type) > -1
-      );
-    }
-
-    function perform(item) {
-      var formConfig = forms.getUpdateFormConfig();
-      formConfig.title = title;
-      formConfig.model = util.getModel(formConfig.form, item);
-
-      // Append the id and zoneId so it can be used on submit
-      formConfig.model.id = item.id;
-      formConfig.model.zoneId = item.zone_id;
-
-      // schema form doesn't appear to support populating the records array directly
-      // Map the records objects to record objects
-      if (item.hasOwnProperty("records")) {
-        var records = item.records.map(function (item) {
-          return {"record": item}
-        });
-        formConfig.model.records = records;
-      }
-      return schemaFormModalService.open(formConfig).then(onSubmit, onCancel);
-    }
-
-    function onSubmit(context) {
-      var model = angular.copy(context.model);
-      // schema form doesn't appear to support populating the records array directly
-      // Map the records objects to simple array of records
-      if (context.model.hasOwnProperty("records")) {
-        var records = context.model.records.map(function (item) {
-          return item.record;
-        });
-        model.records = records;
-      }
-
-      waitSpinner.showModalSpinner(gettext('Updating Record Set'));
-
-      return api.update(model.zoneId, model.id, model).then(onSuccess, onFailure);
-    }
-
-    function onCancel() {
-      waitSpinner.hideModalSpinner();
-    }
-
-    function onSuccess(response) {
-      waitSpinner.hideModalSpinner();
-      var recordset = response.data;
-      toast.add('success', interpolate(message.success, [recordset.name]));
-
-      // To make the result of this action generically useful, reformat the return
-      // from the deleteModal into a standard form
-      return {
-        created: [],
-        updated: [{type: resourceTypeName, id: recordset.id}],
-        deleted: [],
-        failed: []
-      };
-    }
-
-    function onFailure() {
-      waitSpinner.hideModalSpinner();
-    }
-  }
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/details.module.js b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/details.module.js
deleted file mode 100644
index 8c407b2..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/details.module.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- *
- * 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.
- */
-
-(function() {
-  'use strict';
-
-  /**
-   * @ngdoc overview
-   * @ngname designatedashboard.resources.os-designate-recordset.details
-   *
-   * @description
-   * Provides details features for record sets.
-   */
-  angular.module('designatedashboard.resources.os-designate-recordset.details',
-    ['horizon.framework.conf', 'horizon.app.core'])
-    .run(run);
-
-  run.$inject = [
-    'designatedashboard.resources.os-designate-recordset.resourceType',
-    'designatedashboard.resources.os-designate-recordset.api',
-    'designatedashboard.resources.os-designate-recordset.basePath',
-    'horizon.framework.conf.resource-type-registry.service',
-  ];
-
-  function run(
-    recordSetResourceType,
-    recordSetApi,
-    basePath,
-    registry
-  ) {
-    var resourceType = registry.getResourceType(recordSetResourceType);
-    resourceType
-      .setLoadFunction(loadFunction)
-      .setPathGenerator(pathGenerator)
-      .setPathParser(pathParser)
-      .setSummaryTemplateUrl(basePath + 'details/drawer.html');
-
-    /**
-     *
-     * @param identifier
-     * The object returned by the pathParser containing the zone ID and record set ID to load
-     */
-    function loadFunction(identifier) {
-      return recordSetApi.get(identifier.zoneId, identifier.recordSetId);
-    }
-
-    /**
-     * Because a record set is contained by a zone, we implement a custom
-     * pathGenerator to encode the zone ID and record set ID for the generic
-     * details panel.
-     * 
-     * @param item
-     * A record set
-     *
-     * @returns {string} In format "<zone_id>/<recordset_id>"
-     */
-    function pathGenerator(item) {
-      return item.zone_id + '/' + item.id;
-    }
-
-    /**
-     * Given a path, extract the zone and record set ids
-     *
-     * @param path
-     * created by pathGenerator
-     *
-     * @returns {{zoneId: *, recordSetId: *}}
-     * The identifier to pass to the load function needed to uniquely identify
-     * a record set.
-     */
-    function pathParser(path) {
-      var split = path.split('/');
-      return {
-        zoneId: split[0],
-        recordSetId: split[1]
-      }
-    }
-
-    resourceType.detailsViews
-      .prepend({
-        id: 'recordsetDetailsOverview',
-        name: gettext('Overview'),
-        template: basePath + 'details/overview.html',
-      }, 0);
-
-    // Append a record set view to the zones resource view
-    var zoneResourceType = registry.getResourceType("OS::Designate::Zone");
-    zoneResourceType.detailsViews
-      .append({
-        id: 'zoneRecordSets',
-        name: gettext('Record Sets'),
-        template: basePath + 'details/zone-recordsets.html',
-      });
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/drawer.html b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/drawer.html
deleted file mode 100644
index 28762b4..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/drawer.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<hz-resource-property-list
-    ng-if="item"
-    resource-type-name="OS::Designate::RecordSet"
-    item="item"
-    cls="dl-horizontal"
-    property-groups="[
-      ['records', 'notes', 'description'],
-      ['id']
-    ]">
-</hz-resource-property-list>
\ No newline at end of file
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/overview.controller.js b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/overview.controller.js
deleted file mode 100644
index 0340d2e..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/overview.controller.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- * 
- * 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.
- */
-(function() {
-  "use strict";
-
-  angular
-    .module('designatedashboard.resources.os-designate-recordset')
-    .controller('designatedashboard.resources.os-designate-recordset.detailController', controller);
-
-  controller.$inject = [
-    'designatedashboard.resources.os-designate-recordset.resourceType',
-    'horizon.framework.conf.resource-type-registry.service',
-    '$scope'
-  ];
-
-  function controller(
-    resourceTypeCode,
-    registry,
-    $scope
-  ) {
-    var ctrl = this;
-
-    ctrl.item = {};
-    ctrl.resourceType = registry.getResourceType(resourceTypeCode);
-
-    $scope.context.loadPromise.then(onGetResponse);
-
-    function onGetResponse(response) {
-      ctrl.item = response.data;
-    }
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/overview.html b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/overview.html
deleted file mode 100644
index 5d48893..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/overview.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<div ng-controller="designatedashboard.resources.os-designate-recordset.detailController as ctrl">
-  <div class="row">
-    <div class="col-md-6 detail">
-      <h3 translate>Details</h3>
-      <hr>
-      <hz-resource-property-list
-          ng-if="ctrl.item"
-          resource-type-name="OS::Designate::RecordSet"
-          item="ctrl.item"
-          cls="dl-horizontal"
-          property-groups="[
-            ['id', 'type', 'name', 'records', 'notes', 'description', 'ttl', 'version', 'action', 'status']
-          ]">
-      </hz-resource-property-list>
-    </div>
-    <div class="col-md-6 detail">
-      <h3 translate>Associations</h3>
-      <hr>
-      <hz-resource-property-list
-          ng-if="ctrl.item"
-          resource-type-name="OS::Designate::RecordSet"
-          item="ctrl.item"
-          cls="dl-horizontal"
-          property-groups="[
-            ['zone_id', 'zone_name', 'project_id']
-          ]">
-      </hz-resource-property-list>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-md-6 detail">
-      <h3 translate>Modification Times</h3>
-      <hr>
-      <hz-resource-property-list
-          ng-if="ctrl.item"
-          resource-type-name="OS::Designate::RecordSet"
-          item="ctrl.item"
-          cls="dl-horizontal"
-          property-groups="[
-            ['created_at', 'updated_at']
-          ]">
-      </hz-resource-property-list>
-    </div>
-  </div>
-</div>
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/zone-recordsets.controller.js b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/zone-recordsets.controller.js
deleted file mode 100644
index 44184d5..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/zone-recordsets.controller.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- * 
- * 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.
- */
-(function() {
-  "use strict";
-
-  angular
-    .module('designatedashboard.resources.os-designate-recordset')
-    .controller('designatedashboard.resources.os-designate-recordset.zoneRecordSetsController', controller);
-
-  controller.$inject = [
-    '$scope',
-    'designatedashboard.resources.os-designate-recordset.resourceType'
-  ];
-
-  function controller(
-    $scope,
-    resourceTypeName
-  ) {
-    var ctrl = this;
-
-    ctrl.item = {};
-    ctrl.resourceTypeName = resourceTypeName;
-    ctrl.extraListParams = { zoneId: $scope.context.identifier };
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/zone-recordsets.html b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/zone-recordsets.html
deleted file mode 100644
index d499fe4..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/details/zone-recordsets.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<div
-  ng-controller="designatedashboard.resources.os-designate-recordset.zoneRecordSetsController as ctrl">
-  <hz-resource-table
-    resource-type-name="{$ ctrl.resourceTypeName $}"
-    list-function-extra-params="ctrl.extraListParams"
-    track-by="_timestampId">
-  </hz-resource-table>
-</div>
\ No newline at end of file
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/os-designate-recordset.module.js b/tatudashboard/static/tatudashboard/resources/os-designate-recordset/os-designate-recordset.module.js
deleted file mode 100644
index 7feff60..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/os-designate-recordset.module.js
+++ /dev/null
@@ -1,240 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- *
- * 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.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc overview
-   * @ngname designatedashboard.resources.os-designate-recordset
-   *
-   * @description
-   * Provides all of the services and widgets required
-   * to support and display DNS (designate) record set related content.
-   */
-  angular
-    .module('designatedashboard.resources.os-designate-recordset', [
-      'ngRoute',
-      'designatedashboard.resources.os-designate-recordset.actions',
-      'designatedashboard.resources.os-designate-recordset.details'
-    ])
-    .constant(
-      'designatedashboard.resources.os-designate-recordset.resourceType',
-      'OS::Designate::RecordSet')
-    .constant(
-      'designatedashboard.resources.os-designate-recordset.typeMap',
-      {
-        'A': gettext('A - Address record'),
-        'AAAA': gettext('AAAA - IPv6 address record'),
-        'CNAME': gettext('CNAME - Canonical name record'),
-        'MX': gettext('MX - Mail exchange record'),
-        'PTR': gettext('PTR - Pointer record'),
-        'SPF': gettext('SPR - Sender Policy Framework'),
-        'SRV': gettext('SRV - Service locator'),
-        'SSHFP': gettext('SSHFP - SSH Public Key Fingerprint'),
-        'TXT': gettext('TXT - Text record'),
-        'SOA': gettext('SOA - Start of authority record'),
-        'NS': gettext('NS - Name server')
-      })
-    .constant(
-      'designatedashboard.resources.os-designate-recordset.editableTypes',
-      [
-        "A",
-        "AAAA",
-        "CNAME",
-        "MX",
-        "PTR",
-        "SPF",
-        "SRV",
-        "SSHFP",
-        "TXT"
-      ])
-    .config(config)
-    .run(run);
-
-  config.$inject = ['$provide', '$windowProvider'];
-
-  function config($provide, $windowProvider) {
-    var path = $windowProvider.$get().STATIC_URL + 'designatedashboard/resources/os-designate-recordset/';
-    $provide.constant('designatedashboard.resources.os-designate-recordset.basePath', path);
-  }
-
-  run.$inject = [
-    'horizon.app.core.detailRoute',
-    'horizon.framework.conf.resource-type-registry.service',
-    'designatedashboard.resources.os-designate-recordset.api',
-    'designatedashboard.resources.os-designate-recordset.resourceType',
-    'designatedashboard.resources.os-designate-recordset.typeMap',
-    'designatedashboard.resources.util'
-  ];
-
-  function run(detailRoute,
-               registry,
-               recordSetApi,
-               resourceTypeString,
-               typeMap,
-               util) {
-    var resourceType = registry.getResourceType(resourceTypeString);
-    resourceType
-      .setNames(gettext('DNS Record Set'), gettext('DNS Record Sets'))
-      .setListFunction(list)
-      .setProperty('id', {
-        label: gettext('ID')
-      })
-      .setProperty('zone_id', {
-        label: gettext('Zone ID'),
-        filters: ['noValue']
-      })
-      .setProperty('zone_name', {
-        label: gettext('Zone Name'),
-        filters: ['noName']
-      })
-      .setProperty('project_id', {
-        label: gettext('Project ID'),
-        filters: ['noValue']
-      })
-      .setProperty('name', {
-        label: gettext('Name'),
-        filters: ['noName']
-      })
-      .setProperty('description', {
-        label: gettext('Description'),
-        filters: ['noName']
-      })
-      .setProperty('type', {
-        label: gettext('Type'),
-        filters: ['uppercase'],
-        values: typeMap
-      })
-      .setProperty('ttl', {
-        label: gettext('Time To Live'),
-        filters: ['noValue']
-      })
-      .setProperty('records', {
-        label: gettext('Records'),
-        filters: ['noValue']
-      })
-      .setProperty('notes', {
-        label: gettext('Notes'),
-        filters: ['noName']
-      })
-      .setProperty('status', {
-        label: gettext('Status'),
-        filters: ['lowercase', 'noName'],
-        values: util.statusMap()
-      })
-      .setProperty('action', {
-        label: gettext('Action'),
-        filters: ['lowercase', 'noName'],
-        values: util.actionMap()
-      })
-      .setProperty('version', {
-        label: gettext('Version'),
-        filters: ['noValue']
-      })
-      .setProperty('created_at', {
-        label: gettext('Created At'),
-        filters: ['noValue']
-      })
-      .setProperty('updated_at', {
-        label: gettext('Updated At'),
-        filters: ['noValue']
-      });
-
-    resourceType
-      .tableColumns
-      .append({
-        id: 'name',
-        priority: 1,
-        sortDefault: true,
-        filters: ['noName'],
-        // For link format, see pathGenerator in details.module.js
-        template: '<a ng-href="{$ \'' + detailRoute + 'OS::Designate::RecordSet/\' + item.zone_id + \'/\' + item.id $}">{$ item.name $}</a>'
-      })
-      .append({
-        id: 'type',
-        priority: 2,
-        filters: ['uppercase'],
-        values: typeMap
-      })
-      .append({
-        id: 'records',
-        priority: 2,
-        filters: ['noValue']
-      })
-      .append({
-        id: 'status',
-        filters: ['lowercase'],
-        values: util.statusMap(),
-        priority: 2
-      });
-
-    resourceType
-      .filterFacets
-      .append({
-        label: gettext('Type'),
-        name: 'type',
-        isServer: false,
-        singleton: true,
-        persistent: false,
-        options: Object.keys(typeMap).map(function toOptionLabel(key) {
-          return {
-            label: typeMap[key],
-            key: key
-          }
-        })
-      })
-      .append({
-        label: gettext('Name'),
-        name: 'name',
-        isServer: false,
-        singleton: true,
-        persistent: false
-      })
-      .append({
-        label: gettext('Status'),
-        name: 'status',
-        isServer: false,
-        singleton: true,
-        persistent: false,
-        options: [
-          {label: gettext('Active'), key: 'active'},
-          {label: gettext('Pending'), key: 'pending'}
-        ]
-      });
-
-    /**
-     * list all recordsets within a zone. Requires "zoneId" in the params. All other
-     * params will be passed unmodified as URL params to the API.
-     *
-     *  @param params
-     * zoneId (required) list recordsets within the zone
-     *
-     * @returns {*|Object}
-     */
-    function list(params) {
-      return recordSetApi.list(params.zoneId, params).then(function onList(response) {
-        // listFunctions are expected to return data in "items"
-        response.data.items = response.data.recordsets;
-
-        util.addTimestampIds(response.data.items);
-
-        return response;
-      });
-    }
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/api.service.js b/tatudashboard/static/tatudashboard/resources/os-designate-zone/api.service.js
deleted file mode 100644
index 44638cb..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/api.service.js
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- *
- * 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.
- */
-(function () {
-  'use strict';
-
-  angular
-    .module('designatedashboard.resources.os-designate-zone')
-    .factory('designatedashboard.resources.os-designate-zone.api', apiService);
-
-  apiService.$inject = [
-    'designatedashboard.apiPassthroughUrl',
-    'horizon.framework.util.http.service',
-    'horizon.framework.widgets.toast.service'
-  ];
-
-  /**
-   * @ngdoc service
-   * @param {Object} httpService
-   * @param {Object} toastService
-   * @name apiService
-   * @description Provides direct access to Designate Zone APIs.
-   * @returns {Object} The service
-   */
-  function apiService(apiPassthroughUrl, httpService, toastService) {
-    var service = {
-      get: get,
-      list: list,
-      deleteZone: deleteZone,
-      create: create,
-      update: update
-    };
-
-    return service;
-
-    ///////////////
-    
-    /**
-     * @name list
-     * @description
-     * Get a list of zones.
-     *
-     * The listing result is an object with property "items." Each item is
-     * a zone.
-     *
-     * @param {Object} params
-     * Query parameters. Optional.
-     * 
-     * @returns {Object} The result of the API call
-     */
-    /*
-    function list(params) {
-      var config = params ? {'params': params} : {};
-      return httpService.get('/api/designate/zones/', config)
-        .error(function () {
-          toastService.add('error', gettext('Unable to retrieve the zone.'));
-        });
-    }*/
-    function list(params) {
-      var config = params ? {'params': params} : {};
-      return httpService.get(apiPassthroughUrl + 'v2/zones/', config)
-        .error(function () {
-          toastService.add('error', gettext('Unable to retrieve the zone.'));
-        });
-    }
-
-    /**
-     * @name get
-     * @description
-     * Get a single zone by ID.
-     *
-     * @param {string} id
-     * Specifies the id of the zone to request.
-     *
-     * @returns {Object} The result of the API call
-     */
-    function get(id) {
-      return httpService.get(apiPassthroughUrl + 'v2/zones/' + id + '/')
-        .error(function () {
-          toastService.add('error', gettext('Unable to retrieve the zone.'));
-        });
-    }
-
-    /**
-     * @name deleteZone
-     * @description
-     * Delete a single zone by ID
-     * @param id
-     * @returns {*}
-     */
-    function deleteZone(id) {
-      return httpService.delete(apiPassthroughUrl + 'v2/zones/' + id + '/')
-        .error(function () {
-          toastService.add('error', gettext('Unable to delete the zone.'));
-        });
-    }
-
-    /**
-     * @name create
-     * @description
-     * Create a zone
-     *
-     * @param {Object} data
-     * Specifies the zone information to create
-     *
-     * @returns {Object} The created zone object
-     */
-    function create(data) {
-      return httpService.post(apiPassthroughUrl + 'v2/zones/', data)
-        .error(function() {
-          toastService.add('error', gettext('Unable to create the zone.'));
-        })
-    }
-
-    /**
-     * @name create
-     * @description
-     * Update a zone
-     *
-     * @param {Object} id - zone id
-     * @param {Object} data to pass directly to zone update API
-     * Specifies the zone information to update
-     *
-     * @returns {Object} The updated zone object
-     */
-    function update(id, data) {
-      // The update API will not accept extra data. Restrict the input to only the allowed
-      // fields
-      var apiData = {
-        email: data.email,
-        ttl: data.ttl,
-        description: data.description
-      };
-      return httpService.patch(apiPassthroughUrl + 'v2/zones/' + id + '/', apiData )
-        .error(function() {
-          toastService.add('error', gettext('Unable to update the zone.'));
-        })
-    }
-  }
-}());
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/os-designate-zone.module.js b/tatudashboard/static/tatudashboard/resources/os-designate-zone/os-designate-zone.module.js
deleted file mode 100644
index 3c8bf61..0000000
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/os-designate-zone.module.js
+++ /dev/null
@@ -1,204 +0,0 @@
-/**
- * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
- *
- * 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.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc overview
-   * @ngname designatedashboard.resources.os-designate-zone
-   *
-   * @description
-   * Provides all of the services and widgets required
-   * to support and display DNS (designate) zone related content.
-   */
-  angular
-    .module('designatedashboard.resources.os-designate-zone', [
-      'ngRoute',
-      'designatedashboard.resources.os-designate-zone.actions',
-      'designatedashboard.resources.os-designate-zone.details'
-    ])
-    .constant(
-      'designatedashboard.resources.os-designate-zone.resourceType',
-      'OS::Designate::Zone')
-    .config(config)
-    .run(run);
-
-  config.$inject = ['$provide', '$windowProvider'];
-
-  function config($provide, $windowProvider) {
-    var path = $windowProvider.$get().STATIC_URL + 'designatedashboard/resources/os-designate-zone/';
-    $provide.constant('designatedashboard.resources.os-designate-zone.basePath', path);
-  }
-
-  run.$inject = [
-    'horizon.app.core.detailRoute',
-    'horizon.framework.conf.resource-type-registry.service',
-    'designatedashboard.resources.os-designate-zone.api',
-    'designatedashboard.resources.os-designate-zone.resourceType',
-    'designatedashboard.resources.util'
-  ];
-
-  function run(detailRoute,
-               registry,
-               zoneApi,
-               resourceTypeString,
-               util) {
-    var resourceType = registry.getResourceType(resourceTypeString);
-    resourceType
-      .setNames(gettext('DNS Zone'), gettext('DNS Zones'))
-      .setListFunction(listZones)
-      .setProperty('action', {
-        label: gettext('Action'),
-        filters: ['lowercase', 'noName'],
-        values: util.actionMap()
-      })
-      .setProperty('attributes', {
-        label: gettext('Attributes')
-      })
-      .setProperty('created_at', {
-        label: gettext('Created At'),
-        filters: ['noValue']
-      })
-      .setProperty('description', {
-        label: gettext('Description'),
-        filters: ['noName']
-      })
-      .setProperty('email', {
-        label: gettext('Email'),
-        filters: ['noName']
-      })
-      .setProperty('id', {
-        label: gettext('ID')
-      })
-      .setProperty('masters', {
-        label: gettext('Masters'),
-        filters: ['noValue']
-      })
-      .setProperty('name', {
-        label: gettext('Name'),
-        filters: ['noName']
-      })
-      .setProperty('pool_id', {
-        label: gettext('Pool ID')
-      })
-      .setProperty('project_id', {
-        label: gettext('Project ID')
-      })
-      .setProperty('serial', {
-        label: gettext('Serial'),
-        filters: ['noValue']
-      })
-      .setProperty('status', {
-        label: gettext('Status'),
-        filters: ['lowercase', 'noName'],
-        values: util.statusMap()
-      })
-      .setProperty('transferred_at', {
-        label: gettext('Transferred At'),
-        filters: ['noValue']
-      })
-      .setProperty('ttl', {
-        label: gettext('Time To Live'),
-        filters: ['noValue']
-      })
-      .setProperty('type', {
-        label: gettext('Type'),
-        filters: ['lowercase', 'noName'],
-        values: typeMap()
-      })
-      .setProperty('updated_at', {
-        label: gettext('Updated At'),
-        filters: ['noValue']
-      })
-      .setProperty('version', {
-        label: gettext('Version'),
-        filters: ['noValue']
-      });
-
-    resourceType
-      .tableColumns
-      .append({
-        id: 'name',
-        priority: 1,
-        sortDefault: true,
-        template: '<a ng-href="{$ \'' + detailRoute + 'OS::Designate::Zone/\' + item.id $}">{$ item.name $}</a>'
-      })
-      .append({
-        id: 'type',
-        filters: ['lowercase'],
-        values: typeMap(),
-        priority: 2
-      })
-      .append({
-        id: 'status',
-        filters: ['lowercase'],
-        values: util.statusMap(),
-        priority: 2
-      });
-
-    resourceType
-      .filterFacets
-      .append({
-        label: gettext('Name'),
-        name: 'name',
-        isServer: false,
-        singleton: true,
-        persistent: false
-      })
-      .append({
-        label: gettext('Type'),
-        name: 'type',
-        isServer: false,
-        singleton: true,
-        persistent: false,
-        options: [
-          {label: gettext('Primary'), key: 'primary'},
-          {label: gettext('Secondary'), key: 'secondary'}
-        ]
-      })
-      .append({
-        label: gettext('Status'),
-        name: 'status',
-        isServer: false,
-        singleton: true,
-        persistent: false,
-        options: [
-          {label: gettext('Active'), key: 'active'},
-          {label: gettext('Pending'), key: 'pending'}
-        ]
-      });
-
-    function typeMap() {
-      return {
-        'primary': gettext('Primary'),
-        'secondary': gettext('Secondary')
-      }
-    }
-
-    function listZones() {
-      return zoneApi.list().then(function onList(response) {
-        // listFunctions are expected to return data in "items"
-        response.data.items = response.data.zones;
-
-        util.addTimestampIds(response.data.items, 'updated_at');
-
-        return response;
-      });
-    }
-  }
-
-})();
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/actions.module.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/actions.module.js
similarity index 76%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/actions.module.js
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/actions.module.js
index 9ccdd04..8597089 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/actions.module.js
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/actions.module.js
@@ -19,12 +19,12 @@
 
   /**
    * @ngdoc overview
-   * @ngname designatedashboard.resources.os-designate-zone.actions
+   * @ngname tatudashboard.resources.os-tatu-host.actions
    *
    * @description
-   * Provides all of the actions for DNS Zones.
+   * Provides all of the actions for SSH hosts.
    */
-  angular.module('designatedashboard.resources.os-designate-zone.actions', [
+  angular.module('tatudashboard.resources.os-tatu-host.actions', [
     'horizon.framework.conf',
     'horizon.app.core'
   ])
@@ -32,10 +32,10 @@
 
   run.$inject = [
     'horizon.framework.conf.resource-type-registry.service',
-    'designatedashboard.resources.os-designate-zone.resourceType',
-    'designatedashboard.resources.os-designate-zone.actions.create',
-    'designatedashboard.resources.os-designate-zone.actions.delete',
-    'designatedashboard.resources.os-designate-zone.actions.update'
+    'tatudashboard.resources.os-tatu-host.resourceType',
+    'tatudashboard.resources.os-tatu-host.actions.create',
+    'tatudashboard.resources.os-tatu-host.actions.delete',
+    'tatudashboard.resources.os-tatu-host.actions.update'
   ];
 
   function run(registry,
@@ -50,7 +50,7 @@
         id: 'create',
         service: createAction,
         template: {
-          text: gettext('Create Zone')
+          text: gettext('Create host')
         }
       });
 
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/actions.module.spec.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/actions.module.spec.js
similarity index 74%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/actions.module.spec.js
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/actions.module.spec.js
index f4bcda2..9c08feb 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/actions.module.spec.js
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/actions.module.spec.js
@@ -16,21 +16,21 @@
 (function() {
   'use strict';
 
-  describe('zone actions module', function() {
+  describe('host actions module', function() {
     var registry;
-    beforeEach(module('designatedashboard'));
+    beforeEach(module('tatudashboard'));
 
     beforeEach(inject(function($injector) {
       registry = $injector.get('horizon.framework.conf.resource-type-registry.service');
     }));
 
-    it('registers Create Zone as a global action', function() {
-      var actions = registry.getResourceType('OS::Designate::Zone').globalActions;
+    it('registers Create Host as a global action', function() {
+      var actions = registry.getResourceType('OS::Tatu::Host').globalActions;
       expect(actionHasId(actions, 'create')).toBe(true);
     });
 
-    it('registers Update Zone as a item action', function() {
-      var actions = registry.getResourceType('OS::Designate::Zone').itemActions;
+    it('registers Update Host as a item action', function() {
+      var actions = registry.getResourceType('OS::Tatu::Host').itemActions;
       expect(actionHasId(actions, 'update')).toBe(true);
     });
 
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/common-forms.service.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/common-forms.service.js
similarity index 88%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/common-forms.service.js
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/common-forms.service.js
index 55df08f..b859d5a 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/common-forms.service.js
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/common-forms.service.js
@@ -19,8 +19,8 @@
   'use strict';
 
   angular
-    .module('designatedashboard.resources.os-designate-zone.actions')
-    .factory('designatedashboard.resources.os-designate-zone.actions.common-forms', service);
+    .module('tatudashboard.resources.os-tatu-host.actions')
+    .factory('tatudashboard.resources.os-tatu-host.actions.common-forms', service);
 
   service.$inject = [
   ];
@@ -42,7 +42,7 @@
     /////////////////
 
     /**
-     * Returns the create zone form config
+     * Returns the create host form config
      * @returns {{schema, form, model}|*}
      */
     function getCreateFormConfig() {
@@ -50,7 +50,7 @@
     }
 
     /**
-     * Return the update zone form config
+     * Return the update host form config
      * @returns {{schema, form, model}|*}
      */
     function getUpdateFormConfig() {
@@ -58,7 +58,7 @@
     }
 
     /**
-     * Return the create/update zone form.  The two forms are identical except for
+     * Return the create/update host form.  The two forms are identical except for
      * during update, some fields are read-only.
      *
      * @param readonly - sets readonly value on form fields that change between update and create
@@ -69,7 +69,7 @@
         "schema": {
           "type": "object",
           "properties": {
-            "name": {
+            "hostname": {
               "type": "string",
               "pattern": /^.+\.$/
             },
@@ -113,8 +113,8 @@
             "key": "name",
             "readonly": readonly,
             "title": gettext("Name"),
-            "description": gettext("Zone name ending in '.'"),
-            "validationMessage": gettext("Zone must end with '.'"),
+            "description": gettext("Host name ending in '.'"),
+            "validationMessage": gettext("Host must end with '.'"),
             "placeholder": "example.com.",
             "type": "text",
             "required": true
@@ -123,12 +123,12 @@
             "key": "description",
             "type": "textarea",
             "title": gettext("Description"),
-            "description": gettext("Details about the zone.")
+            "description": gettext("Details about the host.")
           },
           {
             "key": "email",
             "title": gettext("Email Address"),
-            "description": gettext("Email address to contact the zone owner."),
+            "description": gettext("Email address to contact the host owner."),
             "validationMessage": gettext("Email address must contain a single '@' character"),
             "type": "text",
             "condition": "model.type == 'PRIMARY'",
@@ -146,7 +146,7 @@
             "key": "type",
             "readonly": readonly,
             "title": gettext("Type"),
-            "description": gettext("Select the type of zone"),
+            "description": gettext("Select the type of host"),
             "type": "select",
             "titleMap": [
               {
@@ -164,7 +164,7 @@
             "readonly": readonly,
             "title": gettext("Masters"),
             "type": "array",
-            "description": gettext("DNS master(s) for the Secondary zone."),
+            "description": gettext("DNS master(s) for the Secondary host."),
             "condition": "model.type == 'SECONDARY'",
             "add": gettext("Add Master"),
             "items": [
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/create.html b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/create.html
similarity index 100%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/create.html
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/create.html
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/create.service.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/create.service.js
similarity index 68%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/create.service.js
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/create.service.js
index ed53aa3..813a8e1 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/create.service.js
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/create.service.js
@@ -19,14 +19,14 @@
   'use strict';
 
   angular
-    .module('designatedashboard.resources.os-designate-zone.actions')
-    .factory('designatedashboard.resources.os-designate-zone.actions.create', action);
+    .module('tatudashboard.resources.os-tatu-host.actions')
+    .factory('tatudashboard.resources.os-tatu-host.actions.create', action);
 
   action.$inject = [
     '$q',
-    'designatedashboard.resources.os-designate-zone.actions.common-forms',
-    'designatedashboard.resources.os-designate-zone.api',
-    'designatedashboard.resources.os-designate-zone.resourceType',
+    'tatudashboard.resources.os-tatu-host.actions.common-forms',
+    'tatudashboard.resources.os-tatu-host.api',
+    'tatudashboard.resources.os-tatu-host.resourceType',
     'horizon.app.core.openstack-service-api.policy',
     'horizon.app.core.openstack-service-api.serviceCatalog',
     'horizon.framework.widgets.form.ModalFormService',
@@ -36,10 +36,10 @@
 
   /**
    * @ngDoc factory
-   * @name designatedashboard.resources.os-designate-zone.actions.create
+   * @name tatudashboard.resources.os-tatu-host.actions.create
    *
    * @Description
-   * Brings up the Create Zone modal.
+   * Brings up the Create Host modal.
    */
   function action($q,
                   forms,
@@ -50,10 +50,10 @@
                   schemaFormModalService,
                   toast,
                   waitSpinner) {
-    var createZonePolicy, dnsServiceEnabled;
-    var title = gettext("Create Zone");
+    var createHostPolicy, sshServiceEnabled;
+    var title = gettext("Create Host");
     var message = {
-      success: gettext('Zone %s was successfully created.')
+      success: gettext('Host %s was successfully created.')
     };
 
     var service = {
@@ -67,14 +67,14 @@
     /////////////////
 
     function initScope() {
-      createZonePolicy = policy.ifAllowed({rules: [['dns', 'create_zone']]});
-      dnsServiceEnabled = serviceCatalog.ifTypeEnabled('dns');
+      createHostPolicy = policy.ifAllowed({rules: [['ssh', 'create_host']]});
+      sshServiceEnabled = serviceCatalog.ifTypeEnabled('ssh');
     }
 
     function allowed() {
       return $q.all([
-        createZonePolicy,
-        dnsServiceEnabled
+        createHostPolicy,
+        sshServiceEnabled
       ]);
     }
 
@@ -85,19 +85,19 @@
     }
 
     function onSubmit(context) {
-      var zoneModel = angular.copy(context.model);
+      var hostModel = angular.copy(context.model);
       // schema form doesn't appear to support populating the masters array directly
       // Map the masters objects to simple array of addresses
       if (context.model.hasOwnProperty("masters")) {
         var masters = context.model.masters.map(function (item) {
           return item.address;
         });
-        zoneModel.masters = masters;
+        hostModel.masters = masters;
       }
 
-      waitSpinner.showModalSpinner(gettext('Creating Zone'));
+      waitSpinner.showModalSpinner(gettext('Creating Host'));
 
-      return api.create(zoneModel).then(onSuccess, onFailure);
+      return api.create(hostModel).then(onSuccess, onFailure);
     }
 
     function onCancel() {
@@ -106,13 +106,13 @@
 
     function onSuccess(response) {
       waitSpinner.hideModalSpinner();
-      var zone = response.data;
-      toast.add('success', interpolate(message.success, [zone.name]));
+      var host = response.data;
+      toast.add('success', interpolate(message.success, [host.name]));
 
       // To make the result of this action generically useful, reformat the return
       // from the deleteModal into a standard form
       return {
-        created: [{type: resourceTypeName, id: zone.id}],
+        created: [{type: resourceTypeName, id: host.id}],
         updated: [],
         deleted: [],
         failed: []
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/delete.service.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/delete.service.js
similarity index 65%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/delete.service.js
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/delete.service.js
index 5882dd6..de999c7 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/delete.service.js
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/delete.service.js
@@ -18,35 +18,35 @@
   'use strict';
 
   angular
-    .module('designatedashboard.resources.os-designate-zone.actions')
-    .factory('designatedashboard.resources.os-designate-zone.actions.delete', action);
+    .module('tatudashboard.resources.os-tatu-host.actions')
+    .factory('tatudashboard.resources.os-tatu-host.actions.delete', action);
 
   action.$inject = [
     '$q',
-    'designatedashboard.resources.os-designate-zone.api',
-    'designatedashboard.resources.util',
+    'tatudashboard.resources.os-tatu-host.api',
+    'tatudashboard.resources.util',
     'horizon.app.core.openstack-service-api.policy',
     'horizon.framework.util.actions.action-result.service',
     'horizon.framework.util.i18n.gettext',
     'horizon.framework.util.q.extensions',
     'horizon.framework.widgets.modal.deleteModalService',
     'horizon.framework.widgets.toast.service',
-    'designatedashboard.resources.os-designate-zone.resourceType'
+    'tatudashboard.resources.os-tatu-host.resourceType'
   ];
 
   /*
    * @ngdoc factory
-   * @name designatedashboard.resources.os-designate-zone.actions.delete
+   * @name tatudashboard.resources.os-tatu-host.actions.delete
    *
    * @Description
-   * Brings up the delete zone confirmation modal dialog.
+   * Brings up the delete host confirmation modal dialog.
 
-   * On submit, delete given zone.
+   * On submit, delete given host.
    * On cancel, do nothing.
    */
   function action(
     $q,
-    zoneApi,
+    hostApi,
     util,
     policy,
     actionResultService,
@@ -56,8 +56,8 @@
     toast,
     resourceType
   ) {
-    var scope, context, deleteZonePromise;
-    var notAllowedMessage = gettext("You are not allowed to delete zones: %s");
+    var scope, context, deleteHostPromise;
+    var notAllowedMessage = gettext("You are not allowed to delete hosts: %s");
 
     var service = {
       initScope: initScope,
@@ -72,32 +72,32 @@
     function initScope(newScope) {
       scope = newScope;
       context = { };
-      deleteZonePromise = policy.ifAllowed({rules: [['dns', 'delete_zone']]});
+      deleteHostPromise = policy.ifAllowed({rules: [['ssh', 'delete_host']]});
     }
 
     function perform(items) {
-      var zones = angular.isArray(items) ? items : [items];
-      context.labels = labelize(zones.length);
-      context.deleteEntity = deleteZone;
-      return $qExtensions.allSettled(zones.map(checkPermission)).then(afterCheck);
+      var hosts = angular.isArray(items) ? items : [items];
+      context.labels = labelize(hosts.length);
+      context.deleteEntity = deleteHost;
+      return $qExtensions.allSettled(hosts.map(checkPermission)).then(afterCheck);
     }
 
-    function allowed(zone) {
-      // only row actions pass in zone
+    function allowed(host) {
+      // only row actions pass in host
       // otherwise, assume it is a batch action
-      if (zone) {
+      if (host) {
         return $q.all([
-          deleteZonePromise,
-          util.notDeleted(zone),
-          util.notPending(zone)
+          deleteHostPromise,
+          util.notDeleted(host),
+          util.notPending(host)
         ]);
       } else {
-        return policy.ifAllowed({ rules: [['dns', 'delete_zone']] });
+        return policy.ifAllowed({ rules: [['ssh', 'delete_host']] });
       }
     }
 
-    function checkPermission(zone) {
-      return {promise: allowed(zone), context: zone};
+    function checkPermission(host) {
+      return {promise: allowed(host), context: host};
     }
 
     function afterCheck(result) {
@@ -129,29 +129,29 @@
       return {
 
         title: ngettext(
-          'Confirm Delete Zone',
-          'Confirm Delete Zones', count),
+          'Confirm Delete Host',
+          'Confirm Delete Hosts', count),
 
         message: ngettext(
-          'You have selected "%s". Deleted zone is not recoverable.',
-          'You have selected "%s". Deleted zones are not recoverable.', count),
+          'You have selected "%s". Deleted host is not recoverable.',
+          'You have selected "%s". Deleted hosts are not recoverable.', count),
 
         submit: ngettext(
-          'Delete Zone',
-          'Delete Zones', count),
+          'Delete Host',
+          'Delete Hosts', count),
 
         success: ngettext(
-          'Deleted Zone: %s.',
-          'Deleted Zones: %s.', count),
+          'Deleted Host: %s.',
+          'Deleted Hosts: %s.', count),
 
         error: ngettext(
-          'Unable to delete Zone: %s.',
-          'Unable to delete Zones: %s.', count)
+          'Unable to delete Host: %s.',
+          'Unable to delete Hosts: %s.', count)
       };
     }
 
-    function deleteZone(zone) {
-      return zoneApi.deleteZone(zone, true);
+    function deleteHost(host) {
+      return hostApi.deleteHost(host, true);
     }
 
     function getMessage(message, entities) {
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/update.service.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/update.service.js
similarity index 69%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/update.service.js
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/update.service.js
index 2610570..4dff624 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/actions/update.service.js
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/actions/update.service.js
@@ -19,15 +19,15 @@
   'use strict';
 
   angular
-    .module('designatedashboard.resources.os-designate-zone.actions')
-    .factory('designatedashboard.resources.os-designate-zone.actions.update', action);
+    .module('tatudashboard.resources.os-tatu-host.actions')
+    .factory('tatudashboard.resources.os-tatu-host.actions.update', action);
 
   action.$inject = [
     '$q',
-    'designatedashboard.resources.os-designate-zone.actions.common-forms',
-    'designatedashboard.resources.os-designate-zone.api',
-    'designatedashboard.resources.os-designate-zone.resourceType',
-    'designatedashboard.resources.util',
+    'tatudashboard.resources.os-tatu-host.actions.common-forms',
+    'tatudashboard.resources.os-tatu-host.api',
+    'tatudashboard.resources.os-tatu-host.resourceType',
+    'tatudashboard.resources.util',
     'horizon.app.core.openstack-service-api.policy',
     'horizon.app.core.openstack-service-api.serviceCatalog',
     'horizon.framework.widgets.form.ModalFormService',
@@ -37,10 +37,10 @@
 
   /**
    * @ngDoc factory
-   * @name designatedashboard.resources.os-designate-zone.actions.update
+   * @name tatudashboard.resources.os-tatu-host.actions.update
    *
    * @Description
-   * Brings up the Update Zone modal.
+   * Brings up the Update Host modal.
    */
   function action($q,
                   forms,
@@ -52,10 +52,10 @@
                   schemaFormModalService,
                   toast,
                   waitSpinner) {
-    var updateZonePolicy, dnsServiceEnabled;
-    var title = gettext("Update Zone");
+    var updateHostPolicy, sshServiceEnabled;
+    var title = gettext("Update Host");
     var message = {
-      success: gettext('Zone %s was successfully updated.')
+      success: gettext('Host %s was successfully updated.')
     };
 
     var service = {
@@ -69,17 +69,17 @@
     /////////////////
 
     function initScope() {
-      updateZonePolicy = policy.ifAllowed({rules: [['dns', 'update_zone']]});
-      dnsServiceEnabled = serviceCatalog.ifTypeEnabled('dns');
+      updateHostPolicy = policy.ifAllowed({rules: [['ssh', 'update_host']]});
+      sshServiceEnabled = serviceCatalog.ifTypeEnabled('ssh');
     }
 
-    function allowed(zone) {
-      // only supports row action (exactly 1 zone)
-      if (zone) {
+    function allowed(host) {
+      // only supports row action (exactly 1 host)
+      if (host) {
         return $q.all([
-          updateZonePolicy,
-          util.notDeleted(zone),
-          util.notPending(zone)
+          updateHostPolicy,
+          util.notDeleted(host),
+          util.notPending(host)
         ]);
       } else {
         return false;
@@ -106,19 +106,19 @@
     }
 
     function onSubmit(context) {
-      var zoneModel = angular.copy(context.model);
+      var hostModel = angular.copy(context.model);
       // schema form doesn't appear to support populating the masters array directly
       // Map the masters objects to simple array of addresses
       if (context.model.hasOwnProperty("masters")) {
         var masters = context.model.masters.map(function (item) {
           return item.address;
         })
-        zoneModel.masters = masters;
+        hostModel.masters = masters;
       }
 
-      waitSpinner.showModalSpinner(gettext('Updating Zone'));
+      waitSpinner.showModalSpinner(gettext('Updating Host'));
 
-      return api.update(zoneModel.id, zoneModel).then(onSuccess, onFailure);
+      return api.update(hostModel.id, hostModel).then(onSuccess, onFailure);
     }
 
     function onCancel() {
@@ -127,14 +127,14 @@
 
     function onSuccess(response) {
       waitSpinner.hideModalSpinner();
-      var zone = response.data;
-      toast.add('success', interpolate(message.success, [zone.name]));
+      var host = response.data;
+      toast.add('success', interpolate(message.success, [host.name]));
 
       // To make the result of this action generically useful, reformat the return
       // from the deleteModal into a standard form
       return {
         created: [],
-        updated: [{type: resourceTypeName, id: zone.id}],
+        updated: [{type: resourceTypeName, id: host.id}],
         deleted: [],
         failed: []
       };
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/api.service.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/api.service.js
similarity index 74%
rename from tatudashboard/static/tatudashboard/resources/os-designate-recordset/api.service.js
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/api.service.js
index 25cb51f..e5fb184 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-recordset/api.service.js
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/api.service.js
@@ -17,12 +17,12 @@
   'use strict';
 
   angular
-    .module('designatedashboard.resources.os-designate-recordset')
-    .factory('designatedashboard.resources.os-designate-recordset.api', apiService);
+    .module('tatudashboard.resources.os-tatu-host')
+    .factory('tatudashboard.resources.os-tatu-host.api', apiService);
 
   apiService.$inject = [
     '$q',
-    'designatedashboard.apiPassthroughUrl',
+    'tatudashboard.apiPassthroughUrl',
     'horizon.framework.util.http.service',
     'horizon.framework.widgets.toast.service'
   ];
@@ -32,14 +32,14 @@
    * @param {Object} httpService
    * @param {Object} toastService
    * @name apiService
-   * @description Provides direct access to Designate Record Set APIs.
+   * @description Provides direct access to Tatu Host APIs.
    * @returns {Object} The service
    */
   function apiService($q, apiPassthroughUrl, httpService, toastService) {
     var service = {
       get: get,
       list: list,
-      deleteRecordSet: deleteRecordSet,
+      deleteHost: deleteHost,
       create: create,
       update: update
     };
@@ -54,41 +54,38 @@
      * Get a list of record sets.
      *
      * The listing result is an object with property "items." Each item is
-     * a record set.
+     * a host.
      *
      * @param {Object} params
      * Query parameters. Optional.
      *
      * @returns {Object} The result of the API call
      */
-    function list(zoneId, params) {
-      return httpService.get(apiPassthroughUrl + 'v2/zones/' + zoneId + '/recordsets/', params)
+    function list(params) {
+      return httpService.get(apiPassthroughUrl + 'hosts/', params)
         .error(function () {
-          toastService.add('error', gettext('Unable to retrieve the record sets.'));
+          toastService.add('error', gettext('Unable to retrieve the hosts.'));
         });
     }
 
     /**
      * @name get
      * @description
-     * Get a single record set by ID.
+     * Get a single host by ID.
      *
-     * @param {string} zoneId
-     * Specifies the id of the zone containing the record set to request.
-     *
-     * @param {string} recordSetId
-     * Specifies the id of the record set to request.
+     * @param {string} hostId
+     * Specifies the id of the host to request.
      *
      * @returns {Object} The result of the API call
      */
-    function get(zoneId, recordSetId) {
+    function get(hostId) {
       // Unfortunately routed-details-view is not happy when load fails, which is
       // common when then delete action removes a record set. Mask this failure by
       // always returning a successful promise instead of terminating the $http promise
       // in the .error handler.
-      return httpService.get(apiPassthroughUrl + 'v2/zones/' + zoneId + '/recordsets/' + recordSetId + '/')
+      return httpService.get(apiPassthroughUrl + 'hosts/' + hostId + '/')
         .then(undefined, function onError() {
-          toastService.add('error', gettext('Unable to retrieve the record set.'));
+          toastService.add('error', gettext('Unable to retrieve the host.'));
           return $q.when({});
         });
     }
@@ -96,26 +93,26 @@
     /**
      * @name delete
      * @description
-     * Delete a single record set by ID
+     * Delete a single host by ID
      * @param {string} zoneId
-     * The id of the zone containing the recordset
+     * The id of the zone containing the host
      *
-     * @param {string} recordSetId
-     * The id of the recordset within the zone
+     * @param {string} hostId
+     * The id of the host within the zone
      *
      * @returns {*}
      */
     function deleteRecordSet(zoneId, recordSetId) {
       return httpService.delete(apiPassthroughUrl + 'v2/zones/' + zoneId + '/recordsets/' + recordSetId + '/')
         .error(function () {
-          toastService.add('error', gettext('Unable to delete the record set.'));
+          toastService.add('error', gettext('Unable to delete the host.'));
         });
     }
 
     function create(zoneId, data) {
       return httpService.post(apiPassthroughUrl + 'v2/zones/' + zoneId + '/recordsets/', data)
         .error(function () {
-          toastService.add('error', gettext('Unable to create the record set.'));
+          toastService.add('error', gettext('Unable to create the host.'));
         });
     }
 
@@ -129,7 +126,7 @@
       };
       return httpService.put(apiPassthroughUrl + 'v2/zones/' + zoneId + '/recordsets/' + recordSetId, apiData)
         .error(function () {
-          toastService.add('error', gettext('Unable to update the record set.'));
+          toastService.add('error', gettext('Unable to update the host.'));
         });
     }
   }
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/details/details.module.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/details/details.module.js
similarity index 69%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/details/details.module.js
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/details/details.module.js
index 96a12b6..10aa65d 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/details/details.module.js
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/details/details.module.js
@@ -19,42 +19,42 @@
 
   /**
    * @ngdoc overview
-   * @ngname designatedashboard.resources.os-designate-zone.details
+   * @ngname tatudashboard.resources.os-tatu-host.details
    *
    * @description
-   * Provides details features for zones.
+   * Provides details features for hosts.
    */
-  angular.module('designatedashboard.resources.os-designate-zone.details',
+  angular.module('tatudashboard.resources.os-tatu-host.details',
     ['horizon.framework.conf', 'horizon.app.core'])
     .run(run);
 
   run.$inject = [
-    'designatedashboard.resources.os-designate-zone.resourceType',
-    'designatedashboard.resources.os-designate-zone.api',
-    'designatedashboard.resources.os-designate-zone.basePath',
+    'tatudashboard.resources.os-tatu-host.resourceType',
+    'tatudashboard.resources.os-tatu-host.api',
+    'tatudashboard.resources.os-tatu-host.basePath',
     'horizon.framework.conf.resource-type-registry.service'
   ];
 
   function run(
-    zoneResourceType,
-    zoneApi,
+    hostResourceType,
+    hostApi,
     basePath,
     registry
   ) {
-    var resourceType = registry.getResourceType(zoneResourceType);
+    var resourceType = registry.getResourceType(hostResourceType);
     resourceType
       .setLoadFunction(loadFunction)
       .setSummaryTemplateUrl(basePath + 'details/drawer.html');
 
     resourceType.detailsViews
       .prepend({
-        id: 'zoneDetailsOverview',
+        id: 'hostDetailsOverview',
         name: gettext('Overview'),
         template: basePath + 'details/overview.html',
       }, 0);
 
     function loadFunction(identifier) {
-      return zoneApi.get(identifier);
+      return hostApi.get(identifier);
     }
   }
 
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/details/drawer.html b/tatudashboard/static/tatudashboard/resources/os-tatu-host/details/drawer.html
similarity index 71%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/details/drawer.html
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/details/drawer.html
index 0f425b2..52e611b 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/details/drawer.html
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/details/drawer.html
@@ -1,6 +1,6 @@
 <hz-resource-property-list
     ng-if="item"
-    resource-type-name="OS::Designate::Zone"
+    resource-type-name="OS::Tatu::Host"
     item="item"
     cls="dl-horizontal"
     property-groups="[
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/details/overview.controller.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/details/overview.controller.js
similarity index 85%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/details/overview.controller.js
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/details/overview.controller.js
index 58c5601..dddb6ff 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/details/overview.controller.js
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/details/overview.controller.js
@@ -17,11 +17,11 @@
   "use strict";
 
   angular
-    .module('designatedashboard.resources.os-designate-zone')
-    .controller('designatedashboard.resources.os-designate-zone.detailController', controller);
+    .module('tatudashboard.resources.os-tatu-host')
+    .controller('tatudashboard.resources.os-tatu-host.detailController', controller);
 
   controller.$inject = [
-    'designatedashboard.resources.os-designate-zone.resourceType',
+    'tatudashboard.resources.os-tatu-host.resourceType',
     'horizon.framework.conf.resource-type-registry.service',
     '$scope'
   ];
diff --git a/tatudashboard/static/tatudashboard/resources/os-designate-zone/details/overview.html b/tatudashboard/static/tatudashboard/resources/os-tatu-host/details/overview.html
similarity index 83%
rename from tatudashboard/static/tatudashboard/resources/os-designate-zone/details/overview.html
rename to tatudashboard/static/tatudashboard/resources/os-tatu-host/details/overview.html
index 6a0c4f9..c79c97f 100644
--- a/tatudashboard/static/tatudashboard/resources/os-designate-zone/details/overview.html
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/details/overview.html
@@ -1,11 +1,11 @@
-<div ng-controller="designatedashboard.resources.os-designate-zone.detailController as ctrl">
+<div ng-controller="tatudashboard.resources.os-tatu-host.detailController as ctrl">
   <div class="row">
     <div class="col-md-6 detail">
       <h3 translate>Details</h3>
       <hr>
       <hz-resource-property-list
           ng-if="ctrl.item"
-          resource-type-name="OS::Designate::Zone"
+          resource-type-name="OS::Tatu::Host"
           item="ctrl.item"
           cls="dl-horizontal"
           property-groups="[
@@ -18,7 +18,7 @@
       <hr>
       <hz-resource-property-list
           ng-if="ctrl.item"
-          resource-type-name="OS::Designate::Zone"
+          resource-type-name="OS::Tatu::Host"
           item="ctrl.item"
           cls="dl-horizontal"
           property-groups="[
@@ -33,7 +33,7 @@
       <hr>
       <hz-resource-property-list
           ng-if="ctrl.item"
-          resource-type-name="OS::Designate::Zone"
+          resource-type-name="OS::Tatu::Host"
           item="ctrl.item"
           cls="dl-horizontal"
           property-groups="[
@@ -46,7 +46,7 @@
       <hr>
       <hz-resource-property-list
           ng-if="ctrl.item"
-          resource-type-name="OS::Designate::Zone"
+          resource-type-name="OS::Tatu::Host"
           item="ctrl.item"
           cls="dl-horizontal"
           property-groups="[
diff --git a/tatudashboard/static/tatudashboard/resources/os-tatu-host/os-tatu-host.module.js b/tatudashboard/static/tatudashboard/resources/os-tatu-host/os-tatu-host.module.js
new file mode 100644
index 0000000..c2d927b
--- /dev/null
+++ b/tatudashboard/static/tatudashboard/resources/os-tatu-host/os-tatu-host.module.js
@@ -0,0 +1,134 @@
+/**
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * 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.
+ */
+
+(function () {
+  'use strict';
+
+  /**
+   * @ngdoc overview
+   * @ngname tatudashboard.resources.os-tatu-host
+   *
+   * @description
+   * Provides all of the services and widgets required
+   * to support and display SSH (Tatu) host related content.
+   */
+  angular
+    .module('tatudashboard.resources.os-tatu-host', [
+      'ngRoute',
+      'tatudashboard.resources.os-tatu-host.actions',
+      'tatudashboard.resources.os-tatu-host.details'
+    ])
+    .constant(
+      'tatudashboard.resources.os-tatu-host.resourceType',
+      'OS::Tatu::Host')
+    .config(config)
+    .run(run);
+
+  config.$inject = ['$provide', '$windowProvider'];
+
+  function config($provide, $windowProvider) {
+    var path = $windowProvider.$get().STATIC_URL + 'tatudashboard/resources/os-tatu-recordset/';
+    $provide.constant('tatudashboard.resources.os-tatu-recordset.basePath', path);
+  }
+
+  run.$inject = [
+    'horizon.app.core.detailRoute',
+    'horizon.framework.conf.resource-type-registry.service',
+    'tatudashboard.resources.os-tatu-recordset.api',
+    'tatudashboard.resources.os-tatu-recordset.resourceType',
+    'tatudashboard.resources.os-tatu-recordset.typeMap',
+    'tatudashboard.resources.util'
+  ];
+
+  function run(detailRoute,
+               registry,
+               hostApi,
+               resourceTypeString,
+               typeMap,
+               util) {
+    var resourceType = registry.getResourceType(resourceTypeString);
+    resourceType
+      .setNames(gettext('SSH Host'), gettext('SSH Hosts'))
+      .setListFunction(list)
+      .setProperty('instance_id', {
+        label: gettext('Instance ID')
+      })
+      .setProperty('hostname', {
+        label: gettext('Hostname'),
+        filters: ['noName']
+      })
+      .setProperty('proj_id', {
+        label: gettext('Project ID'),
+        filters: ['noValue']
+      })
+      .setProperty('proj_name', {
+        label: gettext('Project Name'),
+        filters: ['noValue']
+      })
+      .setProperty('cert', {
+        label: gettext('Certificate')
+      })
+      .setProperty('pat', {
+        label: gettext('IP:Port for PAT')
+      })
+      .setProperty('srv_url', {
+        label: gettext('SRV Record URL')
+      })
+
+    resourceType
+      .tableColumns
+      .append({
+        id: 'host_name',
+        priority: 1,
+        sortDefault: true,
+        template: '<a ng-href="{$ \'' + detailRoute + 'OS::Tatu::Host/\' + item.id $}">{$ item.name $}</a>'
+      })
+      .append({
+        id: 'proj_name',
+        priority: 2,
+      })
+      .append({
+        id: 'pat',
+        priority: 2,
+      })
+      .append({
+        id: 'srv_url',
+        priority: 2
+      });
+
+    resourceType
+      .filterFacets
+      .append({
+        label: gettext('Name'),
+        name: 'name',
+        isServer: false,
+        singleton: true,
+        persistent: false
+      });
+
+    function listHosts() {
+      return hostApi.list().then(function onList(response) {
+        // listFunctions are expected to return data in "items"
+        response.data.items = response.data.hosts;
+
+        util.addTimestampIds(response.data.items, 'updated_at');
+
+        return response;
+      });
+    }
+  }
+
+})();
diff --git a/tatudashboard/static/tatudashboard/resources/resources.module.js b/tatudashboard/static/tatudashboard/resources/resources.module.js
index 57febbe..ab556e3 100644
--- a/tatudashboard/static/tatudashboard/resources/resources.module.js
+++ b/tatudashboard/static/tatudashboard/resources/resources.module.js
@@ -18,19 +18,17 @@
 
   /**
    * @ngdoc overview
-   * @name designatedashboard.resources
+   * @name tatudashboard.resources
    * @description
    *
-   * # designatedashboard.resources
+   * # tatudashboard.resources
    *
    * This module hosts registered resource types.  This module file may
    * contain individual registrations, or may have sub-modules that
    * more fully contain registrations.
    */
   angular
-    .module('designatedashboard.resources', [
-      'designatedashboard.resources.os-designate-recordset',
-      'designatedashboard.resources.os-designate-zone',
-      'designatedashboard.resources.os-designate-floatingip'
+    .module('tatudashboard.resources', [
+      'tatudashboard.resources.os-tatu-host'
     ]);
 })();
diff --git a/tatudashboard/static/tatudashboard/resources/util.service.js b/tatudashboard/static/tatudashboard/resources/util.service.js
index cfaa787..d5201a9 100644
--- a/tatudashboard/static/tatudashboard/resources/util.service.js
+++ b/tatudashboard/static/tatudashboard/resources/util.service.js
@@ -17,8 +17,8 @@
   'use strict';
 
   angular
-    .module('designatedashboard.resources')
-    .factory('designatedashboard.resources.util', utilService);
+    .module('tatudashboard.resources')
+    .factory('tatudashboard.resources.util', utilService);
 
   utilService.$inject = [
     'horizon.framework.util.q.extensions',
diff --git a/tatudashboard/static/tatudashboard/reverse_dns.html b/tatudashboard/static/tatudashboard/reverse_dns.html
deleted file mode 100644
index c739336..0000000
--- a/tatudashboard/static/tatudashboard/reverse_dns.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<hz-resource-panel resource-type-name="OS::Designate::FloatingIp">
-  <hz-resource-table resource-type-name="OS::Designate::FloatingIp"
-                     track-by="_timestampId"></hz-resource-table>
-</hz-resource-panel>
diff --git a/tatudashboard/static/tatudashboard/ssh_hosts.html b/tatudashboard/static/tatudashboard/ssh_hosts.html
new file mode 100644
index 0000000..52f8590
--- /dev/null
+++ b/tatudashboard/static/tatudashboard/ssh_hosts.html
@@ -0,0 +1,4 @@
+<hz-resource-panel resource-type-name="OS::Tatu::Host">
+  <hz-resource-table resource-type-name="OS::Tatu::Host"
+                     track-by="_timestampId"></hz-resource-table>
+</hz-resource-panel>
diff --git a/tatudashboard/static/tatudashboard/tatudashboard.module.js b/tatudashboard/static/tatudashboard/tatudashboard.module.js
index e51e60f..d3aa1b8 100644
--- a/tatudashboard/static/tatudashboard/tatudashboard.module.js
+++ b/tatudashboard/static/tatudashboard/tatudashboard.module.js
@@ -19,19 +19,19 @@
 
   /**
    * @ngdoc overview
-   * @ngname designatedashboard
+   * @ngname tatudashboard
    *
    * @description
    * Provides the services and widgets required
    * to support and display the project search panel.
    */
   angular
-    .module('designatedashboard', [
+    .module('tatudashboard', [
       'ngRoute',
-      'designatedashboard.resources'
+      'tatudashboard.resources'
     ])
     .constant(
-      'designatedashboard.apiPassthroughUrl', '/api/dns/')
+      'tatudashboard.apiPassthroughUrl', '/api/ssh/')
     .config(config)
     .run(run);
 
@@ -42,7 +42,7 @@
   ];
 
   /**
-   * @name designatedashboard.basePath
+   * @name tatudashboard.basePath
    * @description Base path for the project dashboard
    *
    * @param {function} $provide ng provide service
@@ -54,21 +54,18 @@
    * @returns {undefined}
    */
   function config($provide, $routeProvider, $windowProvider) {
-    var path = $windowProvider.$get().STATIC_URL + 'designatedashboard/';
-    $provide.constant('designatedashboard.basePath', path);
+    var path = $windowProvider.$get().STATIC_URL + 'tatudashboard/';
+    $provide.constant('tatudashboard.basePath', path);
 
     $routeProvider
-      .when('/project/dnszones/', {
-        templateUrl: path + 'zones.html'
-      })
-      .when('/project/reverse_dns/', {
-        templateUrl: path + 'reverse_dns.html'
+      .when('/project/ssh_hosts/', {
+        templateUrl: path + 'hosts.html'
       });
   }
 
   run.$inject = [
     'horizon.framework.conf.resource-type-registry.service',
-    'designatedashboard.basePath'
+    'tatudashboard.basePath'
   ];
 
   function run(registry, basePath) {
diff --git a/tatudashboard/static/tatudashboard/zones.html b/tatudashboard/static/tatudashboard/zones.html
deleted file mode 100644
index cb977d0..0000000
--- a/tatudashboard/static/tatudashboard/zones.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<hz-resource-panel resource-type-name="OS::Designate::Zone">
-  <hz-resource-table resource-type-name="OS::Designate::Zone"
-                     track-by="_timestampId"></hz-resource-table>
-</hz-resource-panel>
diff --git a/tatudashboard/tests/.secret_key_store b/tatudashboard/tests/.secret_key_store
deleted file mode 100644
index 6e8db9b..0000000
--- a/tatudashboard/tests/.secret_key_store
+++ /dev/null
@@ -1 +0,0 @@
-5NMb6ZfXYBLClFGFYf6VkbiJ9TRNyU3w8NQHPG8LXJltU8EZFeB7I632vQ8MF5m6
\ No newline at end of file
diff --git a/tatudashboard/tests/__init__.py b/tatudashboard/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/tatudashboard/tests/base.py b/tatudashboard/tests/base.py
deleted file mode 100644
index 9062a3a..0000000
--- a/tatudashboard/tests/base.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright 2010-2011 OpenStack Foundation
-# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
-#
-# 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.
-
-import os
-
-import fixtures
-import testtools
-
-from openstack_dashboard.test import helpers as test
-
-from designatedashboard.dashboards.project.dns_domains import forms
-
-
-_TRUE_VALUES = ('True', 'true', '1', 'yes')
-
-
-class TestCase(testtools.TestCase):
-
-    """Test case base class for all unit tests."""
-
-    def setUp(self):
-        """Run before each test method to initialize test environment."""
-
-        super(TestCase, self).setUp()
-        test_timeout = os.environ.get('OS_TEST_TIMEOUT', 0)
-        try:
-            test_timeout = int(test_timeout)
-        except ValueError:
-            # If timeout value is invalid do not set a timeout.
-            test_timeout = 0
-        if test_timeout > 0:
-            self.useFixture(fixtures.Timeout(test_timeout, gentle=True))
-
-        self.useFixture(fixtures.NestedTempfile())
-        self.useFixture(fixtures.TempHomeDir())
-
-        if os.environ.get('OS_STDOUT_CAPTURE') in _TRUE_VALUES:
-            stdout = self.useFixture(fixtures.StringStream('stdout')).stream
-            self.useFixture(fixtures.MonkeyPatch('sys.stdout', stdout))
-        if os.environ.get('OS_STDERR_CAPTURE') in _TRUE_VALUES:
-            stderr = self.useFixture(fixtures.StringStream('stderr')).stream
-            self.useFixture(fixtures.MonkeyPatch('sys.stderr', stderr))
-
-        self.log_fixture = self.useFixture(fixtures.FakeLogger())
-
-
-class BaseRecordFormCleanTests(test.TestCase):
-
-    DOMAIN_NAME = 'foo.com.'
-    HOSTNAME = 'www'
-
-    MSG_FIELD_REQUIRED = 'This field is required'
-    MSG_INVALID_HOSTNAME = 'Enter a valid hostname. The '\
-                           'hostname should contain letters '\
-                           'and numbers, and be no more than '\
-                           '63 characters.'
-    MSG_INVALID_HOSTNAME_SHORT = 'Enter a valid hostname'
-
-    def setUp(self):
-        super(BaseRecordFormCleanTests, self).setUp()
-
-        # Request object with messages support
-        self.request = self.factory.get('', {})
-
-        # Set-up form instance
-        kwargs = {}
-        kwargs['initial'] = {'domain_name': self.DOMAIN_NAME}
-        self.form = forms.RecordCreate(self.request, **kwargs)
-        self.form._errors = {}
-        self.form.cleaned_data = {
-            'domain_name': self.DOMAIN_NAME,
-            'name': '',
-            'data': '',
-            'txt': '',
-            'priority': None,
-            'ttl': None,
-        }
-
-    def assert_no_errors(self):
-        self.assertEqual(self.form._errors, {})
-
-    def assert_error(self, field, msg):
-        self.assertIn(msg, self.form._errors[field])
-
-    def assert_required_error(self, field):
-        self.assert_error(field, self.MSG_FIELD_REQUIRED)
diff --git a/tatudashboard/tests/settings.py b/tatudashboard/tests/settings.py
deleted file mode 100644
index afc2b87..0000000
--- a/tatudashboard/tests/settings.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# Copyright 2015 Hewlett-Packard Development Company, L.P.
-#
-# 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.
-import socket
-
-SECRET_KEY = 'HELLA_SECRET!'
-
-DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3',
-                         'NAME': 'test'}}
-
-from horizon.test.settings import *  # noqa
-
-socket.setdefaulttimeout(1)
-
-DEBUG = False
-TEMPLATE_DEBUG = DEBUG
-
-TESTSERVER = 'http://testserver'
-
-
-MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
-
-TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
-NOSE_ARGS = ['--nocapture',
-             '--nologcapture',
-             '--cover-package=windc']
-
-EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
-SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
-
-OPENSTACK_ADDRESS = "localhost"
-OPENSTACK_ADMIN_TOKEN = "openstack"
-OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_ADDRESS
-OPENSTACK_KEYSTONE_ADMIN_URL = "http://%s:35357/v2.0" % OPENSTACK_ADDRESS
-OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
-
-# Silence logging output during tests.
-LOGGING = {
-    'version': 1,
-    'disable_existing_loggers': False,
-    'handlers': {
-        'null': {
-            'level': 'DEBUG',
-            'class': 'logging.NullHandler'
-        },
-    },
-    'loggers': {
-        'django.db.backends': {
-            'handlers': ['null'],
-            'propagate': False,
-        },
-        'horizon': {
-            'handlers': ['null'],
-            'propagate': False,
-        },
-        'novaclient': {
-            'handlers': ['null'],
-            'propagate': False,
-        },
-        'keystoneclient': {
-            'handlers': ['null'],
-            'propagate': False,
-        },
-        'quantum': {
-            'handlers': ['null'],
-            'propagate': False,
-        },
-        'nose.plugins.manager': {
-            'handlers': ['null'],
-            'propagate': False,
-        }
-    }
-}
diff --git a/tatudashboard/tests/test_designatedashboard.py b/tatudashboard/tests/test_designatedashboard.py
deleted file mode 100644
index 12d2310..0000000
--- a/tatudashboard/tests/test_designatedashboard.py
+++ /dev/null
@@ -1,406 +0,0 @@
-# Copyright 2012 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-# Copyright 2012 Nebula, Inc.
-#
-#    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 __future__ import unicode_literals
-
-from django.core.urlresolvers import reverse  # noqa
-# from django import http
-
-from designatedashboard.tests import base
-
-DOMAIN_ID = '123'
-# INDEX_URL = reverse('horizon:project:dns_domains:index')
-# RECORDS_URL = reverse('horizon:project:dns_domains:records',
-#                       args=[DOMAIN_ID])
-
-
-# class DNSDomainsTests(test.TestCase):
-
-#     def setUp(self):
-#         super(DNSDomainsTests, self).setUp()
-
-#     @test.create_stubs(
-#         {api.designate: ('domain_list',)})
-#     def test_index(self):
-#         domains = self.dns_domains.list()
-#         api.designate.domain_list(
-#             IsA(http.HttpRequest)).AndReturn(domains)
-#         self.mox.ReplayAll()
-
-#         res = self.client.get(INDEX_URL)
-
-#         self.assertTemplateUsed(res, 'project/dns_domains/index.html')
-#         self.assertEqual(len(res.context['table'].data), len(domains))
-
-#     @test.create_stubs(
-#         {api.designate: ('domain_get', 'server_list', 'record_list')})
-#     def test_records(self):
-#         domain_id = '123'
-#         domain = self.dns_domains.first()
-#         servers = self.dns_servers.list()
-#         records = self.dns_records.list()
-
-#         api.designate.domain_get(
-#             IsA(http.HttpRequest),
-#             domain_id).AndReturn(domain)
-
-#         api.designate.server_list(
-#             IsA(http.HttpRequest),
-#             domain_id).AndReturn(servers)
-
-#         api.designate.record_list(
-#             IsA(http.HttpRequest),
-#             domain_id).AndReturn(records)
-
-#         self.mox.ReplayAll()
-
-#         res = self.client.get(RECORDS_URL)
-
-#         self.assertTemplateUsed(res, 'project/dns_domains/records.html')
-#         self.assertEqual(len(res.context['table'].data), len(records))
-
-
-class ARecordFormTests(base.BaseRecordFormCleanTests):
-
-    IPV4 = '1.1.1.1'
-
-    MSG_INVALID_IPV4 = 'Enter a valid IPv4 address'
-
-    def setUp(self):
-        super(ARecordFormTests, self).setUp()
-        self.form.cleaned_data['type'] = 'A'
-        self.form.cleaned_data['name'] = self.HOSTNAME
-        self.form.cleaned_data['data'] = self.IPV4
-
-    def test_valid_field_values(self):
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_valid_name_field_wild_card(self):
-        self.form.cleaned_data['name'] = '*'
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_name_field(self):
-        self.form.cleaned_data['name'] = ''
-        self.form.clean()
-        self.assert_no_errors()
-        self.assertIsNotNone(self.form.cleaned_data['name'])
-
-    def test_missing_data_field(self):
-        self.form.cleaned_data['data'] = ''
-        self.form.clean()
-        self.assert_required_error('data')
-
-    def test_invalid_name_field(self):
-        self.form.cleaned_data['name'] = '$#%foo!!'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_starting_dash(self):
-        self.form.cleaned_data['name'] = '-ww'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_trailing_dash(self):
-        self.form.cleaned_data['name'] = 'co-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_bad_wild_card(self):
-        self.form.cleaned_data['name'] = 'derp.*.' + self.DOMAIN_NAME
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_outside_of_domain_name_field(self):
-        self.form.cleaned_data['name'] = 'www.bar.com.'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_data_field(self):
-        self.form.cleaned_data['data'] = 'foo'
-        self.form.clean()
-        self.assert_error('data', self.MSG_INVALID_IPV4)
-
-
-class AAAARecordFormTests(base.BaseRecordFormCleanTests):
-
-    IPV6 = '1111:1111:1111:11::1'
-
-    MSG_INVALID_IPV6 = 'Enter a valid IPv6 address'
-
-    def setUp(self):
-        super(AAAARecordFormTests, self).setUp()
-        self.form.cleaned_data['type'] = 'AAAA'
-        self.form.cleaned_data['name'] = self.HOSTNAME
-        self.form.cleaned_data['data'] = self.IPV6
-
-    def test_valid_field_values(self):
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_valid_name_field_wild_card(self):
-        self.form.cleaned_data['name'] = '*'
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_name_field(self):
-        self.form.cleaned_data['name'] = ''
-        self.form.clean()
-        self.assert_no_errors()
-        self.assertIsNotNone(self.form.cleaned_data['name'])
-
-    def test_missing_data_field(self):
-        self.form.cleaned_data['data'] = ''
-        self.form.clean()
-        self.assert_required_error('data')
-
-    def test_invalid_name_field(self):
-        self.form.cleaned_data['name'] = '#@$foo!!'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_starting_dash(self):
-        self.form.cleaned_data['name'] = '-ww.foo.com'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_trailing_dash(self):
-        self.form.cleaned_data['name'] = 'www.foo.co-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_bad_wild_card(self):
-        self.form.cleaned_data['name'] = 'derp.*.' + self.DOMAIN_NAME
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_outside_of_domain_name_field(self):
-        self.form.cleaned_data['name'] = 'www.bar.com.'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_data_field(self):
-        self.form.cleaned_data['data'] = 'foo'
-        self.form.clean()
-        self.assert_error('data', self.MSG_INVALID_IPV6)
-
-
-class CNAMERecordFormTests(base.BaseRecordFormCleanTests):
-
-    CNAME = 'bar.foo.com.'
-
-    def setUp(self):
-        super(CNAMERecordFormTests, self).setUp()
-        self.form.cleaned_data['type'] = 'CNAME'
-        self.form.cleaned_data['name'] = self.HOSTNAME
-        self.form.cleaned_data['data'] = self.CNAME
-
-    def test_valid_field_values(self):
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_valid_name_field_wild_card(self):
-        self.form.cleaned_data['name'] = '*'
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_name_field(self):
-        self.form.cleaned_data['name'] = ''
-        self.form.clean()
-        self.assert_required_error('name')
-
-    def test_missing_data_field(self):
-        self.form.cleaned_data['data'] = ''
-        self.form.clean()
-        self.assert_required_error('data')
-
-    def test_invalid_name_field(self):
-        self.form.cleaned_data['name'] = '$#%#$foo!!!'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_starting_dash(self):
-        self.form.cleaned_data['name'] = '-ww.foo.com'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_trailing_dash(self):
-        self.form.cleaned_data['name'] = 'www.foo.co-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_bad_wild_card(self):
-        self.form.cleaned_data['name'] = 'derp.*.' + self.DOMAIN_NAME
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_outside_of_domain_name_field(self):
-        self.form.cleaned_data['name'] = 'www.bar.com.'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_data_field(self):
-        self.form.cleaned_data['data'] = 'foo'
-        self.form.clean()
-        self.assert_error('data', self.MSG_INVALID_HOSTNAME_SHORT)
-
-
-class MXRecordFormTests(base.BaseRecordFormCleanTests):
-
-    MAIL_SERVER = 'mail.foo.com.'
-    PRIORITY = 10
-
-    def setUp(self):
-        super(MXRecordFormTests, self).setUp()
-        self.form.cleaned_data['type'] = 'MX'
-        self.form.cleaned_data['data'] = self.MAIL_SERVER
-        self.form.cleaned_data['priority'] = self.PRIORITY
-
-    def test_valid_field_values(self):
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_data_field(self):
-        self.form.cleaned_data['data'] = ''
-        self.form.clean()
-        self.assert_required_error('data')
-
-    def test_missing_priority_field(self):
-        self.form.cleaned_data['priority'] = None
-        self.form.clean()
-        self.assert_required_error('priority')
-
-    def test_invalid_data_field(self):
-        self.form.cleaned_data['data'] = 'foo'
-        self.form.clean()
-        self.assert_error('data', self.MSG_INVALID_HOSTNAME_SHORT)
-
-    def test_default_assignment_name_field(self):
-        self.form.clean()
-        self.assertEqual(self.DOMAIN_NAME, self.form.cleaned_data['name'])
-
-
-class TXTRecordFormTests(base.BaseRecordFormCleanTests):
-
-    TEXT = 'Lorem ipsum'
-
-    def setUp(self):
-        super(TXTRecordFormTests, self).setUp()
-        self.form.cleaned_data['type'] = 'TXT'
-        self.form.cleaned_data['name'] = self.HOSTNAME
-        self.form.cleaned_data['txt'] = self.TEXT
-
-    def test_valid_field_values(self):
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_valid_name_field_wild_card(self):
-        self.form.cleaned_data['name'] = '*'
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_name_field(self):
-        self.form.cleaned_data['name'] = ''
-        self.form.clean()
-        self.assert_no_errors()
-        self.assertIsNotNone(self.form.cleaned_data['name'])
-
-    def test_missing_txt_field(self):
-        self.form.cleaned_data['txt'] = ''
-        self.form.clean()
-        self.assert_required_error('txt')
-
-    def test_invalid_name_field(self):
-        self.form.cleaned_data['name'] = 'foo-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_starting_dash(self):
-        self.form.cleaned_data['name'] = '-ww.foo.com'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_trailing_dash(self):
-        self.form.cleaned_data['name'] = 'www.foo.co-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_bad_wild_card(self):
-        self.form.cleaned_data['name'] = 'derp.*'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_outside_of_domain_name_field(self):
-        self.form.cleaned_data['name'] = 'www.bar.com.'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_default_assignment_data_field(self):
-        self.form.clean()
-        self.assertEqual(self.TEXT, self.form.cleaned_data['data'])
-
-
-class SRVRecordFormTests(base.BaseRecordFormCleanTests):
-
-    SRV_NAME = '_foo._tcp.'
-    SRV_DATA = '1 1 srv.foo.com.'
-    PRIORITY = 10
-
-    MSG_INVALID_SRV_NAME = 'Enter a valid SRV name'
-    MSG_INVALID_SRV_DATA = 'Enter a valid SRV record'
-
-    def setUp(self):
-        super(SRVRecordFormTests, self).setUp()
-        self.form.cleaned_data['type'] = 'SRV'
-        self.form.cleaned_data['name'] = self.SRV_NAME
-        self.form.cleaned_data['data'] = self.SRV_DATA
-        self.form.cleaned_data['priority'] = self.PRIORITY
-
-    def test_valid_field_values(self):
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_name_field(self):
-        self.form.cleaned_data['name'] = ''
-        self.form.clean()
-        self.assert_required_error('name')
-
-    def test_missing_data_field(self):
-        self.form.cleaned_data['data'] = ''
-        self.form.clean()
-        self.assert_required_error('data')
-
-    def test_missing_priority_field(self):
-        self.form.cleaned_data['priority'] = None
-        self.form.clean()
-        self.assert_required_error('priority')
-
-    def test_invalid_name_field(self):
-        self.form.cleaned_data['name'] = 'foo'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_SRV_NAME)
-
-    def test_invalid_data_field(self):
-        self.form.cleaned_data['data'] = 'foo'
-        self.form.clean()
-        self.assert_error('data', self.MSG_INVALID_SRV_DATA)
-
-    def test_default_assignment_name_field(self):
-        self.form.clean()
-        self.assertEqual(self.SRV_NAME + self.DOMAIN_NAME,
-                         self.form.cleaned_data['name'])
diff --git a/tatudashboard/tests/test_ptr_record_form.py b/tatudashboard/tests/test_ptr_record_form.py
deleted file mode 100644
index feafc98..0000000
--- a/tatudashboard/tests/test_ptr_record_form.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright 2015 NEC Corporation.  All rights reserved.
-#
-#    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 designatedashboard.tests import base
-
-
-class PTRRecordFormTests(base.BaseRecordFormCleanTests):
-
-    PTR = "6.0.0.10.in-addr.arpa."
-
-    def setUp(self):
-        super(PTRRecordFormTests, self).setUp()
-        self.form.cleaned_data['type'] = 'PTR'
-        self.form.cleaned_data['name'] = self.HOSTNAME
-        self.form.cleaned_data['data'] = self.PTR
-
-    def test_valid_field_values(self):
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_valid_name_field_wild_card(self):
-        self.form.cleaned_data['name'] = '*'
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_name_field(self):
-        self.form.cleaned_data['name'] = ''
-        self.form.clean()
-        self.assert_no_errors()
-        self.assertIsNotNone(self.form.cleaned_data['name'])
-
-    def test_invalid_name_field(self):
-        self.form.cleaned_data['name'] = '#@$foo!!'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_starting_dash(self):
-        self.form.cleaned_data['name'] = '-ww.foo.com'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_trailing_dash(self):
-        self.form.cleaned_data['name'] = 'www.foo.co-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_bad_wild_card(self):
-        self.form.cleaned_data['name'] = 'derp.*.' + self.DOMAIN_NAME
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_outside_of_domain_name_field(self):
-        self.form.cleaned_data['name'] = 'www.bar.com.'
-        self.form.clean()
-
-    def test_invalid_data_field(self):
-        self.form.cleaned_data['data'] = '#@$' + self.PTR + '!!'
-        self.form.clean()
-        self.assert_error('data', self.MSG_INVALID_HOSTNAME_SHORT)
-
-    def test_invalid_data_field_starting_dash(self):
-        self.form.cleaned_data['data'] = '-' + self.PTR
-        self.form.clean()
-        self.assert_error('data', self.MSG_INVALID_HOSTNAME_SHORT)
-
-    def test_invalid_data_field_trailing_dash(self):
-        self.form.cleaned_data['data'] = self.PTR + '-'
-        self.form.clean()
-        self.assert_error('data', self.MSG_INVALID_HOSTNAME_SHORT)
-
-    def test_invalid_data_field_bad_wild_card(self):
-        self.form.cleaned_data['data'] = 'derp.*.' + self.PTR
-        self.form.clean()
-        self.assert_error('data', self.MSG_INVALID_HOSTNAME_SHORT)
diff --git a/tatudashboard/tests/test_spf_record_form.py b/tatudashboard/tests/test_spf_record_form.py
deleted file mode 100644
index 7885c3f..0000000
--- a/tatudashboard/tests/test_spf_record_form.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright 2015 NEC Corporation.  All rights reserved.
-#
-#    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 designatedashboard.tests import base
-
-
-class SPFRecordFormTests(base.BaseRecordFormCleanTests):
-
-    TEXT = 'v=spf1 +all'
-
-    def setUp(self):
-        super(SPFRecordFormTests, self).setUp()
-        self.form.cleaned_data['type'] = 'SPF'
-        self.form.cleaned_data['name'] = self.HOSTNAME
-        self.form.cleaned_data['txt'] = self.TEXT
-
-    def test_valid_field_values(self):
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_valid_name_field_wild_card(self):
-        self.form.cleaned_data['name'] = '*'
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_name_field(self):
-        self.form.cleaned_data['name'] = ''
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_txt_field(self):
-        self.form.cleaned_data['txt'] = ''
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_invalid_name_field(self):
-        self.form.cleaned_data['name'] = 'foo-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_starting_dash(self):
-        self.form.cleaned_data['name'] = '-ww.foo.com'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_trailing_dash(self):
-        self.form.cleaned_data['name'] = 'www.foo.co-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_bad_wild_card(self):
-        self.form.cleaned_data['name'] = 'derp.*'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_outside_of_domain_name_field(self):
-        self.form.cleaned_data['name'] = 'www.bar.com.'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
diff --git a/tatudashboard/tests/test_sshfp_record_form.py b/tatudashboard/tests/test_sshfp_record_form.py
deleted file mode 100644
index 32d7799..0000000
--- a/tatudashboard/tests/test_sshfp_record_form.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright 2015 NEC Corporation.  All rights reserved.
-#
-#    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 designatedashboard.tests import base
-
-
-class SSHFPRecordFormTests(base.BaseRecordFormCleanTests):
-
-    TEXT = '2 1 d1eb0d876ec69d18bcefc4263ae43ec33ae14f4c'
-    MSG_INVALID_RECORD = "Enter a valid SSHFP record"
-
-    def setUp(self):
-        super(SSHFPRecordFormTests, self).setUp()
-        self.form.cleaned_data['type'] = 'SSHFP'
-        self.form.cleaned_data['name'] = self.HOSTNAME
-        self.form.cleaned_data['txt'] = self.TEXT
-
-    def test_valid_field_values(self):
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_valid_name_field_wild_card(self):
-        self.form.cleaned_data['name'] = '*'
-        self.form.clean()
-        self.assert_no_errors()
-
-    def test_missing_txt_field(self):
-        self.form.cleaned_data['txt'] = ''
-        self.form.clean()
-        self.assert_error('txt', self.MSG_INVALID_RECORD)
-
-    def test_invalid_txt_field(self):
-        self.form.cleaned_data['txt'] = 'foo'
-        self.form.clean()
-        self.assert_error('txt', self.MSG_INVALID_RECORD)
-
-    def test_invalid_text_field_starting_dash(self):
-        self.form.cleaned_data['txt'] = '-2 1 d1eb0d876ec69d18bcef\
-                                         c4263ae43ec33ae14f4c'
-        self.form.clean()
-        self.assert_error('txt', self.MSG_INVALID_RECORD)
-
-    def test_invalid_text_field_trailing_dash(self):
-        self.form.cleaned_data['txt'] = '2 1 d1eb0d876ec69d18bcef\
-                                         c4263ae43ec33ae14f4c-'
-        self.form.clean()
-        self.assert_error('txt', self.MSG_INVALID_RECORD)
-
-    def test_invalid_text_field_bad_wild_card(self):
-        self.form.cleaned_data['txt'] = '1 2 e0d5320e7e36dea8e369b*'
-        self.form.clean()
-        self.assert_error('txt', self.MSG_INVALID_RECORD)
-
-    def test_default_assignment_data_field(self):
-        self.form.clean()
-        self.assertEqual(self.TEXT, self.form.cleaned_data['data'])
-
-    def test_invalid_name_field(self):
-        self.form.cleaned_data['name'] = 'foo-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_starting_dash(self):
-        self.form.cleaned_data['name'] = '-ww.foo.com'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_trailing_dash(self):
-        self.form.cleaned_data['name'] = 'www.foo.co-'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_invalid_name_field_bad_wild_card(self):
-        self.form.cleaned_data['name'] = 'derp.*'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
-
-    def test_outside_of_domain_name_field(self):
-        self.form.cleaned_data['name'] = 'www.bar.com.'
-        self.form.clean()
-        self.assert_error('name', self.MSG_INVALID_HOSTNAME)
diff --git a/tox.ini b/tox.ini
index 97a23de..87a9942 100644
--- a/tox.ini
+++ b/tox.ini
@@ -13,7 +13,7 @@ setenv = VIRTUAL_ENV={envdir}
          NOSE_OPENSTACK_YELLOW=0.025
          NOSE_OPENSTACK_SHOW_ELAPSED=1
          PYTHONDONTWRITEBYTECODE=1
-         DJANGO_SETTINGS_MODULE=designatedashboard.settings
+         DJANGO_SETTINGS_MODULE=tatudashboard.settings
 whitelist_externals = find
 deps = -r{toxinidir}/requirements.txt
        -r{toxinidir}/test-requirements.txt
@@ -21,7 +21,7 @@ deps = -r{toxinidir}/requirements.txt
 
 commands =
     find . -type f -name "*.pyc" -delete
-    {toxinidir}/manage.py test designatedashboard --settings=designatedashboard.tests.settings
+    {toxinidir}/manage.py test tatudashboard --settings=tatudashboard.tests.settings
 passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
 
 [testenv:pep8]
@@ -31,7 +31,7 @@ commands = flake8
 commands = {posargs}
 
 [testenv:cover]
-commands = {toxinidir}/manage.py test designatedashboard --settings=designatedashboard.tests.settings --cover-xml
+commands = {toxinidir}/manage.py test tatudashboard --settings=tatudashboard.tests.settings --cover-xml
 
 [testenv:docs]
 commands = python setup.py build_sphinx