././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2089925 designate_dashboard-23.0.0/0000775000175000017500000000000015257164541014402 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.397982 designate_dashboard-23.0.0/.eslintrc0000664000175000017500000000215215257164455016232 0ustar00zuulzuul# Set up globals globals: angular: false extends: openstack # Most environment options are not explicitly enabled or disabled, only # included here for completeness' sake. They are commented out, because the # global updates.py script would otherwise override them during a global # requirements synchronization. # # Individual projects should choose which platforms they deploy to. env: # browser global variables. browser: true # Adds all of the Jasmine testing global variables for version 1.3 and 2.0. jasmine: true # Enable eslint-plugin-angular plugins: - angular # Below we adjust rules specific to horizon's usage of openstack's linting # rules, and its own plugin inclusions. rules: ############################################################################# # Disabled Rules from eslint-config-openstack ############################################################################# valid-jsdoc: 1 brace-style: 1 no-extra-parens: 1 consistent-return: 1 callback-return: 1 guard-for-in: 1 block-scoped-var: 1 semi-spacing: 1 no-redeclare: 1 no-new: 1 no-warning-comments: 0 ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.399982 designate_dashboard-23.0.0/.zuul.yaml0000664000175000017500000000041315257164455016345 0ustar00zuulzuul- project: templates: - check-requirements - horizon-non-primary-django-jobs - horizon-nodejs-jobs - openstack-cover-jobs-horizon - openstack-python3-jobs-horizon - publish-openstack-docs-pti - release-notes-jobs-python3 ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1790765409.06399 designate_dashboard-23.0.0/AUTHORS0000664000175000017500000000573315257164541015462 0ustar00zuulzuulAggelos Kolaitis Akihiro Motoki Akihiro Motoki Alex Monk Alexandre Detiste Andreas Jaeger Andreas Jaeger Anusree BubaVV Cao Xuan Hoang Charles Short Chris Johnson Chuck Short Corey Bryant Dmitry Galkin Doug Hellmann Endre Karlson Enrique Garcia Erik Olof Gunnar Andersson Federico Ceratto Flavio Percoco Ghanshyam Mann Graham Hayes Graham Hayes Graham Hayes Hervé Beraud Ingo Fischer Ivan Anfimov Ivan Kolodyazhny James E. Blair Janonymous Jens Harbott Jingjing Ren Kiall Mac Innes Kiall Mac Innes LeopardMa MasayaAoyama Matt Borland Michael Johnson Monty Taylor Nguyen Hai Nicolas Bock Omer OpenStack Release Bot Pavlo Shchelokovskyy Praveen Yalagandula Qian Min Chen Rajiv Kumar Sean McGinnis Stephen Finucane Steve McLellan Swapnil Kulkarni (coolsvap) Takashi Kajinami Takashi Kajinami Tatiana Ovchinnikova Thierry Carrez Tobias Urdin Tony Xu Tyr Johanson Vadym Markov Vu Cong Tuan ZhijunWei andrewbogott avnish eric huang.zhiping jacky06 jiaqi07 likui lingyongxu ljhuang luke.li manchandavishal mareklycka qiaomin ricolin shashi.kant sonu.kumar sunqingliang6 wangzihao xhzhf ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.399982 designate_dashboard-23.0.0/CONTRIBUTING.rst0000664000175000017500000000110015257164455017037 0ustar00zuulzuulIf you would like to contribute to the development of OpenStack, you must follow the steps in the "If you're a developer, start here" section of this page: https://wiki.openstack.org/wiki/How_To_Contribute Once those steps have been completed, changes to OpenStack should be submitted for review via the Gerrit tool, following the workflow documented at: https://docs.openstack.org/infra/manual/developers.html Pull requests submitted through GitHub will be ignored. Bugs should be filed on Launchpad, not GitHub: https://bugs.launchpad.net/designate-dashboard ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.0169895 designate_dashboard-23.0.0/ChangeLog0000664000175000017500000003621215257164541016160 0ustar00zuulzuulCHANGES ======= 23.0.0 ------ * Rework zone create API arguments handling * Fix releasenotes tox environment missing deps * Drop Python 3.10 * Add support for Python 3.14 * Migrate setup configuration to pyproject.toml * Drop unused testrepository * Update Babel configuration * Remove delete steps for pyc files * Add zone attributes support to zone creation form * Imported Translations from Zanata * Add batch delete support for record sets * Imported Translations from Zanata * Update master for stable/2026.1 22.0.0 ------ * Imported Translations from Zanata * Imported Translations from Zanata * Imported Translations from Zanata * reno: Update master for unmaintained/2024.1 * Imported Translations from Zanata * Update master for stable/2025.2 21.0.0 ------ * Imported Translations from Zanata * Fix undefined in success toast for update calls * Check description before using it in update\_zone() * Imported Translations from Zanata * Imported Translations from Zanata * Ability to translate the group name into other languages * Imported Translations from Zanata * Drop environments for nose * Remove unicode prefix from code * Drop support for Python 3.9 * Remove unused doc8 * docs: update openstackdocstheme to 3.5.0 and remove unicode from code * Remove tags from README * Update master for stable/2025.1 20.0.0 ------ * tox: Remove basepython * reno: Update master for unmaintained/2023.1 * Remove Python 3.8 support * Drop unnecessary 'x' bit from doc config file * Remove openstacksdk workaround for floating IP * Update master for stable/2024.2 19.0.0 ------ * reno: Update master for unmaintained/zed * Imported Translations from Zanata * Imported Translations from Zanata * Update master for stable/2024.1 18.0.0 ------ * reno: Update master for unmaintained/xena * reno: Update master for unmaintained/wallaby * reno: Update master for unmaintained/victoria * reno: Update master for unmaintained/yoga * tox: Drop envdir * Bump hacking * remove reference to old unittest2 * Update python classifier in setup.cfg * Migrate passthrough to openstacksdk * Update master for stable/2023.2 * Remove extra spaces in tox.ini 17.0.0 ------ * Add python3.10 support in testing runtime * Imported Translations from Zanata * Fix "Masters IP Address" for Zone update form * Update master for stable/2023.1 16.0.0 ------ * Remove hard-coded Python path in karma.conf.js * Imported Translations from Zanata * Use py3 as the default runtime for tox * Imported Translations from Zanata * Imported Translations from Zanata * Switch to 2023.1 Python3 unit tests and generic template name * Update master for stable/zed 15.0.0 ------ * Fix details pages reload behaviour * Fix issue with missing elements in the dashboard * Imported Translations from Zanata * Imported Translations from Zanata * Imported Translations from Zanata * Imported Translations from Zanata * Replace deprecated ugettext\_lazy * Fix designate-dashboard lint * Update Designate dashboard for Angular 1.8.2.2 * Update python testing as per zed cycle testing runtime * Add Python 3.9 to supported runtumes * Imported Translations from Zanata * Fix manage.py for the default case * Replace usage of oslo.log * Remove unused designateclient * Use Horizon project template for nodejs jobs * Drop lower-constraints.txt and its testing * Address RemovedInDjango40Warning * Add Python3 zed unit tests * Update master for stable/yoga * Add example dashboard config file * Remove reference to the removed parameter * Rename "Floating IP Description" field 14.0.0 ------ * Imported Translations from Zanata * Add Python3 yoga unit tests * Update master for stable/xena 13.0.0 ------ * Changed minversion in tox to 3.18.0 * Drop horizon-nodejs10-jobs template * setup.cfg: Replace dashes with underscores * Use TOX\_CONSTRAINTS\_FILE * Add horizon-nodejs14-job template * Fix a missing font for PDF doc generation * Add Python3 xena unit tests * Update master for stable/wallaby 12.0.0 ------ * Imported Translations from Zanata * Fix lower-constrains job * Run npm nodejs job with Firefox browser * Disable nodjs an lower constraint job temporarily * Add default index URL to resource modules * Imported Translations from Zanata * Add Python3 wallaby unit tests * Update master for stable/victoria 11.0.0 ------ * [goal] Migrate testing to ubuntu focal * Fix hacking min version to 3.0.1 * Remove obsolete setup * drop mock from lower-constraints and requirements * Imported Translations from Zanata * Switch to newer openstackdocstheme and reno versions * Imported Translations from Zanata * Bump default tox env from py37 to py38 * Add py38 package metadata * Imported Translations from Zanata * Add Python3 victoria unit tests * Update master for stable/ussuri 10.0.0 ------ * Imported Translations from Zanata * Cleanup py27 support * Imported Translations from Zanata * Imported Translations from Zanata * Fix pyScss version in lower-constraints.txt * Add CAA record type support * Drop Django 1.11 support * translation: drop babel extractor definitions * Imported Translations from Zanata * Imported Translations from Zanata * [ussuri][goal] Drop python 2.7 support and testing * Generate PDF documentation * Switch to official Ussuri jobs * Use Horizon project template for django jobs * Fix list zones updated at same time * Imported Translations from Zanata * Update master for stable/train 9.0.0 ----- * Imported Translations from Zanata * Update the constraints url * Cleanup release notes * Fix releasenotes index page * Swith nodejs10 jobs to voting * Add release-note-job to designate-dashboard * Removed deprecated v1 api dashboard * Sync Sphinx requirement * Add Python 3 Train unit tests * Fix broken tests * Imported Translations from Zanata * Imported Translations from Zanata * Changes for url transition to OpenDev * OpenDev Migration Patch * Dropping the py35 testing * Drop nodejs4 job * Update master for stable/stein * Add nodejs10 jobs on bionic 8.0.0 ----- * Switch to horizon-nodejs4-jobs-nonvoting template * Imported Translations from Zanata * Imported Translations from Zanata * Update hacking version to latest * add python 3.7 unit test job * Imported Translations from Zanata * Imported Translations from Zanata * Set lower-requirements to use stable horizon * Imported Translations from Zanata * Change openstack-dev to openstack-discuss * update wiki http links to https * Enable py36 testing * Increment versioning with pbr instruction * Allow creation of NS records in zones * Use templates for lower-constraints, cover * Fix coverage * Imported Translations from Zanata * Imported Translations from Zanata * switch documentation job to new PTI * import zuul job settings from project-config * Drop nose dependencies * Imported Translations from Zanata * Update reno for stable/rocky 7.0.0 ----- * Imported Translations from Zanata * Replaces ng-views with the horizon streamlined version * Updates to new Horizon action API 7.0.0.0b3 --------- * Drop mox - no longer needed * Add test 'node\_modules' in tox.ini for flake8 exclude * Imported Translations from Zanata * Imported Translations from Zanata * Drop python-cinderclient usage * Add python3 django 1.11 job instead of django 2.0 job * fix tox python3 overrides * Cleanup unnecessary entries in test-requirements.txt 7.0.0.0b2 --------- * Drop mox3 from test-requirements.txt * Require the (soon-to-be) Rocky version of Horizon * Django 2.0 support * Remove "-y" option for package install command * Fix horizon install for tox * Use Horizon UT framework * Fix lower-constraints.txt 7.0.0.0b1 --------- * Sender Policy Framework record is SPF in short * Updated from global requirements * add lower-constraints job * Install horizon directly from pypi * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements * Imported Translations from Zanata * Imported Translations from Zanata * Imported Translations from Zanata * Fixing v1 Dashboard * Imported Translations from Zanata * Imported Translations from Zanata * Update reno for stable/queens * Remove commented code + unneeded mox 6.0.0.0rc1 ---------- * Zuul: Remove project name 6.0.0.0b3 --------- * Updated from global requirements * Updated from global requirements * Use 'trimmed' for blocktrans in multi-line strings * Imported Translations from Zanata * Optimize the link address 6.0.0.0b2 --------- * Use jobs from designate repo * Updated from global requirements * Imported Translations from Zanata * Remove setting of version/release from releasenotes * Updated from global requirements * Drop django\_openstack\_auth from requirements.txt 6.0.0.0b1 --------- * Imported Translations from Zanata * Imported Translations from Zanata * Updated from global requirements * Updated from global requirements * Fix viewing detail resources * Updated from global requirements * Imported Translations from Zanata * AngularJS unittest with Jasmine and Karma * Imported Translations from Zanata * Updated from global requirements * Updated from global requirements * Imported Translations from Zanata * Update reno for stable/pike 5.0.0 ----- * Updated from global requirements 5.0.0.0b3 --------- * Updated from global requirements * switch from oslosphinx to openstackdocstheme * rearrange content using the new standard layout * Updated from global requirements * Stop using deprecated 'message' attribute in Exception * Imported Translations from Zanata * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements * Imported Translations from Zanata * use base.html instead of adminui/base.html for not working * Fixing a potential unbound local error 5.0.0.0b1 --------- * Updated from global requirements * [Fix gate]Update test requirement * Updated from global requirements * Imported Translations from Zanata * Imported Translations from Zanata * Update reno for stable/ocata * Remove link to modindex 4.0.0.0rc1 ---------- * Actually show attribute on zone info page 4.0.0.0b3 --------- * Ensure slash character for URL of dns service Solves a pep8 warning too * Updated from global requirements * Remove support for py33 and update to py35 * Enable release notes translation * Switch to oslo\_log * Imported Translations from Zanata * H803 hacking have been deprecated 4.0.0.0b2 --------- * Imported Translations from Zanata * Updated from global requirements * Added release notes for Designate-dashboard * Show team and repo badges on README * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements * Imported Translations from Zanata * Imported Translations from Zanata * Updated from global requirements * Updated from global requirements * Remove vim header 3.0.0.0rc1 ---------- * API v2 Dashboard * Add Upper constraints to dashboard * Allow SRV/MX records to have priority 0 * Remove token logging * Update home-page info in the configuration file * Imported Translations from Zanata 3.0.0.0b3 --------- * Updated from global requirements * Follow-up Ibddffc5f: Also allow PTR records pointing to the domain itself * Updated from global requirements * SSHFP validation: Allow algorithm 4 - ED25519 * Remove discover from test-requirements * Updated from global requirements 3.0.0.0b2 --------- * Updated from global requirements * Add option for records pointing to domain * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements * Updated from global requirements * Imported Translations from Zanata * Imported Translations from Zanata * Imported Translations from Zanata * Imported Translations from Zanata * Updated from global requirements 3.0.0.0b1 --------- * Updated from global requirements * Updated from global requirements * Updated from global requirements * Imported Translations from Zanata * Imported Translations from Zanata * Updated from global requirements * Fix package name in init.py * Imported Translations from Zanata * Updated from global requirements 2.0.0 ----- * Imported Translations from Zanata * Fix unit tests under Django 1.9 * Add ADD\_INSTALLED\_APPS to 'enabled' file * Extract strings from django templates * Imported Translations from Zanata * Fix unit tests under Django 1.9 * Extract strings from django templates * Add ADD\_INSTALLED\_APPS to 'enabled' file * Imported Translations from Zanata * Update .gitreview for stable/mitaka 2.0.0.0rc1 ---------- * Imported Translations from Zanata * Modernize README.rst * Updated from global requirements 2.0.0.0b3 --------- * Updated from global requirements * Imported Translations from Zanata * Update numbering of enable panels * Imported Translations from Zanata * Update translation setup * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements 2.0.0.0b2 --------- * Updated from global requirements * Put py34 first in the env order of tox * Empty hidden "Create Record" form fields * Updated from global requirements * Drop MANIFEST.in as it is not needed explicitely by PBR * Pass environment variables of proxy to tox * Remove version from setup.cfg 2.0.0.0b1 --------- * Remove py26 support * Clearing out .pyc file before a tox run * Updated from global requirements * Check for get\_quota policy before calling the API * Imported Translations from Zanata * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements 1.0.0 ----- * Imported Translations from Zanata * Imported Translations from Zanata * Open Mitaka development 1.0.0.0rc1 ---------- * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements * Imported Translations from Transifex * Updated from global requirements * Updated from global requirements * Added test cases for domain's SPF record * Added test cases for domain's PTR record * Added test cases for domain's SSHFP record * Updated from global requirements * Replaces minimum ttl value from 0 to 1 * Imported Translations from Transifex * Imported Translations from Transifex 1.0.0.0b2 --------- * Set correct name and version in setup.cfg * Imported Translations from Transifex * Updated from global requirements * Record creation / update screen simplification * Updated from global requirements * Improving record create update buttons * Adding record-editor fip dropdown * Updated from global requirements * Update from global-requirements * Conform to Consistent Testing Interface * Setup for translation * Add .gitreview file * Fix pep8 failures * Correcting missing import for dashboard messaging * Add domain record detail screen * Update Dashboard requirements * updating tox pep8 issues * Add quota check for domain create * Improve UX of create and update record screen * Minor fixes: pep8 and redundant code * Include README.rst in dashboard sdist * Correct designate-dashboard domain detail screen * Add policy support to designatedashboard * forgot missing \_\_init\_\_.py file * improving designatedashboard packaging * Validate SSHFP records * Fix exception handling * Remove bulk actions from records page * Pass SSL CA Cert to client * Pass ssl no verify to client * Added designate-dashboard code to contrib/designate-dashboard ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.399982 designate_dashboard-23.0.0/HACKING.rst0000664000175000017500000000023615257164455016205 0ustar00zuulzuuldesignatedashboard Style Commandments ===================================== Read the OpenStack Style Commandments https://docs.openstack.org/hacking/latest/ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4009821 designate_dashboard-23.0.0/LICENSE0000664000175000017500000002363615257164455015425 0ustar00zuulzuul Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2089925 designate_dashboard-23.0.0/PKG-INFO0000644000175000017500000000650715257164541015505 0ustar00zuulzuulMetadata-Version: 2.4 Name: designate-dashboard Version: 23.0.0 Summary: Designate Horizon UI bits Author-email: OpenStack License-Expression: Apache-2.0 Project-URL: Homepage, https://docs.openstack.org/designate-dashboard/latest/ Project-URL: Repository, https://opendev.org/openstack/designate-dashboard Project-URL: Bug Tracker, https://bugs.launchpad.net/designate-dashboard/ Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3.14 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Requires-Python: >=3.11 Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: pbr!=2.1.0,>=2.0.0 Requires-Dist: horizon>=17.1.0 Requires-Dist: openstacksdk>=2.1.0 Dynamic: license-file Dynamic: requires-dist =================== Designate Dashboard =================== .. image:: https://governance.openstack.org/tc/badges/designate-dashboard.svg .. Change things from this point on Designate Horizon UI bits * Free software: Apache license Howto ----- 1. Package the designatedashboard by running:: python setup.py sdist This will create a python egg in the dist folder, which can be used to install on the horizon machine or within horizon's python virtual environment. -- or -- Install directly from source by running "python setup.py --install" Note: On some systems python may throw an error like 'Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository' 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. 2. Copy panel plugin files into your Horizon config. These files can be found in designatedashboard/enabled and should be copied to /usr/share/openstack-dashboard/openstack_dashboard/local/enabled or the equivalent directory for your openstack-dashboard install. 3. Copy default config file into your Horizon config. The file can be found in designatedashboard/local_settings.d and should be copied to /etc/openstack-dashboard/local_settings.d 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. 4. (Optional) Copy the designate policy file into horizon's policy files folder. Test ---- * How to run JS tests: * Install npm and nodejs=4.8.4 $ ``sudo apt-get install npm`` $ ``curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -`` $ ``sudo apt-get install nodejs`` 1. ``npm install`` (to create virtual environment and install all dependencies in package.json) 2. ``npm run lint`` for eslint 3. ``npm run test`` for JS unit tests ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4009821 designate_dashboard-23.0.0/README.rst0000664000175000017500000000412315257164455016075 0ustar00zuulzuul=================== Designate Dashboard =================== .. image:: https://governance.openstack.org/tc/badges/designate-dashboard.svg .. Change things from this point on Designate Horizon UI bits * Free software: Apache license Howto ----- 1. Package the designatedashboard by running:: python setup.py sdist This will create a python egg in the dist folder, which can be used to install on the horizon machine or within horizon's python virtual environment. -- or -- Install directly from source by running "python setup.py --install" Note: On some systems python may throw an error like 'Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository' 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. 2. Copy panel plugin files into your Horizon config. These files can be found in designatedashboard/enabled and should be copied to /usr/share/openstack-dashboard/openstack_dashboard/local/enabled or the equivalent directory for your openstack-dashboard install. 3. Copy default config file into your Horizon config. The file can be found in designatedashboard/local_settings.d and should be copied to /etc/openstack-dashboard/local_settings.d 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. 4. (Optional) Copy the designate policy file into horizon's policy files folder. Test ---- * How to run JS tests: * Install npm and nodejs=4.8.4 $ ``sudo apt-get install npm`` $ ``curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -`` $ ``sudo apt-get install nodejs`` 1. ``npm install`` (to create virtual environment and install all dependencies in package.json) 2. ``npm run lint`` for eslint 3. ``npm run test`` for JS unit tests ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.401982 designate_dashboard-23.0.0/babel-django.cfg0000664000175000017500000000016715257164455017400 0ustar00zuulzuul[python: **.py] [django: **/templates/**.html] [extractors] django = horizon.utils.babel_extract_django:extract_django ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.401982 designate_dashboard-23.0.0/bindep.txt0000664000175000017500000000041515257164455016410 0ustar00zuulzuul# This is a cross-platform list tracking distribution packages needed for install and tests; # see https://docs.openstack.org/infra/bindep/ for additional information. libfontconfig1 [nodejs platform:dpkg] # PDF Docs package dependencies tex-gyre [doc platform:dpkg] ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1779919 designate_dashboard-23.0.0/designate_dashboard.egg-info/0000775000175000017500000000000015257164541022046 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.0679903 designate_dashboard-23.0.0/designate_dashboard.egg-info/PKG-INFO0000644000175000017500000000650715257164541023151 0ustar00zuulzuulMetadata-Version: 2.4 Name: designate-dashboard Version: 23.0.0 Summary: Designate Horizon UI bits Author-email: OpenStack License-Expression: Apache-2.0 Project-URL: Homepage, https://docs.openstack.org/designate-dashboard/latest/ Project-URL: Repository, https://opendev.org/openstack/designate-dashboard Project-URL: Bug Tracker, https://bugs.launchpad.net/designate-dashboard/ Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3.14 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Requires-Python: >=3.11 Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: pbr!=2.1.0,>=2.0.0 Requires-Dist: horizon>=17.1.0 Requires-Dist: openstacksdk>=2.1.0 Dynamic: license-file Dynamic: requires-dist =================== Designate Dashboard =================== .. image:: https://governance.openstack.org/tc/badges/designate-dashboard.svg .. Change things from this point on Designate Horizon UI bits * Free software: Apache license Howto ----- 1. Package the designatedashboard by running:: python setup.py sdist This will create a python egg in the dist folder, which can be used to install on the horizon machine or within horizon's python virtual environment. -- or -- Install directly from source by running "python setup.py --install" Note: On some systems python may throw an error like 'Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository' 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. 2. Copy panel plugin files into your Horizon config. These files can be found in designatedashboard/enabled and should be copied to /usr/share/openstack-dashboard/openstack_dashboard/local/enabled or the equivalent directory for your openstack-dashboard install. 3. Copy default config file into your Horizon config. The file can be found in designatedashboard/local_settings.d and should be copied to /etc/openstack-dashboard/local_settings.d 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. 4. (Optional) Copy the designate policy file into horizon's policy files folder. Test ---- * How to run JS tests: * Install npm and nodejs=4.8.4 $ ``sudo apt-get install npm`` $ ``curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -`` $ ``sudo apt-get install nodejs`` 1. ``npm install`` (to create virtual environment and install all dependencies in package.json) 2. ``npm run lint`` for eslint 3. ``npm run test`` for JS unit tests ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1489916 designate_dashboard-23.0.0/designate_dashboard.egg-info/SOURCES.txt0000664000175000017500000002021315257164541023730 0ustar00zuulzuul.eslintrc .zuul.yaml AUTHORS CONTRIBUTING.rst ChangeLog HACKING.rst LICENSE README.rst babel-django.cfg bindep.txt karma.conf.js manage.py package.json pyproject.toml requirements.txt setup.cfg setup.py test test-requirements.txt test-shim.js tox.ini designate_dashboard.egg-info/PKG-INFO designate_dashboard.egg-info/SOURCES.txt designate_dashboard.egg-info/dependency_links.txt designate_dashboard.egg-info/not-zip-safe designate_dashboard.egg-info/pbr.json designate_dashboard.egg-info/requires.txt designate_dashboard.egg-info/top_level.txt designatedashboard/__init__.py designatedashboard/sdk_connection.py designatedashboard/api/__init__.py designatedashboard/api/rest/__init__.py designatedashboard/api/rest/designate.py designatedashboard/dashboards/__init__.py designatedashboard/dashboards/project/__init__.py designatedashboard/dashboards/project/ngdns/__init__.py designatedashboard/dashboards/project/ngdns/reverse_dns/__init__.py designatedashboard/dashboards/project/ngdns/reverse_dns/panel.py designatedashboard/dashboards/project/ngdns/reverse_dns/urls.py designatedashboard/dashboards/project/ngdns/zones/__init__.py designatedashboard/dashboards/project/ngdns/zones/panel.py designatedashboard/dashboards/project/ngdns/zones/urls.py designatedashboard/enabled/_1710_project_dns_panel_group.py designatedashboard/enabled/_1721_dns_zones_panel.py designatedashboard/enabled/_1722_dns_reversedns_panel.py designatedashboard/enabled/__init__.py designatedashboard/local_settings.d/_1799_dns_settings.py designatedashboard/locale/cs/LC_MESSAGES/django.po designatedashboard/locale/de/LC_MESSAGES/django.po designatedashboard/locale/en_GB/LC_MESSAGES/django.po designatedashboard/locale/es/LC_MESSAGES/django.po designatedashboard/locale/fr/LC_MESSAGES/django.po designatedashboard/locale/id/LC_MESSAGES/django.po designatedashboard/locale/ja/LC_MESSAGES/django.po designatedashboard/locale/ko_KR/LC_MESSAGES/django.po designatedashboard/locale/ne/LC_MESSAGES/django.po designatedashboard/locale/pt_BR/LC_MESSAGES/django.po designatedashboard/locale/ru/LC_MESSAGES/django.po designatedashboard/locale/tr_TR/LC_MESSAGES/django.po designatedashboard/static/designatedashboard/designatedashboard.module.js designatedashboard/static/designatedashboard/designatedashboard.scss designatedashboard/static/designatedashboard/reverse_dns.html designatedashboard/static/designatedashboard/zones.html designatedashboard/static/designatedashboard/resources/resources.module.js designatedashboard/static/designatedashboard/resources/util.service.js designatedashboard/static/designatedashboard/resources/os-designate-floatingip/api.service.js designatedashboard/static/designatedashboard/resources/os-designate-floatingip/os-designate-floatingip.module.js designatedashboard/static/designatedashboard/resources/os-designate-floatingip/actions/actions.module.js designatedashboard/static/designatedashboard/resources/os-designate-floatingip/actions/set.service.js designatedashboard/static/designatedashboard/resources/os-designate-floatingip/actions/unset.service.js designatedashboard/static/designatedashboard/resources/os-designate-floatingip/details/details.module.js designatedashboard/static/designatedashboard/resources/os-designate-floatingip/details/drawer.html designatedashboard/static/designatedashboard/resources/os-designate-floatingip/details/overview.controller.js designatedashboard/static/designatedashboard/resources/os-designate-floatingip/details/overview.html designatedashboard/static/designatedashboard/resources/os-designate-recordset/api.service.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/os-designate-recordset.module.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/actions.module.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/actions.module.spec.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/common-forms.service.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/create.service.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/delete.service.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/update.service.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/details.module.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/drawer.html designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/overview.controller.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/overview.html designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/zone-recordsets.controller.js designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/zone-recordsets.html designatedashboard/static/designatedashboard/resources/os-designate-zone/api.service.js designatedashboard/static/designatedashboard/resources/os-designate-zone/os-designate-zone.module.js designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/actions.module.js designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/actions.module.spec.js designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/common-forms.service.js designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/create.html designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/create.service.js designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/delete.service.js designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/update.service.js designatedashboard/static/designatedashboard/resources/os-designate-zone/details/details.module.js designatedashboard/static/designatedashboard/resources/os-designate-zone/details/drawer.html designatedashboard/static/designatedashboard/resources/os-designate-zone/details/overview.controller.js designatedashboard/static/designatedashboard/resources/os-designate-zone/details/overview.html designatedashboard/tests/.secret_key_store designatedashboard/tests/__init__.py designatedashboard/tests/base.py designatedashboard/tests/settings.py doc/requirements.txt doc/source/conf.py doc/source/index.rst doc/source/contributor/index.rst doc/source/install/index.rst doc/source/user/index.rst releasenotes/notes/batch-delete-recordsets-a1b2c3d4e5f6g7h8.yaml releasenotes/notes/drop-py-2-7-ae8cade4a0ee1da8.yaml releasenotes/notes/drop-python-3-6-and-3-7-8d166b2f80b27277.yaml releasenotes/notes/drop-python-39.yaml releasenotes/notes/min-openstacksdk-b7e4661f8800bb9c.yaml releasenotes/notes/openstacksdk-11483491f9978bd1.yaml releasenotes/notes/remove-designateclient-e98963b8baa4aa4f.yaml releasenotes/notes/remove-oslo-log-078df11995380f36.yaml releasenotes/notes/remove-py38-1bc6676c8e5e880c.yaml releasenotes/notes/removed-v1-dashboard-56d4697d57baef09.yaml releasenotes/notes/zone-attributes-f1eed62987954b8c.yaml releasenotes/source/2023.1.rst releasenotes/source/2023.2.rst releasenotes/source/2024.1.rst releasenotes/source/2024.2.rst releasenotes/source/2025.1.rst releasenotes/source/2025.2.rst releasenotes/source/2026.1.rst releasenotes/source/conf.py releasenotes/source/index.rst releasenotes/source/train.rst releasenotes/source/unreleased.rst releasenotes/source/ussuri.rst releasenotes/source/victoria.rst releasenotes/source/wallaby.rst releasenotes/source/xena.rst releasenotes/source/yoga.rst releasenotes/source/zed.rst releasenotes/source/locale/cs/LC_MESSAGES/releasenotes.po releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po releasenotes/source/locale/ja/LC_MESSAGES/releasenotes.po releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po releasenotes/source/locale/ne/LC_MESSAGES/releasenotes.po releasenotes/source/locale/pt_BR/LC_MESSAGES/releasenotes.po releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.0679903 designate_dashboard-23.0.0/designate_dashboard.egg-info/dependency_links.txt0000664000175000017500000000000115257164541026114 0ustar00zuulzuul ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765408.4559803 designate_dashboard-23.0.0/designate_dashboard.egg-info/not-zip-safe0000664000175000017500000000000115257164540024273 0ustar00zuulzuul ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.0829904 designate_dashboard-23.0.0/designate_dashboard.egg-info/pbr.json0000664000175000017500000000005615257164541023525 0ustar00zuulzuul{"git_version": "98a0a76", "is_release": true}././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.0689902 designate_dashboard-23.0.0/designate_dashboard.egg-info/requires.txt0000664000175000017500000000006715257164541024451 0ustar00zuulzuulpbr!=2.1.0,>=2.0.0 horizon>=17.1.0 openstacksdk>=2.1.0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.0689902 designate_dashboard-23.0.0/designate_dashboard.egg-info/top_level.txt0000664000175000017500000000002315257164541024573 0ustar00zuulzuuldesignatedashboard ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1779919 designate_dashboard-23.0.0/designatedashboard/0000775000175000017500000000000015257164541020215 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.401982 designate_dashboard-23.0.0/designatedashboard/__init__.py0000664000175000017500000000124315257164455022332 0ustar00zuulzuul# -*- coding: utf-8 -*- # 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 pbr.version __version__ = pbr.version.VersionInfo( 'designate-dashboard').version_string() ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.178992 designate_dashboard-23.0.0/designatedashboard/api/0000775000175000017500000000000015257164541020766 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.401982 designate_dashboard-23.0.0/designatedashboard/api/__init__.py0000664000175000017500000000000015257164455023071 0ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.178992 designate_dashboard-23.0.0/designatedashboard/api/rest/0000775000175000017500000000000015257164541021743 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.401982 designate_dashboard-23.0.0/designatedashboard/api/rest/__init__.py0000664000175000017500000000127415257164455024064 0ustar00zuulzuul# (c) Copyright 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. """REST API for Horizon dashboard Javascript code. """ from . import designate # noqa ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.401982 designate_dashboard-23.0.0/designatedashboard/api/rest/designate.py0000664000175000017500000001662615257164455024277 0ustar00zuulzuul# Copyright (c) 2023 Binero # # 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.sdk_connection import get_sdk_connection from django.views import generic import logging from openstack_dashboard.api.rest import urls from openstack_dashboard.api.rest import utils as rest_utils LOG = logging.getLogger(__name__) def _sdk_object_to_list(object): """Converts an SDK generator object to a list of dictionaries. :param object: SDK generator object :returns: List of dictionaries """ result_list = [] for item in object: result_list.append(item.to_dict()) return result_list def create_zone(request): """Create zone.""" data = request.DATA conn = get_sdk_connection(request) build_kwargs = dict( name=data['name'], type=data['type'], ) if data.get('description', None): build_kwargs['description'] = data['description'] if data['type'] == 'PRIMARY': build_kwargs['email'] = data['email'] if data.get('ttl', None): build_kwargs['ttl'] = data['ttl'] elif data['type'] == 'SECONDARY': build_kwargs['masters'] = data['masters'] if data.get('attributes', None): build_kwargs['attributes'] = data['attributes'] zone = conn.dns.create_zone(**build_kwargs) return zone.to_dict() def update_zone(request, **kwargs): """Update zone.""" data = request.DATA zone_id = kwargs.get('zone_id') conn = get_sdk_connection(request) build_kwargs = dict( email=data['email'], ttl=data['ttl'], ) if data.get('description', None): build_kwargs['description'] = data['description'] zone = conn.dns.update_zone( zone_id, **build_kwargs) return zone.to_dict() @urls.register class Zones(generic.View): """API for zones.""" url_regex = r'dns/v2/zones/$' @rest_utils.ajax() def get(self, request): """List zones for current project.""" conn = get_sdk_connection(request) zones = _sdk_object_to_list(conn.dns.zones()) return {'zones': zones} @rest_utils.ajax(data_required=True) def post(self, request): """Create zone.""" return create_zone(request) @urls.register class Zone(generic.View): """API for zone.""" url_regex = r'dns/v2/zones/(?P[^/]+)/$' @rest_utils.ajax() def get(self, request, zone_id): """Get zone.""" conn = get_sdk_connection(request) zone = conn.dns.find_zone(zone_id) return zone.to_dict() @rest_utils.ajax(data_required=True) def patch(self, request, zone_id): """Edit zone.""" kwargs = {'zone_id': zone_id} update_zone(request, **kwargs) @rest_utils.ajax() def delete(self, request, zone_id): """Delete zone.""" conn = get_sdk_connection(request) conn.dns.delete_zone(zone_id, ignore_missing=True) def create_recordset(request, **kwargs): """Create recordset.""" data = request.DATA zone_id = kwargs.get('zone_id') conn = get_sdk_connection(request) build_kwargs = dict( name=data['name'], type=data['type'], ttl=data['ttl'], records=data['records'], ) if data.get('description', None): build_kwargs['description'] = data['description'] rs = conn.dns.create_recordset( zone_id, **build_kwargs) return rs.to_dict() def update_recordset(request, **kwargs): """Update recordset.""" data = request.DATA zone_id = kwargs.get('zone_id') rs_id = kwargs.get('rs_id') conn = get_sdk_connection(request) build_kwargs = dict() if data.get('description', None): build_kwargs['description'] = data['description'] if data.get('ttl', None): build_kwargs['ttl'] = data['ttl'] if data.get('records', None): build_kwargs['records'] = data['records'] build_kwargs['zone_id'] = zone_id rs = conn.dns.update_recordset( rs_id, **build_kwargs) return rs.to_dict() def _populate_zone_id(items, zone_id): for item in items: item['zone_id'] = zone_id return items @urls.register class RecordSets(generic.View): """API for recordsets.""" url_regex = r'dns/v2/zones/(?P[^/]+)/recordsets/$' @rest_utils.ajax() def get(self, request, zone_id): """Get recordsets.""" conn = get_sdk_connection(request) rsets = _sdk_object_to_list(conn.dns.recordsets(zone_id)) return {'recordsets': _populate_zone_id(rsets, zone_id)} @rest_utils.ajax(data_required=True) def post(self, request, zone_id): """Create recordset.""" kwargs = {'zone_id': zone_id} return create_recordset(request, **kwargs) @urls.register class RecordSet(generic.View): """API for recordset.""" url_regex = r'dns/v2/zones/(?P[^/]+)/recordsets/(?P[^/]+)/$' # noqa @rest_utils.ajax() def get(self, request, zone_id, rs_id): """Get recordset.""" conn = get_sdk_connection(request) rs = conn.dns.get_recordset(rs_id, zone_id) rs_dict = rs.to_dict() rs_dict['zone_id'] = zone_id return rs_dict @rest_utils.ajax(data_required=True) def put(self, request, zone_id, rs_id): """Edit recordset.""" kwargs = {'zone_id': zone_id, 'rs_id': rs_id} update_recordset(request, **kwargs) @rest_utils.ajax() def delete(self, request, zone_id, rs_id): """Delete recordset.""" conn = get_sdk_connection(request) conn.dns.delete_recordset(rs_id, zone_id, ignore_missing=True) @urls.register class DnsFloatingIps(generic.View): """API for floatingips.""" url_regex = r'dns/v2/reverse/floatingips/$' @rest_utils.ajax() def get(self, request): """Get floatingips.""" conn = get_sdk_connection(request) fips = _sdk_object_to_list(conn.dns.floating_ips()) return {'floatingips': fips} def update_dns_floatingip(request, **kwargs): """Update recordset.""" data = request.DATA fip_id = kwargs.get('fip_id') conn = get_sdk_connection(request) build_kwargs = dict( ptrdname=data['ptrdname'], ) if data.get('description', None): build_kwargs['description'] = data['description'] if data.get('ttl', None): build_kwargs['ttl'] = data['ttl'] fip = conn.dns.update_floating_ip( fip_id, **build_kwargs) return fip.to_dict() @urls.register class DnsFloatingIp(generic.View): """API for dns floatingip.""" url_regex = r'dns/v2/reverse/floatingips/(?P[^/]+)/$' @rest_utils.ajax() def get(self, request, fip_id): """Get floatingip.""" conn = get_sdk_connection(request) fip = conn.dns.get_floating_ip(fip_id) return fip.to_dict() @rest_utils.ajax(data_required=True) def patch(self, request, fip_id): """Edit floatingip.""" kwargs = {'fip_id': fip_id} update_dns_floatingip(request, **kwargs) ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.179992 designate_dashboard-23.0.0/designatedashboard/dashboards/0000775000175000017500000000000015257164541022327 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.402982 designate_dashboard-23.0.0/designatedashboard/dashboards/__init__.py0000664000175000017500000000000015257164455024432 0ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.179992 designate_dashboard-23.0.0/designatedashboard/dashboards/project/0000775000175000017500000000000015257164541023775 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.402982 designate_dashboard-23.0.0/designatedashboard/dashboards/project/__init__.py0000664000175000017500000000000015257164455026100 0ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.179992 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/0000775000175000017500000000000015257164541025106 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.402982 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/__init__.py0000664000175000017500000000006015257164455027217 0ustar00zuulzuulfrom designatedashboard.api import rest # noqa ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.180992 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/reverse_dns/0000775000175000017500000000000015257164541027425 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.402982 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/reverse_dns/__init__.py0000664000175000017500000000000015257164455031530 0ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.402982 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/reverse_dns/panel.py0000664000175000017500000000163015257164455031102 0ustar00zuulzuul# (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 gettext_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) ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.402982 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/reverse_dns/urls.py0000664000175000017500000000153115257164455030770 0ustar00zuulzuul# (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.urls import re_path from django.utils.translation import gettext_lazy as _ from horizon.browsers import views title = _("Reverse DNS") urlpatterns = [ re_path('', views.AngularIndexView.as_view(title=title), name='index'), ] ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.180992 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/zones/0000775000175000017500000000000015257164541026244 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.402982 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/zones/__init__.py0000664000175000017500000000000015257164455030347 0ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4039822 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/zones/panel.py0000664000175000017500000000160515257164455027723 0ustar00zuulzuul# (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 gettext_lazy as _ import horizon from openstack_dashboard.dashboards.project import dashboard class Zones(horizon.Panel): name = _("Zones") slug = 'dnszones' permissions = ('openstack.services.dns',) dashboard.Project.register(Zones) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4039822 designate_dashboard-23.0.0/designatedashboard/dashboards/project/ngdns/zones/urls.py0000664000175000017500000000152215257164455027607 0ustar00zuulzuul# (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.urls import re_path from django.utils.translation import gettext_lazy as _ from horizon.browsers import views title = _("Zones") urlpatterns = [ re_path('', views.AngularIndexView.as_view(title=title), name='index') ] ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.181992 designate_dashboard-23.0.0/designatedashboard/enabled/0000775000175000017500000000000015257164541021607 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4039822 designate_dashboard-23.0.0/designatedashboard/enabled/_1710_project_dns_panel_group.py0000664000175000017500000000165015257164455027703 0ustar00zuulzuul# 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 gettext_lazy as _ # The name of the panel group to be added to HORIZON_CONFIG. Required. PANEL_GROUP = 'dns' # The display name of the PANEL_GROUP. Required. PANEL_GROUP_NAME = _('DNS') # The name of the dashboard the PANEL_GROUP associated with. Required. PANEL_GROUP_DASHBOARD = 'project' ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4039822 designate_dashboard-23.0.0/designatedashboard/enabled/_1721_dns_zones_panel.py0000664000175000017500000000224215257164455026157 0ustar00zuulzuul# 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. # 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_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 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4039822 designate_dashboard-23.0.0/designatedashboard/enabled/_1722_dns_reversedns_panel.py0000664000175000017500000000220315257164455027177 0ustar00zuulzuul# 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. # 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' # 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 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4039822 designate_dashboard-23.0.0/designatedashboard/enabled/__init__.py0000664000175000017500000000000015257164455023712 0ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.182992 designate_dashboard-23.0.0/designatedashboard/local_settings.d/0000775000175000017500000000000015257164541023451 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.404982 designate_dashboard-23.0.0/designatedashboard/local_settings.d/_1799_dns_settings.py0000664000175000017500000000151015257164455027360 0ustar00zuulzuul# 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. # This file is to be included for configuring application which relates # to dns(Designate) functions. from django.conf import settings settings.POLICY_FILES.update({ 'dns': 'designate_policy.yaml' }) settings.DEFAULT_POLICY_FILES.update({ 'dns': 'default_policies/designate.yaml' }) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1619916 designate_dashboard-23.0.0/designatedashboard/locale/0000775000175000017500000000000015257164541021454 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1589916 designate_dashboard-23.0.0/designatedashboard/locale/cs/0000775000175000017500000000000015257164541022061 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.182992 designate_dashboard-23.0.0/designatedashboard/locale/cs/LC_MESSAGES/0000775000175000017500000000000015257164541023646 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.404982 designate_dashboard-23.0.0/designatedashboard/locale/cs/LC_MESSAGES/django.po0000664000175000017500000000124215257164455025453 0ustar00zuulzuul# Zbyněk Schwarz , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+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 05:49+0000\n" "Last-Translator: Zbyněk Schwarz \n" "Language-Team: Czech\n" "Language: cs\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" msgid "Reverse DNS" msgstr "Reverzní DNS" msgid "Zones" msgstr "Zóny" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1589916 designate_dashboard-23.0.0/designatedashboard/locale/de/0000775000175000017500000000000015257164541022044 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.182992 designate_dashboard-23.0.0/designatedashboard/locale/de/LC_MESSAGES/0000775000175000017500000000000015257164541023631 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.404982 designate_dashboard-23.0.0/designatedashboard/locale/de/LC_MESSAGES/django.po0000664000175000017500000000123615257164455025441 0ustar00zuulzuul# Frank Kloeker , 2016. #zanata # Frank Kloeker , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-07-29 10:32+0000\n" "Last-Translator: Frank Kloeker \n" "Language-Team: German\n" "Language: de\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "Reverse DNS" msgstr "Reverse DNS" msgid "Zones" msgstr "Zonen" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1599917 designate_dashboard-23.0.0/designatedashboard/locale/en_GB/0000775000175000017500000000000015257164541022426 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.182992 designate_dashboard-23.0.0/designatedashboard/locale/en_GB/LC_MESSAGES/0000775000175000017500000000000015257164541024213 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4059823 designate_dashboard-23.0.0/designatedashboard/locale/en_GB/LC_MESSAGES/django.po0000664000175000017500000000133015257164455026016 0ustar00zuulzuul# Andreas Jaeger , 2016. #zanata # Andi Chandler , 2026. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2025-12-08 22:46+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2026-01-07 11:22+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: English (United Kingdom)\n" "Language: en_GB\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "DNS" msgstr "DNS" msgid "Reverse DNS" msgstr "Reverse DNS" msgid "Zones" msgstr "Zones" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1599917 designate_dashboard-23.0.0/designatedashboard/locale/es/0000775000175000017500000000000015257164541022063 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1839921 designate_dashboard-23.0.0/designatedashboard/locale/es/LC_MESSAGES/0000775000175000017500000000000015257164541023650 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4059823 designate_dashboard-23.0.0/designatedashboard/locale/es/LC_MESSAGES/django.po0000664000175000017500000000121715257164455025457 0ustar00zuulzuul# Alberto Molina Coballes , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+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-22 06:47+0000\n" "Last-Translator: Alberto Molina Coballes \n" "Language-Team: Spanish\n" "Language: es\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "Reverse DNS" msgstr "DNS inverso" msgid "Zones" msgstr "Zonas" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1599917 designate_dashboard-23.0.0/designatedashboard/locale/fr/0000775000175000017500000000000015257164541022063 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1839921 designate_dashboard-23.0.0/designatedashboard/locale/fr/LC_MESSAGES/0000775000175000017500000000000015257164541023650 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4059823 designate_dashboard-23.0.0/designatedashboard/locale/fr/LC_MESSAGES/django.po0000664000175000017500000000157715257164455025470 0ustar00zuulzuul# 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 , 2015 # Gérald LONLAS , 2016. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+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-27 03:42+0000\n" "Last-Translator: Gérald LONLAS \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Generated-By: Babel 2.0\n" "X-Generator: Zanata 4.3.3\n" "Language-Team: French\n" msgid "Reverse DNS" msgstr "Reverse DNS" msgid "Zones" msgstr "Zones" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1609917 designate_dashboard-23.0.0/designatedashboard/locale/id/0000775000175000017500000000000015257164541022050 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1839921 designate_dashboard-23.0.0/designatedashboard/locale/id/LC_MESSAGES/0000775000175000017500000000000015257164541023635 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4059823 designate_dashboard-23.0.0/designatedashboard/locale/id/LC_MESSAGES/django.po0000664000175000017500000000117715257164455025451 0ustar00zuulzuul# suhartono , 2016. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+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 01:36+0000\n" "Last-Translator: suhartono \n" "Language-Team: Indonesian\n" "Language: id\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "Reverse DNS" msgstr "Reverse DNS " msgid "Zones" msgstr "Zones (zona)" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1609917 designate_dashboard-23.0.0/designatedashboard/locale/ja/0000775000175000017500000000000015257164541022046 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1839921 designate_dashboard-23.0.0/designatedashboard/locale/ja/LC_MESSAGES/0000775000175000017500000000000015257164541023633 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4069822 designate_dashboard-23.0.0/designatedashboard/locale/ja/LC_MESSAGES/django.po0000664000175000017500000000126515257164455025445 0ustar00zuulzuul# Yoshiki Eguchi , 2016. #zanata # Akihiro Motoki , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-02-08 08:47+0000\n" "Last-Translator: Akihiro Motoki \n" "Language-Team: Japanese\n" "Language: ja\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "Reverse DNS" msgstr "リバース DNS" msgid "Zones" msgstr "ゾーン" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1609917 designate_dashboard-23.0.0/designatedashboard/locale/ko_KR/0000775000175000017500000000000015257164541022461 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.184992 designate_dashboard-23.0.0/designatedashboard/locale/ko_KR/LC_MESSAGES/0000775000175000017500000000000015257164541024246 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4069822 designate_dashboard-23.0.0/designatedashboard/locale/ko_KR/LC_MESSAGES/django.po0000664000175000017500000000120015257164455026045 0ustar00zuulzuul# Sungjin Kang , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-12-19 03:03+0000\n" "Last-Translator: Ian Y. Choi \n" "Language-Team: Korean (South Korea)\n" "Language: ko_KR\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "Reverse DNS" msgstr "Reverse DNS" msgid "Zones" msgstr "존" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1619916 designate_dashboard-23.0.0/designatedashboard/locale/ne/0000775000175000017500000000000015257164541022056 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.184992 designate_dashboard-23.0.0/designatedashboard/locale/ne/LC_MESSAGES/0000775000175000017500000000000015257164541023643 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4069822 designate_dashboard-23.0.0/designatedashboard/locale/ne/LC_MESSAGES/django.po0000664000175000017500000000116615257164455025455 0ustar00zuulzuul# Surit Aryal , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-06-07 05:03+0000\n" "Last-Translator: Surit Aryal \n" "Language-Team: Nepali\n" "Language: ne\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "Reverse DNS" msgstr "Reverse DNS" msgid "Zones" msgstr "Zones" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1619916 designate_dashboard-23.0.0/designatedashboard/locale/pt_BR/0000775000175000017500000000000015257164541022462 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.184992 designate_dashboard-23.0.0/designatedashboard/locale/pt_BR/LC_MESSAGES/0000775000175000017500000000000015257164541024247 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4069822 designate_dashboard-23.0.0/designatedashboard/locale/pt_BR/LC_MESSAGES/django.po0000664000175000017500000000117215257164455026056 0ustar00zuulzuul# Marcio , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+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 \n" "Language-Team: Portuguese (Brazil)\n" "Language: pt_BR\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "Reverse DNS" msgstr "DNS Reverso" msgid "Zones" msgstr "Zonas" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1619916 designate_dashboard-23.0.0/designatedashboard/locale/ru/0000775000175000017500000000000015257164541022102 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.184992 designate_dashboard-23.0.0/designatedashboard/locale/ru/LC_MESSAGES/0000775000175000017500000000000015257164541023667 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4079823 designate_dashboard-23.0.0/designatedashboard/locale/ru/LC_MESSAGES/django.po0000664000175000017500000000214615257164455025500 0ustar00zuulzuul# 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 , 2015 # Ivan Startsev , 2016. #zanata # Ivan Anfimov , 2025. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2025-07-31 13:36+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2025-07-31 01:42+0000\n" "Last-Translator: Ivan Anfimov \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 4.3.3\n" "Language-Team: Russian\n" msgid "DNS" msgstr "DNS" msgid "Reverse DNS" msgstr "Обратный DNS" msgid "Zones" msgstr "Зоны" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1619916 designate_dashboard-23.0.0/designatedashboard/locale/tr_TR/0000775000175000017500000000000015257164541022506 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.185992 designate_dashboard-23.0.0/designatedashboard/locale/tr_TR/LC_MESSAGES/0000775000175000017500000000000015257164541024273 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4079823 designate_dashboard-23.0.0/designatedashboard/locale/tr_TR/LC_MESSAGES/django.po0000664000175000017500000000162415257164455026104 0ustar00zuulzuul# 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 , 2015 # işbaran akçayır , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2019-09-23 21:56+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 \n" "Language: tr_TR\n" "Plural-Forms: nplurals=1; plural=0;\n" "Generated-By: Babel 2.0\n" "X-Generator: Zanata 4.3.3\n" "Language-Team: Turkish (Turkey)\n" msgid "Reverse DNS" msgstr "Ters DNS" msgid "Zones" msgstr "Bölgeler" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4079823 designate_dashboard-23.0.0/designatedashboard/sdk_connection.py0000664000175000017500000000420415257164455023573 0ustar00zuulzuul# Copyright Red Hat # # 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 import designatedashboard from openstack import config as occ from openstack import connection def get_sdk_connection(request): """Creates an SDK connection based on the request. :param request: Django request object :returns: SDK connection object """ # NOTE(mordred) Nothing says love like two inverted booleans # The config setting is NO_VERIFY which is, in fact, insecure. # get_one_cloud wants verify, so we pass 'not insecure' to verify. insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False) cacert = getattr(settings, 'OPENSTACK_SSL_CACERT', None) # Pass interface to honor 'OPENSTACK_ENDPOINT_TYPE' interface = getattr(settings, 'OPENSTACK_ENDPOINT_TYPE', 'publicURL') # Pass load_yaml_config as this is a Django service with its own config # and we don't want to accidentally pick up a clouds.yaml file. We want to # use the settings we're passing in. cloud_config = occ.OpenStackConfig(load_yaml_config=False).get_one_cloud( verify=not insecure, cacert=cacert, interface=interface, region_name=request.user.services_region, auth_type='token', auth=dict( project_id=request.user.project_id, project_domain_id=request.user.domain_id, auth_token=request.user.token.unscoped_token, auth_url=request.user.endpoint), app_name='designate-dashboard', app_version=designatedashboard.__version__) return connection.from_config(cloud_config=cloud_config) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1629918 designate_dashboard-23.0.0/designatedashboard/static/0000775000175000017500000000000015257164541021504 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1869922 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/0000775000175000017500000000000015257164541025317 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4079823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/designatedashboard.module.js0000664000175000017500000000414315257164455032762 0ustar00zuulzuul/** * (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. */ (function() { 'use strict'; /** * @ngdoc overview * @ngname designatedashboard * * @description * Provides the services and widgets required * to support and display the project search panel. */ angular .module('designatedashboard', [ 'ngRoute', 'designatedashboard.resources' ]) .constant( 'designatedashboard.apiPassthroughUrl', '/api/dns/') .config(config) .run(run); config.$inject = [ '$provide', '$routeProvider', '$windowProvider' ]; /** * @name designatedashboard.basePath * @description Base path for the project dashboard * * @param {function} $provide ng provide service * * @param {function} $routeProvider ng route service * * @param {function} $windowProvider NG window provider * * @returns {undefined} */ function config($provide, $routeProvider, $windowProvider) { var path = $windowProvider.$get().STATIC_URL + 'designatedashboard/'; $provide.constant('designatedashboard.basePath', path); $routeProvider .when('/project/dnszones/', { templateUrl: path + 'zones.html' }) .when('/project/reverse_dns/', { templateUrl: path + 'reverse_dns.html' }); } run.$inject = [ 'horizon.framework.conf.resource-type-registry.service', 'designatedashboard.basePath' ]; function run() { // function run(registry, basePath) { //registry.setDefaultSummaryTemplateUrl(basePath + 'table/default-drawer.html'); } })(); ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4089823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/designatedashboard.scss0000664000175000017500000000000015257164455032021 0ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1869922 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/0000775000175000017500000000000015257164541027331 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000021700000000000010215 xustar00116 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/ 27 mtime=1790765409.187992 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000775000175000017500000000000015257164541032737 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000022700000000000010216 xustar00124 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/actions/ 27 mtime=1790765409.187992 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000775000175000017500000000000015257164541032737 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000025100000000000010213 xustar00141 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/actions/actions.module.js 28 mtime=1790765357.4089823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000664000175000017500000000337315257164455032753 0ustar00zuulzuul/** * (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') } }); } })(); ././@PaxHeader0000000000000000000000000000024600000000000010217 xustar00138 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/actions/set.service.js 28 mtime=1790765357.4089823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000664000175000017500000001132215257164455032744 0ustar00zuulzuul/** * * (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 was successfully set.') }; var service = { initAction: initAction, allowed: allowed, perform: perform }; return service; ///////////////// function initAction() { 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', 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: floatingIp.id}], deleted: [], failed: [] }; } function onFailure() { waitSpinner.hideModalSpinner(); } } })(); ././@PaxHeader0000000000000000000000000000025000000000000010212 xustar00140 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/actions/unset.service.js 28 mtime=1790765357.4089823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000664000175000017500000000765215257164455032757 0ustar00zuulzuul/** * * (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 title = null; // Set on perform // currentFloatingIpId is used to remember the ID we are modifying since // it isn't returned by the unset API call var dnsServiceEnabled, currentFloatingIpId; // 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 = { initAction: initAction, allowed: allowed, perform: perform }; return service; ///////////////// function initAction() { 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() { 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(); } } })(); ././@PaxHeader0000000000000000000000000000023600000000000010216 xustar00130 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/api.service.js 28 mtime=1790765357.4099822 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000664000175000017500000000710115257164455032744 0ustar00zuulzuul/** * (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) .catch(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) .catch(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) .catch(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 }); } } }()); ././@PaxHeader0000000000000000000000000000022700000000000010216 xustar00124 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/details/ 27 mtime=1790765409.188992 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000775000175000017500000000000015257164541032737 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000025100000000000010213 xustar00141 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/details/details.module.js 28 mtime=1790765357.4099822 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000664000175000017500000000364315257164455032753 0ustar00zuulzuul/** * (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; } } })(); ././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00135 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/details/drawer.html 28 mtime=1790765357.4099822 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000664000175000017500000000034615257164455032750 0ustar00zuulzuul ././@PaxHeader0000000000000000000000000000025600000000000010220 xustar00146 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/details/overview.controller.js 28 mtime=1790765357.4099822 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000664000175000017500000000254715257164455032755 0ustar00zuulzuul/** * (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; } } })(); ././@PaxHeader0000000000000000000000000000024500000000000010216 xustar00137 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/details/overview.html 28 mtime=1790765357.4099822 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000664000175000017500000000063615257164455032752 0ustar00zuulzuul
././@PaxHeader0000000000000000000000000000026100000000000010214 xustar00149 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-floatingip/os-designate-floatingip.module.js 28 mtime=1790765357.4099822 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-float0000664000175000017500000001067715257164455032760 0ustar00zuulzuul/** * (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')) .setDefaultIndexUrl('/project/reverse_dns/') .setListFunction(listFloatingIps) .setProperty('id', { label: gettext('ID') }) .setProperty('ptrdname', { label: gettext('PTR Domain Name'), filters: ['noName'] }) .setProperty('description', { label: gettext('PTR 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: '{$ item.address $}' }) .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; }); } } })(); ././@PaxHeader0000000000000000000000000000021700000000000010215 xustar00115 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/ 28 mtime=1790765409.1899922 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000775000175000017500000000000015257164541032744 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000022600000000000010215 xustar00123 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/ 27 mtime=1790765409.190992 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000775000175000017500000000000015257164541032744 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000025000000000000010212 xustar00140 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/actions.module.js 28 mtime=1790765357.4109824 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000000476415257164455032765 0ustar00zuulzuul/** * (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' } }); resourceType .batchActions .append({ id: 'batchDeleteRecordset', service: deleteAction, template: { text: gettext('Delete Record Sets'), type: 'delete-selected' } }); // 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') } }); } })(); ././@PaxHeader0000000000000000000000000000025500000000000010217 xustar00145 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/actions.module.spec.js 28 mtime=1790765357.4109824 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000000367715257164455032767 0ustar00zuulzuul/** * * 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'; describe('recordset actions module', function() { var registry; beforeEach(module('designatedashboard')); beforeEach(inject(function($injector) { registry = $injector.get('horizon.framework.conf.resource-type-registry.service'); })); it('registers Update as an item action', function() { var actions = registry.getResourceType('OS::Designate::RecordSet').itemActions; expect(actionHasId(actions, 'updateRecordset')).toBe(true); }); it('registers Delete as an item action', function() { var actions = registry.getResourceType('OS::Designate::RecordSet').itemActions; expect(actionHasId(actions, 'deleteRecordset')).toBe(true); }); it('registers Delete Record Sets as a batch action', function() { var actions = registry.getResourceType('OS::Designate::RecordSet').batchActions; expect(actionHasId(actions, 'batchDeleteRecordset')).toBe(true); }); it('registers Create Record Set as a zone item action', function() { var actions = registry.getResourceType('OS::Designate::Zone').itemActions; expect(actionHasId(actions, 'createRecordset')).toBe(true); }); function actionHasId(list, value) { return list.filter(matchesId).length === 1; function matchesId(action) { if (action.id === value) { return true; } } } }); })(); ././@PaxHeader0000000000000000000000000000025600000000000010220 xustar00146 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/common-forms.service.js 28 mtime=1790765357.4109824 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000001121515257164455032752 0ustar00zuulzuul/** * * (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 } }; } } })(); ././@PaxHeader0000000000000000000000000000025000000000000010212 xustar00140 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/create.service.js 28 mtime=1790765357.4109824 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000000766015257164455032763 0ustar00zuulzuul/** * * (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 = { initAction: initAction, allowed: allowed, perform: perform }; return service; ///////////////// function initAction() { createRecordSetPolicy = policy.ifAllowed({rules: [['dns', 'create_recordset']]}); dnsServiceEnabled = serviceCatalog.ifTypeEnabled('dns'); } function allowed() { 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(); } } })(); ././@PaxHeader0000000000000000000000000000025000000000000010212 xustar00140 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/delete.service.js 28 mtime=1790765357.4119823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000001332115257164455032752 0ustar00zuulzuul/** * (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 context, deletePromise; var notAllowedMessage = gettext("You are not allowed to delete record sets: %s"); var allowedRecordsets = []; var service = { initAction: initAction, allowed: allowed, perform: perform }; return service; ////////////// function initAction() { context = { }; deletePromise = policy.ifAllowed({rules: [['dns', 'delete_recordset']]}); } function perform(items, scope) { var recordsets = angular.isArray(items) ? items : [items]; context.labels = labelize(recordsets.length); context.deleteEntity = deleteRecordSet; return $qExtensions .allSettled(recordsets.map(checkPermission)) .then(afterCheck.bind(this, scope)); } 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(scope, result) { var outcome = $q.reject().catch(angular.noop); // Reject the promise by default if (result.fail.length > 0) { toast.add('error', getMessage(notAllowedMessage, result.fail)); outcome = $q.reject(result.fail).catch(angular.noop); } 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( !(recordset.type === 'NS' && recordset.name === recordset.zone_name) && // not apex NS 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; } } })(); ././@PaxHeader0000000000000000000000000000025000000000000010212 xustar00140 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/actions/update.service.js 28 mtime=1790765357.4119823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000001163715257164455032762 0ustar00zuulzuul/** * * (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; var title = gettext("Update Record Set"); var message = { success: gettext('Record Set was successfully updated.') }; var service = { initAction: initAction, allowed: allowed, perform: perform }; return service; ///////////////// function initAction() { updateRecordSetPolicy = policy.ifAllowed({rules: [['dns', 'update_recordset']]}); } 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( !(recordset.type === 'NS' && recordset.name === recordset.zone_name) && // not apex NS 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', 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: recordset.id}], deleted: [], failed: [] }; } function onFailure() { waitSpinner.hideModalSpinner(); } } })(); ././@PaxHeader0000000000000000000000000000023500000000000010215 xustar00129 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/api.service.js 28 mtime=1790765357.4549835 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000001054515257164455032757 0ustar00zuulzuul/** * (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') .factory('designatedashboard.resources.os-designate-recordset.api', apiService); apiService.$inject = [ '$q', '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 Record Set APIs. * @returns {Object} The service */ function apiService($q, apiPassthroughUrl, httpService, toastService) { var service = { get: get, list: list, deleteRecordSet: deleteRecordSet, create: create, update: update }; return service; /////////////// /* * @name list * @description * Get a list of record sets. * * The listing result is an object with property "items." Each item is * a record set. * * @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) .catch(function () { toastService.add('error', gettext('Unable to retrieve the record sets.')); }); } /* * @name get * @description * Get a single record set 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. * * @returns {Object} The result of the API call */ function get(zoneId, recordSetId) { // 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 + '/') .then(undefined, function onError() { toastService.add('error', gettext('Unable to retrieve the record set.')); return $q.when({}); }); } /* * @name delete * @description * Delete a single record set by ID * @param {string} zoneId * The id of the zone containing the recordset * * @param {string} recordSetId * The id of the recordset within the zone * * @returns {*} */ function deleteRecordSet(zoneId, recordSetId) { return httpService.delete( apiPassthroughUrl + 'v2/zones/' + zoneId + '/recordsets/' + recordSetId + '/') .catch(function () { toastService.add('error', gettext('Unable to delete the record set.')); }); } function create(zoneId, data) { return httpService.post(apiPassthroughUrl + 'v2/zones/' + zoneId + '/recordsets/', data) .catch(function () { toastService.add('error', gettext('Unable to create the record set.')); }); } function update(zoneId, recordSetId, data) { // The update API will not accept extra data. Restrict the input to only the allowed // fields var apiData = { ttl: data.ttl, description: data.description, records: data.records }; return httpService.put( apiPassthroughUrl + 'v2/zones/' + zoneId + '/recordsets/' + recordSetId + '/', apiData) .catch(function () { toastService.add('error', gettext('Unable to update the record set.')); }); } } }()); ././@PaxHeader0000000000000000000000000000022700000000000010216 xustar00123 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/ 28 mtime=1790765409.1929922 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000775000175000017500000000000015257164541032744 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000025000000000000010212 xustar00140 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/details.module.js 28 mtime=1790765357.4119823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000000625015257164455032755 0ustar00zuulzuul/** * (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 "/" */ 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' }); } })(); ././@PaxHeader0000000000000000000000000000024200000000000010213 xustar00134 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/drawer.html 28 mtime=1790765357.4119823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000000037115257164455032753 0ustar00zuulzuul ././@PaxHeader0000000000000000000000000000025500000000000010217 xustar00145 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/overview.controller.js 28 mtime=1790765357.4119823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000000250115257164455032750 0ustar00zuulzuul/** * (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; } } })(); ././@PaxHeader0000000000000000000000000000024400000000000010215 xustar00136 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/overview.html 28 mtime=1790765357.4129825 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000000257315257164455032761 0ustar00zuulzuul

Details


Associations


Modification Times


././@PaxHeader0000000000000000000000000000026400000000000010217 xustar00152 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/zone-recordsets.controller.js 28 mtime=1790765357.4129825 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000000226715257164455032761 0ustar00zuulzuul/** * (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 }; } })(); ././@PaxHeader0000000000000000000000000000025300000000000010215 xustar00143 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/details/zone-recordsets.html 28 mtime=1790765357.4129825 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000000044715257164455032757 0ustar00zuulzuul
././@PaxHeader0000000000000000000000000000025700000000000010221 xustar00147 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recordset/os-designate-recordset.module.js 28 mtime=1790765357.4129825 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-recor0000664000175000017500000001604115257164455032754 0ustar00zuulzuul/** * (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('SPF - 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'), CAA: gettext('CAA - Certificate Authority Authorization record') }) .constant( 'designatedashboard.resources.os-designate-recordset.editableTypes', [ "A", "AAAA", "CNAME", "MX", "NS", "PTR", "SPF", "SRV", "SSHFP", "TXT", "CAA" ]) .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')) .setDefaultIndexUrl('/project/dnszones/') .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: '{$ item.name $}' }) .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; }); } } })(); ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1929922 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000775000175000017500000000000015257164541032664 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000022200000000000010211 xustar00118 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/ 28 mtime=1790765409.1949923 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000775000175000017500000000000015257164541032664 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00135 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/actions.module.js 28 mtime=1790765357.4129825 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000000407215257164455032675 0ustar00zuulzuul/** * (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.actions * * @description * Provides all of the actions for DNS Zones. */ angular.module('designatedashboard.resources.os-designate-zone.actions', [ 'horizon.framework.conf', 'horizon.app.core' ]) .run(run); 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' ]; function run(registry, resourceTypeString, createAction, deleteAction, updateAction) { var resourceType = registry.getResourceType(resourceTypeString); resourceType .globalActions .append({ id: 'create', service: createAction, template: { text: gettext('Create Zone') } }); resourceType .itemActions .append({ id: 'update', service: updateAction, template: { text: gettext('Update') } }) .append({ id: 'delete', service: deleteAction, template: { text: gettext('Delete'), type: 'delete' } }); } })(); ././@PaxHeader0000000000000000000000000000025000000000000010212 xustar00140 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/actions.module.spec.js 28 mtime=1790765357.4129825 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000000273015257164455032674 0ustar00zuulzuul/** * * 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'; describe('zone actions module', function() { var registry; beforeEach(module('designatedashboard')); 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; expect(actionHasId(actions, 'create')).toBe(true); }); it('registers Update Zone as a item action', function() { var actions = registry.getResourceType('OS::Designate::Zone').itemActions; expect(actionHasId(actions, 'update')).toBe(true); }); function actionHasId(list, value) { return list.filter(matchesId).length === 1; function matchesId(action) { if (action.id === value) { return true; } } } }); })(); ././@PaxHeader0000000000000000000000000000025100000000000010213 xustar00141 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/common-forms.service.js 28 mtime=1790765357.4139824 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000001411515257164455032674 0ustar00zuulzuul/** * * (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-zone.actions') .factory('designatedashboard.resources.os-designate-zone.actions.common-forms', service); service.$inject = [ ]; /** * 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() { var service = { getCreateFormConfig: getCreateFormConfig, getUpdateFormConfig: getUpdateFormConfig }; return service; ///////////////// /* * Returns the create zone form config * @returns {{schema, form, model}|*} */ function getCreateFormConfig() { return getCreateUpdateFormConfig(false); } /* * Return the update zone form config * @returns {{schema, form, model}|*} */ function getUpdateFormConfig() { return getCreateUpdateFormConfig(true); } /* * Return the create/update zone 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" }, email: { type: "string", format: "email", pattern: /^[^@]+@[^@]+$/ }, type: { type: "string", enum: [ "PRIMARY", "SECONDARY" ] }, ttl: { type: "integer", minimum: 1, maximum: 2147483647 }, masters: { type: "array", items: { type: "object", properties: { address: { type: "string" } } }, minItems: 1, uniqueItems: true }, attributes: { type: "array", items: { type: "object", properties: { key: { type: "string" }, value: { type: "string" } } } } } }, form: [ { key: "name", readonly: readonly, title: gettext("Name"), description: gettext("Zone name ending in '.'"), validationMessage: gettext("Zone must end with '.'"), placeholder: "example.com.", type: "text", required: true }, { key: "description", type: "textarea", title: gettext("Description"), description: gettext("Details about the zone.") }, { key: "email", title: gettext("Email Address"), description: gettext("Email address to contact the zone owner."), validationMessage: gettext("Email address must contain a single '@' character"), type: "text", condition: "model.type == 'PRIMARY'", required: true }, { key: "ttl", title: gettext("TTL"), description: gettext("Time To Live in seconds."), type: "number", condition: "model.type == 'PRIMARY'", required: true }, { key: "type", readonly: readonly, title: gettext("Type"), description: gettext("Select the type of zone"), type: "select", titleMap: [ { value: "PRIMARY", name: gettext("Primary") }, { value: "SECONDARY", name: gettext("Secondary") } ] }, { key: "masters", readonly: readonly, title: gettext("Masters"), type: "array", description: gettext("DNS master(s) for the Secondary zone."), condition: "model.type == 'SECONDARY'", add: gettext("Add Master"), items: [ { key: "masters[].address", title: gettext("IP Address") } ] }, { key: "attributes", readonly: readonly, title: gettext("Attributes"), type: "array", description: gettext("Key-value pairs for pool scheduling " + "(e.g. pool_id, az)."), add: gettext("Add Attribute"), items: [ { key: "attributes[].key", title: gettext("Key") }, { key: "attributes[].value", title: gettext("Value") } ] } ], model: { type: "PRIMARY", ttl: 3600 } }; } } })(); ././@PaxHeader0000000000000000000000000000023500000000000010215 xustar00129 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/create.html 28 mtime=1790765357.4139824 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000000003015257164455032663 0ustar00zuulzuul

CREATE TEMPLATE

././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00135 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/create.service.js 28 mtime=1790765357.4139824 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000000776015257164455032704 0ustar00zuulzuul/** * * (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-zone.actions') .factory('designatedashboard.resources.os-designate-zone.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', 'horizon.app.core.openstack-service-api.policy', '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-zone.actions.create * * @Description * Brings up the Create Zone modal. */ function action($q, forms, api, resourceTypeName, policy, serviceCatalog, schemaFormModalService, toast, waitSpinner) { var createZonePolicy, dnsServiceEnabled; var title = gettext("Create Zone"); var message = { success: gettext('Zone %s was successfully created.') }; var service = { initAction: initAction, allowed: allowed, perform: perform }; return service; ///////////////// function initAction() { createZonePolicy = policy.ifAllowed({rules: [['dns', 'create_zone']]}); dnsServiceEnabled = serviceCatalog.ifTypeEnabled('dns'); } function allowed() { return $q.all([ createZonePolicy, dnsServiceEnabled ]); } function perform() { var formConfig = forms.getCreateFormConfig(); formConfig.title = title; return schemaFormModalService.open(formConfig).then(onSubmit, onCancel); } function onSubmit(context) { var zoneModel = 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; } if (context.model.hasOwnProperty("attributes") && context.model.attributes.length > 0) { var attributes = {}; context.model.attributes.forEach(function (item) { attributes[item.key] = item.value; }); zoneModel.attributes = attributes; } waitSpinner.showModalSpinner(gettext('Creating Zone')); return api.create(zoneModel).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(); } } })(); ././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00135 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/delete.service.js 28 mtime=1790765357.4139824 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000001157415257164455032702 0ustar00zuulzuul/** * (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-zone.actions') .factory('designatedashboard.resources.os-designate-zone.actions.delete', action); action.$inject = [ '$q', 'designatedashboard.resources.os-designate-zone.api', 'designatedashboard.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' ]; /* * @ngdoc factory * @name designatedashboard.resources.os-designate-zone.actions.delete * * @Description * Brings up the delete zone confirmation modal dialog. * On submit, delete given zone. * On cancel, do nothing. */ function action( $q, zoneApi, util, policy, actionResultService, gettext, $qExtensions, deleteModal, toast, resourceType ) { var context, deleteZonePromise; var notAllowedMessage = gettext("You are not allowed to delete zones: %s"); var service = { initAction: initAction, allowed: allowed, perform: perform }; return service; ////////////// function initAction() { context = { }; deleteZonePromise = policy.ifAllowed({rules: [['dns', 'delete_zone']]}); } function perform(items, scope) { var zones = angular.isArray(items) ? items : [items]; context.labels = labelize(zones.length); context.deleteEntity = deleteZone; return $qExtensions .allSettled(zones.map(checkPermission)) .then( afterCheck.bind(this, scope) ); } function allowed(zone) { // only row actions pass in zone // otherwise, assume it is a batch action if (zone) { return $q.all([ deleteZonePromise, util.notDeleted(zone), util.notPending(zone) ]); } else { return policy.ifAllowed({ rules: [['dns', 'delete_zone']] }); } } function checkPermission(zone) { return {promise: allowed(zone), context: zone}; } function afterCheck(scope, result) { var outcome = $q.reject().catch(angular.noop); // Reject the promise by default if (result.fail.length > 0) { toast.add('error', getMessage(notAllowedMessage, result.fail)); outcome = $q.reject(result.fail).catch(angular.noop); } if (result.pass.length > 0) { outcome = deleteModal.open(scope, result.pass.map(getEntity), 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 Zone', 'Confirm Delete Zones', count), message: ngettext( 'You have selected "%s". Deleted zone is not recoverable.', 'You have selected "%s". Deleted zones are not recoverable.', count), submit: ngettext( 'Delete Zone', 'Delete Zones', count), success: ngettext( 'Deleted Zone: %s.', 'Deleted Zones: %s.', count), error: ngettext( 'Unable to delete Zone: %s.', 'Unable to delete Zones: %s.', count) }; } function deleteZone(zone) { return zoneApi.deleteZone(zone, true); } function getMessage(message, entities) { return interpolate(message, [entities.map(getName).join(", ")]); } function getName(result) { return getEntity(result).name; } function getEntity(result) { return result.context; } } })(); ././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00135 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/update.service.js 28 mtime=1790765357.4149823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000001046415257164455032677 0ustar00zuulzuul/** * * (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-zone.actions') .factory('designatedashboard.resources.os-designate-zone.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', 'horizon.app.core.openstack-service-api.policy', '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-zone.actions.update * * @Description * Brings up the Update Zone modal. */ function action($q, forms, api, resourceTypeName, util, policy, serviceCatalog, schemaFormModalService, toast, waitSpinner) { var updateZonePolicy; var title = gettext("Update Zone"); var message = { success: gettext('Zone was successfully updated.') }; var service = { initAction: initAction, allowed: allowed, perform: perform }; return service; ///////////////// function initAction() { updateZonePolicy = policy.ifAllowed({rules: [['dns', 'update_zone']]}); } function allowed(zone) { // only supports row action (exactly 1 zone) if (zone) { return $q.all([ updateZonePolicy, util.notDeleted(zone), util.notPending(zone) ]); } else { return false; } } function perform(item) { var formConfig = forms.getUpdateFormConfig(); formConfig.title = title; formConfig.model = util.getModel(formConfig.form, item); // Append the id so it can be used on submit formConfig.model.id = item.id; // schema form doesn't appear to support populating the masters array directly // Map the masters objects to address objects if (item.hasOwnProperty("masters")) { var masters = item.masters.map(function (item) { return { address: item }; }); formConfig.model.masters = masters; } return schemaFormModalService.open(formConfig).then(onSubmit, onCancel); } function onSubmit(context) { var zoneModel = 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; } waitSpinner.showModalSpinner(gettext('Updating Zone')); return api.update(zoneModel.id, zoneModel).then(onSuccess, onFailure); } function onCancel() { waitSpinner.hideModalSpinner(); } function onSuccess(response) { waitSpinner.hideModalSpinner(); var zone = response.data; 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: zone.id}], deleted: [], failed: [] }; } function onFailure() { waitSpinner.hideModalSpinner(); } } })(); ././@PaxHeader0000000000000000000000000000023000000000000010210 xustar00124 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/api.service.js 28 mtime=1790765357.4549835 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000001033015257164455032667 0ustar00zuulzuul/** * (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) .catch(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) .catch(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 + '/') .catch(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 + '/') .catch(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) .catch(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) .catch(function() { toastService.add('error', gettext('Unable to update the zone.')); }); } } }()); ././@PaxHeader0000000000000000000000000000022200000000000010211 xustar00118 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/details/ 28 mtime=1790765409.1959922 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000775000175000017500000000000015257164541032664 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00135 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/details/details.module.js 28 mtime=1790765357.4149823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000000337715257164455032704 0ustar00zuulzuul/** * (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.details * * @description * Provides details features for zones. */ angular.module('designatedashboard.resources.os-designate-zone.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', 'horizon.framework.conf.resource-type-registry.service' ]; function run( zoneResourceType, zoneApi, basePath, registry ) { var resourceType = registry.getResourceType(zoneResourceType); resourceType .setLoadFunction(loadFunction) .setSummaryTemplateUrl(basePath + 'details/drawer.html'); resourceType.detailsViews .prepend({ id: 'zoneDetailsOverview', name: gettext('Overview'), template: basePath + 'details/overview.html' }, 0); function loadFunction(identifier) { return zoneApi.get(identifier); } } })(); ././@PaxHeader0000000000000000000000000000023500000000000010215 xustar00129 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/details/drawer.html 28 mtime=1790765357.4149823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000000040215257164455032666 0ustar00zuulzuul ././@PaxHeader0000000000000000000000000000025000000000000010212 xustar00140 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/details/overview.controller.js 28 mtime=1790765357.4149823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000000305215257164455032672 0ustar00zuulzuul/** * (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') .controller('designatedashboard.resources.os-designate-zone.detailController', controller); controller.$inject = [ 'designatedashboard.resources.os-designate-zone.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; var attr = ''; var keys = Object.keys(response.data.attributes); for (var i = keys.length - 1; i >= 0; i--) { attr += keys[i] + ':' + response.data.attributes[keys[i]] + ', '; } ctrl.item.attributes = attr; } } })(); ././@PaxHeader0000000000000000000000000000023700000000000010217 xustar00131 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/details/overview.html 28 mtime=1790765357.4149823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000000333415257164455032675 0ustar00zuulzuul

Details


Attributes


Modification Times


Associations


././@PaxHeader0000000000000000000000000000024500000000000010216 xustar00137 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/os-designate-zone.module.js 28 mtime=1790765357.4149823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/os-designate-zone/0000664000175000017500000001326215257164455032676 0ustar00zuulzuul/** * (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')) .setDefaultIndexUrl('/project/dnszones/') .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: '{$ item.name $}' }) .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, 'id', 'updated_at'); return response; }); } } })(); ././@PaxHeader0000000000000000000000000000021300000000000010211 xustar00111 path=designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/resources.module.js 28 mtime=1790765357.4149823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/resources.module.j0000664000175000017500000000231315257164455033005 0ustar00zuulzuul/* * (c) Copyright 2016 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. */ (function () { 'use strict'; /** * @ngdoc overview * @name designatedashboard.resources * @description * * # designatedashboard.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' ]); })(); ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4149823 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/resources/util.service.js0000664000175000017500000000635315257164455032316 0ustar00zuulzuul/** * (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') .factory('designatedashboard.resources.util', utilService); utilService.$inject = [ 'horizon.framework.util.q.extensions' ]; function utilService($qExtensions) { var service = { notDeleted: notDeleted, notPending: notPending, getModel: getModel, actionMap: actionMap, statusMap: statusMap, addTimestampIds: addTimestampIds }; return service; /////////////// function notDeleted(resource) { return $qExtensions.booleanAsPromise(resource.status !== 'DELETED'); } function notPending(resource) { return $qExtensions.booleanAsPromise(resource.status !== 'PENDING'); } /* * Build a model object based on the given item, using only the fields * present in the form config 'key's. Only 'truthy' values are copied. * * @param form - an array of objects describing the form. Must have a 'key' attribute. * @param item - the data to copy into the model */ function getModel(form, item) { var result = {}; var value; form.forEach(function iterateForm(formItem) { value = item[formItem.key]; if (value) { result[formItem.key] = item[formItem.key]; } }); return result; } function actionMap() { return { none: gettext('None'), create: gettext('Create') }; } function statusMap() { return { active: gettext('Active'), pending: gettext('Pending') }; } /* * hz-resource-table tracks by 'id' which doesn't change when an individual item is updated. * Create a synthetic '_timestampId' using the item id plus the specified timestamp field. * When this field is used as a track-by in hz-resource-table, items in the table to update * after row actions. * * If a timestamp field is not specified, the current time is used. * * @param items {object} - The items to add a _timestampId. * @param idField {string} - (Optional) A field on the item to use as the id. Defaults to 'id' * @param timestampField {string} - (Optional) A field on item to use as a timestamp. Defaults * to current time. */ function addTimestampIds(items, idField, timestampField) { var _idField = idField || 'id'; var timestamp = Date.now(); items.map(function annotateFloatingIp(item) { if (angular.isDefined(timestampField)) { timestamp = item[timestampField]; } item._timestampId = item[_idField] + timestamp; }); } } }()); ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4159825 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/reverse_dns.html0000664000175000017500000000033615257164455030532 0ustar00zuulzuul ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4159825 designate_dashboard-23.0.0/designatedashboard/static/designatedashboard/zones.html0000664000175000017500000000032215257164455027344 0ustar00zuulzuul ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1969922 designate_dashboard-23.0.0/designatedashboard/tests/0000775000175000017500000000000015257164541021357 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4159825 designate_dashboard-23.0.0/designatedashboard/tests/.secret_key_store0000664000175000017500000000010015257164455024724 0ustar00zuulzuul5NMb6ZfXYBLClFGFYf6VkbiJ9TRNyU3w8NQHPG8LXJltU8EZFeB7I632vQ8MF5m6././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4159825 designate_dashboard-23.0.0/designatedashboard/tests/__init__.py0000664000175000017500000000000015257164455023462 0ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4159825 designate_dashboard-23.0.0/designatedashboard/tests/base.py0000664000175000017500000000361015257164455022647 0ustar00zuulzuul# -*- 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 _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()) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4159825 designate_dashboard-23.0.0/designatedashboard/tests/settings.py0000664000175000017500000000253515257164455023602 0ustar00zuulzuul# 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. # Default to Horizons test settings to avoid any missing keys import openstack_dashboard.enabled # noqa: F811 from openstack_dashboard.test.settings import * # noqa: F403,H303 from openstack_dashboard.utils import settings import designatedashboard.enabled # pop these keys to avoid log warnings about deprecation # update_dashboards will populate them anyway HORIZON_CONFIG.pop('dashboards', None) HORIZON_CONFIG.pop('default_dashboard', None) # Update the dashboards with designatedashboard enabled files # and current INSTALLED_APPS settings.update_dashboards( [ openstack_dashboard.enabled, designatedashboard.enabled, ], HORIZON_CONFIG, INSTALLED_APPS ) # Remove duplicated apps INSTALLED_APPS = list(set(INSTALLED_APPS)) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1969922 designate_dashboard-23.0.0/doc/0000775000175000017500000000000015257164541015147 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4159825 designate_dashboard-23.0.0/doc/requirements.txt0000664000175000017500000000015415257164455020437 0ustar00zuulzuulsphinxcontrib-svg2pdfconverter>=1.2.3 # BSD openstackdocstheme>=3.5.0 # Apache-2.0 reno>=4.1.0 # Apache-2.0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1979923 designate_dashboard-23.0.0/doc/source/0000775000175000017500000000000015257164541016447 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4549835 designate_dashboard-23.0.0/doc/source/conf.py0000664000175000017500000000573215257164455017761 0ustar00zuulzuul# 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 reqdashboardred 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 sys sys.path.insert(0, os.path.abspath('../..')) # -- General configuration ---------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ 'sphinx.ext.autodoc', #'sphinx.ext.intersphinx', 'openstackdocstheme', 'sphinxcontrib.rsvgconverter', ] # openstackdocstheme options openstackdocs_repo_name = 'openstack/designate-dashboard' openstackdocs_pdf_link = True openstackdocs_bug_project = 'designate-dashboard' openstackdocs_bug_tag = '' html_theme = 'openstackdocs' # autodoc generation is a bit aggressive and a ndashboardsance when doing heavy # text edit cycles. # execute "export SPHINX_DEBUG=1" in your terminal to disable # The suffix of source filenames. source_suffix = '.rst' # The master toctree document. master_doc = 'index' # General information about the project. project = 'designate_dashboard' copyright = '2013, OpenStack Foundation' # If true, '()' will be appended to :func: etc. cross-reference text. add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). add_module_names = True # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'native' # -- Options for HTML output -------------------------------------------------- # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. # html_theme_path = ["."] # html_theme = '_theme' # html_static_path = ['static'] # Output file base name for HTML help bdashboardlder. htmlhelp_basename = '%sdoc' % project # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass # [howto/manual]). latex_documents = [ ('index', 'doc-designate-dashboard.tex', 'Designate Dashboard Documentation', 'OpenStack Foundation', 'manual', True), ] latex_domain_indices = False latex_elements = { # Additional stuff for the LaTeX preamble. # openany: Skip blank pages in generated PDFs 'extraclassoptions': 'openany,oneside', 'makeindex': '', 'printindex': '', 'preamble': r'\setcounter{tocdepth}{3}', } # Example configuration for intersphinx: refer to the Python standard library. #intersphinx_mapping = {'https://docs.python.org/': None} ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1979923 designate_dashboard-23.0.0/doc/source/contributor/0000775000175000017500000000000015257164541021021 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4169824 designate_dashboard-23.0.0/doc/source/contributor/index.rst0000664000175000017500000000011715257164455022665 0ustar00zuulzuul============ Contributing ============ .. include:: ../../../CONTRIBUTING.rst ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4169824 designate_dashboard-23.0.0/doc/source/index.rst0000664000175000017500000000044015257164455020312 0ustar00zuulzuul============================================= Welcome to Designate Dashboard Documentation ============================================= .. toctree:: :maxdepth: 2 install/index user/index contributor/index .. rubric:: Indices and tables * :ref:`genindex` * :ref:`search` ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1979923 designate_dashboard-23.0.0/doc/source/install/0000775000175000017500000000000015257164541020115 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4169824 designate_dashboard-23.0.0/doc/source/install/index.rst0000664000175000017500000000034115257164455021760 0ustar00zuulzuul============ Installation ============ At the command line:: $ pip install designate_dashboard Or, if you have virtualenvwrapper installed:: $ mkvirtualenv designate_dashboard $ pip install designate_dashboard././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1989923 designate_dashboard-23.0.0/doc/source/user/0000775000175000017500000000000015257164541017425 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4179826 designate_dashboard-23.0.0/doc/source/user/index.rst0000664000175000017500000000013715257164455021273 0ustar00zuulzuul======== Usage ======== To use designate_dashboard in a project:: import designate_dashboard././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4179826 designate_dashboard-23.0.0/karma.conf.js0000664000175000017500000001164215257164455016767 0ustar00zuulzuul/* * * 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. */ 'use strict'; var fs = require('fs'); var path = require('path'); module.exports = function (config) { // This tox venv is setup in the post-install npm step var toxPath = path.resolve('./.tox/npm'); if (!toxPath) { console.error('xStatic libraries not found, please run `tox -e npm`'); process.exit(1); } toxPath += '/lib/'; toxPath += fs.readdirSync(toxPath).find(function(directory) { return directory.indexOf('python') === 0; }); toxPath += '/site-packages/'; var xstaticPath = toxPath + 'xstatic/pkg/'; config.set({ preprocessors: { // Used to collect templates for preprocessing. // NOTE: the templates must also be listed in the files section below. './static/**/*.html': ['ng-html2js'] }, // Sets up module to process templates. ngHtml2JsPreprocessor: { prependPrefix: '/', moduleName: 'templates' }, basePath: './', // Contains both source and test files. files: [ /* * shim, partly stolen from /i18n/js/horizon/ * Contains expected items not provided elsewhere (dynamically by * Django or via jasmine template. */ './test-shim.js', // from jasmine.html xstaticPath + 'jquery/data/jquery.js', xstaticPath + 'angular/data/angular.js', xstaticPath + 'angular/data/angular-route.js', xstaticPath + 'angular/data/angular-mocks.js', xstaticPath + 'angular/data/angular-cookies.js', xstaticPath + 'angular_bootstrap/data/angular-bootstrap.js', xstaticPath + 'angular_gettext/data/angular-gettext.js', xstaticPath + 'angular_fileupload/data/ng-file-upload-all.js', xstaticPath + 'angular/data/angular-sanitize.js', xstaticPath + 'd3/data/d3.js', xstaticPath + 'rickshaw/data/rickshaw.js', xstaticPath + 'angular_smart_table/data/smart-table.js', xstaticPath + 'angular_lrdragndrop/data/lrdragndrop.js', xstaticPath + 'spin/data/spin.js', xstaticPath + 'spin/data/spin.jquery.js', xstaticPath + 'tv4/data/tv4.js', xstaticPath + 'objectpath/data/ObjectPath.js', xstaticPath + 'angular_schema_form/data/schema-form.js', // TODO: These should be mocked. toxPath + '/horizon/static/horizon/js/horizon.js', /** * Include framework source code from horizon that we need. * Otherwise, karma will not be able to find them when testing. * These files should be mocked in the foreseeable future. */ toxPath + 'horizon/static/framework/**/*.module.js', toxPath + 'horizon/static/framework/**/!(*.spec|*.mock).js', toxPath + 'openstack_dashboard/static/**/*.module.js', toxPath + 'openstack_dashboard/static/**/!(*.spec|*.mock).js', toxPath + 'openstack_dashboard/dashboards/**/static/**/*.module.js', toxPath + 'openstack_dashboard/dashboards/**/static/**/!(*.spec|*.mock).js', /** * First, list all the files that defines application's angular modules. * Those files have extension of `.module.js`. The order among them is * not significant. */ './designatedashboard/static/**/*.module.js', /** * Followed by other JavaScript files that defines angular providers * on the modules defined in files listed above. And they are not mock * files or spec files defined below. The order among them is not * significant. */ './designatedashboard/static/**/!(*.spec|*.mock).js', /** * Then, list files for mocks with `mock.js` extension. The order * among them should not be significant. */ toxPath + 'openstack_dashboard/static/**/*.mock.js', //'./static/**/*.mock.js', /** * Finally, list files for spec with `spec.js` extension. The order * among them should not be significant. */ './designatedashboard/static/**/*.spec.js', /** * Angular external templates */ './designatedashboard/static/**/*.html', ], autoWatch: true, frameworks: ['jasmine'], browsers: ['Firefox'], phantomjsLauncher: { // Have phantomjs exit if a ResourceError is encountered // (useful if karma exits without killing phantom) exitOnResourceError: true }, reporters: ['progress'], plugins: [ 'karma-firefox-launcher', 'karma-jasmine', 'karma-ng-html2js-preprocessor' ] }); }; ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4179826 designate_dashboard-23.0.0/manage.py0000775000175000017500000000156515257164455016222 0ustar00zuulzuul#!/usr/bin/env python3 # Copyright 2014 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 sys if __name__ == "__main__": os.environ.setdefault( "DJANGO_SETTINGS_MODULE", "openstack_dashboard.settings") from django.core.management import execute_from_command_line # noqa execute_from_command_line(sys.argv) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4179826 designate_dashboard-23.0.0/package.json0000664000175000017500000000141015257164455016670 0ustar00zuulzuul{ "version": "0.0.0", "private": true, "name": "designate-dashboard", "description": "Designate Dashboard", "repository": "none", "license": "Apache 2.0", "devDependencies": { "eslint": "^1.10.3", "eslint-config-openstack": "1.2.4", "eslint-plugin-angular": "^1.0.1", "jasmine-core": "2.4.1", "karma": "~1.1.2", "karma-firefox-launcher": "2.1.0", "karma-cli": "1.0.1", "karma-jasmine": "1.0.2", "karma-ng-html2js-preprocessor": "1.0.0" }, "scripts": { "postinstall": "if [ ! -d .tox/npm ]; then tox -e npm --notest; fi", "lint": "eslint --no-color designatedashboard/static", "lintq": "eslint --quiet designatedashboard/static", "test": "karma start karma.conf.js --single-run" }, "dependencies": {} } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4179826 designate_dashboard-23.0.0/pyproject.toml0000664000175000017500000000230615257164455017323 0ustar00zuulzuul[build-system] requires = ["pbr>=6.1.1"] build-backend = "pbr.build" [project] name = "designate-dashboard" description = "Designate Horizon UI bits" authors = [ {name = "OpenStack", email = "openstack-discuss@lists.openstack.org"}, ] readme = {file = "README.rst", content-type = "text/x-rst"} license = "Apache-2.0" dynamic = ["version", "dependencies"] requires-python = ">=3.11" classifiers = [ "Environment :: OpenStack", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", ] [project.urls] Homepage = "https://docs.openstack.org/designate-dashboard/latest/" Repository = "https://opendev.org/openstack/designate-dashboard" "Bug Tracker" = "https://bugs.launchpad.net/designate-dashboard/" [tool.setuptools.packages.find] include = ["designatedashboard*"] ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1669917 designate_dashboard-23.0.0/releasenotes/0000775000175000017500000000000015257164541017073 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2009923 designate_dashboard-23.0.0/releasenotes/notes/0000775000175000017500000000000015257164541020223 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4189825 designate_dashboard-23.0.0/releasenotes/notes/batch-delete-recordsets-a1b2c3d4e5f6g7h8.yaml0000664000175000017500000000042615257164455030176 0ustar00zuulzuul--- features: - | Added batch delete support for record sets. Users can now select multiple record sets and delete them at once, similar to other OpenStack Dashboard resource panels. `LP#1759750 `__ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4189825 designate_dashboard-23.0.0/releasenotes/notes/drop-py-2-7-ae8cade4a0ee1da8.yaml0000664000175000017500000000034415257164455025576 0ustar00zuulzuul--- upgrade: - | Python 2.7 support has been dropped. Last release of designate-dashboard to support python 2.7 is OpenStack Train. The minimum version of Python now supported by designate-dashboard is Python 3.6. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4189825 designate_dashboard-23.0.0/releasenotes/notes/drop-python-3-6-and-3-7-8d166b2f80b27277.yaml0000664000175000017500000000020015257164455027020 0ustar00zuulzuul--- upgrade: - | Python 3.6 & 3.7 support has been dropped. The minimum version of Python now supported is Python 3.8.././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4189825 designate_dashboard-23.0.0/releasenotes/notes/drop-python-39.yaml0000664000175000017500000000010015257164455023616 0ustar00zuulzuul--- upgrade: - | Support for Python 3.9 has been dropped. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4199824 designate_dashboard-23.0.0/releasenotes/notes/min-openstacksdk-b7e4661f8800bb9c.yaml0000664000175000017500000000014015257164455026602 0ustar00zuulzuul--- upgrade: - | The designate dashboard requires a minimum openstacksdk version of 2.1.0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4199824 designate_dashboard-23.0.0/releasenotes/notes/openstacksdk-11483491f9978bd1.yaml0000664000175000017500000000010615257164455025613 0ustar00zuulzuul--- upgrade: - | The designate dashboard now needs openstacksdk ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4199824 designate_dashboard-23.0.0/releasenotes/notes/remove-designateclient-e98963b8baa4aa4f.yaml0000664000175000017500000000012515257164455030131 0ustar00zuulzuul--- upgrade: - | The ``python-designateclient`` library is no longer required. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4199824 designate_dashboard-23.0.0/releasenotes/notes/remove-oslo-log-078df11995380f36.yaml0000664000175000017500000000010715257164455026150 0ustar00zuulzuul--- upgrade: - | The ``oslo.log`` library is no longer required. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4199824 designate_dashboard-23.0.0/releasenotes/notes/remove-py38-1bc6676c8e5e880c.yaml0000664000175000017500000000016615257164455025445 0ustar00zuulzuul--- upgrade: - | Support for Python 3.8 has been removed. Now the minimum python version supported is 3.9 . ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4199824 designate_dashboard-23.0.0/releasenotes/notes/removed-v1-dashboard-56d4697d57baef09.yaml0000664000175000017500000000010415257164455027255 0ustar00zuulzuul--- upgrade: - | Removed the long deprecated v1 API dashboard.././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4199824 designate_dashboard-23.0.0/releasenotes/notes/zone-attributes-f1eed62987954b8c.yaml0000664000175000017500000000054315257164455026515 0ustar00zuulzuul--- features: - | Added support for zone attributes in the zone creation form. Users can now specify key-value attributes (e.g. pool_id) when creating a zone, which Designate uses for pool scheduling. To make use of this feature, the relevant scheduler filters (such as ``attribute``) must be enabled in the Designate configuration. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2049923 designate_dashboard-23.0.0/releasenotes/source/0000775000175000017500000000000015257164541020373 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4199824 designate_dashboard-23.0.0/releasenotes/source/2023.1.rst0000664000175000017500000000021015257164455021647 0ustar00zuulzuul=========================== 2023.1 Series Release Notes =========================== .. release-notes:: :branch: unmaintained/2023.1 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4199824 designate_dashboard-23.0.0/releasenotes/source/2023.2.rst0000664000175000017500000000020215257164455021651 0ustar00zuulzuul=========================== 2023.2 Series Release Notes =========================== .. release-notes:: :branch: stable/2023.2 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4209826 designate_dashboard-23.0.0/releasenotes/source/2024.1.rst0000664000175000017500000000021015257164455021650 0ustar00zuulzuul=========================== 2024.1 Series Release Notes =========================== .. release-notes:: :branch: unmaintained/2024.1 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4209826 designate_dashboard-23.0.0/releasenotes/source/2024.2.rst0000664000175000017500000000020215257164455021652 0ustar00zuulzuul=========================== 2024.2 Series Release Notes =========================== .. release-notes:: :branch: stable/2024.2 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4209826 designate_dashboard-23.0.0/releasenotes/source/2025.1.rst0000664000175000017500000000020215257164455021652 0ustar00zuulzuul=========================== 2025.1 Series Release Notes =========================== .. release-notes:: :branch: stable/2025.1 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4219825 designate_dashboard-23.0.0/releasenotes/source/2025.2.rst0000664000175000017500000000020215257164455021653 0ustar00zuulzuul=========================== 2025.2 Series Release Notes =========================== .. release-notes:: :branch: stable/2025.2 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4219825 designate_dashboard-23.0.0/releasenotes/source/2026.1.rst0000664000175000017500000000020215257164455021653 0ustar00zuulzuul=========================== 2026.1 Series Release Notes =========================== .. release-notes:: :branch: stable/2026.1 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4229827 designate_dashboard-23.0.0/releasenotes/source/conf.py0000664000175000017500000002065715257164455021710 0ustar00zuulzuul# Designate dashboard Release Notes documentation build configuration file. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # sys.path.insert(0, os.path.abspath('.')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'openstackdocstheme', 'reno.sphinxext', ] # openstackdocstheme options openstackdocs_repo_name = 'openstack/designate-dashboard' openstackdocs_bug_project = 'designate-dashboard' openstackdocs_bug_tag = '' openstackdocs_auto_name = False html_theme = 'openstackdocs' # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = 'Designate dashboard Release Notes' copyright = '2019, Designate dashboard developers' # Release notes are version independent # The short X.Y version. version = '' # The full version, including alpha/beta/rc tags. release = '' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. # today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = [] # The reST default role (used for this markup: `text`) to use for all # documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'native' # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. # keep_warnings = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". # html_title = None # A shorter title for the navigation bar. Default is the same as html_title. # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. # html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. # html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_domain_indices = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # tml_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # tml_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # tml_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # tml_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # tml_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'DesignatedashboardReleaseNotestdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # 'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ ('index', 'PythonDesignatedashboard.tex', 'Designate dashboard Release Notes Documentation', 'Designate dashboard developers', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # atex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # atex_use_parts = False # If true, show page references after internal links. # atex_show_pagerefs = False # If true, show URL addresses after external links. # atex_show_urls = False # Documents to append as an appendix to all manuals. # atex_appendices = [] # If false, no module index is generated. # atex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'designatedashboard', 'Designate dashboard Release Notes Documentation', ['Designate dashboard developers'], 1) ] # If true, show URL addresses after external links. # an_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'Designate dashboard', 'Designate dashboard Release Notes Documentation', 'Designate dashboard developers', 'Designate dashboard', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. # exinfo_appendices = [] # If false, no module index is generated. # exinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # exinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. # exinfo_no_detailmenu = False # -- Options for Internationalization output ------------------------------ locale_dirs = ['locale/'] ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4559834 designate_dashboard-23.0.0/releasenotes/source/index.rst0000664000175000017500000000070515257164455022242 0ustar00zuulzuul=========================================================== Welcome to Designate dashboard Release Notes documentation! =========================================================== Contents ======== .. toctree:: :maxdepth: 2 unreleased 2026.1 2025.2 2025.1 2024.2 2024.1 2023.2 2023.1 zed yoga xena wallaby victoria ussuri train Indices and tables ================== * :ref:`genindex` * :ref:`search` ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1699917 designate_dashboard-23.0.0/releasenotes/source/locale/0000775000175000017500000000000015257164541021632 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1669917 designate_dashboard-23.0.0/releasenotes/source/locale/cs/0000775000175000017500000000000015257164541022237 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2059925 designate_dashboard-23.0.0/releasenotes/source/locale/cs/LC_MESSAGES/0000775000175000017500000000000015257164541024024 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4249828 designate_dashboard-23.0.0/releasenotes/source/locale/cs/LC_MESSAGES/releasenotes.po0000664000175000017500000000150515257164455027062 0ustar00zuulzuul# Zbyněk Schwarz , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-09 10:21+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:06+0000\n" "Last-Translator: Zbyněk Schwarz \n" "Language-Team: Czech\n" "Language: cs\n" "X-Generator: Zanata 4.3.3\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" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1679919 designate_dashboard-23.0.0/releasenotes/source/locale/de/0000775000175000017500000000000015257164541022222 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2059925 designate_dashboard-23.0.0/releasenotes/source/locale/de/LC_MESSAGES/0000775000175000017500000000000015257164541024007 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4249828 designate_dashboard-23.0.0/releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po0000664000175000017500000000334115257164455027045 0ustar00zuulzuul# Frank Kloeker , 2017. #zanata # Andreas Jaeger , 2019. #zanata # Andreas Jaeger , 2020. #zanata msgid "" msgstr "" "Project-Id-Version: designate-dashboard\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-04-19 10:55+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2020-04-25 09:13+0000\n" "Last-Translator: Andreas Jaeger \n" "Language-Team: German\n" "Language: de\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "9.0.0" msgstr "9.0.0" 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 "" "Python 2.7 support has been dropped. Last release of designate-dashboard to " "support python 2.7 is OpenStack Train. The minimum version of Python now " "supported by designate-dashboard is Python 3.6." msgstr "" "Python 2.7 Unterstützung wurde beendet. Der letzte Release von designate-" "dashboard welcher Python 2.7 unterstützt ist OpenStack Train. Die minimal " "Python Version welche von designate-dashboard unterstützt wird ist Python " "3.6." msgid "Removed the long deprecated v1 API dashboard." msgstr "Das lange abgekündigte v1 API Dashboard wurde entfernt." msgid "Train Series Release Notes" msgstr "Train Serie Releasenotes" msgid "Upgrade Notes" msgstr "Aktualisierungsnotizen" msgid "Welcome to Designate dashboard Release Notes documentation!" msgstr "Willkommen bei den Releasenotes für das Designate Dashboard" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1679919 designate_dashboard-23.0.0/releasenotes/source/locale/en_GB/0000775000175000017500000000000015257164541022604 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2059925 designate_dashboard-23.0.0/releasenotes/source/locale/en_GB/LC_MESSAGES/0000775000175000017500000000000015257164541024371 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4559834 designate_dashboard-23.0.0/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po0000664000175000017500000001012115257164455027421 0ustar00zuulzuul# Andi Chandler , 2017. #zanata # Andi Chandler , 2019. #zanata # Andi Chandler , 2020. #zanata # Andi Chandler , 2021. #zanata # Andi Chandler , 2022. #zanata # Andi Chandler , 2023. #zanata # Andi Chandler , 2024. #zanata # Andi Chandler , 2026. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-03-11 15:39+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2026-03-14 07:18+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: English (United Kingdom)\n" "Language: en_GB\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "10.0.0" msgstr "10.0.0" msgid "15.0.0" msgstr "15.0.0" msgid "18.0.0" msgstr "18.0.0" msgid "20.0.0" msgstr "20.0.0" msgid "2023.1 Series Release Notes" msgstr "2023.1 Series Release Notes" msgid "2023.2 Series Release Notes" msgstr "2023.2 Series Release Notes" msgid "2024.1 Series Release Notes" msgstr "2024.1 Series Release Notes" msgid "2024.2 Series Release Notes" msgstr "2024.2 Series Release Notes" msgid "2025.1 Series Release Notes" msgstr "2025.1 Series Release Notes" msgid "2025.2 Series Release Notes" msgstr "2025.2 Series Release Notes" msgid "2026.1 Series Release Notes" msgstr "2026.1 Series Release Notes" msgid "21.0.0" msgstr "21.0.0" msgid "9.0.0" msgstr "9.0.0" 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 "" "Python 2.7 support has been dropped. Last release of designate-dashboard to " "support python 2.7 is OpenStack Train. The minimum version of Python now " "supported by designate-dashboard is Python 3.6." msgstr "" "Python 2.7 support has been dropped. Last release of Designate-dashboard to " "support Python 2.7 is OpenStack Train. The minimum version of Python now " "supported by Designate-dashboard is Python 3.6." msgid "" "Python 3.6 & 3.7 support has been dropped. The minimum version of Python now " "supported is Python 3.8." msgstr "" "Python 3.6 & 3.7 support has been dropped. The minimum version of Python now " "supported is Python 3.8." msgid "Removed the long deprecated v1 API dashboard." msgstr "Removed the long deprecated v1 API dashboard." msgid "" "Support for Python 3.8 has been removed. Now the minimum python version " "supported is 3.9 ." msgstr "" "Support for Python 3.8 has been removed. Now the minimum Python version " "supported is 3.9 ." msgid "Support for Python 3.9 has been dropped." msgstr "Support for Python 3.9 has been dropped." msgid "The ``oslo.log`` library is no longer required." msgstr "The ``oslo.log`` library is no longer required." msgid "The ``python-designateclient`` library is no longer required." msgstr "The ``python-designateclient`` library is no longer required." msgid "The designate dashboard now needs openstacksdk" msgstr "The Designate dashboard now needs openstacksdk" msgid "" "The designate dashboard requires a minimum openstacksdk version of 2.1.0" msgstr "" "The Designate dashboard requires a minimum openstacksdk version of 2.1.0" msgid "Train Series Release Notes" msgstr "Train Series Release Notes" msgid "Upgrade Notes" msgstr "Upgrade Notes" msgid "Ussuri Series Release Notes" msgstr "Ussuri Series Release Notes" msgid "Victoria Series Release Notes" msgstr "Victoria Series Release Notes" msgid "Wallaby Series Release Notes" msgstr "Wallaby Series Release Notes" msgid "Welcome to Designate dashboard Release Notes documentation!" msgstr "Welcome to Designate dashboard Release Notes documentation!" msgid "Xena Series Release Notes" msgstr "Xena Series Release Notes" msgid "Yoga Series Release Notes" msgstr "Yoga Series Release Notes" msgid "Zed Series Release Notes" msgstr "Zed Series Release Notes" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1679919 designate_dashboard-23.0.0/releasenotes/source/locale/fr/0000775000175000017500000000000015257164541022241 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2059925 designate_dashboard-23.0.0/releasenotes/source/locale/fr/LC_MESSAGES/0000775000175000017500000000000015257164541024026 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4259827 designate_dashboard-23.0.0/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po0000664000175000017500000000154215257164455027065 0ustar00zuulzuul# Gaelle , 2017. #zanata # François Magimel , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-09 10:21+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-07-13 02:29+0000\n" "Last-Translator: François Magimel \n" "Language-Team: French\n" "Language: fr\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" msgid ":ref:`genindex`" msgstr ":ref:`genindex`" msgid ":ref:`search`" msgstr ":ref:`search`" msgid "Contents" msgstr "Contenus" msgid "Current Series Release Notes" msgstr "Notes sur la version actuelle" msgid "Indices and tables" msgstr "Index et table des matières" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1689918 designate_dashboard-23.0.0/releasenotes/source/locale/id/0000775000175000017500000000000015257164541022226 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2069924 designate_dashboard-23.0.0/releasenotes/source/locale/id/LC_MESSAGES/0000775000175000017500000000000015257164541024013 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4259827 designate_dashboard-23.0.0/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po0000664000175000017500000000145515257164455027055 0ustar00zuulzuul# suhartono , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-09 10:21+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-01-09 04:01+0000\n" "Last-Translator: suhartono \n" "Language-Team: Indonesian\n" "Language: id\n" "X-Generator: Zanata 4.3.3\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)" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1689918 designate_dashboard-23.0.0/releasenotes/source/locale/ja/0000775000175000017500000000000015257164541022224 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2069924 designate_dashboard-23.0.0/releasenotes/source/locale/ja/LC_MESSAGES/0000775000175000017500000000000015257164541024011 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4269826 designate_dashboard-23.0.0/releasenotes/source/locale/ja/LC_MESSAGES/releasenotes.po0000664000175000017500000000143115257164455027045 0ustar00zuulzuul# Akihiro Motoki , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-09 10:21+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-02-08 08:46+0000\n" "Last-Translator: Akihiro Motoki \n" "Language-Team: Japanese\n" "Language: ja\n" "X-Generator: Zanata 4.3.3\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 "目次と表" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1689918 designate_dashboard-23.0.0/releasenotes/source/locale/ko_KR/0000775000175000017500000000000015257164541022637 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2069924 designate_dashboard-23.0.0/releasenotes/source/locale/ko_KR/LC_MESSAGES/0000775000175000017500000000000015257164541024424 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4269826 designate_dashboard-23.0.0/releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po0000664000175000017500000000146415257164455027466 0ustar00zuulzuul# Sungjin Kang , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-09 10:21+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-01-10 11:18+0000\n" "Last-Translator: Sungjin Kang \n" "Language-Team: Korean (South Korea)\n" "Language: ko_KR\n" "X-Generator: Zanata 4.3.3\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 "인텍스 및 테이블" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1699917 designate_dashboard-23.0.0/releasenotes/source/locale/ne/0000775000175000017500000000000015257164541022234 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2069924 designate_dashboard-23.0.0/releasenotes/source/locale/ne/LC_MESSAGES/0000775000175000017500000000000015257164541024021 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4279828 designate_dashboard-23.0.0/releasenotes/source/locale/ne/LC_MESSAGES/releasenotes.po0000664000175000017500000000153515257164455027062 0ustar00zuulzuul# Surit Aryal , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-09 10:21+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-06-12 04:27+0000\n" "Last-Translator: Surit Aryal \n" "Language-Team: Nepali\n" "Language: ne\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid ":ref:`genindex`" msgstr ":ref:`genindex`" msgid ":ref:`search`" msgstr ":ref:`search`" msgid "Contents" msgstr "सामग्रीहरू" msgid "Current Series Release Notes" msgstr "Current Series रिलीज नोट्स" msgid "Indices and tables" msgstr "सूचकांक र तालिकाहरू" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1699917 designate_dashboard-23.0.0/releasenotes/source/locale/pt_BR/0000775000175000017500000000000015257164541022640 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2079923 designate_dashboard-23.0.0/releasenotes/source/locale/pt_BR/LC_MESSAGES/0000775000175000017500000000000015257164541024425 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4289827 designate_dashboard-23.0.0/releasenotes/source/locale/pt_BR/LC_MESSAGES/releasenotes.po0000664000175000017500000000157315257164455027470 0ustar00zuulzuul# Fernando Pimenta , 2018. #zanata # Rodrigo Loures , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-09 10:21+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-03-09 06:57+0000\n" "Last-Translator: Fernando Pimenta \n" "Language-Team: Portuguese (Brazil)\n" "Language: pt_BR\n" "X-Generator: Zanata 4.3.3\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 "Notas de Versão da Série Atual" msgid "Indices and tables" msgstr "Índices e tabelas" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.1699917 designate_dashboard-23.0.0/releasenotes/source/locale/ru/0000775000175000017500000000000015257164541022260 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2079923 designate_dashboard-23.0.0/releasenotes/source/locale/ru/LC_MESSAGES/0000775000175000017500000000000015257164541024045 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4569836 designate_dashboard-23.0.0/releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po0000664000175000017500000001155615257164455027112 0ustar00zuulzuul# Fedor Tarasenko , 2017. #zanata # Dmitriy Chubinidze , 2025. #zanata # Ivan Anfimov , 2025. #zanata # Ivan Anfimov , 2026. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-03-25 15:19+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2026-03-27 04:20+0000\n" "Last-Translator: Ivan Anfimov \n" "Language-Team: Russian\n" "Language: ru\n" "X-Generator: Zanata 4.3.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 "10.0.0" msgstr "10.0.0" msgid "15.0.0" msgstr "15.0.0" msgid "18.0.0" msgstr "18.0.0" msgid "20.0.0" msgstr "20.0.0" msgid "2023.1 Series Release Notes" msgstr "Примечания к выпуску 2023.1" msgid "2023.2 Series Release Notes" msgstr "Примечания к выпуску 2023.2" msgid "2024.1 Series Release Notes" msgstr "Примечания к выпуску 2024.1" msgid "2024.2 Series Release Notes" msgstr "Примечания к выпуску 2024.2" msgid "2025.1 Series Release Notes" msgstr "Примечания к выпуску 2025.1" msgid "2025.2 Series Release Notes" msgstr "Примечания к выпуску 2025.2" msgid "2026.1 Series Release Notes" msgstr "Примечания к выпуску 2026.1" msgid "21.0.0" msgstr "21.0.0" msgid "9.0.0" msgstr "9.0.0" 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 "" "Python 2.7 support has been dropped. Last release of designate-dashboard to " "support python 2.7 is OpenStack Train. The minimum version of Python now " "supported by designate-dashboard is Python 3.6." msgstr "" "Поддержка Python 2.7 была прекращена. Последний выпуск designate-dashboard, " "поддерживающий python 2.7 — OpenStack Train. Минимальная версия Python, " "поддерживаемая designate-dashboard — Python 3.6. " msgid "" "Python 3.6 & 3.7 support has been dropped. The minimum version of Python now " "supported is Python 3.8." msgstr "" "Поддержка Python 3.6 и 3.7 была прекращена. Минимальная версия Python, " "которая теперь поддерживается — Python 3.8." msgid "Removed the long deprecated v1 API dashboard." msgstr "Удалена давно устаревшая версия API v1 панели управления." msgid "" "Support for Python 3.8 has been removed. Now the minimum python version " "supported is 3.9 ." msgstr "" "Поддержка Python 3.8 была удалена. Минимальная версия Python, которая теперь " "поддерживается — Python 3.9." msgid "Support for Python 3.9 has been dropped." msgstr "Поддержка Python 3.9 была прекращена." msgid "The ``oslo.log`` library is no longer required." msgstr "Библиотека ``oslo.log`` больше не требуется." msgid "The ``python-designateclient`` library is no longer required." msgstr "Библиотека ``python-designateclient`` больше не требуется." msgid "The designate dashboard now needs openstacksdk" msgstr "Для панели управления designate, теперь необходим openstacksdk" msgid "" "The designate dashboard requires a minimum openstacksdk version of 2.1.0" msgstr "" "Для панели управления designate, требуемая минимальная версия openstacksdk " "2.1.0" msgid "Train Series Release Notes" msgstr "Примечания к выпуску Train" msgid "Upgrade Notes" msgstr "Примечания к обновлению" msgid "Ussuri Series Release Notes" msgstr "Примечания к выпуску Ussuri" msgid "Victoria Series Release Notes" msgstr "Примечания к выпуску Victoria" msgid "Wallaby Series Release Notes" msgstr "Примечания к выпуску Wallaby" msgid "Welcome to Designate dashboard Release Notes documentation!" msgstr "" "Добро пожаловать в документацию по примечаниям к выпускам панели управления " "Designate!" msgid "Xena Series Release Notes" msgstr "Примечания к выпуску Xena" msgid "Yoga Series Release Notes" msgstr "Примечания к выпуску Yoga" msgid "Zed Series Release Notes" msgstr "Примечания к выпуску Zed" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765409.170992 designate_dashboard-23.0.0/releasenotes/source/locale/zh_CN/0000775000175000017500000000000015257164541022633 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2079923 designate_dashboard-23.0.0/releasenotes/source/locale/zh_CN/LC_MESSAGES/0000775000175000017500000000000015257164541024420 5ustar00zuulzuul././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po0000664000175000017500000000140215257164455027452 0ustar00zuulzuul# TigerFang , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: Designate dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-09 10:21+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 \n" "Language-Team: Chinese (China)\n" "Language: zh_CN\n" "X-Generator: Zanata 4.3.3\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 "索引和表格" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/releasenotes/source/train.rst0000664000175000017500000000017615257164455022252 0ustar00zuulzuul========================== Train Series Release Notes ========================== .. release-notes:: :branch: stable/train ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/releasenotes/source/unreleased.rst0000664000175000017500000000015315257164455023257 0ustar00zuulzuul============================ Current Series Release Notes ============================ .. release-notes:: ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/releasenotes/source/ussuri.rst0000664000175000017500000000020215257164455022455 0ustar00zuulzuul=========================== Ussuri Series Release Notes =========================== .. release-notes:: :branch: stable/ussuri ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/releasenotes/source/victoria.rst0000664000175000017500000000022015257164455022743 0ustar00zuulzuul============================= Victoria Series Release Notes ============================= .. release-notes:: :branch: unmaintained/victoria ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/releasenotes/source/wallaby.rst0000664000175000017500000000021415257164455022561 0ustar00zuulzuul============================ Wallaby Series Release Notes ============================ .. release-notes:: :branch: unmaintained/wallaby ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/releasenotes/source/xena.rst0000664000175000017500000000020015257164455022054 0ustar00zuulzuul========================= Xena Series Release Notes ========================= .. release-notes:: :branch: unmaintained/xena ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/releasenotes/source/yoga.rst0000664000175000017500000000020015257164455022060 0ustar00zuulzuul========================= Yoga Series Release Notes ========================= .. release-notes:: :branch: unmaintained/yoga ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/releasenotes/source/zed.rst0000664000175000017500000000017415257164455021715 0ustar00zuulzuul======================== Zed Series Release Notes ======================== .. release-notes:: :branch: unmaintained/zed ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1790765357.429983 designate_dashboard-23.0.0/requirements.txt0000664000175000017500000000050115257164455017666 0ustar00zuulzuul# Requirements lower bounds listed here are our best effort to keep them up to # date but we do not test them so no guarantee of having them all correct. If # you find any incorrect lower bounds, let us know or propose a fix. pbr!=2.1.0,>=2.0.0 # Apache-2.0 horizon>=17.1.0 # Apache-2.0 openstacksdk>=2.1.0 # Apache-2.0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765409.2089925 designate_dashboard-23.0.0/setup.cfg0000664000175000017500000000011515257164541016220 0ustar00zuulzuul[metadata] name = designate-dashboard [egg_info] tag_build = tag_date = 0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4309828 designate_dashboard-23.0.0/setup.py0000664000175000017500000000122115257164455016114 0ustar00zuulzuul# 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 setuptools setuptools.setup(pbr=True) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4569836 designate_dashboard-23.0.0/test0000664000175000017500000000400015257164455015302 0ustar00zuulzuulSQLite format 3@ -æ ¶J././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4309828 designate_dashboard-23.0.0/test-requirements.txt0000664000175000017500000000022215257164455020643 0ustar00zuulzuulhacking>=6.1.0,<6.2.0 # Apache-2.0 coverage!=4.4,>=4.0 # Apache-2.0 oslo.config>=5.2.0 # Apache-2.0 pylint==1.4.5 # GPLv2 testtools>=2.2.0 # MIT ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4309828 designate_dashboard-23.0.0/test-shim.js0000664000175000017500000000617615257164455016673 0ustar00zuulzuul/** * 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. */ /* * Shim for Javascript unit tests; supplying expected global features. * This should be removed from the codebase once i18n services are provided. * Taken from default i18n file provided by Django. */ var horizonPlugInModules = []; (function (globals) { var django = globals.django || (globals.django = {}); django.pluralidx = function (count) { return (count == 1) ? 0 : 1; }; /* gettext identity library */ django.gettext = function (msgid) { return msgid; }; django.ngettext = function (singular, plural, count) { return (count == 1) ? singular : plural; }; django.gettext_noop = function (msgid) { return msgid; }; django.pgettext = function (context, msgid) { return msgid; }; django.npgettext = function (context, singular, plural, count) { return (count == 1) ? singular : plural; }; django.interpolate = function (fmt, obj, named) { if (named) { return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); } else { return fmt.replace(/%s/g, function(match){return String(obj.shift())}); } }; /* formatting library */ django.formats = { "DATETIME_FORMAT": "N j, Y, P", "DATETIME_INPUT_FORMATS": [ "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M:%S.%f", "%Y-%m-%d %H:%M", "%Y-%m-%d", "%m/%d/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S.%f", "%m/%d/%Y %H:%M", "%m/%d/%Y", "%m/%d/%y %H:%M:%S", "%m/%d/%y %H:%M:%S.%f", "%m/%d/%y %H:%M", "%m/%d/%y" ], "DATE_FORMAT": "N j, Y", "DATE_INPUT_FORMATS": [ "%Y-%m-%d", "%m/%d/%Y", "%m/%d/%y" ], "DECIMAL_SEPARATOR": ".", "FIRST_DAY_OF_WEEK": "0", "MONTH_DAY_FORMAT": "F j", "NUMBER_GROUPING": "3", "SHORT_DATETIME_FORMAT": "m/d/Y P", "SHORT_DATE_FORMAT": "m/d/Y", "THOUSAND_SEPARATOR": ",", "TIME_FORMAT": "P", "TIME_INPUT_FORMATS": [ "%H:%M:%S", "%H:%M:%S.%f", "%H:%M" ], "YEAR_MONTH_FORMAT": "F Y" }; django.get_format = function (format_type) { var value = django.formats[format_type]; if (typeof(value) == 'undefined') { return format_type; } else { return value; } }; /* add to global namespace */ globals.pluralidx = django.pluralidx; globals.gettext = django.gettext; globals.ngettext = django.ngettext; globals.gettext_noop = django.gettext_noop; globals.pgettext = django.pgettext; globals.npgettext = django.npgettext; globals.interpolate = django.interpolate; globals.get_format = django.get_format; globals.STATIC_URL = '/static/'; globals.WEBROOT = '/'; }(this)); ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1790765357.4569836 designate_dashboard-23.0.0/tox.ini0000664000175000017500000000414415257164455015724 0ustar00zuulzuul[tox] minversion = 3.18.0 envlist = py3,pep8,npm skipsdist = True [testenv] usedevelop = True setenv = PYTHONDONTWRITEBYTECODE=1 DJANGO_SETTINGS_MODULE=designatedashboard.settings allowlist_externals = {toxinidir}/manage.py npm deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt commands = {toxinidir}/manage.py test designatedashboard --settings=designatedashboard.tests.settings passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY [testenv:pep8] commands = flake8 [testenv:venv] commands = {posargs} [testenv:cover] commands = coverage erase coverage run {toxinidir}/manage.py test designatedashboard --settings=designatedashboard.tests.settings {posargs} coverage xml --include 'designatedashboard/*' -o cover/coverage.xml coverage html --include 'designatedashboard/*' -d cover [testenv:docs] deps = -r{toxinidir}/doc/requirements.txt commands = sphinx-build -W -b html -d doc/build/doctrees doc/source doc/build/html [testenv:pdf-docs] deps = -r{toxinidir}/doc/requirements.txt allowlist_externals = make commands = sphinx-build -W -b latex doc/source doc/build/pdf make -C doc/build/pdf [flake8] # E123, E125 skipped as they are invalid PEP-8. # F405 TEMPLATES may be undefined, or defined from star imports. # (because it is not easy to avoid this in openstack_dashboard.test.settings) # W504 line break after binary operator show-source = True ignore = E123,E125,F405,W504 builtins = _ exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,releasenotes,node_modules [testenv:releasenotes] deps = {[testenv:docs]deps} commands = sphinx-build -a -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html [testenv:eslint] # npm must be installed on the system, for example # sudo apt-get install npm commands = npm install npm run lint [testenv:karma] # npm must be installed on the system, for example # sudo apt-get install npm commands = npm install npm test