././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3958921 neutron_vpnaas_dashboard-11.1.0.dev3/0000775000175000017500000000000014750123115020216 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/.zuul.yaml0000664000175000017500000000031214750122063022154 0ustar00jamespagejamespage- project: templates: - check-requirements - horizon-non-primary-django-jobs - openstack-python3-jobs-horizon - publish-openstack-docs-pti - release-notes-jobs-python3 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581580.0 neutron_vpnaas_dashboard-11.1.0.dev3/AUTHORS0000664000175000017500000000211014750123114021257 0ustar00jamespagejamespageAkihiro Motoki Andreas Jaeger Cao Xuan Hoang Corey Bryant Dirk Mueller Doug Hellmann Elod Illes Ghanshyam Mann Hervé Beraud Ivan Kolodyazhny Monty Taylor OpenStack Release Bot Rafael Weingärtner Reik Keutterling Rodolfo Alonso Hernandez Sean McGinnis ShangXiao Takashi Kajinami Takashi Kajinami Van Hung Pham YAMAMOTO Takashi caoyuan huang.zhiping jacky06 jiaqi07 manchandavishal niuke zhang.lei zhanghao ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/CONTRIBUTING.rst0000664000175000017500000000123614750122063022662 0ustar00jamespagejamespageIf you would like to contribute to the development of OpenStack, you must follow the steps in this page: https://docs.openstack.org/infra/manual/developers.html If you already have a good understanding of how the system works and your OpenStack accounts are set up, you can skip to the development workflow section of this documentation to learn how changes to OpenStack should be submitted for review via the Gerrit tool: https://docs.openstack.org/infra/manual/developers.html#development-workflow Pull requests submitted through GitHub will be ignored. Bugs should be filed on Launchpad, not GitHub: https://bugs.launchpad.net/neutron-vpnaas-dashboard ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581580.0 neutron_vpnaas_dashboard-11.1.0.dev3/ChangeLog0000664000175000017500000001577614750123114022007 0ustar00jamespagejamespageCHANGES ======= * reno: Update master for unmaintained/2023.1 * Update supported python versions according to tested runtimes * Update master for stable/2024.2 11.0.0 ------ * Explicitly convert \`\`assertQuerysetEqual\`\` input parameters * Update master for stable/2024.1 * reno: Update master for unmaintained/xena * reno: Update master for unmaintained/wallaby * reno: Update master for unmaintained/victoria 10.0.0.0rc1 ----------- * reno: Update master for unmaintained/yoga * Update master for stable/2023.2 * Imported Translations from Zanata 9.0.0 ----- * setup.cfg: Replace dashes with underscores * Imported Translations from Zanata * Update master for stable/2023.1 8.0.0 ----- * Fix pdf-docs target * Switch to 2023.1 Python3 unit tests and generic template name * Update master for stable/zed 7.0.0 ----- * Imported Translations from Zanata * Update master for stable/wallaby * Update master for stable/xena * Drop lower-constraints.txt and its testing * Imported Translations from Zanata * Use TOX\_CONSTRAINTS\_FILE * Update python testing as per zed cycle testing runtime * Replace deprecated django.conf.urls.url() * Replace deprecated ugettext\_lazy and ungettext\_lazy * Fix lower constraints * Update master for stable/yoga 6.0.0 ----- * Imported Translations from Zanata * Fix lower-constraints * Imported Translations from Zanata * Add Python3 wallaby unit tests * Update master for stable/victoria 3.0.0 ----- * Cleanup for Refactor-error-messages * [goal] Migrate testing to ubuntu focal * Add aggressive negotiation mode for ikepolicy * Imported Translations from Zanata * drop mock from lower-constraints and requirements * Stop to use the \_\_future\_\_ module * Switch to newer openstackdocstheme and reno versions * Fix hacking min version to 3.0.1 * Imported Translations from Zanata * 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 2.0.0 ----- * Imported Translations from Zanata * Fix pyScss version in lower-constraints.txt * Update hacking for Python3 * Drop Django 1.11 support * translation: drop babel extractor definitions * [ussuri][goal] Drop python 2.7 support and testing * Switch to official Ussuri jobs * Imported Translations from Zanata * Update master for stable/train * Imported Translations from Zanata * Fix help text for "Authorization algorithm" * Add tox env and job for Django 2.2 * Update the constraints url 1.6.0 ----- * Change PDF file name * PDF documentation build * Add release notes link for README * Sync Sphinx requirement * Imported Translations from Zanata * Add Python 3 Train unit tests * Imported Translations from Zanata * Replace git.openstack.org URLs with opendev.org URLs * OpenDev Migration Patch * Dropping the py35 testing * Imported Translations from Zanata * Update master for stable/stein * Imported Translations from Zanata 1.5.1 ----- * Imported Translations from Zanata * Imported Translations from Zanata * Fix devstack plugin to work with Python 3 * Bump hacking to 1.1.0 1.5.0 ----- * Imported Translations from Zanata * Remove use\_mox usage * Update the VPNaaS dashboard documentation link * Support alrogithms other than sha1 * Bump horizon lower-constraints * Change openstack-dev to openstack-discuss * Imported Translations from Zanata * Cleanup zuul.yaml * switch documentation job to new PTI * import zuul job settings from project-config * Imported Translations from Zanata * Imported Translations from Zanata * Update reno for stable/rocky 1.4.0 ----- * Switch test runner to django default runner * fix tox python3 overrides * Add python3 django 1.11 job instead of django 2.0 job 1.3.0 ----- * Imported Translations from Zanata * Follow the new PTI for document build * Imported Translations from Zanata * Imported Translations from Zanata * Imported Translations from Zanata * Imported Translations from Zanata * Imported Translations from Zanata * Show team and repo badges on README * Fix pep8 errors * Django 2.0 support * add lower-constraints job * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements * Updated from global requirements * Imported Translations from Zanata * Avoid tox-install.sh * Updated from global requirements * Updated from global requirements * Imported Translations from Zanata * Drop mox3 from test-requirements.txt * Drop mox usage from VPNaaS panel tests * Drop mox usage from VPNaaS API tests * Imported Translations from Zanata * Imported Translations from Zanata * Drop BRANCH\_NAME and CLIENT\_NAME in tox.ini * Updated from global requirements * [trivial] fixed typo in vpn/forms.py * Imported Translations from Zanata * Update reno for stable/queens * Imported Translations from Zanata 1.2.1 ----- * Imported Translations from Zanata * Correct django template pattern in babel-django.cfg * Imported Translations from Zanata * Add VPN service: List only routers with external gateway * Replace None with - (hyphen) for value None * Fix unnecessary capitalized messages * Make switched multiple choice field work * Imported Translations from Zanata * Imported Translations from Zanata * doc: remove symlink for releasenotes * Updated from global requirements * Imported Translations from Zanata * Updated from global requirements 1.2.0 ----- * Fix the typo * Align tox\_install.sh with other projects * Remove setting of version/release from releasenotes * Updated from global requirements * .gitignore: add translation catalogs (.mo and .pot) * Disable status handling in VPN service table * Use TextInput widget for readonly choice fields * Use ThemableChoiceField * Allow peer\_id and peer\_address input formats other than IP address * IPsec site connection should support id * Cleanup unnessary reverse\_lazy() in code * Cleanup unnessary ID attribute in code * Fix VPN Service Details page * Add deliverables info * Update tox from py34 to py35 * Updated from global requirements * Use 'IPsec' consistently * Fix typo 1.1.0 ----- * Use flake8-import-order plugin * Updated from global requirements * Add support for Endpoint Group * devstack: Remove workaround for horizon plugin framework * Move VPN panel in the left menu lower by default * Release note for stable/pike 0.1.0 ----- * Update Korean translation * Update URLs in documents according to document migration * Ensure log messages are not translated * Translation import * Translation import for ja * tox\_install: Don't leave IFS set * Updated from global requirements * Updated from global requirements * Manually sync with g-r * Update openstackdocstheme configuration * Consume horizon master * Prepare initial documentationn * DevStack plugin for neutron-vpnaas-dashboard * Add .gitreview * Change the hirarchy of vpn panel * Setup release notes * Setup documentation build * Cleanup test env * Import API tests * Pass unit tests * Update flake8 and hacking rules * Import VPNaaS test data * Use horizon local fork w/o VPNaaS dashboard * Setup test environment * Add some required python files * Initial commit ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/HACKING.rst0000664000175000017500000000073114750122063022016 0ustar00jamespagejamespage=========================================== Neutron VPNaaS Dashboard Style Commandments =========================================== Read the OpenStack Style Commandments https://docs.openstack.org/hacking/latest/user/hacking.html Project Specific Commandments ----------------------------- - Read the Horizon contributing documentation at https://docs.openstack.org/horizon/latest/contributor/contributing.html - [M322] Method's default argument shouldn't be mutable. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/LICENSE0000664000175000017500000002363714750122063021237 0ustar00jamespagejamespage 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=1738581581.3958921 neutron_vpnaas_dashboard-11.1.0.dev3/PKG-INFO0000644000175000017500000000307414750123115021315 0ustar00jamespagejamespageMetadata-Version: 2.1 Name: neutron-vpnaas-dashboard Version: 11.1.0.dev3 Summary: Neutron VPNaaS Dashboard Home-page: https://docs.openstack.org/neutron-vpnaas-dashboard/latest/ Author: OpenStack Author-email: openstack-discuss@lists.openstack.org Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Requires-Python: >=3.9 License-File: LICENSE License-File: AUTHORS Requires-Dist: pbr!=2.1.0,>=2.0.0 Requires-Dist: horizon>=23.4.0 Requires-Dist: python-neutronclient>=6.7.0 ======================== Neutron VPNaaS Dashboard ======================== OpenStack Dashboard panels for Neutron VPNaaS * Documentation: https://docs.openstack.org/neutron-vpnaas-dashboard/latest/ * Source: https://opendev.org/openstack/neutron-vpnaas-dashboard * Bugs: https://bugs.launchpad.net/neutron-vpnaas-dashboard * Release Notes: https://docs.openstack.org/releasenotes/neutron-vpnaas-dashboard/ Team and repository tags ------------------------ .. image:: https://governance.openstack.org/tc/badges/neutron-vpnaas-dashboard.svg :target: https://governance.openstack.org/tc/reference/tags/index.html ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/README.rst0000664000175000017500000000115214750122063021705 0ustar00jamespagejamespage======================== Neutron VPNaaS Dashboard ======================== OpenStack Dashboard panels for Neutron VPNaaS * Documentation: https://docs.openstack.org/neutron-vpnaas-dashboard/latest/ * Source: https://opendev.org/openstack/neutron-vpnaas-dashboard * Bugs: https://bugs.launchpad.net/neutron-vpnaas-dashboard * Release Notes: https://docs.openstack.org/releasenotes/neutron-vpnaas-dashboard/ Team and repository tags ------------------------ .. image:: https://governance.openstack.org/tc/badges/neutron-vpnaas-dashboard.svg :target: https://governance.openstack.org/tc/reference/tags/index.html ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581581.0 neutron_vpnaas_dashboard-11.1.0.dev3/RELEASENOTES.rst0000664000175000017500000000700214750123115022640 0ustar00jamespagejamespage======================== neutron-vpnaas-dashboard ======================== .. _neutron-vpnaas-dashboard_0.1.0: 0.1.0 ===== .. _neutron-vpnaas-dashboard_0.1.0_Prelude: Prelude ------- .. releasenotes/notes/split-out-from-horizon-4807f953d5dc0799.yaml @ b'9b143ff4da30d721df50da0732fce2ea3f411838' Neutron VPNaaS support in the OpenStack Dashboard is now split out into a separate python package. .. _neutron-vpnaas-dashboard_0.1.0_New Features: New Features ------------ .. releasenotes/notes/split-out-from-horizon-4807f953d5dc0799.yaml @ b'9b143ff4da30d721df50da0732fce2ea3f411838' - Neutron VPNaaS support in the OpenStack Dashboard is now split out into a separate package ``neutron-vpnaas-dashboard``. You need to install ``neutron-vpnaas-dashboard`` after upgrading the OpenStack Dashboard to Pike release and add ``enabled`` file for Neutron VPNaaS dashboard. .. _neutron-vpnaas-dashboard_1.2.0: 1.2.0 ===== .. _neutron-vpnaas-dashboard_1.2.0_Bug Fixes: Bug Fixes --------- .. releasenotes/notes/add-more-formats-to-ipsec-site-connection-e105363b9125b1ed.yaml @ b'9ba0382e8dab271d3f91f3b011432cad9997f38f' - Add support the attributes of IPsec site connection to be able to get more formats like FQDN other than IP format. For more information, see bug `1261127 `_. .. _neutron-vpnaas-dashboard_1.1.0: 1.1.0 ===== .. _neutron-vpnaas-dashboard_1.1.0_New Features: New Features ------------ .. releasenotes/notes/endpoint-group-3bb4083130952d17.yaml @ b'9f9adbb83f5b521b6f14dcf3019e25b216be7d40' - Add support for Endpoint Group feature. .. _neutron-vpnaas-dashboard_1.3.0: 1.3.0 ===== .. _neutron-vpnaas-dashboard_1.3.0_Upgrade Notes: Upgrade Notes ------------- .. releasenotes/notes/django2-support-ef2f2bd52a8bb63f.yaml @ b'd9fd377e29d3d59501e28c06ff76c9afb43d76de' - Supported django versions are chagned aligning with the supported versions by horizon. Django 1.11 and 2.0 are supported now. Django 1.8 to 1.10 are no longer supported. .. _neutron-vpnaas-dashboard_1.5.0: 1.5.0 ===== .. _neutron-vpnaas-dashboard_1.5.0_New Features: New Features ------------ .. releasenotes/notes/auth-algorithm-fbfe0831ab8dc346.yaml @ b'5157219107c4d940922dfc80cc4b04119ec0d5cf' - neutron-vpnaas-dashboard now supports all auth algorithms. neutron-vpnaas supports sha1, sha256, sha384, sha512 for IKE policy auth_algorithm and IPsec policy auth_algorithm. .. _neutron-vpnaas-dashboard_2.0.0: 2.0.0 ===== .. _neutron-vpnaas-dashboard_2.0.0_Upgrade Notes: Upgrade Notes ------------- .. releasenotes/notes/drop-py-2-7-bfbdac2889ac051a.yaml @ b'e4989797fbe23154104fc76e79f8ee95b53c83c2' - Python 2.7 support has been dropped. Last release of neutron-vpnaas- dashboard to support Python 2.7 is OpenStack Train. The minimum version of Python now supported by neutron-vpnaas-dashboard is Python 3.6. .. _neutron-vpnaas-dashboard_3.0.0: 3.0.0 ===== .. _neutron-vpnaas-dashboard_3.0.0_New Features: New Features ------------ .. releasenotes/notes/add-aggressive-negotiation-mode-ad665f5cfda2e08b.yaml @ b'484b57e43629fc3db68166fb6c1abe624a2e6a03' - The ``phase1 negotiation mode`` supports the ``aggressive`` option for IKE policy. .. _neutron-vpnaas-dashboard_7.0.0: 7.0.0 ===== .. _neutron-vpnaas-dashboard_7.0.0_Upgrade Notes: Upgrade Notes ------------- .. releasenotes/notes/drop-python-3-6-and-3-7-39c229fcb744870f.yaml @ b'cc67bcd40782a80620a36a2ae005532e3e03f257' - Python 3.6 & 3.7 support has been dropped. The minimum version of Python now supported is Python 3.8. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/babel-django.cfg0000664000175000017500000000005714750122063023207 0ustar00jamespagejamespage[python: **.py] [django: **/templates/**.html] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/babel-djangojs.cfg0000664000175000017500000000006114750122063023537 0ustar00jamespagejamespage[javascript: **.js] [angular: **/static/**.html] ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.377892 neutron_vpnaas_dashboard-11.1.0.dev3/deliverables/0000775000175000017500000000000014750123115022657 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3858922 neutron_vpnaas_dashboard-11.1.0.dev3/deliverables/pike/0000775000175000017500000000000014750123115023607 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/deliverables/pike/neutron-vpnaas-dashboard.yaml0000664000175000017500000000114314750122063031400 0ustar00jamespagejamespage--- launchpad: neutron-vpnaas-dashboard team: neutron release-notes: https://docs.openstack.org/releasenotes/neutron-vpnaas-dashboard/unreleased.html type: horizon-plugin release-model: cycle-with-intermediary releases: - version: 0.1.0 projects: - repo: openstack/neutron-vpnaas-dashboard hash: 4b578bae532cd6c3224d667360996c3d0365b7a0 highlights: '* Initial release after split out from horizon' - projects: - hash: 75a1da7e3062b4f350975cddc1884f7dccd5ab4f repo: openstack/neutron-vpnaas-dashboard version: 1.0.0 branches: - location: 0.1.0 name: stable/pike ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3858922 neutron_vpnaas_dashboard-11.1.0.dev3/deliverables/queens/0000775000175000017500000000000014750123115024157 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/deliverables/queens/neutron-vpnaas-dashboard.yaml0000664000175000017500000000040514750122063031750 0ustar00jamespagejamespage--- launchpad: neutron-vpnaas-dashboard team: neutron type: horizon-plugin release-model: cycle-with-intermediary releases: - projects: - hash: eedff691c05270e6dc01a4e51aa29507b214b634 repo: openstack/neutron-vpnaas-dashboard version: 1.1.0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3858922 neutron_vpnaas_dashboard-11.1.0.dev3/devstack/0000775000175000017500000000000014750123115022022 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/devstack/README.rst0000664000175000017500000000174214750122063023516 0ustar00jamespagejamespage============================================ DevStack plugin for neutron-vpnaas-dashboard ============================================ This is setup as a DevStack plugin. For more information on DevStack plugins, see the `DevStack Plugins documentation `__. How to enable VPNaaS dashboard ------------------------------ Add the following to the localrc section of your local.conf. You need to configure VPNaaS DevStack plugin as well. DevStack plugin for VPNaaS dashaboard is configured, ``neutron-vpnaas-dashboard`` service is automatically enabled. It is suggested to enable the DevStack plugin for neutron-vpnaas, if you run horizon and neutron-server on a same server like all-in-one environment. .. code-block:: none [[local|localrc]] enable_plugin neutron-vpnaas https://opendev.org/openstack/neutron-vpnaas master enable_plugin neutron-vpnaas-dashboard https://opendev.org/openstack/neutron-vpnaas-dashboard master ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/devstack/plugin.sh0000664000175000017500000000412314750122063023655 0ustar00jamespagejamespage# plugin.sh - DevStack plugin.sh dispatch script neutron-vpnaas-dashboard VPNAAS_DASHBOARD_DIR=$(cd $(dirname $BASH_SOURCE)/.. && pwd) VPNAAS_ENABLED_DIR=$VPNAAS_DASHBOARD_DIR/neutron_vpnaas_dashboard/enabled HORIZON_ENABLED_DIR=$DEST/horizon/openstack_dashboard/local/enabled function install_neutron_vpnaas_dashboard { setup_develop $VPNAAS_DASHBOARD_DIR } function configure_neutron_vpnaas_dashboard { cp -a $VPNAAS_ENABLED_DIR/_[0-9]*.py $HORIZON_ENABLED_DIR # NOTE: If locale directory does not exist, compilemessages will fail, # so check for an existence of locale directory is required. if [ -d $VPNAAS_DASHBOARD_DIR/neutron_vpnaas_dashboard/locale ]; then (cd $VPNAAS_DASHBOARD_DIR/neutron_vpnaas_dashboard; \ DJANGO_SETTINGS_MODULE=openstack_dashboard.settings $PYTHON ../manage.py compilemessages) fi } # check for service enabled if is_service_enabled neutron-vpnaas-dashboard; then if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then # Set up system services # no-op : elif [[ "$1" == "stack" && "$2" == "install" ]]; then # Perform installation of service source echo_summary "Installing Neutron VPNaaS Dashboard" install_neutron_vpnaas_dashboard elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then # Configure after the other layer 1 and 2 services have been configured echo_summary "Configurng Neutron VPNaaS Dashboard" configure_neutron_vpnaas_dashboard elif [[ "$1" == "stack" && "$2" == "extra" ]]; then # no-op : fi if [[ "$1" == "unstack" ]]; then # Remove enabled file(s) for _enabled_file in $VPNAAS_ENABLED_DIR/_[0-9]*.py; do _enabled_basename=$(basename $_enabled_file .py) rm -f $HORIZON_ENABLED_DIR/${_enabled_basename}.py* rm -f $HORIZON_ENABLED_DIR/__pycache__/${_enabled_basename}.*pyc done fi if [[ "$1" == "clean" ]]; then # Remove state and transient data # Remember clean.sh first calls unstack.sh # no-op : fi fi ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/devstack/settings0000664000175000017500000000013414750122063023604 0ustar00jamespagejamespage# settings file for neutron-vpnaas-dashboard plugin enable_service neutron-vpnaas-dashboard ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3858922 neutron_vpnaas_dashboard-11.1.0.dev3/doc/0000775000175000017500000000000014750123115020763 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/doc/requirements.txt0000664000175000017500000000045714750122063024256 0ustar00jamespagejamespage# The order of packages is significant, because pip processes them in the order # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. sphinx>=2.0.0,!=2.1.0 # BSD openstackdocstheme>=2.2.1 # Apache-2.0 reno>=3.1.0 # Apache-2.0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3858922 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/0000775000175000017500000000000014750123115022263 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/conf.py0000664000175000017500000001525214750122063023570 0ustar00jamespagejamespage# 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. # # Horizon documentation build configuration file, created by # sphinx-quickstart on Thu Oct 27 11:38:59 2011. # # 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. import os import sys PROJECT = 'neutron-vpnaas-dashboard' BASE_DIR = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.abspath(os.path.join(BASE_DIR, "..", "..")) sys.path.insert(0, ROOT) # 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 = [ 'sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.viewcode', 'reno.sphinxext', 'openstackdocstheme', ] # openstackdocstheme options openstackdocs_repo_name = 'openstack/neutron-vpnaas-dashboard' openstackdocs_pdf_link = True openstackdocs_auto_name = False openstackdocs_bug_project = 'neutron-vpnaas-dashboard' openstackdocs_bug_tag = 'doc' # 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 = u'Neutron VPNaaS Dashboard' copyright = u'2017, OpenStack Foundation' # 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 = ['neutron_vpnaas_dashboard.'] primary_domain = 'py' nitpicky = 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 = 'openstackdocs' # 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 = { "nosidebar": "false" } # 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 = [] # 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. # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # html_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. # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'neutronvpnaasdashboarddoc' # -- Options for LaTeX output ------------------------------------------------ latex_documents = [ ('index', 'doc-neutron-vpnaas-dashboard.tex', u'Neutron VPNaaS Dashboard Documentation', u'Neutron Contributors', 'howto'), ] ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3858922 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/configuration/0000775000175000017500000000000014750123115025132 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/configuration/index.rst0000664000175000017500000000177614750122063027007 0ustar00jamespagejamespage.. Copyright 2017 OpenStack Foundation All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ============= Configuration ============= Neutron VPNaaS dashboard has no configuration option. It checks if Neutron VPNaaS service is enabled in your neutron server and the VPNaaS panel is displayed if enabled. For more configurations, see `Deployment & Configuration `__ in the Horizon documentation. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3858922 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/contributor/0000775000175000017500000000000014750123115024635 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/contributor/devstack-plugin.rst0000664000175000017500000000005214750122063030465 0ustar00jamespagejamespage.. include:: ../../../devstack/README.rst ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/contributor/index.rst0000664000175000017500000000175714750122063026511 0ustar00jamespagejamespage.. Copyright 2017 OpenStack Foundation All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================= Contributor Guide ================= There is no topic specific to neutron-vpnaas-dashboard now. See `Horizon Developer Documents `__ for general topic on developing a dashboard on horizon. ---- .. toctree:: :maxdepth: 1 DevStack plugin ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/index.rst0000664000175000017500000000174214750122063024131 0ustar00jamespagejamespage.. Copyright 2017 OpenStack Foundation All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================ Neutron VPNaaS Dashboard Project ================================ Neutron VPNaaS Dashboard is a horizon plugin for Neutron VPNaaS. .. toctree:: :maxdepth: 1 install/index configuration/index contributor/index Release Notes ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.386892 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/install/0000775000175000017500000000000014750123115023731 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/doc/source/install/index.rst0000664000175000017500000000466514750122063025606 0ustar00jamespagejamespage.. Copyright 2017 OpenStack Foundation All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ============ Installation ============ Manual Installation ------------------- Before installing neutron-vpnaas-dashboard, you first need to install horizon in your environment. Fetch the source code from git and run pip install. Make sure to install neutron-vpnaas-dashboard into the same python environment where horizon is installed. .. code-block:: console $ git clone https://opendev.org/openstack/neutron-vpnaas-dashboard $ cd neutron-vpnaas-dashboard $ sudo pip install . Enable the horizon plugin. .. code-block:: console $ cp neutron_vpnaas_dashboard/enabled/_7100_project_vpn_panel.py \ /opt/stack/horizon/openstack_dashboard/local/enabled/_7100_project_vpn_panel.py .. note:: The directory ``local/enabled`` may be different depending on your environment or distribution used. For example, for Ubuntu, this is ``/usr/share/openstack-dashboard/openstack_dashboard/local/enabled``. .. note:: The number of the plugin enabled file determines the order of panels. If you would like to configure the place of the Neutron VPNaaS dashboard, change the number of the file. .. note:: For more detail of the horizon plugin settings, see `Pluggable Settings `__ in the horizon documentation. Compile the message catalogs of Neutron VPNaaS dashboard. .. code-block:: console $ cd neutron-vpnaas-dashboard $ ./manage.py compilemessages Run the Django update commands (if you use). .. code-block:: console $ DJANGO_SETTINGS_MODULE=openstack_dashboard.settings python manage.py collectstatic --noinput $ DJANGO_SETTINGS_MODULE=openstack_dashboard.settings python manage.py compress --force Restart Apache: .. code-block:: console $ sudo service apache2 restart ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/manage.py0000775000175000017500000000152014750122063022022 0ustar00jamespagejamespage#!/usr/bin/env python # 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 from django.core.management import execute_from_command_line # noqa if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "neutron_vpnaas_dashboard.test.settings") execute_from_command_line(sys.argv) ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.386892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/0000775000175000017500000000000014750123115025267 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/__init__.py0000664000175000017500000000000014750122063027367 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.387892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/api/0000775000175000017500000000000014750123115026040 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/api/__init__.py0000664000175000017500000000000014750122063030140 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/api/vpn.py0000664000175000017500000004236214750122063027225 0ustar00jamespagejamespage# Copyright 2013, Mirantis Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from collections import OrderedDict from horizon.utils.memoized import memoized from openstack_dashboard.api import neutron from openstack_dashboard.contrib.developer.profiler import api as profiler neutronclient = neutron.neutronclient class IKEPolicy(neutron.NeutronAPIDictWrapper): """Wrapper for neutron VPN IKE policy.""" class IPsecPolicy(neutron.NeutronAPIDictWrapper): """Wrapper for neutron VPN IPsec policy.""" class IPsecSiteConnection(neutron.NeutronAPIDictWrapper): """Wrapper for neutron IPsec site connection.""" class VPNService(neutron.NeutronAPIDictWrapper): """Wrapper for neutron VPN service.""" class EndpointGroup(neutron.NeutronAPIDictWrapper): """Wrapper for neutron Endpoint Group.""" @profiler.trace def vpnservice_create(request, **kwargs): """Create VPN service :param request: request context :param admin_state_up: admin state (default on) :param name: name for VPN service :param description: description for VPN service :param router_id: router id for router of VPN service :param subnet_id: subnet id for subnet of VPN service """ body = {'vpnservice': {'admin_state_up': kwargs['admin_state_up'], 'name': kwargs['name'], 'description': kwargs['description'], 'router_id': kwargs['router_id'] } } if kwargs.get('subnet_id'): body['vpnservice']['subnet_id'] = kwargs['subnet_id'] vpnservice = neutronclient(request).create_vpnservice(body).get( 'vpnservice') return VPNService(vpnservice) @profiler.trace def vpnservice_list(request, **kwargs): return _vpnservice_list(request, expand_subnet=True, expand_router=True, expand_conns=True, **kwargs) def _vpnservice_list(request, expand_subnet=False, expand_router=False, expand_conns=False, **kwargs): vpnservices = neutronclient(request).list_vpnservices( **kwargs).get('vpnservices') if expand_subnet: subnets = neutron.subnet_list(request) subnet_dict = OrderedDict((s.id, s) for s in subnets) for s in vpnservices: if s.get('subnet_id'): s['subnet_name'] = subnet_dict.get(s['subnet_id']).cidr if expand_router: routers = neutron.router_list(request) router_dict = OrderedDict((r.id, r) for r in routers) for s in vpnservices: s['router_name'] = router_dict.get(s['router_id']).name_or_id if expand_conns: ipsecsiteconns = _ipsecsiteconnection_list(request, **kwargs) for s in vpnservices: s['ipsecsiteconns'] = [c.id for c in ipsecsiteconns if c.vpnservice_id == s['id']] return [VPNService(v) for v in vpnservices] @profiler.trace def vpnservice_get(request, vpnservice_id): return _vpnservice_get(request, vpnservice_id, expand_subnet=True, expand_router=True, expand_conns=True) def _vpnservice_get(request, vpnservice_id, expand_subnet=False, expand_router=False, expand_conns=False): vpnservice = neutronclient(request).show_vpnservice(vpnservice_id).get( 'vpnservice') if expand_subnet and ('subnet_id' in vpnservice): if vpnservice['subnet_id'] is not None: vpnservice['subnet'] = neutron.subnet_get( request, vpnservice['subnet_id']) if expand_router: vpnservice['router'] = neutron.router_get( request, vpnservice['router_id']) if expand_conns: ipsecsiteconns = _ipsecsiteconnection_list(request) vpnservice['ipsecsiteconns'] = [c for c in ipsecsiteconns if c.vpnservice_id == vpnservice['id']] return VPNService(vpnservice) @profiler.trace def vpnservice_update(request, vpnservice_id, **kwargs): vpnservice = neutronclient(request).update_vpnservice( vpnservice_id, kwargs).get('vpnservice') return VPNService(vpnservice) @profiler.trace def vpnservice_delete(request, vpnservice_id): neutronclient(request).delete_vpnservice(vpnservice_id) @profiler.trace def endpointgroup_create(request, **kwargs): """Create Endpoint Group :param request: request context :param name: name for Endpoint Group :param description: description for Endpoint Group :param type: type of Endpoint Group :param endpoints: endpoint(s) of Endpoint Group """ body = {'endpoint_group': {'name': kwargs['name'], 'description': kwargs['description'], 'type': kwargs['type'], 'endpoints': kwargs['endpoints']} } endpointgroup = neutronclient(request).create_endpoint_group(body).get( 'endpoint_group') return EndpointGroup(endpointgroup) @profiler.trace def endpointgroup_list(request, **kwargs): return _endpointgroup_list(request, expand_conns=True, **kwargs) def _endpointgroup_list(request, expand_conns=False, **kwargs): endpointgroups = neutronclient(request).list_endpoint_groups( **kwargs).get('endpoint_groups') if expand_conns: ipsecsiteconns = _ipsecsiteconnection_list(request) for g in endpointgroups: g['ipsecsiteconns'] = [ c.id for c in ipsecsiteconns if (c.get('local_ep_group_id') == g['id'] or c.get('peer_ep_group_id') == g['id'])] return [EndpointGroup(v) for v in endpointgroups] @profiler.trace def endpointgroup_get(request, endpoint_group_id): return _endpointgroup_get(request, endpoint_group_id, expand_conns=True) def _endpointgroup_get(request, endpoint_group_id, expand_conns=False): endpointgroup = neutronclient(request).show_endpoint_group( endpoint_group_id).get('endpoint_group') if expand_conns: ipsecsiteconns = _ipsecsiteconnection_list(request) endpointgroup['ipsecsiteconns'] = [ c for c in ipsecsiteconns if (c.get('local_ep_group_id') == endpointgroup['id'] or c.get('peer_ep_group_id') == endpointgroup['id'])] return EndpointGroup(endpointgroup) @profiler.trace def endpointgroup_update(request, endpoint_group_id, **kwargs): endpointgroup = neutronclient(request).update_endpoint_group( endpoint_group_id, kwargs).get('endpoint_group') return EndpointGroup(endpointgroup) @profiler.trace def endpointgroup_delete(request, endpoint_group_id): neutronclient(request).delete_endpoint_group(endpoint_group_id) @profiler.trace def ikepolicy_create(request, **kwargs): """Create IKE policy :param request: request context :param name: name for IKE policy :param description: description for IKE policy :param auth_algorithm: authorization algorithm for IKE policy :param encryption_algorithm: encryption algorithm for IKE policy :param ike_version: IKE version for IKE policy :param lifetime: Lifetime Units and Value for IKE policy :param pfs: Perfect Forward Secrecy for IKE policy :param phase1_negotiation_mode: IKE Phase1 negotiation mode for IKE policy """ body = {'ikepolicy': {'name': kwargs['name'], 'description': kwargs['description'], 'auth_algorithm': kwargs['auth_algorithm'], 'encryption_algorithm': kwargs['encryption_algorithm'], 'ike_version': kwargs['ike_version'], 'lifetime': kwargs['lifetime'], 'pfs': kwargs['pfs'], 'phase1_negotiation_mode': kwargs['phase1_negotiation_mode']} } ikepolicy = neutronclient(request).create_ikepolicy(body).get( 'ikepolicy') return IKEPolicy(ikepolicy) @profiler.trace def ikepolicy_list(request, **kwargs): return _ikepolicy_list(request, expand_conns=True, **kwargs) def _ikepolicy_list(request, expand_conns=False, **kwargs): ikepolicies = neutronclient(request).list_ikepolicies( **kwargs).get('ikepolicies') if expand_conns: ipsecsiteconns = _ipsecsiteconnection_list(request, **kwargs) for p in ikepolicies: p['ipsecsiteconns'] = [c.id for c in ipsecsiteconns if c.ikepolicy_id == p['id']] return [IKEPolicy(v) for v in ikepolicies] @profiler.trace def ikepolicy_get(request, ikepolicy_id): return _ikepolicy_get(request, ikepolicy_id, expand_conns=True) def _ikepolicy_get(request, ikepolicy_id, expand_conns=False): ikepolicy = neutronclient(request).show_ikepolicy( ikepolicy_id).get('ikepolicy') if expand_conns: ipsecsiteconns = _ipsecsiteconnection_list(request) ikepolicy['ipsecsiteconns'] = [c for c in ipsecsiteconns if c.ikepolicy_id == ikepolicy['id']] return IKEPolicy(ikepolicy) @profiler.trace def ikepolicy_update(request, ikepolicy_id, **kwargs): ikepolicy = neutronclient(request).update_ikepolicy( ikepolicy_id, kwargs).get('ikepolicy') return IKEPolicy(ikepolicy) @profiler.trace def ikepolicy_delete(request, ikepolicy_id): neutronclient(request).delete_ikepolicy(ikepolicy_id) @profiler.trace def ipsecpolicy_create(request, **kwargs): """Create IPsec policy :param request: request context :param name: name for IPsec policy :param description: description for IPsec policy :param auth_algorithm: authorization algorithm for IPsec policy :param encapsulation_mode: encapsulation mode for IPsec policy :param encryption_algorithm: encryption algorithm for IPsec policy :param lifetime: Lifetime Units and Value for IPsec policy :param pfs: Perfect Forward Secrecy for IPsec policy :param transform_protocol: Transform Protocol for IPsec policy """ body = {'ipsecpolicy': {'name': kwargs['name'], 'description': kwargs['description'], 'auth_algorithm': kwargs['auth_algorithm'], 'encapsulation_mode': kwargs['encapsulation_mode'], 'encryption_algorithm': kwargs['encryption_algorithm'], 'lifetime': kwargs['lifetime'], 'pfs': kwargs['pfs'], 'transform_protocol': kwargs['transform_protocol']} } ipsecpolicy = neutronclient(request).create_ipsecpolicy(body).get( 'ipsecpolicy') return IPsecPolicy(ipsecpolicy) @profiler.trace def ipsecpolicy_list(request, **kwargs): return _ipsecpolicy_list(request, expand_conns=True, **kwargs) def _ipsecpolicy_list(request, expand_conns=False, **kwargs): ipsecpolicies = neutronclient(request).list_ipsecpolicies( **kwargs).get('ipsecpolicies') if expand_conns: ipsecsiteconns = _ipsecsiteconnection_list(request, **kwargs) for p in ipsecpolicies: p['ipsecsiteconns'] = [c.id for c in ipsecsiteconns if c.ipsecpolicy_id == p['id']] return [IPsecPolicy(v) for v in ipsecpolicies] @profiler.trace def ipsecpolicy_get(request, ipsecpolicy_id): return _ipsecpolicy_get(request, ipsecpolicy_id, expand_conns=True) def _ipsecpolicy_get(request, ipsecpolicy_id, expand_conns=False): ipsecpolicy = neutronclient(request).show_ipsecpolicy( ipsecpolicy_id).get('ipsecpolicy') if expand_conns: ipsecsiteconns = _ipsecsiteconnection_list(request) ipsecpolicy['ipsecsiteconns'] = [c for c in ipsecsiteconns if (c.ipsecpolicy_id == ipsecpolicy['id'])] return IPsecPolicy(ipsecpolicy) @profiler.trace def ipsecpolicy_update(request, ipsecpolicy_id, **kwargs): ipsecpolicy = neutronclient(request).update_ipsecpolicy( ipsecpolicy_id, kwargs).get('ipsecpolicy') return IPsecPolicy(ipsecpolicy) @profiler.trace def ipsecpolicy_delete(request, ipsecpolicy_id): neutronclient(request).delete_ipsecpolicy(ipsecpolicy_id) @profiler.trace def ipsecsiteconnection_create(request, **kwargs): """Create IPsec site connection :param request: request context :param name: name for IPsec site connection :param description: description for IPsec site connection :param dpd: dead peer detection action, interval and timeout :param ikepolicy_id: IKE policy associated with this connection :param initiator: initiator state :param ipsecpolicy_id: IPsecPolicy associated with this connection :param mtu: MTU size for the connection :param peer_address: Peer gateway public address :param peer_cidrs: remote subnet(s) in CIDR format :param peer_id: Peer router identity for authentication" :param psk: Pre-Shared Key string :param vpnservice_id: VPN service associated with this connection :param admin_state_up: admin state (default on) """ body = { 'name': kwargs['name'], 'description': kwargs['description'], 'dpd': kwargs['dpd'], 'ikepolicy_id': kwargs['ikepolicy_id'], 'initiator': kwargs['initiator'], 'ipsecpolicy_id': kwargs['ipsecpolicy_id'], 'mtu': kwargs['mtu'], 'peer_address': kwargs['peer_address'], 'peer_id': kwargs['peer_id'], 'psk': kwargs['psk'], 'vpnservice_id': kwargs['vpnservice_id'], 'admin_state_up': kwargs['admin_state_up'] } cidrs = kwargs.get('peer_cidrs', []) if not cidrs: body['local_ep_group_id'] = kwargs['local_ep_group_id'] body['peer_ep_group_id'] = kwargs['peer_ep_group_id'] else: body['peer_cidrs'] = kwargs['peer_cidrs'] ipsecsiteconnection = neutronclient(request).create_ipsec_site_connection( {'ipsec_site_connection': body}).get('ipsec_site_connection') return IPsecSiteConnection(ipsecsiteconnection) @profiler.trace @memoized def ipsecsiteconnection_list(request, **kwargs): return _ipsecsiteconnection_list(request, expand_ikepolicies=True, expand_ipsecpolicies=True, expand_vpnservices=True, **kwargs) @memoized def _ipsecsiteconnection_list(request, expand_ikepolicies=False, expand_ipsecpolicies=False, expand_vpnservices=False, **kwargs): ipsecsiteconnections = neutronclient(request).list_ipsec_site_connections( **kwargs).get('ipsec_site_connections') if expand_ikepolicies: ikepolicies = _ikepolicy_list(request) policy_dict = OrderedDict((p.id, p) for p in ikepolicies) for c in ipsecsiteconnections: c['ikepolicy_name'] = policy_dict.get(c['ikepolicy_id']).name_or_id if expand_ipsecpolicies: ipsecpolicies = _ipsecpolicy_list(request) policy_dict = OrderedDict((p.id, p) for p in ipsecpolicies) for c in ipsecsiteconnections: c['ipsecpolicy_name'] = policy_dict.get(c['ipsecpolicy_id'] ).name_or_id if expand_vpnservices: vpnservices = _vpnservice_list(request) service_dict = OrderedDict((s.id, s) for s in vpnservices) for c in ipsecsiteconnections: c['vpnservice_name'] = service_dict.get(c['vpnservice_id'] ).name_or_id return [IPsecSiteConnection(v) for v in ipsecsiteconnections] @profiler.trace def ipsecsiteconnection_get(request, ipsecsiteconnection_id): return _ipsecsiteconnection_get(request, ipsecsiteconnection_id, expand_ikepolicies=True, expand_ipsecpolicies=True, expand_vpnservices=True) def _ipsecsiteconnection_get(request, ipsecsiteconnection_id, expand_ikepolicies, expand_ipsecpolicies, expand_vpnservices): ipsecsiteconnection = neutronclient(request).show_ipsec_site_connection( ipsecsiteconnection_id).get('ipsec_site_connection') if expand_ikepolicies: ipsecsiteconnection['ikepolicy'] = _ikepolicy_get( request, ipsecsiteconnection['ikepolicy_id']) if expand_ipsecpolicies: ipsecsiteconnection['ipsecpolicy'] = _ipsecpolicy_get( request, ipsecsiteconnection['ipsecpolicy_id']) if expand_vpnservices: ipsecsiteconnection['vpnservice'] = _vpnservice_get( request, ipsecsiteconnection['vpnservice_id']) return IPsecSiteConnection(ipsecsiteconnection) @profiler.trace def ipsecsiteconnection_update(request, ipsecsiteconnection_id, **kwargs): ipsecsiteconnection = neutronclient(request).update_ipsec_site_connection( ipsecsiteconnection_id, kwargs).get('ipsec_site_connection') return IPsecSiteConnection(ipsecsiteconnection) @profiler.trace def ipsecsiteconnection_delete(request, ipsecsiteconnection_id): neutronclient(request).delete_ipsec_site_connection(ipsecsiteconnection_id) ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.387892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/0000775000175000017500000000000014750123115027401 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/__init__.py0000664000175000017500000000000014750122063031501 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.387892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/0000775000175000017500000000000014750123115031047 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/__init__.py0000664000175000017500000000000014750122063033147 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3888922 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/0000775000175000017500000000000014750123115031652 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/__init__.py0000664000175000017500000000000014750122063033752 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/forms.py0000664000175000017500000003617014750122063033362 0ustar00jamespagejamespage# Copyright 2013, Mirantis Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. import logging from django.urls import reverse from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import forms from horizon import messages from neutron_vpnaas_dashboard.api import vpn as api_vpn LOG = logging.getLogger(__name__) class UpdateVPNService(forms.SelfHandlingForm): name = forms.CharField(max_length=80, label=_("Name"), required=False) description = forms.CharField( required=False, max_length=80, label=_("Description")) admin_state_up = forms.BooleanField(label=_("Enable Admin State"), required=False) failure_url = 'horizon:project:vpn:index' def handle(self, request, context): try: data = {'vpnservice': {'name': context['name'], 'description': context['description'], 'admin_state_up': context['admin_state_up'], }} vpnservice = api_vpn.vpnservice_update( request, self.initial['vpnservice_id'], **data) msg = (_('VPN service %s was successfully updated.') % context['name']) messages.success(request, msg) return vpnservice except Exception as e: LOG.info('Failed to update VPN service %(id)s: %(exc)s', {'id': self.initial['vpnservice_id'], 'exc': e}) msg = _('Failed to update VPN service %s') % context['name'] redirect = reverse(self.failure_url) exceptions.handle(request, msg, redirect=redirect) class UpdateEndpointGroup(forms.SelfHandlingForm): name = forms.CharField( max_length=80, label=_("Name"), required=False) description = forms.CharField( required=False, max_length=80, label=_("Description")) failure_url = 'horizon:project:vpn:index' def handle(self, request, context): try: data = {'endpoint_group': {'name': context['name'], 'description': context['description']} } endpointgroup = api_vpn.endpointgroup_update( request, self.initial['endpoint_group_id'], **data) msg = (_('Endpoint group %s was successfully updated.') % context['name']) messages.success(request, msg) return endpointgroup except Exception as e: LOG.info('Failed to update endpoint group %(id)s: %(exc)s', {'id': self.initial['endpoint_group_id'], 'exc': e}) msg = _('Failed to update endpoint group %s') % context['name'] redirect = reverse(self.failure_url) exceptions.handle(request, msg, redirect=redirect) class UpdateIKEPolicy(forms.SelfHandlingForm): name = forms.CharField(max_length=80, label=_("Name"), required=False) description = forms.CharField( required=False, max_length=80, label=_("Description")) auth_algorithm = forms.ThemableChoiceField( label=_("Authorization algorithm"), choices=[('sha1', _('sha1')), ('sha256', _('sha256')), ('sha384', _('sha384')), ('sha512', _('sha512'))], required=False) encryption_algorithm = forms.ThemableChoiceField( label=_("Encryption algorithm"), choices=[('3des', _('3des')), ('aes-128', _('aes-128')), ('aes-192', _('aes-192')), ('aes-256', _('aes-256'))], required=False) ike_version = forms.ThemableChoiceField( label=_("IKE version"), choices=[('v1', _('v1')), ('v2', _('v2'))], required=False) # Currently this field has only one choice, so mark it as readonly. lifetime_units = forms.ThemableChoiceField( label=_("Lifetime units for IKE keys"), choices=[('seconds', _('seconds'))], widget=forms.TextInput(attrs={'readonly': 'readonly'}), required=False) lifetime_value = forms.IntegerField( min_value=60, label=_("Lifetime value for IKE keys"), help_text=_("Equal to or greater than 60"), required=False) pfs = forms.ThemableChoiceField( label=_("Perfect Forward Secrecy"), choices=[('group2', _('group2')), ('group5', _('group5')), ('group14', _('group14'))], required=False) phase1_negotiation_mode = forms.ThemableChoiceField( label=_("IKE Phase1 negotiation mode"), choices=[('main', 'main'), ('aggressive', 'aggressive')], required=False) failure_url = 'horizon:project:vpn:index' def handle(self, request, context): try: data = {'ikepolicy': {'name': context['name'], 'description': context['description'], 'auth_algorithm': context['auth_algorithm'], 'encryption_algorithm': context['encryption_algorithm'], 'ike_version': context['ike_version'], 'lifetime': {'units': context['lifetime_units'], 'value': context['lifetime_value']}, 'pfs': context['pfs'], 'phase1_negotiation_mode': context['phase1_negotiation_mode'], }} ikepolicy = api_vpn.ikepolicy_update( request, self.initial['ikepolicy_id'], **data) msg = (_('IKE policy %s was successfully updated.') % context['name']) messages.success(request, msg) return ikepolicy except Exception as e: LOG.info('Failed to update IKE policy %(id)s: %(exc)s', {'id': self.initial['ikepolicy_id'], 'exc': e}) msg = _('Failed to update IKE policy %s') % context['name'] redirect = reverse(self.failure_url) exceptions.handle(request, msg, redirect=redirect) class UpdateIPsecPolicy(forms.SelfHandlingForm): name = forms.CharField(max_length=80, label=_("Name"), required=False) description = forms.CharField( required=False, max_length=80, label=_("Description")) # Currently this field has only one choice, so mark it as readonly. auth_algorithm = forms.ThemableChoiceField( label=_("Authorization algorithm"), choices=[('sha1', _('sha1')), ('sha256', _('sha256')), ('sha384', _('sha384')), ('sha512', _('sha512'))], required=False) encapsulation_mode = forms.ThemableChoiceField( label=_("Encapsulation mode"), choices=[('tunnel', _('tunnel')), ('transport', _('transport'))], required=False) encryption_algorithm = forms.ThemableChoiceField( label=_("Encryption algorithm"), choices=[('3des', _('3des')), ('aes-128', _('aes-128')), ('aes-192', _('aes-192')), ('aes-256', _('aes-256'))], required=False) # Currently this field has only one choice, so mark it as readonly. lifetime_units = forms.ThemableChoiceField( label=_("Lifetime units"), choices=[('seconds', _('seconds'))], widget=forms.TextInput(attrs={'readonly': 'readonly'}), required=False) lifetime_value = forms.IntegerField( min_value=60, label=_("Lifetime value"), help_text=_("Equal to or greater than 60"), required=False) pfs = forms.ThemableChoiceField( label=_("Perfect Forward Secrecy"), choices=[('group2', _('group2')), ('group5', _('group5')), ('group14', _('group14'))], required=False) transform_protocol = forms.ThemableChoiceField( label=_("Transform Protocol"), choices=[('esp', _('esp')), ('ah', _('ah')), ('ah-esp', _('ah-esp'))], required=False) failure_url = 'horizon:project:vpn:index' def handle(self, request, context): try: data = {'ipsecpolicy': {'name': context['name'], 'description': context['description'], 'auth_algorithm': context['auth_algorithm'], 'encapsulation_mode': context['encapsulation_mode'], 'encryption_algorithm': context['encryption_algorithm'], 'lifetime': {'units': context['lifetime_units'], 'value': context['lifetime_value']}, 'pfs': context['pfs'], 'transform_protocol': context['transform_protocol'], }} ipsecpolicy = api_vpn.ipsecpolicy_update( request, self.initial['ipsecpolicy_id'], **data) msg = (_('IPsec policy %s was successfully updated.') % context['name']) messages.success(request, msg) return ipsecpolicy except Exception as e: LOG.info('Failed to update IPsec policy %(id)s: %(exc)s', {'id': self.initial['ipsecpolicy_id'], 'exc': e}) msg = _('Failed to update IPsec policy %s') % context['name'] redirect = reverse(self.failure_url) exceptions.handle(request, msg, redirect=redirect) class UpdateIPsecSiteConnection(forms.SelfHandlingForm): name = forms.CharField(max_length=80, label=_("Name"), required=False) description = forms.CharField( required=False, max_length=80, label=_("Description")) peer_address = forms.CharField( label=_("Peer gateway public IPv4/IPv6 Address or FQDN"), help_text=_("Peer gateway public IPv4/IPv6 address or FQDN for " "the VPN Connection"),) peer_id = forms.CharField( label=_("Peer router identity for authentication (Peer ID)"), help_text=_("Peer router identity for authentication. " "Can be IPv4/IPv6 address, e-mail, key ID, or FQDN"),) peer_cidrs = forms.MultiIPField( required=False, label=_("Remote peer subnet(s)"), help_text=_("Remote peer subnet(s) address(es) " "with mask(s) in CIDR format " "separated with commas if needed " "(e.g. 20.1.0.0/24, 21.1.0.0/24)"), version=forms.IPv4 | forms.IPv6, mask=True) local_ep_group_id = forms.CharField( required=False, label=_("Local Endpoint Group(s)"), help_text=_("IPsec connection validation requires " "that local endpoints are subnets")) peer_ep_group_id = forms.CharField( required=False, label=_("Peer Endpoint Group(s)"), help_text=_("IPsec connection validation requires " "that peer endpoints are CIDRs")) psk = forms.CharField( widget=forms.PasswordInput(render_value=True), max_length=80, label=_("Pre-Shared Key (PSK) string")) mtu = forms.IntegerField( min_value=68, required=False, label=_("Maximum Transmission Unit size for the connection"), help_text=_("Equal to or greater than 68 if the local subnet is IPv4. " "Equal to or greater than 1280 if the local subnet " "is IPv6.")) dpd_action = forms.ThemableChoiceField( label=_("Dead peer detection actions"), required=False, choices=[('hold', _('hold')), ('clear', _('clear')), ('disabled', _('disabled')), ('restart', _('restart')), ('restart-by-peer', _('restart-by-peer'))]) dpd_interval = forms.IntegerField( min_value=1, required=False, label=_("Dead peer detection interval"), help_text=_("Valid integer lesser than the DPD timeout")) dpd_timeout = forms.IntegerField( min_value=1, required=False, label=_("Dead peer detection timeout"), help_text=_("Valid integer greater than the DPD interval")) initiator = forms.ThemableChoiceField( label=_("Initiator state"), required=False, choices=[('bi-directional', _('bi-directional')), ('response-only', _('response-only'))]) admin_state_up = forms.BooleanField(label=_("Enable Admin State"), required=False) failure_url = 'horizon:project:vpn:index' def clean(self): cleaned_data = super(UpdateIPsecSiteConnection, self).clean() interval = cleaned_data.get('dpd_interval') timeout = cleaned_data.get('dpd_timeout') if not interval < timeout: msg = _("DPD Timeout must be greater than DPD Interval") self._errors['dpd_timeout'] = self.error_class([msg]) return cleaned_data def handle(self, request, context): try: data = { 'name': context['name'], 'description': context['description'], 'peer_address': context['peer_address'], 'peer_id': context['peer_id'], 'psk': context['psk'], 'mtu': context['mtu'], 'dpd': {'action': context['dpd_action'], 'interval': context['dpd_interval'], 'timeout': context['dpd_timeout']}, 'initiator': context['initiator'], 'admin_state_up': context['admin_state_up'] } if not context['peer_cidrs']: data['local_ep_group_id'] = context['local_ep_group_id'] data['peer_ep_group_id'] = context['peer_ep_group_id'] else: cidrs = context['peer_cidrs'] data['peer_cidrs'] = [cidr.strip() for cidr in cidrs.split(',') if cidr.strip()] ipsecsiteconnection = api_vpn.ipsecsiteconnection_update( request, self.initial['ipsecsiteconnection_id'], ipsec_site_connection=data) msg = (_('IPsec site connection %s was successfully updated.') % context['name']) messages.success(request, msg) return ipsecsiteconnection except Exception as e: LOG.info('Failed to update IPsec site connection %(id)s: %(exc)s', {'id': self.initial['ipsecsiteconnection_id'], 'exc': e}) msg = (_('Failed to update IPsec site connection %s') % context['name']) redirect = reverse(self.failure_url) exceptions.handle(request, msg, redirect=redirect) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/panel.py0000664000175000017500000000315014750122063033323 0ustar00jamespagejamespage# Copyright 2013, Mirantis Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. import logging from django.utils.translation import gettext_lazy as _ import horizon from openstack_dashboard.api import neutron LOG = logging.getLogger(__name__) class VPN(horizon.Panel): name = _("VPN") slug = 'vpn' permissions = ('openstack.services.network',) def allowed(self, context): request = context['request'] if not request.user.has_perms(self.permissions): return False try: if not neutron.is_service_enabled(request, config_name='enable_vpn', ext_name='vpnaas'): return False except Exception: LOG.error("Call to list enabled services failed. This is likely " "due to a problem communicating with the Neutron " "endpoint. VPN panel will not be displayed.") return False if not super(VPN, self).allowed(context): return False return True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/tables.py0000664000175000017500000004534614750122063033513 0ustar00jamespagejamespage# Copyright 2013, Mirantis Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from django import template from django.urls import reverse from django.utils.translation import gettext_lazy as _ from django.utils.translation import ngettext_lazy from django.utils.translation import pgettext_lazy from horizon import exceptions from horizon import tables from openstack_dashboard import policy from neutron_vpnaas_dashboard.api import vpn as api_vpn forbid_updates = set(["PENDING_CREATE", "PENDING_UPDATE", "PENDING_DELETE"]) class AddIKEPolicyLink(tables.LinkAction): name = "addikepolicy" verbose_name = _("Add IKE Policy") url = "horizon:project:vpn:addikepolicy" classes = ("ajax-modal",) icon = "plus" policy_rules = (("network", "create_ikepolicy"),) class AddIPsecPolicyLink(tables.LinkAction): name = "addipsecpolicy" verbose_name = _("Add IPsec Policy") url = "horizon:project:vpn:addipsecpolicy" classes = ("ajax-modal",) icon = "plus" policy_rules = (("network", "create_ipsecpolicy"),) class AddVPNServiceLink(tables.LinkAction): name = "addvpnservice" verbose_name = _("Add VPN Service") url = "horizon:project:vpn:addvpnservice" classes = ("ajax-modal",) icon = "plus" policy_rules = (("network", "create_vpnservice"),) class AddEndpointGroupLink(tables.LinkAction): name = "addendpointgroup" verbose_name = _("Add Endpoint Group") url = "horizon:project:vpn:addendpointgroup" classes = ("ajax-modal",) icon = "plus" policy_rules = (("network", "create_endpointgroup"),) class AddIPsecSiteConnectionLink(tables.LinkAction): name = "addipsecsiteconnection" verbose_name = _("Add IPsec Site Connection") url = "horizon:project:vpn:addipsecsiteconnection" classes = ("ajax-modal",) icon = "plus" policy_rules = (("network", "create_ipsec_site_connection"),) class DeleteVPNServiceLink(policy.PolicyTargetMixin, tables.DeleteAction): name = "deletevpnservice" policy_rules = (("network", "delete_vpnservice"),) @staticmethod def action_present(count): return ngettext_lazy( u"Delete VPN Service", u"Delete VPN Services", count ) @staticmethod def action_past(count): return ngettext_lazy( u"Scheduled deletion of VPN service", u"Scheduled deletion of VPN services", count ) def allowed(self, request, datum=None): if datum and datum.ipsecsiteconns: return False return True def delete(self, request, obj_id): try: api_vpn.vpnservice_delete(request, obj_id) except Exception: exceptions.handle( request, _('Unable to delete VPN service.')) class DeleteEndpointGroupLink(policy.PolicyTargetMixin, tables.DeleteAction): name = "deleteendpointgroup" policy_rules = (("network", "delete_endpointgroup"),) @staticmethod def action_present(count): return ngettext_lazy( u"Delete Endpoint Group", u"Delete Endpoint Groups", count ) @staticmethod def action_past(count): return ngettext_lazy( u"Scheduled deletion of endpoint group", u"Scheduled deletion of endpoint groups", count ) def delete(self, request, obj_id): try: api_vpn.endpointgroup_delete(request, obj_id) except Exception: exceptions.handle( request, _('Unable to delete endpoint group.')) class DeleteIKEPolicyLink(policy.PolicyTargetMixin, tables.DeleteAction): name = "deleteikepolicy" policy_rules = (("network", "delete_ikepolicy"),) @staticmethod def action_present(count): return ngettext_lazy( u"Delete IKE Policy", u"Delete IKE Policies", count ) @staticmethod def action_past(count): return ngettext_lazy( u"Scheduled deletion of IKE policy", u"Scheduled deletion of IKE policies", count ) def allowed(self, request, datum=None): if datum and datum.ipsecsiteconns: return False return True def delete(self, request, obj_id): try: api_vpn.ikepolicy_delete(request, obj_id) except Exception: exceptions.handle( request, _('Unable to delete IKE policy.')) class DeleteIPsecPolicyLink(policy.PolicyTargetMixin, tables.DeleteAction): name = "deleteipsecpolicy" policy_rules = (("network", "delete_ipsecpolicy"),) @staticmethod def action_present(count): return ngettext_lazy( u"Delete IPsec Policy", u"Delete IPsec Policies", count ) @staticmethod def action_past(count): return ngettext_lazy( u"Scheduled deletion of IPsec policy", u"Scheduled deletion of IPsec policies", count ) def allowed(self, request, datum=None): if datum and datum.ipsecsiteconns: return False return True def delete(self, request, obj_id): try: api_vpn.ipsecpolicy_delete(request, obj_id) except Exception: exceptions.handle( request, _('Unable to delete IPsec policy.')) class DeleteIPsecSiteConnectionLink(policy.PolicyTargetMixin, tables.DeleteAction): name = "deleteipsecsiteconnection" policy_rules = (("network", "delete_ipsec_site_connection"),) @staticmethod def action_present(count): return ngettext_lazy( u"Delete IPsec Site Connection", u"Delete IPsec Site Connections", count ) @staticmethod def action_past(count): return ngettext_lazy( u"Scheduled deletion of IPsec site connection", u"Scheduled deletion of IPsec site connections", count ) def delete(self, request, obj_id): try: api_vpn.ipsecsiteconnection_delete(request, obj_id) except Exception: exceptions.handle(request, _('Unable to delete IPsec site connection.')) class UpdateVPNServiceLink(tables.LinkAction): name = "update_vpnservice" verbose_name = _("Edit VPN Service") classes = ("ajax-modal", "btn-update",) policy_rules = (("network", "update_vpnservice"),) def get_link_url(self, vpnservice): return reverse("horizon:project:vpn:update_vpnservice", kwargs={'vpnservice_id': vpnservice.id}) def allowed(self, request, datum=None): if datum and datum.status not in forbid_updates: return True return False class UpdateEndpointGroupLink(tables.LinkAction): name = "updateendpointgroup" verbose_name = _("Edit Endpoint Group") classes = ("ajax-modal", "btn-update",) policy_rules = (("network", "update_endpointgroup"),) def get_link_url(self, endpoint_group): return reverse("horizon:project:vpn:update_endpointgroup", kwargs={'endpoint_group_id': endpoint_group.id}) class UpdateIKEPolicyLink(tables.LinkAction): name = "updateikepolicy" verbose_name = _("Edit IKE Policy") classes = ("ajax-modal", "btn-update",) policy_rules = (("network", "update_ikepolicy"),) def get_link_url(self, ikepolicy): return reverse("horizon:project:vpn:update_ikepolicy", kwargs={'ikepolicy_id': ikepolicy.id}) def allowed(self, request, datum=None): return not datum['ipsecsiteconns'] class UpdateIPsecPolicyLink(tables.LinkAction): name = "updateipsecpolicy" verbose_name = _("Edit IPsec Policy") classes = ("ajax-modal", "btn-update",) policy_rules = (("network", "update_ipsecpolicy"),) def get_link_url(self, ipsecpolicy): return reverse("horizon:project:vpn:update_ipsecpolicy", kwargs={'ipsecpolicy_id': ipsecpolicy.id}) def allowed(self, request, datum=None): return not datum['ipsecsiteconns'] class UpdateIPsecSiteConnectionLink(tables.LinkAction): name = "updateipsecsiteconnection" verbose_name = _("Edit Connection") classes = ("ajax-modal", "btn-update",) policy_rules = (("network", "update_ipsec_site_connection"),) def get_link_url(self, ipsecsiteconnection): return reverse("horizon:project:vpn:update_ipsecsiteconnection", kwargs={'ipsecsiteconnection_id': ipsecsiteconnection.id}) def allowed(self, request, datum=None): if datum and datum.status not in forbid_updates: return True return False STATUS_CHOICES = ( ("active", True), ("down", True), ("created", True), ("error", False), ("inactive", False), ) STATUS_DISPLAY_CHOICES = ( ("active", pgettext_lazy("Current status of an IPsec site connection " "and VPN service", u"Active")), ("down", pgettext_lazy("Current status of an IPsec site connection " "and VPN service", u"Down")), ("error", pgettext_lazy("Current status of an IPsec site connection " "and VPN service", u"Error")), ("created", pgettext_lazy("Current status of an IPsec site connection " "and VPN service", u"Created")), ("pending_create", pgettext_lazy("Current status of an " "IPsec site connection and VPN service", u"Pending Create")), ("pending_update", pgettext_lazy("Current status of an " "IPsec site connection and VPN service", u"Pending Update")), ("pending_delete", pgettext_lazy("Current status of an " "IPsec site connection and VPN service", u"Pending Delete")), ("inactive", pgettext_lazy("Current status of an IPsec site connection " "and VPN service", u"Inactive")), ) class UpdateIPsecSiteConnectionRow(tables.Row): ajax = True def get_data(self, request, conn_id): conn = api_vpn.ipsecsiteconnection_get(request, conn_id) conn.ikepolicy_name = conn['ikepolicy'].get('name', conn['ikepolicy_id']) conn.ipsecpolicy_name = conn['ipsecpolicy'].get('name', conn['ipsecpolicy_id']) conn.vpnservice_name = conn['vpnservice'].get('name', conn['vpnservice_id']) return conn class IPSSCFilterAction(tables.FilterAction): name = 'IPSSC_project_IKEPolicies' filter_type = 'server' filter_choices = ( ('name', _("Name ="), True), ('vpnservice', _("VPN Service ="), True), ('vpnservice_id', _("VPN Service ID ="), True), ('ikepolicy', _("IKE Policy ="), True), ('ikepolicy_id', _("IKE Policy ID ="), True), ('ipsecpolicy', _("IPsec Policy ="), True), ('ipsecpolicy_id', _("IPsec Policy ID ="), True), ('status', _("Status ="), True) ) class IPsecSiteConnectionsTable(tables.DataTable): name = tables.Column('name_or_id', verbose_name=_('Name'), link="horizon:project:vpn:ipsecsiteconnectiondetails") description = tables.Column('description', verbose_name=_('Description')) vpnservice_name = tables.Column('vpnservice_name', verbose_name=_('VPN Service')) ikepolicy_name = tables.Column('ikepolicy_name', verbose_name=_('IKE Policy')) ipsecpolicy_name = tables.Column('ipsecpolicy_name', verbose_name=_('IPsec Policy')) status = tables.Column("status", verbose_name=_("Status"), status=True, status_choices=STATUS_CHOICES, display_choices=STATUS_DISPLAY_CHOICES) def get_object_display(self, ipsecsiteconnection): return ipsecsiteconnection.name_or_id class Meta(object): name = "ipsecsiteconnectionstable" verbose_name = _("IPsec Site Connections") status_columns = ['status'] row_class = UpdateIPsecSiteConnectionRow table_actions = (AddIPsecSiteConnectionLink, DeleteIPsecSiteConnectionLink, IPSSCFilterAction) row_actions = (UpdateIPsecSiteConnectionLink, DeleteIPsecSiteConnectionLink) def get_local_ips(vpn): template_name = 'project/vpn/_vpn_ips.html' context = {"external_v4_ip": vpn.get('external_v4_ip'), "external_v6_ip": vpn.get('external_v6_ip')} return template.loader.render_to_string(template_name, context) def get_subnet_name(vpn): try: return vpn.subnet_name except AttributeError: return _("-") class UpdateVPNServiceRow(tables.Row): ajax = True def get_data(self, request, vpn_id): vpn = api_vpn.vpnservice_get(request, vpn_id) vpn.router_name = vpn['router'].get('name', vpn['router_id']) if 'subnet' in vpn: vpn.subnet_name = vpn['subnet'].get('cidr', vpn['subnet_id']) return vpn class VPNServicesFilterAction(tables.FilterAction): name = 'vpnservices_project_IKEPolicies' filter_type = 'server' filter_choices = ( ('name', _("Name ="), True), ('subnet_id', _("Subnet ID ="), True), ('subnet_name', _("Subnet ="), True), ('router_id', _("Router ID ="), True), ('router_name', _("Router ="), True), ) class VPNServicesTable(tables.DataTable): name = tables.Column("name_or_id", verbose_name=_('Name'), link="horizon:project:vpn:vpnservicedetails") description = tables.Column('description', verbose_name=_('Description')) local_ips = tables.Column(get_local_ips, verbose_name=_("Local Side Public IPs")) subnet_name = tables.Column(get_subnet_name, verbose_name=_('Subnet')) router_name = tables.Column('router_name', verbose_name=_('Router')) status = tables.Column("status", verbose_name=_("Status")) def get_object_display(self, vpnservice): return vpnservice.name_or_id class Meta(object): name = "vpnservicestable" verbose_name = _("VPN Services") status_columns = ['status'] row_class = UpdateVPNServiceRow table_actions = (AddVPNServiceLink, DeleteVPNServiceLink, VPNServicesFilterAction) row_actions = (UpdateVPNServiceLink, DeleteVPNServiceLink) class EndpointGroupFilterAction(tables.FilterAction): name = 'endpointgroups_project' filter_type = 'server' filter_choices = ( ('name', _("Name ="), True), ('type', _("Type ="), True), ('endpoints', _("Endpoints ="), True), ) def _get_endpoints(epg): return ', '.join(epg.endpoints) class EndpointGroupTable(tables.DataTable): name = tables.Column("name_or_id", verbose_name=_('Name'), link="horizon:project:vpn:endpointgroupdetails") description = tables.Column('description', verbose_name=_('Description')) type = tables.Column('type', verbose_name=_('Type')) endpoints = tables.Column(_get_endpoints, verbose_name=_('Endpoints')) class Meta(object): name = "endpointgroupstable" verbose_name = _("Endpoint Groups") table_actions = (AddEndpointGroupLink, DeleteEndpointGroupLink, EndpointGroupFilterAction) row_actions = (UpdateEndpointGroupLink, DeleteEndpointGroupLink) def get_object_display(self, endpoitgroup): return endpoitgroup.name_or_id class PoliciesFilterAction(tables.FilterAction): name = 'filter_project_IKEPolicies' filter_type = 'server' filter_choices = ( ('name', _("Name ="), True), ('auth_algorithm', _("Authorization algorithm ="), True), ('encryption_algorithm', _("Encryption algorithm ="), True), ('pfs', _("PFS ="), True), ) class IKEPoliciesTable(tables.DataTable): name = tables.Column("name_or_id", verbose_name=_('Name'), link="horizon:project:vpn:ikepolicydetails") description = tables.Column('description', verbose_name=_('Description')) auth_algorithm = tables.Column('auth_algorithm', verbose_name=_('Authorization algorithm')) encryption_algorithm = tables.Column( 'encryption_algorithm', verbose_name=_('Encryption algorithm')) pfs = tables.Column("pfs", verbose_name=_('PFS')) def get_object_display(self, ikepolicy): return ikepolicy.name_or_id class Meta(object): name = "ikepoliciestable" verbose_name = _("IKE Policies") table_actions = (AddIKEPolicyLink, DeleteIKEPolicyLink, PoliciesFilterAction) row_actions = (UpdateIKEPolicyLink, DeleteIKEPolicyLink) class IPsecPoliciesTable(tables.DataTable): name = tables.Column("name_or_id", verbose_name=_('Name'), link="horizon:project:vpn:ipsecpolicydetails") description = tables.Column('description', verbose_name=_('Description')) auth_algorithm = tables.Column('auth_algorithm', verbose_name=_('Authorization algorithm')) encryption_algorithm = tables.Column( 'encryption_algorithm', verbose_name=_('Encryption algorithm')) pfs = tables.Column("pfs", verbose_name=_('PFS')) def get_object_display(self, ipsecpolicy): return ipsecpolicy.name_or_id class Meta(object): name = "ipsecpoliciestable" verbose_name = _("IPsec Policies") table_actions = (AddIPsecPolicyLink, DeleteIPsecPolicyLink, PoliciesFilterAction) row_actions = (UpdateIPsecPolicyLink, DeleteIPsecPolicyLink) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/tabs.py0000664000175000017500000002415714750122063033167 0ustar00jamespagejamespage# Copyright 2013, Mirantis Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import tables as htables from horizon import tabs from openstack_dashboard import api from neutron_vpnaas_dashboard.api import vpn as api_vpn from neutron_vpnaas_dashboard.dashboards.project.vpn import tables class IPsecSiteConnectionsTab(tabs.TableTab, htables.DataTableView): table_classes = (tables.IPsecSiteConnectionsTable,) name = _("IPsec Site Connections") slug = "ipsecsiteconnections" template_name = ("horizon/common/_detail_table.html") FILTERS_MAPPING = {'admin_state_up': {_("up"): True, _("down"): False}} def get_ipsecsiteconnectionstable_data(self): try: filters = self.get_filters() tenant_id = self.request.user.tenant_id if 'vpnservice' in filters: filters['vpnservice_id'] = \ [v.id for v in api_vpn.vpnservice_list( self.tab_group.request, tenant_id=tenant_id, name=filters['vpnservice'])] del filters['vpnservice'] if 'ikepolicy' in filters: filters['ikepolicy_id'] = \ [i.id for i in api_vpn.ikepolicy_list( self.tab_group.request, tenant_id=tenant_id, name=filters['ikepolicy'])] del filters['ikepolicy'] if 'ipsecpolicy' in filters: filters['ipsecpolicy_id'] = \ [i.id for i in api_vpn.ipsecpolicy_list( self.tab_group.request, tenant_id=tenant_id, name=filters['ipsecpolicy'])] del filters['ipsecpolicy'] ipsecsiteconnections = api_vpn.ipsecsiteconnection_list( self.tab_group.request, tenant_id=tenant_id, **filters) except Exception: ipsecsiteconnections = [] exceptions.handle( self.tab_group.request, _('Unable to retrieve IPsec site connections list.')) return ipsecsiteconnections def get_filters(self): self.table = self._tables['ipsecsiteconnectionstable'] self.handle_server_filter(self.request, table=self.table) self.update_server_filter_action(self.request, table=self.table) return super(IPsecSiteConnectionsTab, self).get_filters(filters_map=self.FILTERS_MAPPING) class VPNServicesTab(tabs.TableTab, htables.DataTableView): table_classes = (tables.VPNServicesTable,) name = _("VPN Services") slug = "vpnservices" template_name = ("horizon/common/_detail_table.html") def get_vpnservicestable_data(self): try: filters = self.get_filters() tenant_id = self.request.user.tenant_id if 'subnet_name' in filters: subnets = api.neutron.subnet_list(self.tab_group.request, tenant_id=tenant_id, cidr=filters['subnet_name']) subnets_ids = [n.id for n in subnets] del filters['subnet_name'] if not subnets_ids: return [] filters['subnet_id'] = subnets_ids if 'router_name' in filters: routers = api.neutron.router_list(self.tab_group.request, tenant_id=tenant_id, name=filters['router_name']) routers_ids = [r.id for r in routers] if not routers: return [] filters['router_id'] = routers_ids vpnservices = api_vpn.vpnservice_list( self.tab_group.request, tenant_id=tenant_id, **filters) except Exception: vpnservices = [] exceptions.handle(self.tab_group.request, _('Unable to retrieve VPN services list.')) return vpnservices def get_filters(self): self.table = self._tables['vpnservicestable'] self.handle_server_filter(self.request, table=self.table) self.update_server_filter_action(self.request, table=self.table) return super(VPNServicesTab, self).get_filters() class EndpointGroupTab(tabs.TableTab, htables.DataTableView): table_classes = (tables.EndpointGroupTable,) name = _("Endpoint Groups") slug = "endpointgroups" template_name = ("horizon/common/_detail_table.html") def get_endpointgroupstable_data(self): try: filters = self.get_filters() tenant_id = self.request.user.tenant_id endpointgroups = api_vpn.endpointgroup_list( self.tab_group.request, tenant_id=tenant_id, **filters) except Exception: endpointgroups = [] exceptions.handle(self.tab_group.request, _('Unable to retrieve endpoint group list.')) return endpointgroups def get_filters(self): self.table = self._tables['endpointgroupstable'] self.handle_server_filter(self.request, table=self.table) self.update_server_filter_action(self.request, table=self.table) return super(EndpointGroupTab, self).get_filters() class IKEPoliciesTab(tabs.TableTab, htables.DataTableView): table_classes = (tables.IKEPoliciesTable,) name = _("IKE Policies") slug = "ikepolicies" template_name = ("horizon/common/_detail_table.html") def get_ikepoliciestable_data(self): try: filters = self.get_filters() tenant_id = self.request.user.tenant_id ikepolicies = api_vpn.ikepolicy_list( self.tab_group.request, tenant_id=tenant_id, **filters) except Exception: ikepolicies = [] exceptions.handle(self.tab_group.request, _('Unable to retrieve IKE policies list.')) return ikepolicies def get_filters(self): self.table = self._tables['ikepoliciestable'] self.handle_server_filter(self.request, table=self.table) self.update_server_filter_action(self.request, table=self.table) return super(IKEPoliciesTab, self).get_filters() class IPsecPoliciesTab(tabs.TableTab, htables.DataTableView): table_classes = (tables.IPsecPoliciesTable,) name = _("IPsec Policies") slug = "ipsecpolicies" template_name = ("horizon/common/_detail_table.html") def get_ipsecpoliciestable_data(self): try: filters = self.get_filters() tenant_id = self.request.user.tenant_id ipsecpolicies = api_vpn.ipsecpolicy_list( self.tab_group.request, tenant_id=tenant_id, **filters) except Exception: ipsecpolicies = [] exceptions.handle(self.tab_group.request, _('Unable to retrieve IPsec policy list.')) return ipsecpolicies def get_filters(self): self.table = self._tables['ipsecpoliciestable'] self.handle_server_filter(self.request, table=self.table) self.update_server_filter_action(self.request, table=self.table) return super(IPsecPoliciesTab, self).get_filters() class VPNTabs(tabs.TabGroup): slug = "vpntabs" tabs = (IKEPoliciesTab, IPsecPoliciesTab, VPNServicesTab, EndpointGroupTab, IPsecSiteConnectionsTab,) sticky = True class IKEPolicyDetailsTab(tabs.Tab): name = _("IKE Policy Details") slug = "ikepolicydetails" template_name = "project/vpn/_ikepolicy_details.html" def get_context_data(self, request): ikepolicy = self.tab_group.kwargs['ikepolicy'] return {'ikepolicy': ikepolicy} class IKEPolicyDetailsTabs(tabs.TabGroup): slug = "ikepolicytabs" tabs = (IKEPolicyDetailsTab,) class IPsecPolicyDetailsTab(tabs.Tab): name = _("IPsec Policy Details") slug = "ipsecpolicydetails" template_name = "project/vpn/_ipsecpolicy_details.html" def get_context_data(self, request): ipsecpolicy = self.tab_group.kwargs['ipsecpolicy'] return {'ipsecpolicy': ipsecpolicy} class IPsecPolicyDetailsTabs(tabs.TabGroup): slug = "ipsecpolicytabs" tabs = (IPsecPolicyDetailsTab,) class VPNServiceDetailsTab(tabs.Tab): name = _("VPN Service Details") slug = "vpnservicedetails" template_name = "project/vpn/_vpnservice_details.html" def get_context_data(self, request): vpnservice = self.tab_group.kwargs['vpnservice'] return {'vpnservice': vpnservice} class VPNServiceDetailsTabs(tabs.TabGroup): slug = "vpnservicetabs" tabs = (VPNServiceDetailsTab,) class EndpointGroupDetailsTab(tabs.Tab): name = _("Endpoint Groups Details") slug = "endpointgroupdetails" template_name = "project/vpn/_endpointgroup_details.html" def get_context_data(self, request): endpointgroup = self.tab_group.kwargs['endpointgroup'] return {'endpointgroup': endpointgroup} class EndpointGroupDetailsTabs(tabs.TabGroup): slug = "endpointgrouptabs" tabs = (EndpointGroupDetailsTab,) class IPsecSiteConnectionDetailsTab(tabs.Tab): name = _("IPsec Site Connection Details") slug = "ipsecsiteconnectiondetails" template_name = "project/vpn/_ipsecsiteconnection_details.html" def get_context_data(self, request): ipsecsiteconnection = self.tab_group.kwargs['ipsecsiteconnection'] return {'ipsecsiteconnection': ipsecsiteconnection} class IPsecSiteConnectionDetailsTabs(tabs.TabGroup): slug = "ipsecsiteconnectiontabs" tabs = (IPsecSiteConnectionDetailsTab,) ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.378892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/0000775000175000017500000000000014750123115033650 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.389892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/0000775000175000017500000000000014750123115034453 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000024000000000000010211 xustar00138 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_add_endpoint_group_help.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000012114750122063034607 0ustar00jamespagejamespage{% load i18n %}

{% trans "Create endpoint group for current project." %}

././@PaxHeader0000000000000000000000000000023400000000000010214 xustar00134 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_add_ike_policy_help.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000202414750122063034613 0ustar00jamespagejamespage{% load i18n %}

{% trans "Create IKE policy for current project." %}

{% trans "An IKE policy is an association of the following attributes:" %}

{% trans 'Authorization algorithm' %}
{% trans 'Valid algorithms are sha1, sha256, sha384 and sha512.' %}
{% trans 'Encryption algorithm' %}
{% trans 'Valid algorithms are 3des, aes-128, aes-192 and aes-256.' %}
{% trans 'IKE version' %}
{% trans 'The type of version (v1/v2) that needs to be filtered.' %}
{% trans 'Lifetime' %}
{% trans "Life time consists of units and value. Units in 'seconds' and the default value is 3600." %}
{% trans 'Perfect Forward Secrecy' %}
{% trans 'PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14.' %}
{% trans 'IKE Phase 1 negotiation mode' %}
{% trans "Phase 1 negotiation mode limited to using 'main' and 'aggressive'." %}

{% trans "All fields are optional." %}

././@PaxHeader0000000000000000000000000000023600000000000010216 xustar00136 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_add_ipsec_policy_help.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000201614750122063034614 0ustar00jamespagejamespage{% load i18n %}

{% trans 'Create IPsec policy for current project.' %}

{% trans 'An IPsec policy is an association of the following attributes' %}

{% trans 'Authorization algorithm' %}
{% trans 'Valid algorithms are sha1, sha256, sha384 and sha512.' %}
{% trans 'Encapsulation mode' %}
{% trans 'The type of IPsec tunnel (tunnel/transport) to be used.' %}
{% trans 'Encryption algorithm' %}
{% trans 'Valid algorithms are 3des, aes-128, aes-192 and aes-256.' %}
{% trans 'Lifetime' %}
{% trans "Life time consists of units and value. Units in 'seconds' and the default value is 3600." %}
{% trans 'Perfect Forward Secrecy' %}
{% trans 'PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14.' %}
{% trans 'Transform Protocol' %}
{% trans 'The type of protocol (esp, ah, ah-esp) used in IPsec policy.' %}

{% trans 'All fields are optional.' %}

././@PaxHeader0000000000000000000000000000023500000000000010215 xustar00135 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_add_vpn_service_help.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000144014750122063034614 0ustar00jamespagejamespage{% load i18n %}

{% trans "Create VPN service for current project." %}

{% blocktrans trimmed %} The VPN service is attached to a router and references to endpoint group or a single subnet to push to a remote site. {% endblocktrans %}

{% trans "Specify a name, description, router, and subnet (optional) for the VPN service." %}

{% trans "Admin State is enabled by default." %}

{% trans "The router and admin state fields require to be enabled. All others are optional." %}

{% blocktrans trimmed %} Note: The recommended way to specify local subnets is to use endpoint groups in IPsec site connection. It is deprecated to specify subnet in VPN service. For a new VPN service or IPsec site connection, using endpoint group is recommended. {% endblocktrans %}

././@PaxHeader0000000000000000000000000000023600000000000010216 xustar00136 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_endpointgroup_details.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000164214750122063034620 0ustar00jamespagejamespage{% load i18n sizeformat parse_date %}
{% trans "Name" %}
{{ endpointgroup.name|default:_("-") }}
{% trans "Description" %}
{{ endpointgroup.description|default:_("-") }}
{% trans "ID" %}
{{ endpointgroup.id }}
{% trans "Project ID" %}
{{ endpointgroup.tenant_id }}
{% trans "Type" %}
{{ endpointgroup.type }}
{% trans "Endpoints" %}
{% if endpointgroup.type == 'subnet' %} {% for ep in endpointgroup.endpoints %} {% url 'horizon:project:networks:subnets:detail' ep as subnet_url %}
{{ ep }}
{% endfor %} {% else %} {% for cidr in endpointgroup.endpoints %}
{{ cidr }}
{% endfor %} {% endif %}
././@PaxHeader0000000000000000000000000000023200000000000010212 xustar00132 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_ikepolicy_details.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000212414750122063034614 0ustar00jamespagejamespage{% load i18n sizeformat parse_date %}
{% trans "Name" %}
{{ ikepolicy.name|default:_("-") }}
{% trans "Description" %}
{{ ikepolicy.description|default:_("-") }}
{% trans "ID" %}
{{ ikepolicy.id }}
{% trans "Project ID" %}
{{ ikepolicy.tenant_id }}
{% trans "Authorization algorithm" %}
{{ ikepolicy.auth_algorithm }}
{% trans "Encryption algorithm" %}
{{ ikepolicy.encryption_algorithm }}
{% trans "IKE version" %}
{{ ikepolicy.ike_version }}
{% trans "Lifetime Units" %}
{{ ikepolicy.lifetime.units }}
{% trans "Lifetime Value" %}
{{ ikepolicy.lifetime.value }}
{% trans "Perfect Forward Secrecy" %}
{{ ikepolicy.pfs }}
{% trans "IKE Phase1 negotiation mode" %}
{{ ikepolicy.phase1_negotiation_mode }}
././@PaxHeader0000000000000000000000000000023400000000000010214 xustar00134 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_ipsecpolicy_details.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000215414750122063034617 0ustar00jamespagejamespage{% load i18n sizeformat parse_date %}
{% trans "Name" %}
{{ ipsecpolicy.name|default:_("-") }}
{% trans "Description" %}
{{ ipsecpolicy.description|default:_("-") }}
{% trans "ID" %}
{{ ipsecpolicy.id }}
{% trans "Project ID" %}
{{ ipsecpolicy.tenant_id }}
{% trans "Authorization algorithm" %}
{{ ipsecpolicy.auth_algorithm }}
{% trans "Encapsulation mode" %}
{{ ipsecpolicy.encapsulation_mode }}
{% trans "Encryption algorithm" %}
{{ ipsecpolicy.encryption_algorithm }}
{% trans "Lifetime Units" %}
{{ ipsecpolicy.lifetime.units }}
{% trans "Lifetime Value" %}
{{ ipsecpolicy.lifetime.value }}
{% trans "Perfect Forward Secrecy" %}
{{ ipsecpolicy.pfs }}
{% trans "Transform Protocol" %}
{{ ipsecpolicy.transform_protocol }}
././@PaxHeader0000000000000000000000000000024400000000000010215 xustar00142 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_ipsecsiteconnection_details.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000570214750122063034621 0ustar00jamespagejamespage{% load i18n sizeformat parse_date %}
{% trans "Name" %}
{{ ipsecsiteconnection.name|default:_("-") }}
{% trans "Description" %}
{{ ipsecsiteconnection.description|default:_("-") }}
{% trans "ID" %}
{{ ipsecsiteconnection.id }}
{% trans "Project ID" %}
{{ ipsecsiteconnection.tenant_id }}
{% trans "VPN Service" %}
{% url 'horizon:project:vpn:vpnservicedetails' ipsecsiteconnection.vpnservice_id as vpnservice_url %}
{{ ipsecsiteconnection.vpnservice.name_or_id }}
{% trans "Local Endpoint Group" %}
{% url 'horizon:project:vpn:endpointgroupdetails' ipsecsiteconnection.local_ep_group_id as local_epg_url %}
{{ ipsecsiteconnection.local_ep_group_id }}
{% trans "IKE Policy" %}
{% url 'horizon:project:vpn:ikepolicydetails' ipsecsiteconnection.ikepolicy_id as ikepolicy_url %}
{{ ipsecsiteconnection.ikepolicy.name_or_id }}
{% trans "IPsec Policy" %}
{% url 'horizon:project:vpn:ipsecpolicydetails' ipsecsiteconnection.ipsecpolicy_id as ipsecpolicy_url %}
{{ ipsecsiteconnection.ipsecpolicy.name_or_id }}
{% trans "Peer gateway public IPv4/IPv6 Address or FQDN" %}
{{ ipsecsiteconnection.peer_address }}
{% trans "Peer router identity for authentication (Peer ID)" %}
{{ ipsecsiteconnection.peer_id }}
{% trans "Remote peer subnet" %}
{% for peer_cidr in ipsecsiteconnection.peer_cidrs %} {{ peer_cidr }}
{% endfor %}
{% trans "Peer Endpoint Group" %}
{% url 'horizon:project:vpn:endpointgroupdetails' ipsecsiteconnection.peer_ep_group_id as peer_epg_url %}
{{ ipsecsiteconnection.peer_ep_group_id }}
{% trans "MTU" %}
{{ ipsecsiteconnection.mtu }}
{% trans "Initiator state" %}
{{ ipsecsiteconnection.initiator }}
{% trans "Dead peer detection action" %}
{{ ipsecsiteconnection.dpd.action }}
{% trans "Dead peer detection interval" %}
{{ ipsecsiteconnection.dpd.interval }}
{% trans "Dead peer detection timeout" %}
{{ ipsecsiteconnection.dpd.timeout }}
{% trans "Authorization mode" %}
{{ ipsecsiteconnection.auth_mode }}
{% trans "Route mode" %}
{{ ipsecsiteconnection.route_mode }}
{% trans "Admin State" %}
{{ ipsecsiteconnection.admin_state_up }}
{% trans "Status" %}
{{ ipsecsiteconnection.status }}
././@PaxHeader0000000000000000000000000000023500000000000010215 xustar00135 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_endpointgroup.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000032614750122063034616 0ustar00jamespagejamespage{% extends "horizon/common/_modal_form.html" %} {% load i18n %} {% block modal-body-right %}

{% trans "Description:" %}

{% trans "You may update endpoint group details here." %}

{% endblock %} ././@PaxHeader0000000000000000000000000000023100000000000010211 xustar00131 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_ikepolicy.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000032214750122063034612 0ustar00jamespagejamespage{% extends "horizon/common/_modal_form.html" %} {% load i18n %} {% block modal-body-right %}

{% trans "Description:" %}

{% trans "You may update IKE policy details here." %}

{% endblock %} ././@PaxHeader0000000000000000000000000000023300000000000010213 xustar00133 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_ipsecpolicy.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000032414750122063034614 0ustar00jamespagejamespage{% extends "horizon/common/_modal_form.html" %} {% load i18n %} {% block modal-body-right %}

{% trans "Description:" %}

{% trans "You may update IPsec policy details here." %}

{% endblock %} ././@PaxHeader0000000000000000000000000000024300000000000010214 xustar00141 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_ipsecsiteconnection.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000033514750122063034616 0ustar00jamespagejamespage{% extends "horizon/common/_modal_form.html" %} {% load i18n %} {% block modal-body-right %}

{% trans "Description:" %}

{% trans "You may update IPsec site connection details here." %}

{% endblock %} ././@PaxHeader0000000000000000000000000000023200000000000010212 xustar00132 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_vpnservice.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000032314750122063034613 0ustar00jamespagejamespage{% extends "horizon/common/_modal_form.html" %} {% load i18n %} {% block modal-body-right %}

{% trans "Description:" %}

{% trans "You may update VPN service details here." %}

{% endblock %} ././@PaxHeader0000000000000000000000000000022000000000000010207 xustar00122 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_vpn_ips.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000043014750122063034612 0ustar00jamespagejamespage{% load i18n %} {% if external_v4_ip or external_v6_ip %}
  • {% trans "IPv4:" %} {{ external_v4_ip }}
  • {% trans "IPv6:" %} {{ external_v6_ip }}
{% else %} {% trans "-" %} {% endif %} ././@PaxHeader0000000000000000000000000000023300000000000010213 xustar00133 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_vpnservice_details.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_0000664000175000017500000000361114750122063034616 0ustar00jamespagejamespage{% load i18n sizeformat parse_date %}
{% trans "Name" %}
{{ vpnservice.name|default:_("-") }}
{% trans "Description" %}
{{ vpnservice.description|default:_("-") }}
{% trans "ID" %}
{{ vpnservice.id }}
{% trans "Project ID" %}
{{ vpnservice.tenant_id }}
{% trans "Router" %}
{% url 'horizon:project:routers:detail' vpnservice.router_id as router_url %}
{{ vpnservice.router.name_or_id }}
{% trans "Subnet" %}
{% if vpnservice.subnet_id %} {% url 'horizon:project:networks:subnets:detail' vpnservice.subnet_id as subnet_url %}
{{ vpnservice.subnet.name_or_id }} {{ vpnservice.subnet.cidr }}
{% else %}
{% trans "-" %}
{% endif %}
{% trans "VPN Connections" %}
{% if vpnservice.ipsecsiteconns %} {% for conn in vpnservice.ipsecsiteconns %} {% url 'horizon:project:vpn:ipsecsiteconnectiondetails' conn.id as conn_url %} {{ conn.name_or_id }}
{% endfor %} {% else %} {% trans "-" %} {% endif %}
{% trans "Admin State" %}
{{ vpnservice.admin_state_up }}
{% trans "Status" %}
{{ vpnservice.status }}
{% if vpnservice.external_v4_ip or vpnservice.external_v6_ip %}

Local Side Public IP Addresses


{% trans "IPv4" %}
{{ vpnservice.external_v4_ip|default:_("-") }}
{% trans "IPv6" %}
{{ vpnservice.external_v6_ip|default:_("-") }}
{% endif %}
././@PaxHeader0000000000000000000000000000021500000000000010213 xustar00119 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/index.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/i0000664000175000017500000000034714750122063034633 0ustar00jamespagejamespage{% extends 'base.html' %} {% load i18n %} {% block title %}{% trans "Virtual Private Network" %}{% endblock %} {% block main %}
{{ tab_group.render }}
{% endblock %} ././@PaxHeader0000000000000000000000000000023400000000000010214 xustar00134 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_endpointgroup.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/u0000664000175000017500000000030514750122063034641 0ustar00jamespagejamespage{% extends 'base.html' %} {% load i18n %} {% block title %}{% trans "Edit Endpoint Group" %}{% endblock %} {% block main %} {% include 'project/vpn/_update_endpointgroup.html' %} {% endblock %} ././@PaxHeader0000000000000000000000000000023000000000000010210 xustar00130 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_ikepolicy.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/u0000664000175000017500000000027514750122063034647 0ustar00jamespagejamespage{% extends 'base.html' %} {% load i18n %} {% block title %}{% trans "Edit IKE Policy" %}{% endblock %} {% block main %} {% include 'project/vpn/_update_ikepolicy.html' %} {% endblock %} ././@PaxHeader0000000000000000000000000000023200000000000010212 xustar00132 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_ipsecpolicy.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/u0000664000175000017500000000030114750122063034635 0ustar00jamespagejamespage{% extends 'base.html' %} {% load i18n %} {% block title %}{% trans "Edit IPsec policy" %}{% endblock %} {% block main %} {% include 'project/vpn/_update_ipsecpolicy.html' %} {% endblock %} ././@PaxHeader0000000000000000000000000000024200000000000010213 xustar00140 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_ipsecsiteconnection.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/u0000664000175000017500000000032214750122063034640 0ustar00jamespagejamespage{% extends 'base.html' %} {% load i18n %} {% block title %}{% trans "Edit IPsec site connection" %}{% endblock %} {% block main %} {% include 'project/vpn/_update_ipsecsiteconnection.html' %} {% endblock %} ././@PaxHeader0000000000000000000000000000023100000000000010211 xustar00131 path=neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_vpnservice.html 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/u0000664000175000017500000000027714750122063034651 0ustar00jamespagejamespage{% extends 'base.html' %} {% load i18n %} {% block title %}{% trans "Edit VPN Service" %}{% endblock %} {% block main %} {% include 'project/vpn/_update_vpnservice.html' %} {% endblock %} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/tests.py0000664000175000017500000012613114750122063033373 0ustar00jamespagejamespage# Copyright 2013, Mirantis Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from django.urls import reverse from horizon.workflows import views from openstack_dashboard import api from openstack_dashboard.test import helpers from neutron_vpnaas_dashboard.api import vpn as api_vpn from neutron_vpnaas_dashboard.dashboards.project.vpn import workflows from neutron_vpnaas_dashboard.test import helpers as test class VPNTests(test.TestCase): class AttributeDict(dict): def __getattr__(self, attr): return self[attr] def __setattr__(self, attr, value): self[attr] = value DASHBOARD = 'project' INDEX_URL = reverse('horizon:%s:vpn:index' % DASHBOARD) ADDIKEPOLICY_PATH = 'horizon:%s:vpn:addikepolicy' % DASHBOARD ADDIPSECPOLICY_PATH = 'horizon:%s:vpn:addipsecpolicy' % DASHBOARD ADDVPNSERVICE_PATH = 'horizon:%s:vpn:addvpnservice' % DASHBOARD ADDENDPOINTGROUP_PATH = 'horizon:%s:vpn:addendpointgroup' % DASHBOARD ADDVPNCONNECTION_PATH = 'horizon:%s:vpn:addipsecsiteconnection' % DASHBOARD IKEPOLICY_DETAIL_PATH = 'horizon:%s:vpn:ikepolicydetails' % DASHBOARD IPSECPOLICY_DETAIL_PATH = 'horizon:%s:vpn:ipsecpolicydetails' % DASHBOARD VPNSERVICE_DETAIL_PATH = 'horizon:%s:vpn:vpnservicedetails' % DASHBOARD ENDPOINTGROUP_DETAIL_PATH = 'horizon:%s:vpn:endpointgroupdetails' %\ DASHBOARD VPNCONNECTION_DETAIL_PATH = 'horizon:%s:vpn:ipsecsiteconnectiondetails' %\ DASHBOARD UPDATEIKEPOLICY_PATH = 'horizon:%s:vpn:update_ikepolicy' % DASHBOARD UPDATEIPSECPOLICY_PATH = 'horizon:%s:vpn:update_ipsecpolicy' % DASHBOARD UPDATEVPNSERVICE_PATH = 'horizon:%s:vpn:update_vpnservice' % DASHBOARD UPDATEENDPOINTGROUP_PATH = 'horizon:%s:vpn:update_endpointgroup' %\ DASHBOARD UPDATEVPNCONNECTION_PATH = 'horizon:%s:vpn:update_ipsecsiteconnection' %\ DASHBOARD def setup_mocks(self): self.mock_vpnservice_list.return_value = self.vpnservices.list() self.mock_endpointgroup_list.return_value = self.endpointgroups.list() self.mock_ikepolicy_list.return_value = self.ikepolicies.list() self.mock_ipsecpolicy_list.return_value = self.ipsecpolicies.list() self.mock_ipsecsiteconnection_list.return_value = \ self.ipsecsiteconnections.list() def setup_mocks_with_exception(self): self.mock_vpnservice_list.side_effect = self.exceptions.neutron self.mock_endpointgroup_list.side_effect = self.exceptions.neutron self.mock_ikepolicy_list.side_effect = self.exceptions.neutron self.mock_ipsecpolicy_list.side_effect = self.exceptions.neutron self.mock_ipsecsiteconnection_list.side_effect = \ self.exceptions.neutron def check_mocks(self): self.mock_vpnservice_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_endpointgroup_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_ikepolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_ipsecpolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_ipsecsiteconnection_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_vpnservices(self): self.setup_mocks() res = self.client.get(self.INDEX_URL + '?tab=vpntabs__vpnservices') self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual(len(res.context['vpnservicestable_table'].data), len(self.vpnservices.list())) self.check_mocks() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_endpointgroups(self): self.setup_mocks() res = self.client.get(self.INDEX_URL + '?tab=vpntabs__endpointgroups') self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual(len(res.context['endpointgroupstable_table'].data), len(self.endpointgroups.list())) self.check_mocks() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_ikepolicies(self): self.setup_mocks() res = self.client.get(self.INDEX_URL + '?tab=vpntabs__ikepolicies') self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual(len(res.context['ikepoliciestable_table'].data), len(self.ikepolicies.list())) self.check_mocks() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_ipsecpolicies(self): self.setup_mocks() res = self.client.get(self.INDEX_URL + '?tab=vpntabs__ipsecpolicies') self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual(len(res.context['ipsecpoliciestable_table'].data), len(self.ipsecpolicies.list())) self.check_mocks() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_ipsecsiteconnections(self): self.setup_mocks() res = self.client.get( self.INDEX_URL + '?tab=vpntabs__ipsecsiteconnections') self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual( len(res.context['ipsecsiteconnectionstable_table'].data), len(self.ipsecsiteconnections.list())) self.check_mocks() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_exception_vpnservices(self): self.setup_mocks_with_exception() res = self.client.get(self.INDEX_URL) self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual(len(res.context['table'].data), 0) self.check_mocks() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_exception_endpointgroups(self): self.setup_mocks_with_exception() res = self.client.get(self.INDEX_URL + '?tab=vpntabs__endpointgroups') self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual(len(res.context['table'].data), 0) self.check_mocks() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_exception_ikepolicies(self): self.setup_mocks_with_exception() res = self.client.get(self.INDEX_URL + '?tab=vpntabs__ikepolicies') self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual(len(res.context['table'].data), 0) self.check_mocks() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_exception_ipsecpolicies(self): self.setup_mocks_with_exception() res = self.client.get(self.INDEX_URL + '?tab=vpntabs__ipsecpolicies') self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual(len(res.context['table'].data), 0) self.check_mocks() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_list')}) def test_index_exception_ipsecsiteconnections(self): self.setup_mocks_with_exception() res = self.client.get( self.INDEX_URL + '?tab=vpntabs__ipsecsiteconnections') self.assertTemplateUsed(res, '%s/vpn/index.html' % self.DASHBOARD) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') self.assertEqual(len(res.context['table'].data), 0) self.check_mocks() @helpers.create_mocks({api.neutron: ('network_list_for_tenant', 'router_list')}) def test_add_vpnservice_get(self): networks = [{'subnets': [self.subnets.first(), ]}, ] routers = self.routers.list() self.mock_network_list_for_tenant.return_value = networks self.mock_router_list.return_value = routers res = self.client.get(reverse(self.ADDVPNSERVICE_PATH)) workflow = res.context['workflow'] self.assertTemplateUsed(res, views.WorkflowView.template_name) self.assertEqual(workflow.name, workflows.AddVPNService.name) expected_objs = ['', ] steps = [repr(step) for step in workflow.steps] self.assertQuerysetEqual(steps, expected_objs) self.mock_network_list_for_tenant.assert_called_once_with( helpers.IsHttpRequest(), self.tenant.id) self.mock_router_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) @helpers.create_mocks({api.neutron: ('router_list', 'network_list_for_tenant'), api_vpn: ('vpnservice_create', )}) def test_add_vpnservice_post(self): vpnservice = self.vpnservices.first() networks = [{'subnets': [self.subnets.first(), ]}, ] routers = self.routers.list() self.mock_network_list_for_tenant.return_value = networks self.mock_router_list.return_value = routers form_data = {'name': vpnservice['name'], 'description': vpnservice['description'], 'subnet_id': vpnservice['subnet_id'], 'router_id': vpnservice['router_id'], 'admin_state_up': vpnservice['admin_state_up']} self.mock_vpnservice_create.return_value = vpnservice res = self.client.post(reverse(self.ADDVPNSERVICE_PATH), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) self.mock_network_list_for_tenant.assert_called_once_with( helpers.IsHttpRequest(), self.tenant.id) self.mock_router_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_vpnservice_create.assert_called_once_with( helpers.IsHttpRequest(), **form_data) @helpers.create_mocks({api.neutron: ('router_list', 'network_list_for_tenant')}) def test_add_vpnservice_post_error(self): vpnservice = self.vpnservices.first() networks = [{'subnets': [self.subnets.first(), ]}, ] routers = self.routers.list() self.mock_network_list_for_tenant.return_value = networks self.mock_router_list.return_value = routers form_data = {'name': vpnservice['name'], 'description': vpnservice['description'], 'subnet_id': '', 'router_id': '', 'admin_state_up': vpnservice['admin_state_up']} res = self.client.post(reverse(self.ADDVPNSERVICE_PATH), form_data) self.assertFormErrors(res, 1) self.mock_network_list_for_tenant.assert_called_once_with( helpers.IsHttpRequest(), self.tenant.id) self.mock_router_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) @helpers.create_mocks({api.neutron: ('network_list_for_tenant', )}) def test_add_endpointgroup_get(self): networks = [{'subnets': [self.subnets.first(), ]}, ] self.mock_network_list_for_tenant.return_value = networks res = self.client.get(reverse(self.ADDENDPOINTGROUP_PATH)) workflow = res.context['workflow'] self.assertTemplateUsed(res, views.WorkflowView.template_name) self.assertEqual(workflow.name, workflows.AddEndpointGroup.name) expected_objs = ['', ] steps = [repr(step) for step in workflow.steps] self.assertQuerysetEqual(steps, expected_objs) self.mock_network_list_for_tenant.assert_called_once_with( helpers.IsHttpRequest(), self.tenant.id) @helpers.create_mocks({api.neutron: ('network_list_for_tenant', ), api_vpn: ('endpointgroup_create', )}) def test_add_endpointgroup_post(self): endpointgroup = self.endpointgroups.first() networks = [{'subnets': [self.subnets.first(), ]}, ] self.mock_network_list_for_tenant.return_value = networks form_data = {'name': endpointgroup['name'], 'description': endpointgroup['description'], 'subnets': endpointgroup['endpoints'], 'type': endpointgroup['type']} self.mock_endpointgroup_create.return_value = endpointgroup res = self.client.post(reverse(self.ADDENDPOINTGROUP_PATH), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) self.mock_network_list_for_tenant.assert_called_once_with( helpers.IsHttpRequest(), self.tenant.id) data = form_data.copy() data['endpoints'] = data['subnets'] del data['subnets'] self.mock_endpointgroup_create.assert_called_once_with( helpers.IsHttpRequest(), **data) @helpers.create_mocks({api.neutron: ('network_list_for_tenant', )}) def test_add_endpointgroup_post_error(self): endpointgroup = self.endpointgroups.first() networks = [{'subnets': [self.subnets.first(), ]}, ] self.mock_network_list_for_tenant.return_value = networks form_data = {'name': endpointgroup['name'], 'description': endpointgroup['description'], 'endpoints': endpointgroup['endpoints'], 'type': ''} res = self.client.post(reverse(self.ADDENDPOINTGROUP_PATH), form_data) self.assertFormErrors(res, 1) self.mock_network_list_for_tenant.assert_called_once_with( helpers.IsHttpRequest(), self.tenant.id) def test_add_ikepolicy_get(self): res = self.client.get(reverse(self.ADDIKEPOLICY_PATH)) workflow = res.context['workflow'] self.assertTemplateUsed(res, views.WorkflowView.template_name) self.assertEqual(workflow.name, workflows.AddIKEPolicy.name) expected_objs = ['', ] steps = [repr(step) for step in workflow.steps] self.assertQuerysetEqual(steps, expected_objs) @helpers.create_mocks({api_vpn: ('ikepolicy_create', )}) def test_add_ikepolicy_post(self): ikepolicy = self.ikepolicies.first() form_data = {'name': ikepolicy['name'], 'description': ikepolicy['description'], 'auth_algorithm': ikepolicy['auth_algorithm'], 'encryption_algorithm': ikepolicy[ 'encryption_algorithm'], 'ike_version': ikepolicy['ike_version'], 'lifetime_units': ikepolicy['lifetime']['units'], 'lifetime_value': ikepolicy['lifetime']['value'], 'phase1_negotiation_mode': ikepolicy[ 'phase1_negotiation_mode'], 'pfs': ikepolicy['pfs']} self.mock_ikepolicy_create.return_value = ikepolicy res = self.client.post(reverse(self.ADDIKEPOLICY_PATH), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) data = form_data.copy() data['lifetime'] = {'units': data['lifetime_units'], 'value': data['lifetime_value']} del data['lifetime_units'] del data['lifetime_value'] self.mock_ikepolicy_create.assert_called_once_with( helpers.IsHttpRequest(), **data) def test_add_ikepolicy_post_error(self): ikepolicy = self.ikepolicies.first() form_data = {'name': ikepolicy['name'], 'description': ikepolicy['description'], 'auth_algorithm': ikepolicy['auth_algorithm'], 'encryption_algorithm': ikepolicy[ 'encryption_algorithm'], 'ike_version': ikepolicy['ike_version'], 'lifetime_units': ikepolicy['lifetime']['units'], 'lifetime_value': 10, 'phase1_negotiation_mode': ikepolicy[ 'phase1_negotiation_mode'], 'pfs': ikepolicy['pfs']} res = self.client.post(reverse(self.ADDIKEPOLICY_PATH), form_data) self.assertFormErrors(res, 1) def test_add_ipsecpolicy_get(self): res = self.client.get(reverse(self.ADDIPSECPOLICY_PATH)) workflow = res.context['workflow'] self.assertTemplateUsed(res, views.WorkflowView.template_name) self.assertEqual(workflow.name, workflows.AddIPsecPolicy.name) expected_objs = ['', ] steps = [repr(step) for step in workflow.steps] self.assertQuerysetEqual(steps, expected_objs) @helpers.create_mocks({api_vpn: ('ipsecpolicy_create', )}) def test_add_ipsecpolicy_post(self): ipsecpolicy = self.ipsecpolicies.first() form_data = {'name': ipsecpolicy['name'], 'description': ipsecpolicy['description'], 'auth_algorithm': ipsecpolicy['auth_algorithm'], 'encryption_algorithm': ipsecpolicy[ 'encryption_algorithm'], 'encapsulation_mode': ipsecpolicy[ 'encapsulation_mode'], 'lifetime_units': ipsecpolicy['lifetime']['units'], 'lifetime_value': ipsecpolicy['lifetime']['value'], 'pfs': ipsecpolicy['pfs'], 'transform_protocol': ipsecpolicy[ 'transform_protocol']} self.mock_ipsecpolicy_create.return_value = ipsecpolicy res = self.client.post(reverse(self.ADDIPSECPOLICY_PATH), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) data = form_data.copy() data['lifetime'] = {'units': data['lifetime_units'], 'value': data['lifetime_value']} del data['lifetime_units'] del data['lifetime_value'] self.mock_ipsecpolicy_create.assert_called_once_with( helpers.IsHttpRequest(), **data) def test_add_ipsecpolicy_post_error(self): ipsecpolicy = self.ipsecpolicies.first() form_data = {'name': ipsecpolicy['name'], 'description': ipsecpolicy['description'], 'auth_algorithm': ipsecpolicy['auth_algorithm'], 'encryption_algorithm': ipsecpolicy[ 'encryption_algorithm'], 'encapsulation_mode': ipsecpolicy[ 'encapsulation_mode'], 'lifetime_units': ipsecpolicy['lifetime']['units'], 'lifetime_value': 10, 'pfs': ipsecpolicy['pfs'], 'transform_protocol': ipsecpolicy[ 'transform_protocol']} res = self.client.post(reverse(self.ADDIPSECPOLICY_PATH), form_data) self.assertFormErrors(res, 1) @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list',)}) def test_add_ipsecsiteconnection_get(self): ikepolicies = self.ikepolicies.list() ipsecpolicies = self.ipsecpolicies.list() vpnservices = self.vpnservices.list() self.mock_ikepolicy_list.return_value = ikepolicies self.mock_ipsecpolicy_list.return_value = ipsecpolicies self.mock_vpnservice_list.return_value = vpnservices res = self.client.get(reverse(self.ADDVPNCONNECTION_PATH)) workflow = res.context['workflow'] self.assertTemplateUsed(res, views.WorkflowView.template_name) self.assertEqual(workflow.name, workflows.AddIPsecSiteConnection.name) expected_objs = ['', '', ] steps = [repr(step) for step in workflow.steps] self.assertQuerysetEqual(steps, expected_objs) self.mock_ikepolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_ipsecpolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_vpnservice_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_create')}) def test_add_ipsecsiteconnection_post(self): self._test_add_ipsecsiteconnection_post() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_create')}) def test_add_ipsecsiteconnection_post_single_subnet(self): self._test_add_ipsecsiteconnection_post(subnet_list=False) def _test_add_ipsecsiteconnection_post(self, subnet_list=True): if subnet_list: ipsecsiteconnection = self.ipsecsiteconnections.first() else: ipsecsiteconnection = self.ipsecsiteconnections.list()[1] ikepolicies = self.ikepolicies.list() ipsecpolicies = self.ipsecpolicies.list() vpnservices = self.vpnservices.list() form_data = { 'name': ipsecsiteconnection['name'], 'description': ipsecsiteconnection['description'], 'dpd_action': ipsecsiteconnection['dpd']['action'], 'dpd_interval': ipsecsiteconnection['dpd']['interval'], 'dpd_timeout': ipsecsiteconnection['dpd']['timeout'], 'ikepolicy_id': ipsecsiteconnection['ikepolicy_id'], 'initiator': ipsecsiteconnection['initiator'], 'ipsecpolicy_id': ipsecsiteconnection['ipsecpolicy_id'], 'mtu': ipsecsiteconnection['mtu'], 'peer_address': ipsecsiteconnection['peer_address'], 'peer_cidrs': ', '.join(ipsecsiteconnection['peer_cidrs']), 'peer_id': ipsecsiteconnection['peer_id'], 'psk': ipsecsiteconnection['psk'], 'vpnservice_id': ipsecsiteconnection['vpnservice_id'], 'admin_state_up': ipsecsiteconnection['admin_state_up'], } self.mock_ikepolicy_list.return_value = ikepolicies self.mock_ipsecpolicy_list.return_value = ipsecpolicies self.mock_vpnservice_list.return_value = vpnservices self.mock_ipsecsiteconnection_create.return_value = ipsecsiteconnection res = self.client.post(reverse(self.ADDVPNCONNECTION_PATH), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) self.mock_ikepolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_ipsecpolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_vpnservice_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) data = form_data.copy() data['peer_cidrs'] = ipsecsiteconnection['peer_cidrs'] data['dpd'] = {'action': data['dpd_action'], 'interval': data['dpd_interval'], 'timeout': data['dpd_timeout']} del data['dpd_action'] del data['dpd_interval'] del data['dpd_timeout'] data['local_ep_group_id'] = '' data['peer_ep_group_id'] = '' self.mock_ipsecsiteconnection_create.assert_called_once_with( helpers.IsHttpRequest(), **data) @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_create')}) def test_add_ipsecsiteconnection_post_required_fields_error(self): self._test_add_ipsecsiteconnection_post_error() @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ipsecpolicy_list', 'vpnservice_list', 'endpointgroup_list', 'ipsecsiteconnection_create')}) def test_add_ipsecsiteconnection_post_peer_cidrs_error(self): self._test_add_ipsecsiteconnection_post_error(subnets=True) def _test_add_ipsecsiteconnection_post_error(self, subnets=False): ipsecsiteconnection = self.ipsecsiteconnections.first() ikepolicies = self.ikepolicies.list() ipsecpolicies = self.ipsecpolicies.list() vpnservices = self.vpnservices.list() self.mock_ikepolicy_list.return_value = ikepolicies self.mock_ipsecpolicy_list.return_value = ipsecpolicies self.mock_vpnservice_list.return_value = vpnservices form_data = {'name': '', 'description': ipsecsiteconnection['description'], 'dpd_action': ipsecsiteconnection['dpd']['action'], 'dpd_interval': ipsecsiteconnection['dpd']['interval'], 'dpd_timeout': ipsecsiteconnection['dpd']['timeout'], 'ikepolicy_id': '', 'initiator': ipsecsiteconnection['initiator'], 'ipsecpolicy_id': '', 'mtu': ipsecsiteconnection['mtu'], 'peer_address': '', 'peer_cidrs': '', 'peer_id': '', 'psk': '', 'vpnservice_id': '', 'admin_state_up': ipsecsiteconnection[ 'admin_state_up']} if subnets: form_data['peer_cidrs'] = '20.1.0.0/24; 21.1.0.0/24' res = self.client.post(reverse(self.ADDVPNCONNECTION_PATH), form_data) if subnets: self.assertFormErrors(res, 7) else: self.assertFormErrors(res, 6) self.mock_ikepolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_ipsecpolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_vpnservice_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) @helpers.create_mocks({api_vpn: ('vpnservice_get', )}) def test_update_vpnservice_get(self): vpnservice = self.vpnservices.first() self.mock_vpnservice_get.return_value = vpnservice res = self.client.get( reverse(self.UPDATEVPNSERVICE_PATH, args=(vpnservice.id,))) self.assertTemplateUsed( res, 'project/vpn/update_vpnservice.html') self.mock_vpnservice_get.assert_called_once_with( helpers.IsHttpRequest(), vpnservice.id) @helpers.create_mocks({api_vpn: ('vpnservice_get', 'vpnservice_update')}) def test_update_vpnservice_post(self): vpnservice = self.vpnservices.first() self.mock_vpnservice_get.return_value = vpnservice data = {'name': vpnservice.name, 'description': vpnservice.description, 'admin_state_up': vpnservice.admin_state_up} self.mock_vpnservice_update.return_value = vpnservice form_data = data.copy() form_data['vpnservice_id'] = vpnservice.id res = self.client.post(reverse( self.UPDATEVPNSERVICE_PATH, args=(vpnservice.id,)), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) self.mock_vpnservice_get.assert_called_once_with( helpers.IsHttpRequest(), vpnservice.id) self.mock_vpnservice_update.assert_called_once_with( helpers.IsHttpRequest(), vpnservice.id, vpnservice=data) @helpers.create_mocks({api_vpn: ('endpointgroup_get', )}) def test_update_endpointgroup_get(self): endpointgroup = self.endpointgroups.first() self.mock_endpointgroup_get.return_value = endpointgroup res = self.client.get( reverse(self.UPDATEENDPOINTGROUP_PATH, args=(endpointgroup.id,))) self.assertTemplateUsed( res, 'project/vpn/update_endpointgroup.html') self.mock_endpointgroup_get.assert_called_once_with( helpers.IsHttpRequest(), endpointgroup.id) @helpers.create_mocks({api_vpn: ('endpointgroup_get', 'endpointgroup_update')}) def test_update_endpointgroup_post(self): endpointgroup = self.endpointgroups.first() data = {'name': endpointgroup.name, 'description': endpointgroup.description} self.mock_endpointgroup_get.return_value = endpointgroup self.mock_endpointgroup_update.return_value = endpointgroup form_data = data.copy() form_data['endpoint_group_id'] = endpointgroup.id res = self.client.post(reverse(self.UPDATEENDPOINTGROUP_PATH, args=(endpointgroup.id, ) ), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) self.mock_endpointgroup_get.assert_called_once_with( helpers.IsHttpRequest(), endpointgroup.id) self.mock_endpointgroup_update.assert_called_once_with( helpers.IsHttpRequest(), endpointgroup.id, endpoint_group=data) @helpers.create_mocks({api_vpn: ('ikepolicy_get', )}) def test_update_ikepolicy_get(self): ikepolicy = self.ikepolicies.first() self.mock_ikepolicy_get.return_value = ikepolicy res = self.client.get( reverse(self.UPDATEIKEPOLICY_PATH, args=(ikepolicy.id,))) self.assertTemplateUsed( res, 'project/vpn/update_ikepolicy.html') self.mock_ikepolicy_get.assert_called_once_with( helpers.IsHttpRequest(), ikepolicy.id) @helpers.create_mocks({api_vpn: ('ikepolicy_get', 'ikepolicy_update')}) def test_update_ikepolicy_post(self): ikepolicy = self.ikepolicies.first() data = {'name': ikepolicy.name, 'description': ikepolicy.description, 'auth_algorithm': ikepolicy.auth_algorithm, 'encryption_algorithm': ikepolicy.encryption_algorithm, 'ike_version': ikepolicy.ike_version, 'lifetime': ikepolicy.lifetime, 'pfs': ikepolicy.pfs, 'phase1_negotiation_mode': ikepolicy.phase1_negotiation_mode} self.mock_ikepolicy_get.return_value = ikepolicy self.mock_ikepolicy_update.return_value = ikepolicy form_data = data.copy() form_data.update({'lifetime_units': form_data['lifetime']['units'], 'lifetime_value': form_data['lifetime']['value'], 'ikepolicy_id': ikepolicy.id}) form_data.pop('lifetime') res = self.client.post(reverse( self.UPDATEIKEPOLICY_PATH, args=(ikepolicy.id,)), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) self.mock_ikepolicy_get.assert_called_once_with( helpers.IsHttpRequest(), ikepolicy.id) self.mock_ikepolicy_update.assert_called_once_with( helpers.IsHttpRequest(), ikepolicy.id, ikepolicy=data) @helpers.create_mocks({api_vpn: ('ipsecpolicy_get', )}) def test_update_ipsecpolicy_get(self): ipsecpolicy = self.ipsecpolicies.first() self.mock_ipsecpolicy_get.return_value = ipsecpolicy res = self.client.get( reverse(self.UPDATEIPSECPOLICY_PATH, args=(ipsecpolicy.id,))) self.assertTemplateUsed( res, 'project/vpn/update_ipsecpolicy.html') self.mock_ipsecpolicy_get.assert_called_once_with( helpers.IsHttpRequest(), ipsecpolicy.id) @helpers.create_mocks({api_vpn: ('ipsecpolicy_get', 'ipsecpolicy_update')}) def test_update_ipsecpolicy_post(self): ipsecpolicy = self.ipsecpolicies.first() self.mock_ipsecpolicy_get.return_value = ipsecpolicy data = {'name': ipsecpolicy.name, 'description': ipsecpolicy.description, 'auth_algorithm': ipsecpolicy.auth_algorithm, 'encapsulation_mode': ipsecpolicy.encapsulation_mode, 'encryption_algorithm': ipsecpolicy.encryption_algorithm, 'lifetime': ipsecpolicy.lifetime, 'pfs': ipsecpolicy.pfs, 'transform_protocol': ipsecpolicy.transform_protocol} self.mock_ipsecpolicy_update.return_value = ipsecpolicy form_data = data.copy() form_data.update({'lifetime_units': form_data['lifetime']['units'], 'lifetime_value': form_data['lifetime']['value'], 'ipsecpolicy_id': ipsecpolicy.id}) form_data.pop('lifetime') res = self.client.post(reverse( self.UPDATEIPSECPOLICY_PATH, args=(ipsecpolicy.id,)), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) self.mock_ipsecpolicy_get.assert_called_once_with( helpers.IsHttpRequest(), ipsecpolicy.id) self.mock_ipsecpolicy_update.assert_called_once_with( helpers.IsHttpRequest(), ipsecpolicy.id, ipsecpolicy=data) @helpers.create_mocks({api_vpn: ('ipsecsiteconnection_get', )}) def test_update_ipsecsiteconnection_get(self): ipsecsiteconnection = self.ipsecsiteconnections.first() self.mock_ipsecsiteconnection_get.return_value = ipsecsiteconnection res = self.client.get( reverse(self.UPDATEVPNCONNECTION_PATH, args=(ipsecsiteconnection.id,))) self.assertTemplateUsed( res, 'project/vpn/update_ipsecsiteconnection.html') self.mock_ipsecsiteconnection_get.assert_called_once_with( helpers.IsHttpRequest(), ipsecsiteconnection.id) @helpers.create_mocks({api_vpn: ('ipsecsiteconnection_get', 'ipsecsiteconnection_update')}) def test_update_ipsecsiteconnection_post(self): ipsecsiteconnection = self.ipsecsiteconnections.first() self.mock_ipsecsiteconnection_get.return_value = ipsecsiteconnection data = {'name': ipsecsiteconnection.name, 'description': ipsecsiteconnection.description, 'peer_address': ipsecsiteconnection.peer_address, 'peer_id': ipsecsiteconnection.peer_id, 'peer_cidrs': ipsecsiteconnection.peer_cidrs, 'psk': ipsecsiteconnection.psk, 'mtu': ipsecsiteconnection.mtu, 'dpd': ipsecsiteconnection.dpd, 'initiator': ipsecsiteconnection.initiator, 'admin_state_up': ipsecsiteconnection.admin_state_up} self.mock_ipsecsiteconnection_update.return_value = ipsecsiteconnection form_data = data.copy() form_data.update({ 'dpd_action': form_data['dpd']['action'], 'dpd_interval': form_data['dpd']['interval'], 'dpd_timeout': form_data['dpd']['timeout'], 'peer_cidrs': ", ".join(ipsecsiteconnection['peer_cidrs']), 'ipsecsiteconnection_id': ipsecsiteconnection.id, }) form_data.pop('dpd') res = self.client.post( reverse(self.UPDATEVPNCONNECTION_PATH, args=(ipsecsiteconnection.id,)), form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, str(self.INDEX_URL)) self.mock_ipsecsiteconnection_get.assert_called_once_with( helpers.IsHttpRequest(), ipsecsiteconnection.id) self.mock_ipsecsiteconnection_update.assert_called_once_with( helpers.IsHttpRequest(), ipsecsiteconnection.id, ipsec_site_connection=data) @helpers.create_mocks({api_vpn: ('vpnservice_list', 'vpnservice_delete',)}) def test_delete_vpnservice(self): vpnservice = self.vpnservices.list()[1] self.mock_vpnservice_list.return_value = self.vpnservices.list() self.mock_vpnservice_delete.return_value = None form_data = {"action": "vpnservicestable__deletevpnservice__%s" % vpnservice.id} res = self.client.post(self.INDEX_URL, form_data) self.assertNoFormErrors(res) self.mock_vpnservice_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_vpnservice_delete.assert_called_once_with( helpers.IsHttpRequest(), vpnservice.id) @helpers.create_mocks({api_vpn: ('endpointgroup_list', 'endpointgroup_delete',)}) def test_delete_endpointgroup(self): endpointgroup = self.endpointgroups.list()[0] self.mock_endpointgroup_list.return_value = self.endpointgroups.list() self.mock_endpointgroup_delete.return_value = None form_data = {"action": "endpointgroupstable__deleteendpointgroup__%s" % endpointgroup.id} res = self.client.post(self.INDEX_URL, form_data) self.assertNoFormErrors(res) self.mock_endpointgroup_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_endpointgroup_delete.assert_called_once_with( helpers.IsHttpRequest(), endpointgroup.id) @helpers.create_mocks({api_vpn: ('ikepolicy_list', 'ikepolicy_delete',)}) def test_delete_ikepolicy(self): ikepolicy = self.ikepolicies.list()[1] self.mock_ikepolicy_list.return_value = self.ikepolicies.list() self.mock_ikepolicy_delete.return_value = None form_data = {"action": "ikepoliciestable__deleteikepolicy__%s" % ikepolicy.id} res = self.client.post(self.INDEX_URL, form_data) self.assertNoFormErrors(res) self.mock_ikepolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_ikepolicy_delete.assert_called_once_with( helpers.IsHttpRequest(), ikepolicy.id) @helpers.create_mocks({api_vpn: ('ipsecpolicy_list', 'ipsecpolicy_delete',)}) def test_delete_ipsecpolicy(self): ipsecpolicy = self.ipsecpolicies.list()[1] self.mock_ipsecpolicy_list.return_value = self.ipsecpolicies.list() self.mock_ipsecpolicy_delete.return_value = None form_data = {"action": "ipsecpoliciestable__deleteipsecpolicy__%s" % ipsecpolicy.id} res = self.client.post(self.INDEX_URL, form_data) self.assertNoFormErrors(res) self.mock_ipsecpolicy_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_ipsecpolicy_delete.assert_called_once_with( helpers.IsHttpRequest(), ipsecpolicy.id) @helpers.create_mocks({api_vpn: ('ipsecsiteconnection_list', 'ipsecsiteconnection_delete',)}) def test_delete_ipsecsiteconnection(self): ipsecsiteconnection = self.ipsecsiteconnections.first() self.mock_ipsecsiteconnection_list.return_value = \ self.ipsecsiteconnections.list() self.mock_ipsecsiteconnection_delete.return_value = None form_data = {"action": "ipsecsiteconnectionstable__deleteipsecsiteconnection__%s" % ipsecsiteconnection.id} res = self.client.post(self.INDEX_URL, form_data) self.assertNoFormErrors(res) self.mock_ipsecsiteconnection_list.assert_called_once_with( helpers.IsHttpRequest(), tenant_id=self.tenant.id) self.mock_ipsecsiteconnection_delete.assert_called_once_with( helpers.IsHttpRequest(), ipsecsiteconnection.id) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/urls.py0000664000175000017500000000544114750122063033216 0ustar00jamespagejamespage# Copyright 2013, Mirantis Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from django.urls import re_path from neutron_vpnaas_dashboard.dashboards.project.vpn import views urlpatterns = [ re_path(r'^$', views.IndexView.as_view(), name='index'), re_path(r'^addikepolicy$', views.AddIKEPolicyView.as_view(), name='addikepolicy'), re_path(r'^update_ikepolicy/(?P[^/]+)/$', views.UpdateIKEPolicyView.as_view(), name='update_ikepolicy'), re_path(r'^addipsecpolicy$', views.AddIPsecPolicyView.as_view(), name='addipsecpolicy'), re_path(r'^update_ipsecpolicy/(?P[^/]+)/$', views.UpdateIPsecPolicyView.as_view(), name='update_ipsecpolicy'), re_path(r'^addipsecsiteconnection$', views.AddIPsecSiteConnectionView.as_view(), name='addipsecsiteconnection'), re_path(r'^update_ipsecsiteconnection/(?P[^/]+)/$', views.UpdateIPsecSiteConnectionView.as_view(), name='update_ipsecsiteconnection'), re_path(r'^addvpnservice$', views.AddVPNServiceView.as_view(), name='addvpnservice'), re_path(r'^update_vpnservice/(?P[^/]+)/$', views.UpdateVPNServiceView.as_view(), name='update_vpnservice'), re_path(r'^addendpointgroup$', views.AddEndpointGroupView.as_view(), name='addendpointgroup'), re_path(r'^update_endpointgroup/(?P[^/]+)/$', views.UpdateEndpointGroupView.as_view(), name='update_endpointgroup'), re_path(r'^ikepolicy/(?P[^/]+)/$', views.IKEPolicyDetailsView.as_view(), name='ikepolicydetails'), re_path(r'^ipsecpolicy/(?P[^/]+)/$', views.IPsecPolicyDetailsView.as_view(), name='ipsecpolicydetails'), re_path(r'^vpnservice/(?P[^/]+)/$', views.VPNServiceDetailsView.as_view(), name='vpnservicedetails'), re_path(r'^endpointgroup/(?P[^/]+)/$', views.EndpointGroupDetailsView.as_view(), name='endpointgroupdetails'), re_path(r'^ipsecsiteconnection/(?P[^/]+)/$', views.IPsecSiteConnectionDetailsView.as_view(), name='ipsecsiteconnectiondetails'), ] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/views.py0000664000175000017500000004354314750122063033373 0ustar00jamespagejamespage# Copyright 2013, Mirantis Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from django.urls import reverse from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import forms as horizon_forms from horizon import tabs as horizon_tabs from horizon.utils import memoized from horizon import workflows as horizon_workflows from neutron_vpnaas_dashboard.api import vpn as api_vpn from neutron_vpnaas_dashboard.dashboards.project.vpn import forms from neutron_vpnaas_dashboard.dashboards.project.vpn import tables from neutron_vpnaas_dashboard.dashboards.project.vpn import tabs from neutron_vpnaas_dashboard.dashboards.project.vpn import workflows class IndexView(horizon_tabs.TabbedTableView): tab_group_class = tabs.VPNTabs template_name = 'project/vpn/index.html' page_title = _("Virtual Private Network") class AddVPNServiceView(horizon_workflows.WorkflowView): workflow_class = workflows.AddVPNService class AddEndpointGroupView(horizon_workflows.WorkflowView): workflow_class = workflows.AddEndpointGroup class AddIPsecSiteConnectionView(horizon_workflows.WorkflowView): workflow_class = workflows.AddIPsecSiteConnection class AddIKEPolicyView(horizon_workflows.WorkflowView): workflow_class = workflows.AddIKEPolicy class AddIPsecPolicyView(horizon_workflows.WorkflowView): workflow_class = workflows.AddIPsecPolicy class IKEPolicyDetailsView(horizon_tabs.TabView): tab_group_class = tabs.IKEPolicyDetailsTabs template_name = 'horizon/common/_detail.html' page_title = "{{ ikepolicy.name|default:ikepolicy.id }}" @memoized.memoized_method def get_data(self): pid = self.kwargs['ikepolicy_id'] try: return api_vpn.ikepolicy_get(self.request, pid) except Exception: msg = _('Unable to retrieve IKE policy details.') exceptions.handle(self.request, msg, redirect=self.get_redirect_url()) def get_context_data(self, **kwargs): context = super(IKEPolicyDetailsView, self).get_context_data(**kwargs) ikepolicy = self.get_data() table = tables.IKEPoliciesTable(self.request) context["ikepolicy"] = ikepolicy context["url"] = self.get_redirect_url() context["actions"] = table.render_row_actions(ikepolicy) return context def get_tabs(self, request, *args, **kwargs): ikepolicy = self.get_data() return self.tab_group_class(request, ikepolicy=ikepolicy, **kwargs) @staticmethod def get_redirect_url(): return reverse('horizon:project:vpn:index') class IPsecPolicyDetailsView(horizon_tabs.TabView): tab_group_class = tabs.IPsecPolicyDetailsTabs template_name = 'horizon/common/_detail.html' page_title = "{{ ipsecpolicy.name|default:ipsecpolicy.id }}" @memoized.memoized_method def get_data(self): pid = self.kwargs['ipsecpolicy_id'] try: return api_vpn.ipsecpolicy_get(self.request, pid) except Exception: msg = _('Unable to retrieve IPsec policy details.') exceptions.handle(self.request, msg, redirect=self.get_redirect_url()) def get_context_data(self, **kwargs): context = super(IPsecPolicyDetailsView, self).get_context_data( **kwargs) ipsecpolicy = self.get_data() table = tables.IPsecPoliciesTable(self.request) context["ipsecpolicy"] = ipsecpolicy context["url"] = self.get_redirect_url() context["actions"] = table.render_row_actions(ipsecpolicy) return context def get_tabs(self, request, *args, **kwargs): ipsecpolicy = self.get_data() return self.tab_group_class(request, ipsecpolicy=ipsecpolicy, **kwargs) @staticmethod def get_redirect_url(): return reverse('horizon:project:vpn:index') class VPNServiceDetailsView(horizon_tabs.TabView): tab_group_class = tabs.VPNServiceDetailsTabs template_name = 'horizon/common/_detail.html' page_title = "{{ vpnservice.name|default:vpnservice.id }}" @memoized.memoized_method def get_data(self): sid = self.kwargs['vpnservice_id'] try: vpnservice = api_vpn.vpnservice_get(self.request, sid) except Exception: vpnservice = [] msg = _('Unable to retrieve VPN service details.') exceptions.handle(self.request, msg, redirect=self.get_redirect_url()) try: connections = api_vpn.ipsecsiteconnection_list( self.request, vpnservice_id=sid) vpnservice.vpnconnections = connections except Exception: vpnservice.vpnconnections = [] return vpnservice def get_context_data(self, **kwargs): context = super(VPNServiceDetailsView, self).get_context_data(**kwargs) vpnservice = self.get_data() table = tables.VPNServicesTable(self.request) context["vpnservice"] = vpnservice context["url"] = self.get_redirect_url() context["actions"] = table.render_row_actions(vpnservice) return context def get_tabs(self, request, *args, **kwargs): vpnservice = self.get_data() return self.tab_group_class(request, vpnservice=vpnservice, **kwargs) @staticmethod def get_redirect_url(): return reverse('horizon:project:vpn:index') class EndpointGroupDetailsView(horizon_tabs.TabView): tab_group_class = tabs.EndpointGroupDetailsTabs template_name = 'horizon/common/_detail.html' page_title = "{{ endpointgroup.name|default:endpointgroup.id }}" @memoized.memoized_method def get_data(self): gid = self.kwargs['endpoint_group_id'] try: endpointgroup = api_vpn.endpointgroup_get(self.request, gid) except Exception: msg = _('Unable to retrieve endpoint group details.') exceptions.handle(self.request, msg, redirect=self.get_redirect_url()) try: connections = api_vpn.ipsecsiteconnection_list( self.request, endpoint_group_id=gid) endpointgroup.vpnconnections = connections except Exception: endpointgroup.vpnconnections = [] return endpointgroup def get_context_data(self, **kwargs): context = super(EndpointGroupDetailsView, self).get_context_data( **kwargs) endpointgroup = self.get_data() table = tables.EndpointGroupTable(self.request) context["endpointgroup"] = endpointgroup context["url"] = self.get_redirect_url() context["actions"] = table.render_row_actions(endpointgroup) return context def get_tabs(self, request, *args, **kwargs): endpointgroup = self.get_data() return self.tab_group_class(request, endpointgroup=endpointgroup, **kwargs) @staticmethod def get_redirect_url(): return reverse('horizon:project:vpn:index') class IPsecSiteConnectionDetailsView(horizon_tabs.TabView): tab_group_class = tabs.IPsecSiteConnectionDetailsTabs template_name = 'horizon/common/_detail.html' page_title = "{{ ipsecsiteconnection.name|default:ipsecsiteconnection.id}}" @memoized.memoized_method def get_data(self): cid = self.kwargs['ipsecsiteconnection_id'] try: return api_vpn.ipsecsiteconnection_get(self.request, cid) except Exception: msg = _('Unable to retrieve IPsec site connection details.') exceptions.handle(self.request, msg, redirect=self.get_redirect_url()) def get_context_data(self, **kwargs): context = super(IPsecSiteConnectionDetailsView, self).get_context_data( **kwargs) ipsecsiteconnection = self.get_data() table = tables.IPsecSiteConnectionsTable(self.request) context["ipsecsiteconnection"] = ipsecsiteconnection context["url"] = self.get_redirect_url() context["actions"] = table.render_row_actions(ipsecsiteconnection) return context def get_tabs(self, request, *args, **kwargs): ipsecsiteconnection = self.get_data() return self.tab_group_class(request, ipsecsiteconnection=ipsecsiteconnection, **kwargs) @staticmethod def get_redirect_url(): return reverse('horizon:project:vpn:index') class UpdateVPNServiceView(horizon_forms.ModalFormView): form_class = forms.UpdateVPNService form_id = "update_vpnservice_form" template_name = "project/vpn/update_vpnservice.html" context_object_name = 'vpnservice' submit_label = _("Save Changes") submit_url = "horizon:project:vpn:update_vpnservice" success_url = reverse_lazy("horizon:project:vpn:index") page_title = _("Edit VPN Service") def get_context_data(self, **kwargs): context = super(UpdateVPNServiceView, self).get_context_data(**kwargs) context["vpnservice_id"] = self.kwargs['vpnservice_id'] args = (self.kwargs['vpnservice_id'],) context['submit_url'] = reverse(self.submit_url, args=args) return context @memoized.memoized_method def _get_object(self, *args, **kwargs): vpnservice_id = self.kwargs['vpnservice_id'] try: return api_vpn.vpnservice_get(self.request, vpnservice_id) except Exception: redirect = self.success_url msg = _('Unable to retrieve VPN service details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): vpnservice = self._get_object() return {'name': vpnservice['name'], 'vpnservice_id': vpnservice['id'], 'description': vpnservice['description'], 'admin_state_up': vpnservice['admin_state_up']} class UpdateEndpointGroupView(horizon_forms.ModalFormView): form_class = forms.UpdateEndpointGroup form_id = "update_endpointgroup_form" template_name = "project/vpn/update_endpointgroup.html" context_object_name = 'endpointgroup' submit_label = _("Save Changes") submit_url = "horizon:project:vpn:update_endpointgroup" success_url = reverse_lazy("horizon:project:vpn:index") page_title = _("Edit Endpoint Group") def get_context_data(self, **kwargs): context = super(UpdateEndpointGroupView, self).get_context_data( **kwargs) context["endpoint_group_id"] = self.kwargs['endpoint_group_id'] args = (self.kwargs['endpoint_group_id'],) context['submit_url'] = reverse(self.submit_url, args=args) return context @memoized.memoized_method def _get_object(self, *args, **kwargs): endpoint_group_id = self.kwargs['endpoint_group_id'] try: return api_vpn.endpointgroup_get(self.request, endpoint_group_id) except Exception: redirect = self.success_url msg = _('Unable to retrieve endpoint group details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): endpointgroup = self._get_object() return {'name': endpointgroup['name'], 'endpoint_group_id': endpointgroup['id'], 'description': endpointgroup['description']} class UpdateIKEPolicyView(horizon_forms.ModalFormView): form_class = forms.UpdateIKEPolicy form_id = "update_ikepolicy_form" template_name = "project/vpn/update_ikepolicy.html" context_object_name = 'ikepolicy' submit_label = _("Save Changes") submit_url = "horizon:project:vpn:update_ikepolicy" success_url = reverse_lazy("horizon:project:vpn:index") page_title = _("Edit IKE Policy") def get_context_data(self, **kwargs): context = super(UpdateIKEPolicyView, self).get_context_data(**kwargs) context["ikepolicy_id"] = self.kwargs['ikepolicy_id'] args = (self.kwargs['ikepolicy_id'],) context['submit_url'] = reverse(self.submit_url, args=args) return context @memoized.memoized_method def _get_object(self, *args, **kwargs): ikepolicy_id = self.kwargs['ikepolicy_id'] try: return api_vpn.ikepolicy_get(self.request, ikepolicy_id) except Exception: redirect = self.success_url msg = _('Unable to retrieve IKE policy details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): ikepolicy = self._get_object() return {'name': ikepolicy['name'], 'ikepolicy_id': ikepolicy['id'], 'description': ikepolicy['description'], 'auth_algorithm': ikepolicy['auth_algorithm'], 'encryption_algorithm': ikepolicy['encryption_algorithm'], 'ike_version': ikepolicy['ike_version'], 'lifetime_units': ikepolicy['lifetime']['units'], 'lifetime_value': ikepolicy['lifetime']['value'], 'pfs': ikepolicy['pfs'], 'phase1_negotiation_mode': ikepolicy[ 'phase1_negotiation_mode']} class UpdateIPsecPolicyView(horizon_forms.ModalFormView): form_class = forms.UpdateIPsecPolicy form_id = "update_ipsecpolicy_form" template_name = "project/vpn/update_ipsecpolicy.html" context_object_name = 'ipsecpolicy' submit_label = _("Save Changes") submit_url = "horizon:project:vpn:update_ipsecpolicy" success_url = reverse_lazy("horizon:project:vpn:index") page_title = _("Edit IPsec Policy") def get_context_data(self, **kwargs): context = super(UpdateIPsecPolicyView, self).get_context_data(**kwargs) context["ipsecpolicy_id"] = self.kwargs['ipsecpolicy_id'] args = (self.kwargs['ipsecpolicy_id'],) context['submit_url'] = reverse(self.submit_url, args=args) return context @memoized.memoized_method def _get_object(self, *args, **kwargs): ipsecpolicy_id = self.kwargs['ipsecpolicy_id'] try: return api_vpn.ipsecpolicy_get(self.request, ipsecpolicy_id) except Exception: redirect = self.success_url msg = _('Unable to retrieve IPsec policy details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): ipsecpolicy = self._get_object() return {'name': ipsecpolicy['name'], 'ipsecpolicy_id': ipsecpolicy['id'], 'description': ipsecpolicy['description'], 'auth_algorithm': ipsecpolicy['auth_algorithm'], 'encapsulation_mode': ipsecpolicy['encapsulation_mode'], 'encryption_algorithm': ipsecpolicy['encryption_algorithm'], 'lifetime_units': ipsecpolicy['lifetime']['units'], 'lifetime_value': ipsecpolicy['lifetime']['value'], 'pfs': ipsecpolicy['pfs'], 'transform_protocol': ipsecpolicy['transform_protocol']} class UpdateIPsecSiteConnectionView(horizon_forms.ModalFormView): form_class = forms.UpdateIPsecSiteConnection form_id = "update_ipsecsiteconnection_form" template_name = "project/vpn/update_ipsecsiteconnection.html" context_object_name = 'ipsecsiteconnection' submit_label = _("Save Changes") submit_url = "horizon:project:vpn:update_ipsecsiteconnection" success_url = reverse_lazy("horizon:project:vpn:index") page_title = _("Edit IPsec Site Connection") def get_context_data(self, **kwargs): context = super( UpdateIPsecSiteConnectionView, self).get_context_data(**kwargs) context["ipsecsiteconnection_id"] = self.kwargs[ 'ipsecsiteconnection_id'] args = (self.kwargs['ipsecsiteconnection_id'],) context['submit_url'] = reverse(self.submit_url, args=args) return context @memoized.memoized_method def _get_object(self, *args, **kwargs): connection_id = self.kwargs['ipsecsiteconnection_id'] try: return api_vpn.ipsecsiteconnection_get(self.request, connection_id) except Exception: redirect = self.success_url msg = _('Unable to retrieve IPsec site connection details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): ipsecsiteconnection = self._get_object() data = { 'name': ipsecsiteconnection['name'], 'ipsecsiteconnection_id': ipsecsiteconnection['id'], 'description': ipsecsiteconnection['description'], 'peer_address': ipsecsiteconnection['peer_address'], 'peer_id': ipsecsiteconnection['peer_id'], 'psk': ipsecsiteconnection['psk'], 'mtu': ipsecsiteconnection['mtu'], 'dpd_action': ipsecsiteconnection['dpd']['action'], 'dpd_interval': ipsecsiteconnection['dpd']['interval'], 'dpd_timeout': ipsecsiteconnection['dpd']['timeout'], 'initiator': ipsecsiteconnection['initiator'], 'admin_state_up': ipsecsiteconnection['admin_state_up'] } if 'local_ep_group_id' in ipsecsiteconnection: data['local_ep_group_id'] = \ ipsecsiteconnection['local_ep_group_id'] data['peer_ep_group_id'] = ipsecsiteconnection['peer_ep_group_id'] return data else: data['peer_cidrs'] = ", ".join(ipsecsiteconnection['peer_cidrs']) return data ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/dashboards/project/vpn/workflows.py0000664000175000017500000006677414750122063034306 0ustar00jamespagejamespage# Copyright 2013, Mirantis Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from django.utils.translation import gettext_lazy as _ from horizon import exceptions from horizon import forms from horizon import workflows from openstack_dashboard import api from neutron_vpnaas_dashboard.api import vpn as api_vpn class AddVPNServiceAction(workflows.Action): name = forms.CharField(max_length=80, label=_("Name"), required=False) description = forms.CharField( initial="", required=False, max_length=80, label=_("Description")) router_id = forms.ThemableChoiceField(label=_("Router")) subnet_id = forms.ThemableChoiceField( label=_("Subnet"), help_text=_("Optional. No need to be specified " "when you use endpoint groups."), required=False) admin_state_up = forms.BooleanField( label=_("Enable Admin State"), help_text=_("The state of VPN service to start in. If disabled " "(not checked), VPN service does not forward packets."), initial=True, required=False) def __init__(self, request, *args, **kwargs): super(AddVPNServiceAction, self).__init__(request, *args, **kwargs) def populate_subnet_id_choices(self, request, context): subnet_id_choices = [('', _("Select a Subnet"))] try: tenant_id = request.user.tenant_id networks = api.neutron.network_list_for_tenant(request, tenant_id) except Exception: exceptions.handle(request, _('Unable to retrieve networks list.')) networks = [] for n in networks: for s in n['subnets']: subnet_id_choices.append((s.id, s.cidr)) self.fields['subnet_id'].choices = subnet_id_choices return subnet_id_choices def populate_router_id_choices(self, request, context): router_id_choices = [('', _("Select a Router"))] try: tenant_id = request.user.tenant_id routers = api.neutron.router_list(request, tenant_id=tenant_id) except Exception: exceptions.handle(request, _('Unable to retrieve routers list.')) routers = [] for r in routers: if not r.external_gateway_info: continue router_id_choices.append((r.id, r.name)) self.fields['router_id'].choices = router_id_choices return router_id_choices class Meta(object): name = _("Add New VPN Service") permissions = ('openstack.services.network',) help_text_template = "project/vpn/_add_vpn_service_help.html" class AddVPNServiceStep(workflows.Step): action_class = AddVPNServiceAction contributes = ("name", "description", "subnet_id", "router_id", "admin_state_up") def contribute(self, data, context): context = super(AddVPNServiceStep, self).contribute(data, context) if data: return context class AddVPNService(workflows.Workflow): slug = "addvpnservice" name = _("Add VPN Service") finalize_button_name = _("Add") success_message = _('Added VPN service "%s".') failure_message = _('Unable to add VPN service "%s".') success_url = "horizon:project:vpn:index" default_steps = (AddVPNServiceStep,) def format_status_message(self, message): return message % self.context.get('name') def handle(self, request, context): try: api_vpn.vpnservice_create(request, **context) return True except Exception: return False class AddEndpointGroupAction(workflows.Action): name = forms.CharField( max_length=80, label=_("Name"), required=False) description = forms.CharField( initial="", required=False, max_length=80, label=_("Description")) type = forms.ThemableChoiceField( label=_("Type"), help_text=_("IPsec connection validation requires that local " "endpoints are subnets, and peer endpoints are CIDRs."), choices=[('cidr', _('CIDR (for external systems)')), ('subnet', _('Subnet (for local systems)'))], widget=forms.ThemableSelectWidget(attrs={ 'class': 'switchable', 'data-slug': 'type', })) cidrs = forms.MultiIPField( required=False, label=_("External System CIDRs"), widget=forms.TextInput(attrs={ 'class': 'switched', 'data-switch-on': 'type', 'data-type-cidr': _("External System CIDRs"), }), help_text=_("Remote peer subnet(s) address(es) " "with mask(s) in CIDR format " "separated with commas if needed " "(e.g. 20.1.0.0/24, 21.1.0.0/24). " "This field is valid if type is CIDR"), version=forms.IPv4 | forms.IPv6, mask=True) subnets = forms.MultipleChoiceField( required=False, label=_("Local System Subnets"), widget=forms.CheckboxSelectMultiple(attrs={ 'class': 'switched', 'data-switch-on': 'type', 'data-type-subnet': _("External System Subnets"), }), help_text=_("Local subnet(s). " "This field is valid if type is Subnet"),) def populate_subnets_choices(self, request, context): subnets_choices = [] try: tenant_id = request.user.tenant_id networks = api.neutron.network_list_for_tenant(request, tenant_id) except Exception: exceptions.handle(request, _('Unable to retrieve networks list.')) networks = [] for n in networks: for s in n['subnets']: subnets_choices.append((s.id, s.cidr)) self.fields['subnets'].choices = subnets_choices return subnets_choices class Meta(object): name = _("Add New Endpoint Groups") permissions = ('openstack.services.network',) help_text_template = "project/vpn/_add_endpoint_group_help.html" class AddEndpointGroupStep(workflows.Step): action_class = AddEndpointGroupAction contributes = ("name", "description", "type", "cidrs", "subnets", "endpoints") def contribute(self, data, context): context = super(AddEndpointGroupStep, self).contribute(data, context) if context['type'] == 'cidr': cidrs = context['cidrs'] context['endpoints'] = [ cidr.strip() for cidr in cidrs.split(',') if cidr.strip()] else: context['endpoints'] = context['subnets'] if data: return context class AddEndpointGroup(workflows.Workflow): slug = "addendpointgroup" name = _("Add Endpoint Group") finalize_button_name = _("Add") success_message = _('Added endpoint group "%s".') failure_message = _('Unable to add endpoint group "%s".') success_url = "horizon:project:vpn:index" default_steps = (AddEndpointGroupStep,) def format_status_message(self, message): return message % self.context.get('name') def handle(self, request, context): try: api_vpn.endpointgroup_create(request, name=context['name'], description=context['description'], type=context['type'], endpoints=context['endpoints']) return True except Exception: return False class AddIKEPolicyAction(workflows.Action): name = forms.CharField(max_length=80, label=_("Name"), required=False) description = forms.CharField( initial="", required=False, max_length=80, label=_("Description")) auth_algorithm = forms.ThemableChoiceField( label=_("Authorization algorithm"), required=False) encryption_algorithm = forms.ThemableChoiceField( label=_("Encryption algorithm"), required=False) ike_version = forms.ThemableChoiceField( label=_("IKE version"), required=False) lifetime_units = forms.ThemableChoiceField( label=_("Lifetime units for IKE keys"), required=False) lifetime_value = forms.IntegerField( min_value=60, label=_("Lifetime value for IKE keys"), initial=3600, help_text=_("Equal to or greater than 60"), required=False) pfs = forms.ThemableChoiceField( label=_("Perfect Forward Secrecy"), required=False) phase1_negotiation_mode = forms.ThemableChoiceField( label=_("IKE Phase1 negotiation mode"), required=False) def __init__(self, request, *args, **kwargs): super(AddIKEPolicyAction, self).__init__(request, *args, **kwargs) auth_algorithm_choices = [ ("sha1", "sha1"), ('sha256', _('sha256')), ('sha384', _('sha384')), ('sha512', _('sha512')), ] self.fields['auth_algorithm'].choices = auth_algorithm_choices # Currently this field has only one choice, so mark it as readonly. self.fields['auth_algorithm'].widget.attrs['readonly'] = True encryption_algorithm_choices = [("3des", "3des"), ("aes-128", "aes-128"), ("aes-192", "aes-192"), ("aes-256", "aes-256")] self.fields[ 'encryption_algorithm'].choices = encryption_algorithm_choices self.fields['encryption_algorithm'].initial = "aes-128" ike_version_choices = [("v1", "v1"), ("v2", "v2")] self.fields['ike_version'].choices = ike_version_choices lifetime_units_choices = [("seconds", "seconds")] self.fields['lifetime_units'].choices = lifetime_units_choices # Currently this field has only one choice, so mark it as readonly. self.fields['lifetime_units'].widget.attrs['readonly'] = True pfs_choices = [("group2", "group2"), ("group5", "group5"), ("group14", "group14")] self.fields['pfs'].choices = pfs_choices self.fields['pfs'].initial = "group5" phase1_neg_mode_choices = [("main", "main"), ("aggressive", "aggressive")] self.fields[ 'phase1_negotiation_mode'].choices = phase1_neg_mode_choices class Meta(object): name = _("Add New IKE Policy") permissions = ('openstack.services.network',) help_text_template = "project/vpn/_add_ike_policy_help.html" class AddIKEPolicyStep(workflows.Step): action_class = AddIKEPolicyAction contributes = ("name", "description", "auth_algorithm", "encryption_algorithm", "ike_version", "lifetime_units", "lifetime_value", "pfs", "phase1_negotiation_mode") def contribute(self, data, context): context = super(AddIKEPolicyStep, self).contribute(data, context) context['lifetime'] = {'units': data['lifetime_units'], 'value': data['lifetime_value']} context.pop('lifetime_units') context.pop('lifetime_value') if data: return context class AddIKEPolicy(workflows.Workflow): slug = "addikepolicy" name = _("Add IKE Policy") finalize_button_name = _("Add") success_message = _('Added IKE policy "%s".') failure_message = _('Unable to add IKE policy "%s".') success_url = "horizon:project:vpn:index" default_steps = (AddIKEPolicyStep,) def format_status_message(self, message): return message % self.context.get('name') def handle(self, request, context): try: api_vpn.ikepolicy_create(request, **context) return True except Exception: return False class AddIPsecPolicyAction(workflows.Action): name = forms.CharField(max_length=80, label=_("Name"), required=False) description = forms.CharField( initial="", required=False, max_length=80, label=_("Description")) auth_algorithm = forms.ThemableChoiceField( label=_("Authorization algorithm"), required=False) encapsulation_mode = forms.ThemableChoiceField( label=_("Encapsulation mode"), required=False) encryption_algorithm = forms.ThemableChoiceField( label=_("Encryption algorithm"), required=False) lifetime_units = forms.ThemableChoiceField( label=_("Lifetime units"), required=False) lifetime_value = forms.IntegerField( min_value=60, label=_("Lifetime value for IKE keys "), initial=3600, help_text=_("Equal to or greater than 60"), required=False) pfs = forms.ThemableChoiceField( label=_("Perfect Forward Secrecy"), required=False) transform_protocol = forms.ThemableChoiceField( label=_("Transform Protocol"), required=False) def __init__(self, request, *args, **kwargs): super(AddIPsecPolicyAction, self).__init__(request, *args, **kwargs) auth_algorithm_choices = [ ("sha1", "sha1"), ('sha256', _('sha256')), ('sha384', _('sha384')), ('sha512', _('sha512')), ] self.fields['auth_algorithm'].choices = auth_algorithm_choices # Currently this field has only one choice, so mark it as readonly. self.fields['auth_algorithm'].widget.attrs['readonly'] = True encapsulation_mode_choices = [("tunnel", "tunnel"), ("transport", "transport")] self.fields['encapsulation_mode'].choices = encapsulation_mode_choices encryption_algorithm_choices = [("3des", "3des"), ("aes-128", "aes-128"), ("aes-192", "aes-192"), ("aes-256", "aes-256")] self.fields[ 'encryption_algorithm'].choices = encryption_algorithm_choices self.fields['encryption_algorithm'].initial = "aes-128" lifetime_units_choices = [("seconds", "seconds")] self.fields['lifetime_units'].choices = lifetime_units_choices # Currently this field has only one choice, so mark it as readonly. self.fields['lifetime_units'].widget.attrs['readonly'] = True pfs_choices = [("group2", "group2"), ("group5", "group5"), ("group14", "group14")] self.fields['pfs'].choices = pfs_choices self.fields['pfs'].initial = "group5" transform_protocol_choices = [("esp", "esp"), ("ah", "ah"), ("ah-esp", "ah-esp")] self.fields['transform_protocol'].choices = transform_protocol_choices class Meta(object): name = _("Add New IPsec Policy") permissions = ('openstack.services.network',) help_text_template = 'project/vpn/_add_ipsec_policy_help.html' class AddIPsecPolicyStep(workflows.Step): action_class = AddIPsecPolicyAction contributes = ("name", "description", "auth_algorithm", "encapsulation_mode", "encryption_algorithm", "lifetime_units", "lifetime_value", "pfs", "transform_protocol") def contribute(self, data, context): context = super(AddIPsecPolicyStep, self).contribute(data, context) context['lifetime'] = {'units': data['lifetime_units'], 'value': data['lifetime_value']} context.pop('lifetime_units') context.pop('lifetime_value') if data: return context class AddIPsecPolicy(workflows.Workflow): slug = "addipsecpolicy" name = _("Add IPsec Policy") finalize_button_name = _("Add") success_message = _('Added IPsec policy "%s".') failure_message = _('Unable to add IPsec policy "%s".') success_url = "horizon:project:vpn:index" default_steps = (AddIPsecPolicyStep,) def format_status_message(self, message): return message % self.context.get('name') def handle(self, request, context): try: api_vpn.ipsecpolicy_create(request, **context) return True except Exception: return False class AddIPsecSiteConnectionAction(workflows.Action): name = forms.CharField(max_length=80, label=_("Name"), required=False) description = forms.CharField( initial="", required=False, max_length=80, label=_("Description")) vpnservice_id = forms.ThemableChoiceField( label=_("VPN service associated with this connection")) local_ep_group_id = forms.ThemableChoiceField( required=False, label=_("Endpoint group for local subnet(s)"), help_text=_("Local subnets which the new IPsec connection is " "connected to. Required if no subnet is specified " "in a VPN service selected.")) ikepolicy_id = forms.ThemableChoiceField( label=_("IKE policy associated with this connection")) ipsecpolicy_id = forms.ThemableChoiceField( label=_("IPsec policy associated with this connection")) peer_address = forms.CharField( label=_("Peer gateway public IPv4/IPv6 Address or FQDN"), help_text=_("Peer gateway public IPv4/IPv6 address or FQDN for " "the VPN Connection"),) peer_id = forms.CharField( label=_("Peer router identity for authentication (Peer ID)"), help_text=_("Peer router identity for authentication. " "Can be IPv4/IPv6 address, e-mail, key ID, or FQDN"),) peer_ep_group_id = forms.ThemableChoiceField( required=False, label=_("Endpoint group for remote peer CIDR(s)"), help_text=_("Remote peer CIDR(s) connected to the new IPsec " "connection.")) peer_cidrs = forms.MultiIPField( required=False, label=_("Remote peer subnet(s)"), help_text=_("(Deprecated) Remote peer subnet(s) address(es) " "with mask(s) in CIDR format " "separated with commas if needed " "(e.g. 20.1.0.0/24, 21.1.0.0/24)"), version=forms.IPv4 | forms.IPv6, mask=True) psk = forms.CharField( max_length=80, label=_("Pre-Shared Key (PSK) string"), widget=forms.PasswordInput(render_value=False), help_text=_("The pre-defined key string " "between the two peers of the VPN connection")) def populate_ikepolicy_id_choices(self, request, context): ikepolicy_id_choices = [('', _("Select IKE policy"))] try: tenant_id = self.request.user.tenant_id ikepolicies = api_vpn.ikepolicy_list(request, tenant_id=tenant_id) except Exception: exceptions.handle(request, _('Unable to retrieve IKE policies list.')) ikepolicies = [] for p in ikepolicies: ikepolicy_id_choices.append((p.id, p.name_or_id)) self.fields['ikepolicy_id'].choices = ikepolicy_id_choices return ikepolicy_id_choices def populate_ipsecpolicy_id_choices(self, request, context): ipsecpolicy_id_choices = [('', _("Select IPsec Policy"))] try: tenant_id = self.request.user.tenant_id ipsecpolicies = api_vpn.ipsecpolicy_list(request, tenant_id=tenant_id) except Exception: exceptions.handle(request, _('Unable to retrieve IPsec policies list.')) ipsecpolicies = [] for p in ipsecpolicies: ipsecpolicy_id_choices.append((p.id, p.name_or_id)) self.fields['ipsecpolicy_id'].choices = ipsecpolicy_id_choices return ipsecpolicy_id_choices def populate_vpnservice_id_choices(self, request, context): vpnservice_id_choices = [('', _("Select VPN service"))] try: tenant_id = self.request.user.tenant_id vpnservices = api_vpn.vpnservice_list(request, tenant_id=tenant_id) except Exception: exceptions.handle(request, _('Unable to retrieve VPN services list.')) vpnservices = [] for s in vpnservices: vpnservice_id_choices.append((s.id, s.name_or_id)) self.fields['vpnservice_id'].choices = vpnservice_id_choices return vpnservice_id_choices def populate_local_ep_group_id_choices(self, request, context): try: tenant_id = self.request.user.tenant_id endpointgroups = api_vpn.endpointgroup_list(request, tenant_id=tenant_id) except Exception: exceptions.handle(request, _('Unable to retrieve endpoint group list.')) endpointgroups = [] local_ep_group_ids = [(ep.id, ep.name_or_id) for ep in endpointgroups if ep.type == 'subnet'] local_ep_group_ids.insert(0, ('', _("Select local endpoint group"))) self.fields['local_ep_group_id'].choices = local_ep_group_ids return local_ep_group_ids def populate_peer_ep_group_id_choices(self, request, context): try: tenant_id = self.request.user.tenant_id endpointgroups = api_vpn.endpointgroup_list(request, tenant_id=tenant_id) except Exception: exceptions.handle(request, _('Unable to retrieve endpoint group list.')) endpointgroups = [] peer_ep_group_ids = [(ep.id, ep.name_or_id) for ep in endpointgroups if ep.type == 'cidr'] peer_ep_group_ids.insert(0, ('', _("Select peer endpoint group"))) self.fields['peer_ep_group_id'].choices = peer_ep_group_ids return peer_ep_group_ids class Meta(object): name = _("Add New IPsec Site Connection") permissions = ('openstack.services.network',) help_text = _("Create IPsec site connection for current " "project. Assign a name and description for the " "IPsec site connection. " "All fields in this tab are required." ) class AddIPsecSiteConnectionStep(workflows.Step): action_class = AddIPsecSiteConnectionAction contributes = ("name", "description", "vpnservice_id", "ikepolicy_id", "ipsecpolicy_id", "peer_address", "peer_id", "peer_cidrs", "psk", "local_ep_group_id", "peer_ep_group_id") class AddIPsecSiteConnectionOptionalAction(workflows.Action): mtu = forms.IntegerField( min_value=68, label=_("Maximum Transmission Unit size for the connection"), initial=1500, required=False, help_text=_("Equal to or greater than 68 if the local subnet is IPv4. " "Equal to or greater than 1280 if the local subnet " "is IPv6.")) dpd_action = forms.ThemableChoiceField( label=_("Dead peer detection actions"), required=False) dpd_interval = forms.IntegerField( min_value=1, label=_("Dead peer detection interval"), initial=30, required=False, help_text=_("Valid integer lesser than DPD timeout")) dpd_timeout = forms.IntegerField( min_value=1, label=_("Dead peer detection timeout"), initial=120, required=False, help_text=_("Valid integer greater than the DPD interval")) initiator = forms.ThemableChoiceField( label=_("Initiator state"), required=False) admin_state_up = forms.BooleanField( label=_("Enable Admin State"), help_text=_("The state of IPsec site connection to start in. " "If disabled (not checked), IPsec site connection " "does not forward packets."), initial=True, required=False) def __init__(self, request, *args, **kwargs): super(AddIPsecSiteConnectionOptionalAction, self).__init__( request, *args, **kwargs) initiator_choices = [("bi-directional", "bi-directional"), ("response-only", "response-only")] self.fields['initiator'].choices = initiator_choices def populate_dpd_action_choices(self, request, context): dpd_action_choices = [("hold", "hold"), ("clear", "clear"), ("disabled", "disabled"), ("restart", "restart"), ("restart-by-peer", "restart-by-peer")] self.fields['dpd_action'].choices = dpd_action_choices return dpd_action_choices def clean(self): cleaned_data = super(AddIPsecSiteConnectionOptionalAction, self).clean() interval = cleaned_data.get('dpd_interval') timeout = cleaned_data.get('dpd_timeout') if not interval < timeout: msg = _("DPD Timeout must be greater than DPD Interval") self._errors['dpd_timeout'] = self.error_class([msg]) return cleaned_data class Meta(object): name = _("Optional Parameters") permissions = ('openstack.services.network',) help_text = _("Fields in this tab are optional. " "You can configure the detail of " "IPsec site connection created." ) class AddIPsecSiteConnectionOptionalStep(workflows.Step): action_class = AddIPsecSiteConnectionOptionalAction contributes = ("dpd_action", "dpd_interval", "dpd_timeout", "initiator", "mtu", "admin_state_up") def contribute(self, data, context): context = super( AddIPsecSiteConnectionOptionalStep, self).contribute(data, context) context['dpd'] = {'action': data['dpd_action'], 'interval': data['dpd_interval'], 'timeout': data['dpd_timeout']} context.pop('dpd_action') context.pop('dpd_interval') context.pop('dpd_timeout') cidrs = context['peer_cidrs'] context['peer_cidrs'] = [cidr.strip() for cidr in cidrs.split(',') if cidr.strip()] if data: return context class AddIPsecSiteConnection(workflows.Workflow): slug = "addipsecsiteconnection" name = _("Add IPsec Site Connection") finalize_button_name = _("Add") success_message = _('Added IPsec site connection "%s".') failure_message = _('Unable to add IPsec site connection "%s".') success_url = "horizon:project:vpn:index" default_steps = (AddIPsecSiteConnectionStep, AddIPsecSiteConnectionOptionalStep) def format_status_message(self, message): return message % self.context.get('name') def handle(self, request, context): try: api_vpn.ipsecsiteconnection_create(request, **context) return True except Exception: return False ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.390892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/enabled/0000775000175000017500000000000014750123115026661 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/enabled/_7100_project_vpn_panel.py0000664000175000017500000000175014750122063033555 0ustar00jamespagejamespage# 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 slug of the panel to be added to HORIZON_CONFIG. Required. PANEL = 'vpn' # The slug of the dashboard the PANEL associated with. Required. PANEL_DASHBOARD = 'project' # The slug of the panel group the PANEL is associated with. PANEL_GROUP = 'network' # Python panel class of the PANEL to be added. ADD_PANEL = 'neutron_vpnaas_dashboard.dashboards.project.vpn.panel.VPN' ADD_INSTALLED_APPS = ["neutron_vpnaas_dashboard"] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/enabled/__init__.py0000664000175000017500000000000014750122063030761 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.390892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/0000775000175000017500000000000014750123115026526 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/.placeholder0000664000175000017500000000000014750122063031000 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.379892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/de/0000775000175000017500000000000014750123115027116 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.390892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/de/LC_MESSAGES/0000775000175000017500000000000014750123115030703 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/de/LC_MESSAGES/django.po0000664000175000017500000006031214750122063032510 0ustar00jamespagejamespage# Frank Kloeker , 2016. #zanata # Andreas Jaeger , 2018. #zanata # Frank Kloeker , 2018. #zanata # Robert Simai , 2018. #zanata # Robert Simai , 2019. #zanata # Andreas Jaeger , 2020. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2020-10-02 07:38+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2020-10-05 06:36+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 "" "(Deprecated) Remote peer subnet(s) address(es) with mask(s) in CIDR format " "separated with commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "(Veraltet) Entfernte Peer-Subnetz-Adresse(n) mit Maske(n) im CIDR-Format, " "Komma-separiert, wenn nötig (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgid "-" msgstr "-" msgid "3des" msgstr "3des" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Active" msgstr "Aktiv" msgid "Add" msgstr "Hinzufügen" msgid "Add Endpoint Group" msgstr "Endpunktgruppe hinzufügen" msgid "Add IKE Policy" msgstr "IKE Richtlinie hinzufügen" msgid "Add IPsec Policy" msgstr "IPSec Richtlinie hinzufügen" msgid "Add IPsec Site Connection" msgstr "Füge IPSec Site Verbindung hinzu" msgid "Add New Endpoint Groups" msgstr "Neue Endpunktgruppen hinzufügen" msgid "Add New IKE Policy" msgstr "Neue IKE Richtlinie hinzufügen" msgid "Add New IPsec Policy" msgstr "Neue IPsec Richtlinie hinzufügen." msgid "Add New IPsec Site Connection" msgstr "Füge neue IPsec Site Verbindung hinzu" msgid "Add New VPN Service" msgstr "Neuen VPN Dienst hinzufügen." msgid "Add VPN Service" msgstr "VPN Dienst hinzufügen" #, python-format msgid "Added IKE policy \"%s\"." msgstr "IKE Richtlinie \"%s\" hinzugefügt." #, python-format msgid "Added IPsec policy \"%s\"." msgstr "IPsec Richtlinie \"%s\" hinzugefügt." #, python-format msgid "Added IPsec site connection \"%s\"." msgstr "IPsec Site Verbindung \"%s\" wurde hinzugefügt." #, python-format msgid "Added VPN service \"%s\"." msgstr "VPN Dienst \"%s\" wurde hinzugefügt." #, python-format msgid "Added endpoint group \"%s\"." msgstr "Endpunktgruppe \"%s\" hinzugefügt." msgid "Admin State" msgstr "Adminstatus" msgid "Admin State is enabled by default." msgstr "Admin Status ist in der Grundeinstellung aktiviert." msgid "All fields are optional." msgstr "Alle Felder sind optional." msgid "An IKE policy is an association of the following attributes:" msgstr "" "Eine IKE-Richtlinie ist eine Zuordnung bestehend aus den folgenden " "Attributen:" msgid "An IPsec policy is an association of the following attributes" msgstr "" "Eine IPSec-Richtlinie ist eine Zuordnung bestehend aus den folgenden " "Attributen" msgid "Authorization algorithm" msgstr "Authorisierungsalgorithmus" msgid "Authorization algorithm =" msgstr "Authorisierungsalgorithmus =" msgid "Authorization mode" msgstr "Authorisierungsmodus" msgid "CIDR (for external systems)" msgstr "CIDR (für externe Systeme)" msgid "Create IKE policy for current project." msgstr "Erzeugen eiener IKE-Richtlinie für das aktuelle Projekt." msgid "Create IPsec policy for current project." msgstr "Erzeugen eines IPSec-Regelwerks für das aktuelle Projekt." msgid "" "Create IPsec site connection for current project. Assign a name and " "description for the IPsec site connection. All fields in this tab are " "required." msgstr "" "Erzeuge eine IPsec Site-Verbindung für das aktuelle Projekt. Fügen Sie Name " "und Beschreibung hinzu. Alle Felder in diesem Tab sind erforderlich." msgid "Create VPN service for current project." msgstr "VPN Dienst für das aktuelle Projekt erzeugen." msgid "Create endpoint group for current project." msgstr "Endpunkgruppe für das aktuelle Projekt erzeugen." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Created" msgstr "Erstellt" msgid "DPD Timeout must be greater than DPD Interval" msgstr "DPD-Zeitüberschreitung muss größer als das DPD-Intervall sein" msgid "Dead peer detection action" msgstr "Aktion zum Aufspüren von toten Peers" msgid "Dead peer detection actions" msgstr "Aktionen zum Aufspüren von toten Peers" msgid "Dead peer detection interval" msgstr "Intervall zum Aufspüren von toten Peers" msgid "Dead peer detection timeout" msgstr "Zeitüberschreitung zum Aufspüren von toten Peers" msgid "Delete Endpoint Group" msgid_plural "Delete Endpoint Groups" msgstr[0] "Endpunktgruppe löschen" msgstr[1] "Endpunktgruppen löschen" msgid "Delete IKE Policy" msgid_plural "Delete IKE Policies" msgstr[0] "Lösche IKE Richtline" msgstr[1] "Lösche IKE Richtlinien" msgid "Delete IPsec Policy" msgid_plural "Delete IPsec Policies" msgstr[0] "Lösche IPsec Richtlinie" msgstr[1] "Lösche IPsec Richtlinien" msgid "Delete IPsec Site Connection" msgid_plural "Delete IPsec Site Connections" msgstr[0] "IPsec-Seitenverbindung löschen" msgstr[1] "IPsec-Seitenverbindungen löschen" msgid "Delete VPN Service" msgid_plural "Delete VPN Services" msgstr[0] "VPN-Dienst löschen" msgstr[1] "VPN-Dienste löschen" msgid "Description" msgstr "Beschreibung" msgid "Description:" msgstr "Beschreibung:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Down" msgstr "Inaktiv" msgid "Edit Connection" msgstr "Verbindung bearbeiten" msgid "Edit Endpoint Group" msgstr "Endpunktgruppe bearbeiten" msgid "Edit IKE Policy" msgstr "IKE Richtlinie bearbeiten" msgid "Edit IPsec Policy" msgstr "IPsec-Richtlinie bearbeiten" msgid "Edit IPsec Site Connection" msgstr "Bearbeite IPsec Site Verbindung" msgid "Edit IPsec policy" msgstr "IPsec-Richtlinie bearbeiten" msgid "Edit IPsec site connection" msgstr "Bearbeite IPsec Site Verbindung" msgid "Edit VPN Service" msgstr "VPN Dienst bearbeiten" msgid "Enable Admin State" msgstr "Adminstatus aktivieren" msgid "Encapsulation mode" msgstr "Kapselungsmodus" msgid "Encryption algorithm" msgstr "Verschlüsselungsalgorithmus" msgid "Encryption algorithm =" msgstr "Verschlüsselungsalgorithmus =" msgid "Endpoint Groups" msgstr "Endpunktgruppen" msgid "Endpoint Groups Details" msgstr "Endpunktgruppendetails" #, python-format msgid "Endpoint group %s was successfully updated." msgstr "Endpunktgruppe %s wurde erfolgreich aktualisiert." msgid "Endpoint group for local subnet(s)" msgstr "Endpunktgruppe für lokale Subnetze" msgid "Endpoint group for remote peer CIDR(s)" msgstr "Endpunktgruppe für ferne(s) Peer-CIDR(s)" msgid "Endpoints" msgstr "Endpunkte" msgid "Endpoints =" msgstr "Endpunkte =" msgid "Equal to or greater than 60" msgstr "Gleich oder größer als 60" msgid "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgstr "" "Größer oder gleich 68 falls das lokale Subnetz IPv4 ist. Größer oder gleich " "1280 falls das lokale Subnetz IPv6 ist." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Error" msgstr "Fehler" msgid "External System CIDRs" msgstr "Externe System-CIDRs" msgid "External System Subnets" msgstr "Externe System-Subnetze" #, python-format msgid "Failed to update IKE policy %s" msgstr "Fehler beim Aktualisieren der IKE Richtlinie %s" #, python-format msgid "Failed to update IPsec policy %s" msgstr "Fehler beim Aktualisieren der IPSec Richtlinie %s" #, python-format msgid "Failed to update IPsec site connection %s" msgstr "IPSec Site Verbindung %s konnte nicht nicht geändert werden" #, python-format msgid "Failed to update VPN service %s" msgstr "VPN Dienst %s konnte nicht aktualisiert werden" #, python-format msgid "Failed to update endpoint group %s" msgstr "Endpunktgruppe %s konnte nicht aktualisiert werden." msgid "" "Fields in this tab are optional. You can configure the detail of IPsec site " "connection created." msgstr "" "Die Felder in diesem Tab sind optional. Sie können hier die Details der " "erzeugten IPsec Seiten-Verbindung konfigurieren." msgid "ID" msgstr "ID" msgid "IKE Phase 1 negotiation mode" msgstr "IKE Phase1 Verhandlungs-Modus" msgid "IKE Phase1 negotiation mode" msgstr "IKE Phase1 Verhandlungs-Modus" msgid "IKE Policies" msgstr "IKE Richtlinien" msgid "IKE Policy" msgstr "IKE Richtlinie" msgid "IKE Policy =" msgstr "IKE Richtlinie =" msgid "IKE Policy Details" msgstr "IKE Richtlinien Details" msgid "IKE Policy ID =" msgstr "IKE Richtlinie ID =" #, python-format msgid "IKE policy %s was successfully updated." msgstr "IKE-Richtlinie %s wurde erfolgreich aktualisiert." msgid "IKE policy associated with this connection" msgstr "IKE Richtlinie für diese Verbindung" msgid "IKE version" msgstr "IKE Version" msgid "IPsec Policies" msgstr "IPsec Richtlinien" msgid "IPsec Policy" msgstr "IPsec Richtlinie" msgid "IPsec Policy =" msgstr "IPsec Richtlinie =" msgid "IPsec Policy Details" msgstr "IPsec Richtlinien Details" msgid "IPsec Policy ID =" msgstr "IPsec Richtlinie ID =" msgid "IPsec Site Connection Details" msgstr "IPsec Site Verbindungsdetails" msgid "IPsec Site Connections" msgstr "IPsec Site Verbindungen" msgid "IPsec connection validation requires that local endpoints are subnets" msgstr "" "IPsec Verbindungsvalidierung verlangt das lokale Endpunkte Subnetze sind" msgid "" "IPsec connection validation requires that local endpoints are subnets, and " "peer endpoints are CIDRs." msgstr "" "IPsec Verbindungsvalidierung verlangt das lokale Endpunkte Subnetze und Peer-" "Endpunkte CIDRs sind." msgid "IPsec connection validation requires that peer endpoints are CIDRs" msgstr "IPsec Verbindungsvalidierung verlangt das Peer-Endpunkte CIDRs sind" #, python-format msgid "IPsec policy %s was successfully updated." msgstr "IPSec Richtlinie %s wurde erfolgreich aktualisiert." msgid "IPsec policy associated with this connection" msgstr "IPsec Richtline für diese Verbindung" #, python-format msgid "IPsec site connection %s was successfully updated." msgstr "IPSec Site Verbindung %s wurde erfolgreich aktualisiert." msgid "IPv4" msgstr "IPv4" msgid "IPv4:" msgstr "IPv4:" msgid "IPv6" msgstr "IPv6" msgid "IPv6:" msgstr "IPv6:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Inactive" msgstr "Inaktiv" msgid "Initiator state" msgstr "Initiatorstatus" msgid "" "Life time consists of units and value. Units in 'seconds' and the default " "value is 3600." msgstr "" "Die Lebensdauer besteht aus Einheit und Wert. Die Einheit ist Sekunden und " "der Standardwert ist 3600." msgid "Lifetime" msgstr "Lebensdauer" msgid "Lifetime Units" msgstr "Lebensdauer-Einheiten" msgid "Lifetime Value" msgstr "Lebensdauer-Wert" msgid "Lifetime units" msgstr "Lebensdauer-Einheiten" msgid "Lifetime units for IKE keys" msgstr "Lebensdauer der IKE-Schlüssel" msgid "Lifetime value" msgstr "Lebensdauer-Wert" msgid "Lifetime value for IKE keys" msgstr "Lebensdauer der IKE-Schlüssel" msgid "Lifetime value for IKE keys " msgstr "Gültigkeitsdauer der IKE-Schlüssel" msgid "Local Endpoint Group" msgstr "Lokale Endpunktgruppe" msgid "Local Endpoint Group(s)" msgstr "Lokale Endpunktgruppe(n)" msgid "Local Side Public IPs" msgstr "Lokale öffentliche IP" msgid "Local System Subnets" msgstr "Lokale System-Subnetze" msgid "Local subnet(s). This field is valid if type is Subnet" msgstr "Lokale(s) Subnetz(e). Dieses Feld ist gültig für Typ Subnetz" msgid "" "Local subnets which the new IPsec connection is connected to. Required if no " "subnet is specified in a VPN service selected." msgstr "" "Lokale Subnetze, die mit der neuen IPsec Verbindung verbunden sind. " "Erforderlich wenn kein Subnetz im ausgewählten VPN-Dienst definiert ist." msgid "MTU" msgstr "MTU" msgid "Maximum Transmission Unit size for the connection" msgstr "Maximale Übertragungseinheitsgröße für die Verbindung" msgid "Name" msgstr "Name" msgid "Name =" msgstr "Name =" msgid "" "Note: The recommended way to specify local subnets is to use endpoint groups " "in IPsec site connection. It is deprecated to specify subnet in VPN service. " "For a new VPN service or IPsec site connection, using endpoint group is " "recommended." msgstr "" "Anmerkung: Der empfohlene Weg um lokale Subnetze zu definieren ist " "Endpunktgruppen in der IPsec Site Verbindung zu benutzen. Subnetze im VPN-" "Dienst zu definieren ist veraltet. Die Benutzung von Endpunktgruppen ist für " "neue VPN-Dienste oder IPsec Site Verbindungen empfohlen." msgid "Optional Parameters" msgstr "Optionale Parameter" msgid "Optional. No need to be specified when you use endpoint groups." msgstr "" "Optional. Muss nicht spezifiziert werden, wenn Endpunktgruppen genutzt " "werden." msgid "PFS" msgstr "PFS" msgid "PFS =" msgstr "PFS =" msgid "PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14." msgstr "" "PFS ist beschränkt auf die Verwendung der Diffie-Hellman Gruppen 2, 5 " "(Standardwert) und 14." msgid "Peer Endpoint Group" msgstr "Ferne Endpunktgruppe" msgid "Peer Endpoint Group(s)" msgstr "Ferne Endpunktgruppe(n)" msgid "Peer gateway public IPv4/IPv6 Address or FQDN" msgstr "Öffentliche IPv4/IPv6-Adresse oder FQDN für das Peer-Gateway" msgid "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgstr "" "Öffentliche IPv4/IPv6-Adresse oder FQDN für das Peer-Gateway für die VPN-" "Verbindung" msgid "Peer router identity for authentication (Peer ID)" msgstr "Peer-Router Identität zur Authentifizierung (Peer ID)" msgid "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgstr "" "Peer-Router Identität zur Authentifizierung. Die Identität kann eine IPv4/" "IPv6-Adresse, eine E-Mail oder FQDN sein." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Create" msgstr "Geplante Erstellung" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Delete" msgstr "Geplante Löschung" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Update" msgstr "Geplante Aktualisierung" msgid "Perfect Forward Secrecy" msgstr "Perfect Forward Secrecy: perfekte vorwärts gerichtete Geheimhaltung" msgid "Pre-Shared Key (PSK) string" msgstr "Pre-Shared Schlüssel (PSK) Zeichenkette" msgid "Project ID" msgstr "Projekt-ID" msgid "Remote peer CIDR(s) connected to the new IPsec connection." msgstr "Ferne(s) peer CIDR(s) mit der der neuen IPsec Verbindung verbunden." msgid "Remote peer subnet" msgstr "Fernes Peer-Subnetz" msgid "Remote peer subnet(s)" msgstr "Ferne(s) Peer-Subnetz(e)" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "Entfernte Peer-Subnetz-Adresse(n) mit Maske(n) im CIDR-Format, Komma-" "separiert, wenn nötig (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24). This field is valid if " "type is CIDR" msgstr "" "Entfernte Peer-Subnetz-Adresse(n) mit Maske(n) im CIDR-Format, Komma-" "separiert, wenn nötig (e.g. 20.1.0.0/24, 21.1.0.0/24). Dieses Feld ist " "gültig wenn Typ CIDR ist." msgid "Route mode" msgstr "Routingmodus" msgid "Router" msgstr "Router" msgid "Router =" msgstr "Router =" msgid "Router ID =" msgstr "Router-ID =" msgid "Save Changes" msgstr "Änderungen speichern" msgid "Scheduled deletion of IKE policy" msgid_plural "Scheduled deletion of IKE policies" msgstr[0] "Geplante Löschung von IKE Richtlinie" msgstr[1] "Geplante Löschung von IKE Richtlinien" msgid "Scheduled deletion of IPsec policy" msgid_plural "Scheduled deletion of IPsec policies" msgstr[0] "Geplante Löschung von IPsec Richtlinie" msgstr[1] "Geplante Löschung von IPsec Richtlinien" msgid "Scheduled deletion of IPsec site connection" msgid_plural "Scheduled deletion of IPsec site connections" msgstr[0] "Geplante Löschung der IPsec-Seitenverbindung" msgstr[1] "Geplante Löschung von IPsec-Seitenverbindungen" msgid "Scheduled deletion of VPN service" msgid_plural "Scheduled deletion of VPN services" msgstr[0] "Geplante Löschung des VPN-Dienstes" msgstr[1] "Geplante Löschung von VPN-Diensten" msgid "Scheduled deletion of endpoint group" msgid_plural "Scheduled deletion of endpoint groups" msgstr[0] "Geplante Löschung der Endpunktgruppe" msgstr[1] "Geplante Löschung der Endpunktgruppen" msgid "Select IKE policy" msgstr "IKE Richtlinie auswählen" msgid "Select IPsec Policy" msgstr "IPsec Richtlinien auswählen" msgid "Select VPN service" msgstr "VPN Dienst auswählen" msgid "Select a Router" msgstr "Wählen Sie einen Router" msgid "Select a Subnet" msgstr "Wählen Sie ein Subnetz" msgid "Select local endpoint group" msgstr "Lokale Endpunktgruppe auswählen" msgid "Select peer endpoint group" msgstr "Ferne Endpunktgruppe auswählen" msgid "" "Specify a name, description, router, and subnet (optional) for the VPN " "service." msgstr "" "Geben Sie Name, Beschreibung, Router und Subnetz (optional) für den VPN-" "Dienst an." msgid "Status" msgstr "Status" msgid "Status =" msgstr "Status" msgid "Subnet" msgstr "Subnetz" msgid "Subnet (for local systems)" msgstr "Subnetz (für lokale Systeme)" msgid "Subnet =" msgstr "Subnetz =" msgid "Subnet ID =" msgstr "Subnetz ID =" msgid "" "The VPN service is attached to a router and references to endpoint group or " "a single subnet to push to a remote site." msgstr "" "Der VPN-Dienst wird einem Router zugewiesen und verweist auf eine " "Endpunktgruppe oder ein einzelnes Subnetz, das so für eine entfernte Site " "zugänglich wird." msgid "The pre-defined key string between the two peers of the VPN connection" msgstr "" "Die vordefinierte Schlüssel-Zeichenkette zwischen den beiden Gegenstellen " "der VPN Verbindung" msgid "" "The router and admin state fields require to be enabled. All others are " "optional." msgstr "" "Die Felder für Router und Adminstatus sind erforderlich. Alle anderen sind " "optional." msgid "" "The state of IPsec site connection to start in. If disabled (not checked), " "IPsec site connection does not forward packets." msgstr "" "Der Status, in dem die IPsec Site Verbindung gestartet wird. Wenn " "deaktiviert (nicht markiert), leitet die IPsec Site Verbindung keine Pakete " "weiter." msgid "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgstr "" "Der Zustand, in dem der VPN Dienst gestartet wird. Falls deaktiviert (nicht " "markiert), leitet der VPN Dienst keine Pakete weiter." msgid "The type of IPsec tunnel (tunnel/transport) to be used." msgstr "Der zu verwendende Typ des IPSec Tunnels (tunnel/transport)." msgid "The type of protocol (esp, ah, ah-esp) used in IPsec policy." msgstr "" "Der in der IPSec Richtlinie zu verwendende Protokolltyp (esp, ah, ah-esp)." msgid "The type of version (v1/v2) that needs to be filtered." msgstr "Der Versionstyp (v1/v2) nach dem gefiltert wird." msgid "Transform Protocol" msgstr "Verwandlungsprotokoll" msgid "Type" msgstr "Typ" msgid "Type =" msgstr "Typ =" #, python-format msgid "Unable to add IKE policy \"%s\"." msgstr "IKE Richtlinie \"%s\" konnte nicht hinzugefügt werden." #, python-format msgid "Unable to add IPsec policy \"%s\"." msgstr "IPsec Richtlinie \"%s\" konnte nicht hinzugefügt werden." #, python-format msgid "Unable to add IPsec site connection \"%s\"." msgstr "IPsec Site Verbindung \"%s\" konnte nicht hinzugefügt werden." #, python-format msgid "Unable to add VPN service \"%s\"." msgstr "VPN Dienst \"%s\" konnte nicht hinzugefügt werden." #, python-format msgid "Unable to add endpoint group \"%s\"." msgstr "Endpunktgruppe \"%s\" kann nicht hinzugefügt werden." msgid "Unable to delete IKE policy." msgstr "IKE Richtlinie konnte nicht gelöscht werden." msgid "Unable to delete IPsec policy." msgstr "IPsec Richtlinie konnte nicht gelöscht werden." msgid "Unable to delete IPsec site connection." msgstr "IPsec Site Verbindung konnte nicht gelöscht werden." msgid "Unable to delete VPN service." msgstr "VPN Dienst konnte nicht gelöscht werden." msgid "Unable to delete endpoint group." msgstr "Endpunktgruppe konnte nicht gelöscht werden." msgid "Unable to retrieve IKE policies list." msgstr "Liste der IKE Richtlinien kann nicht abgerufen werden." msgid "Unable to retrieve IKE policy details." msgstr "IKE Richtliniendetails können nicht abgerufen werden." msgid "Unable to retrieve IPsec policies list." msgstr "IPSec Richtlinien Liste kann nicht abgerufen werden." msgid "Unable to retrieve IPsec policy details." msgstr "IPsec Richtliniendetails können nicht abgerufen werden." msgid "Unable to retrieve IPsec policy list." msgstr "IPsec Richtlinienliste kann nicht abgerufen werden." msgid "Unable to retrieve IPsec site connection details." msgstr "IPsec Site Verbindungsdetails können nicht abgerufen werden." msgid "Unable to retrieve IPsec site connections list." msgstr "IPsec Site Verbindungsliste kann nicht abgerufen werden." msgid "Unable to retrieve VPN service details." msgstr "VPN Dienstdetails können nicht abgerufen werden." msgid "Unable to retrieve VPN services list." msgstr "VPN Diensteliste kann nicht abgerufen werden." msgid "Unable to retrieve endpoint group details." msgstr "Endpunktgruppendetails können nicht abgerufen werden." msgid "Unable to retrieve endpoint group list." msgstr "Endpunktgruppenliste kann nicht abgerufen werden." msgid "Unable to retrieve networks list." msgstr "Die Netzwerk-Liste kann nicht abgerufen werden." msgid "Unable to retrieve routers list." msgstr "Liste der Router kann nicht abgerufen werden." msgid "VPN" msgstr "VPN" msgid "VPN Connections" msgstr "VPN Verbindungen" msgid "VPN Service" msgstr "VPN Dienst" msgid "VPN Service =" msgstr "VPN Dienst =" msgid "VPN Service Details" msgstr "VPN Dienstdetails" msgid "VPN Service ID =" msgstr "VPN Dienst ID =" msgid "VPN Services" msgstr "VPN Dienste" #, python-format msgid "VPN service %s was successfully updated." msgstr "VPN Dienst %s erfolgreich aktualisiert." msgid "VPN service associated with this connection" msgstr "VPN Dienst für diese Verbindung" msgid "Valid algorithms are 3des, aes-128, aes-192 and aes-256." msgstr "Gültige Algorithmen sind 3des, aes-128, aes-192 und aes-256." msgid "Valid algorithms are sha1, sha256, sha384 and sha512." msgstr "Gültige Algorithmen sind sha1, sha256, sha384 und sha512." msgid "Valid integer greater than the DPD interval" msgstr "Gültige Ganzzahl größer als das DPD Intervall" msgid "Valid integer lesser than DPD timeout" msgstr "Gültige Ganzzahl kleiner als DPD-Zeitüberschreitung" msgid "Valid integer lesser than the DPD timeout" msgstr "Gültige Ganzzahl kleiner als die DPD-Zeitüberschreitung" msgid "Virtual Private Network" msgstr "Virtuelles privates Netz" msgid "You may update IKE policy details here." msgstr "Hier können Sie die Details der IKE Richtlinie bearbeiten." msgid "You may update IPsec policy details here." msgstr "Hier können Sie die Details der IPSec Richtlinie bearbeiten." msgid "You may update IPsec site connection details here." msgstr "Hier können Sie die Details der IPSec Site Verbindung bearbeiten." msgid "You may update VPN service details here." msgstr "Hier können Sie Details des VPN Services bearbeiten." msgid "You may update endpoint group details here." msgstr "Hier können Sie die Details der Endpunktgruppe aktualisieren." msgid "aes-128" msgstr "aes-128" msgid "aes-192" msgstr "aes-192" msgid "aes-256" msgstr "aes-256" msgid "ah" msgstr "ah" msgid "ah-esp" msgstr "ah-esp" msgid "bi-directional" msgstr "bidirektional" msgid "clear" msgstr "löschen" msgid "disabled" msgstr "inaktiviert" msgid "down" msgstr "Inaktiv" msgid "esp" msgstr "esp" msgid "group14" msgstr "Gruppe14" msgid "group2" msgstr "Gruppe2" msgid "group5" msgstr "Gruppe5" msgid "hold" msgstr "halten" msgid "response-only" msgstr "nur Response" msgid "restart" msgstr "neustarten" msgid "restart-by-peer" msgstr "neustart bei Peer" msgid "seconds" msgstr "Sekunden" msgid "sha1" msgstr "sha1" msgid "sha256" msgstr "sha256" msgid "sha384" msgstr "sha384" msgid "sha512" msgstr "sha512" msgid "transport" msgstr "Transport" msgid "tunnel" msgstr "Tunnel" msgid "up" msgstr "Aktiv" msgid "v1" msgstr "v1" msgid "v2" msgstr "v2" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.379892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/en_GB/0000775000175000017500000000000014750123115027500 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.390892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/en_GB/LC_MESSAGES/0000775000175000017500000000000014750123115031265 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/en_GB/LC_MESSAGES/django.po0000664000175000017500000005553414750122063033104 0ustar00jamespagejamespage# OpenStack Infra , 2015. #zanata # Rob Cresswell , 2015. #zanata # Andi Chandler , 2016. #zanata # Rob Cresswell , 2016. #zanata # Andi Chandler , 2017. #zanata # Jacky Hu , 2017. #zanata # Andi Chandler , 2018. #zanata # Andi Chandler , 2019. #zanata # Andi Chandler , 2020. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2020-10-02 07:38+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2020-10-10 01:59+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 "" "(Deprecated) Remote peer subnet(s) address(es) with mask(s) in CIDR format " "separated with commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "(Deprecated) Remote peer subnet(s) address(es) with mask(s) in CIDR format " "separated with commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgid "-" msgstr "-" msgid "3des" msgstr "3des" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Active" msgstr "Active" msgid "Add" msgstr "Add" msgid "Add Endpoint Group" msgstr "Add Endpoint Group" msgid "Add IKE Policy" msgstr "Add IKE Policy" msgid "Add IPsec Policy" msgstr "Add IPsec Policy" msgid "Add IPsec Site Connection" msgstr "Add IPsec Site Connection" msgid "Add New Endpoint Groups" msgstr "Add New Endpoint Groups" msgid "Add New IKE Policy" msgstr "Add New IKE Policy" msgid "Add New IPsec Policy" msgstr "Add New IPsec Policy" msgid "Add New IPsec Site Connection" msgstr "Add New IPsec Site Connection" msgid "Add New VPN Service" msgstr "Add New VPN Service" msgid "Add VPN Service" msgstr "Add VPN Service" #, python-format msgid "Added IKE policy \"%s\"." msgstr "Added IKE policy \"%s\"." #, python-format msgid "Added IPsec policy \"%s\"." msgstr "Added IPsec policy \"%s\"." #, python-format msgid "Added IPsec site connection \"%s\"." msgstr "Added IPsec site connection \"%s\"." #, python-format msgid "Added VPN service \"%s\"." msgstr "Added VPN service \"%s\"." #, python-format msgid "Added endpoint group \"%s\"." msgstr "Added endpoint group \"%s\"." msgid "Admin State" msgstr "Admin State" msgid "Admin State is enabled by default." msgstr "Admin State is enabled by default." msgid "All fields are optional." msgstr "All fields are optional." msgid "An IKE policy is an association of the following attributes:" msgstr "An IKE policy is an association of the following attributes:" msgid "An IPsec policy is an association of the following attributes" msgstr "An IPsec policy is an association of the following attributes" msgid "Authorization algorithm" msgstr "Authorisation algorithm" msgid "Authorization algorithm =" msgstr "Authorisation algorithm =" msgid "Authorization mode" msgstr "Authorisation mode" msgid "CIDR (for external systems)" msgstr "CIDR (for external systems)" msgid "Create IKE policy for current project." msgstr "Create IKE policy for current project." msgid "Create IPsec policy for current project." msgstr "Create IPsec policy for current project." msgid "" "Create IPsec site connection for current project. Assign a name and " "description for the IPsec site connection. All fields in this tab are " "required." msgstr "" "Create IPsec site connection for current project. Assign a name and " "description for the IPsec site connection. All fields in this tab are " "required." msgid "Create VPN service for current project." msgstr "Create VPN service for current project." msgid "Create endpoint group for current project." msgstr "Create endpoint group for current project." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Created" msgstr "Created" msgid "DPD Timeout must be greater than DPD Interval" msgstr "DPD Timeout must be greater than DPD Interval" msgid "Dead peer detection action" msgstr "Dead peer detection action" msgid "Dead peer detection actions" msgstr "Dead peer detection actions" msgid "Dead peer detection interval" msgstr "Dead peer detection interval" msgid "Dead peer detection timeout" msgstr "Dead peer detection timeout" msgid "Delete Endpoint Group" msgid_plural "Delete Endpoint Groups" msgstr[0] "Delete Endpoint Group" msgstr[1] "Delete Endpoint Groups" msgid "Delete IKE Policy" msgid_plural "Delete IKE Policies" msgstr[0] "Delete IKE Policy" msgstr[1] "Delete IKE Policies" msgid "Delete IPsec Policy" msgid_plural "Delete IPsec Policies" msgstr[0] "Delete IPsec Policy" msgstr[1] "Delete IPsec Policies" msgid "Delete IPsec Site Connection" msgid_plural "Delete IPsec Site Connections" msgstr[0] "Delete IPsec Site Connection" msgstr[1] "Delete IPsec Site Connections" msgid "Delete VPN Service" msgid_plural "Delete VPN Services" msgstr[0] "Delete VPN Service" msgstr[1] "Delete VPN Services" msgid "Description" msgstr "Description" msgid "Description:" msgstr "Description:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Down" msgstr "Down" msgid "Edit Connection" msgstr "Edit Connection" msgid "Edit Endpoint Group" msgstr "Edit Endpoint Group" msgid "Edit IKE Policy" msgstr "Edit IKE Policy" msgid "Edit IPsec Policy" msgstr "Edit IPsec Policy" msgid "Edit IPsec Site Connection" msgstr "Edit IPsec Site Connection" msgid "Edit IPsec policy" msgstr "Edit IPsec policy" msgid "Edit IPsec site connection" msgstr "Edit IPsec site connection" msgid "Edit VPN Service" msgstr "Edit VPN Service" msgid "Enable Admin State" msgstr "Enable Admin State" msgid "Encapsulation mode" msgstr "Encapsulation mode" msgid "Encryption algorithm" msgstr "Encryption algorithm" msgid "Encryption algorithm =" msgstr "Encryption algorithm =" msgid "Endpoint Groups" msgstr "Endpoint Groups" msgid "Endpoint Groups Details" msgstr "Endpoint Groups Details" #, python-format msgid "Endpoint group %s was successfully updated." msgstr "Endpoint group %s was successfully updated." msgid "Endpoint group for local subnet(s)" msgstr "Endpoint group for local subnet(s)" msgid "Endpoint group for remote peer CIDR(s)" msgstr "Endpoint group for remote peer CIDR(s)" msgid "Endpoints" msgstr "Endpoints" msgid "Endpoints =" msgstr "Endpoints =" msgid "Equal to or greater than 60" msgstr "Equal to or greater than 60" msgid "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgstr "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Error" msgstr "Error" msgid "External System CIDRs" msgstr "External System CIDRs" msgid "External System Subnets" msgstr "External System Subnets" #, python-format msgid "Failed to update IKE policy %s" msgstr "Failed to update IKE policy %s" #, python-format msgid "Failed to update IPsec policy %s" msgstr "Failed to update IPsec policy %s" #, python-format msgid "Failed to update IPsec site connection %s" msgstr "Failed to update IPsec site connection %s" #, python-format msgid "Failed to update VPN service %s" msgstr "Failed to update VPN service %s" #, python-format msgid "Failed to update endpoint group %s" msgstr "Failed to update endpoint group %s" msgid "" "Fields in this tab are optional. You can configure the detail of IPsec site " "connection created." msgstr "" "Fields in this tab are optional. You can configure the detail of IPsec site " "connection created." msgid "ID" msgstr "ID" msgid "IKE Phase 1 negotiation mode" msgstr "IKE Phase 1 negotiation mode" msgid "IKE Phase1 negotiation mode" msgstr "IKE Phase1 negotiation mode" msgid "IKE Policies" msgstr "IKE Policies" msgid "IKE Policy" msgstr "IKE Policy" msgid "IKE Policy =" msgstr "IKE Policy =" msgid "IKE Policy Details" msgstr "IKE Policy Details" msgid "IKE Policy ID =" msgstr "IKE Policy ID =" #, python-format msgid "IKE policy %s was successfully updated." msgstr "IKE policy %s was successfully updated." msgid "IKE policy associated with this connection" msgstr "IKE policy associated with this connection" msgid "IKE version" msgstr "IKE version" msgid "IPsec Policies" msgstr "IPsec Policies" msgid "IPsec Policy" msgstr "IPsec Policy" msgid "IPsec Policy =" msgstr "IPsec Policy =" msgid "IPsec Policy Details" msgstr "IPsec Policy Details" msgid "IPsec Policy ID =" msgstr "IPsec Policy ID =" msgid "IPsec Site Connection Details" msgstr "IPsec Site Connection Details" msgid "IPsec Site Connections" msgstr "IPsec Site Connections" msgid "IPsec connection validation requires that local endpoints are subnets" msgstr "IPsec connection validation requires that local endpoints are subnets" msgid "" "IPsec connection validation requires that local endpoints are subnets, and " "peer endpoints are CIDRs." msgstr "" "IPsec connection validation requires that local endpoints are subnets, and " "peer endpoints are CIDRs." msgid "IPsec connection validation requires that peer endpoints are CIDRs" msgstr "IPsec connection validation requires that peer endpoints are CIDRs" #, python-format msgid "IPsec policy %s was successfully updated." msgstr "IPsec policy %s was successfully updated." msgid "IPsec policy associated with this connection" msgstr "IPsec policy associated with this connection" #, python-format msgid "IPsec site connection %s was successfully updated." msgstr "IPsec site connection %s was successfully updated." msgid "IPv4" msgstr "IPv4" msgid "IPv4:" msgstr "IPv4:" msgid "IPv6" msgstr "IPv6" msgid "IPv6:" msgstr "IPv6:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Inactive" msgstr "Inactive" msgid "Initiator state" msgstr "Initiator state" msgid "" "Life time consists of units and value. Units in 'seconds' and the default " "value is 3600." msgstr "" "Life time consists of units and value. Units in 'seconds' and the default " "value is 3600." msgid "Lifetime" msgstr "Lifetime" msgid "Lifetime Units" msgstr "Lifetime Units" msgid "Lifetime Value" msgstr "Lifetime Value" msgid "Lifetime units" msgstr "Lifetime units" msgid "Lifetime units for IKE keys" msgstr "Lifetime units for IKE keys" msgid "Lifetime value" msgstr "Lifetime value" msgid "Lifetime value for IKE keys" msgstr "Lifetime value for IKE keys" msgid "Lifetime value for IKE keys " msgstr "Lifetime value for IKE keys " msgid "Local Endpoint Group" msgstr "Local Endpoint Group" msgid "Local Endpoint Group(s)" msgstr "Local Endpoint Group(s)" msgid "Local Side Public IPs" msgstr "Local Side Public IPs" msgid "Local System Subnets" msgstr "Local System Subnets" msgid "Local subnet(s). This field is valid if type is Subnet" msgstr "Local subnet(s). This field is valid if type is Subnet" msgid "" "Local subnets which the new IPsec connection is connected to. Required if no " "subnet is specified in a VPN service selected." msgstr "" "Local subnets which the new IPsec connection is connected to. Required if no " "subnet is specified in a VPN service selected." msgid "MTU" msgstr "MTU" msgid "Maximum Transmission Unit size for the connection" msgstr "Maximum Transmission Unit size for the connection" msgid "Name" msgstr "Name" msgid "Name =" msgstr "Name =" msgid "" "Note: The recommended way to specify local subnets is to use endpoint groups " "in IPsec site connection. It is deprecated to specify subnet in VPN service. " "For a new VPN service or IPsec site connection, using endpoint group is " "recommended." msgstr "" "Note: The recommended way to specify local subnets is to use endpoint groups " "in IPsec site connection. It is deprecated to specify subnet in VPN service. " "For a new VPN service or IPsec site connection, using endpoint group is " "recommended." msgid "Optional Parameters" msgstr "Optional Parameters" msgid "Optional. No need to be specified when you use endpoint groups." msgstr "Optional. No need to be specified when you use endpoint groups." msgid "PFS" msgstr "PFS" msgid "PFS =" msgstr "PFS =" msgid "PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14." msgstr "PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14." msgid "Peer Endpoint Group" msgstr "Peer Endpoint Group" msgid "Peer Endpoint Group(s)" msgstr "Peer Endpoint Group(s)" msgid "Peer gateway public IPv4/IPv6 Address or FQDN" msgstr "Peer gateway public IPv4/IPv6 Address or FQDN" msgid "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgstr "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgid "Peer router identity for authentication (Peer ID)" msgstr "Peer router identity for authentication (Peer ID)" msgid "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgstr "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Create" msgstr "Pending Create" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Delete" msgstr "Pending Delete" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Update" msgstr "Pending Update" msgid "Perfect Forward Secrecy" msgstr "Perfect Forward Secrecy" msgid "Phase 1 negotiation mode limited to using 'main' and 'aggressive'." msgstr "Phase 1 negotiation mode limited to using 'main' and 'aggressive'." msgid "Pre-Shared Key (PSK) string" msgstr "Pre-Shared Key (PSK) string" msgid "Project ID" msgstr "Project ID" msgid "Remote peer CIDR(s) connected to the new IPsec connection." msgstr "Remote peer CIDR(s) connected to the new IPsec connection." msgid "Remote peer subnet" msgstr "Remote peer subnet" msgid "Remote peer subnet(s)" msgstr "Remote peer subnet(s)" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24). This field is valid if " "type is CIDR" msgstr "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24). This field is valid if " "type is CIDR" msgid "Route mode" msgstr "Route mode" msgid "Router" msgstr "Router" msgid "Router =" msgstr "Router =" msgid "Router ID =" msgstr "Router ID =" msgid "Save Changes" msgstr "Save Changes" msgid "Scheduled deletion of IKE policy" msgid_plural "Scheduled deletion of IKE policies" msgstr[0] "Scheduled deletion of IKE policy" msgstr[1] "Scheduled deletion of IKE policies" msgid "Scheduled deletion of IPsec policy" msgid_plural "Scheduled deletion of IPsec policies" msgstr[0] "Scheduled deletion of IPsec policy" msgstr[1] "Scheduled deletion of IPsec policies" msgid "Scheduled deletion of IPsec site connection" msgid_plural "Scheduled deletion of IPsec site connections" msgstr[0] "Scheduled deletion of IPsec site connection" msgstr[1] "Scheduled deletion of IPsec site connections" msgid "Scheduled deletion of VPN service" msgid_plural "Scheduled deletion of VPN services" msgstr[0] "Scheduled deletion of VPN service" msgstr[1] "Scheduled deletion of VPN services" msgid "Scheduled deletion of endpoint group" msgid_plural "Scheduled deletion of endpoint groups" msgstr[0] "Scheduled deletion of endpoint group" msgstr[1] "Scheduled deletion of endpoint groups" msgid "Select IKE policy" msgstr "Select IKE policy" msgid "Select IPsec Policy" msgstr "Select IPsec Policy" msgid "Select VPN service" msgstr "Select VPN service" msgid "Select a Router" msgstr "Select a Router" msgid "Select a Subnet" msgstr "Select a Subnet" msgid "Select local endpoint group" msgstr "Select local endpoint group" msgid "Select peer endpoint group" msgstr "Select peer endpoint group" msgid "" "Specify a name, description, router, and subnet (optional) for the VPN " "service." msgstr "" "Specify a name, description, router, and subnet (optional) for the VPN " "service." msgid "Status" msgstr "Status" msgid "Status =" msgstr "Status =" msgid "Subnet" msgstr "Subnet" msgid "Subnet (for local systems)" msgstr "Subnet (for local systems)" msgid "Subnet =" msgstr "Subnet =" msgid "Subnet ID =" msgstr "Subnet ID =" msgid "" "The VPN service is attached to a router and references to endpoint group or " "a single subnet to push to a remote site." msgstr "" "The VPN service is attached to a router and references to endpoint group or " "a single subnet to push to a remote site." msgid "The pre-defined key string between the two peers of the VPN connection" msgstr "The pre-defined key string between the two peers of the VPN connection" msgid "" "The router and admin state fields require to be enabled. All others are " "optional." msgstr "" "The router and admin state fields require to be enabled. All others are " "optional." msgid "" "The state of IPsec site connection to start in. If disabled (not checked), " "IPsec site connection does not forward packets." msgstr "" "The state of IPsec site connection to start in. If disabled (not checked), " "IPsec site connection does not forward packets." msgid "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgstr "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgid "The type of IPsec tunnel (tunnel/transport) to be used." msgstr "The type of IPsec tunnel (tunnel/transport) to be used." msgid "The type of protocol (esp, ah, ah-esp) used in IPsec policy." msgstr "The type of protocol (esp, ah, ah-esp) used in IPsec policy." msgid "The type of version (v1/v2) that needs to be filtered." msgstr "The type of version (v1/v2) that needs to be filtered." msgid "Transform Protocol" msgstr "Transform Protocol" msgid "Type" msgstr "Type" msgid "Type =" msgstr "Type =" #, python-format msgid "Unable to add IKE policy \"%s\"." msgstr "Unable to add IKE policy \"%s\"." #, python-format msgid "Unable to add IPsec policy \"%s\"." msgstr "Unable to add IPsec policy \"%s\"." #, python-format msgid "Unable to add IPsec site connection \"%s\"." msgstr "Unable to add IPsec site connection \"%s\"." #, python-format msgid "Unable to add VPN service \"%s\"." msgstr "Unable to add VPN service \"%s\"." #, python-format msgid "Unable to add endpoint group \"%s\"." msgstr "Unable to add endpoint group \"%s\"." msgid "Unable to delete IKE policy." msgstr "Unable to delete IKE policy." msgid "Unable to delete IPsec policy." msgstr "Unable to delete IPsec policy." msgid "Unable to delete IPsec site connection." msgstr "Unable to delete IPsec site connection." msgid "Unable to delete VPN service." msgstr "Unable to delete VPN service." msgid "Unable to delete endpoint group." msgstr "Unable to delete endpoint group." msgid "Unable to retrieve IKE policies list." msgstr "Unable to retrieve IKE policies list." msgid "Unable to retrieve IKE policy details." msgstr "Unable to retrieve IKE policy details." msgid "Unable to retrieve IPsec policies list." msgstr "Unable to retrieve IPsec policies list." msgid "Unable to retrieve IPsec policy details." msgstr "Unable to retrieve IPsec policy details." msgid "Unable to retrieve IPsec policy list." msgstr "Unable to retrieve IPsec policy list." msgid "Unable to retrieve IPsec site connection details." msgstr "Unable to retrieve IPsec site connection details." msgid "Unable to retrieve IPsec site connections list." msgstr "Unable to retrieve IPsec site connections list." msgid "Unable to retrieve VPN service details." msgstr "Unable to retrieve VPN service details." msgid "Unable to retrieve VPN services list." msgstr "Unable to retrieve VPN services list." msgid "Unable to retrieve endpoint group details." msgstr "Unable to retrieve endpoint group details." msgid "Unable to retrieve endpoint group list." msgstr "Unable to retrieve endpoint group list." msgid "Unable to retrieve networks list." msgstr "Unable to retrieve networks list." msgid "Unable to retrieve routers list." msgstr "Unable to retrieve routers list." msgid "VPN" msgstr "VPN" msgid "VPN Connections" msgstr "VPN Connections" msgid "VPN Service" msgstr "VPN Service" msgid "VPN Service =" msgstr "VPN Service =" msgid "VPN Service Details" msgstr "VPN Service Details" msgid "VPN Service ID =" msgstr "VPN Service ID =" msgid "VPN Services" msgstr "VPN Services" #, python-format msgid "VPN service %s was successfully updated." msgstr "VPN service %s was successfully updated." msgid "VPN service associated with this connection" msgstr "VPN service associated with this connection" msgid "Valid algorithms are 3des, aes-128, aes-192 and aes-256." msgstr "Valid algorithms are 3des, aes-128, aes-192 and aes-256." msgid "Valid algorithms are sha1, sha256, sha384 and sha512." msgstr "Valid algorithms are sha1, sha256, sha384 and sha512." msgid "Valid integer greater than the DPD interval" msgstr "Valid integer greater than the DPD interval" msgid "Valid integer lesser than DPD timeout" msgstr "Valid integer lesser than DPD timeout" msgid "Valid integer lesser than the DPD timeout" msgstr "Valid integer lesser than the DPD timeout" msgid "Virtual Private Network" msgstr "Virtual Private Network" msgid "You may update IKE policy details here." msgstr "You may update IKE policy details here." msgid "You may update IPsec policy details here." msgstr "You may update IPsec policy details here." msgid "You may update IPsec site connection details here." msgstr "You may update IPsec site connection details here." msgid "You may update VPN service details here." msgstr "You may update VPN service details here." msgid "You may update endpoint group details here." msgstr "You may update endpoint group details here." msgid "aes-128" msgstr "aes-128" msgid "aes-192" msgstr "aes-192" msgid "aes-256" msgstr "aes-256" msgid "ah" msgstr "ah" msgid "ah-esp" msgstr "ah-esp" msgid "bi-directional" msgstr "bi-directional" msgid "clear" msgstr "clear" msgid "disabled" msgstr "disabled" msgid "down" msgstr "down" msgid "esp" msgstr "esp" msgid "group14" msgstr "group14" msgid "group2" msgstr "group2" msgid "group5" msgstr "group5" msgid "hold" msgstr "hold" msgid "response-only" msgstr "response-only" msgid "restart" msgstr "restart" msgid "restart-by-peer" msgstr "restart-by-peer" msgid "seconds" msgstr "seconds" msgid "sha1" msgstr "sha1" msgid "sha256" msgstr "sha256" msgid "sha384" msgstr "sha384" msgid "sha512" msgstr "sha512" msgid "transport" msgstr "transport" msgid "tunnel" msgstr "tunnel" msgid "up" msgstr "up" msgid "v1" msgstr "v1" msgid "v2" msgstr "v2" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.379892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/id/0000775000175000017500000000000014750123115027122 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.390892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/id/LC_MESSAGES/0000775000175000017500000000000014750123115030707 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/id/LC_MESSAGES/django.po0000664000175000017500000005450214750122063032520 0ustar00jamespagejamespage# OpenStack Infra , 2015. #zanata # suhartono , 2016. #zanata # suhartono , 2017. #zanata # suhartono , 2018. #zanata # suhartono , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2020-10-02 07:38+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-05-05 11:14+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 "" "(Deprecated) Remote peer subnet(s) address(es) with mask(s) in CIDR format " "separated with commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "(Deprecated) Remote peer subnet(s) address(es) dengan mask in CIDR format " "yang dipisahkan dengan koma jika diperlukan (misalnya. 20.1.0.0/24, " "21.1.0.0/24)" msgid "-" msgstr "-" msgid "3des" msgstr "3des" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Active" msgstr "Aktif" msgid "Add" msgstr "Menambahkan" msgid "Add Endpoint Group" msgstr "Menambahkan Endpoint Group" msgid "Add IKE Policy" msgstr "Tambah IKE Policy" msgid "Add IPsec Policy" msgstr "Menambahkan IPsec Policy" msgid "Add IPsec Site Connection" msgstr "Menambahkan IPsec Site Connection" msgid "Add New Endpoint Groups" msgstr "Menambahkan New Endpoint Groups" msgid "Add New IKE Policy" msgstr "Tambah IKE Policy baru" msgid "Add New IPsec Policy" msgstr "Menambahkan New IPsec Policy" msgid "Add New IPsec Site Connection" msgstr "Menambahkan New IPsec Site Connection" msgid "Add New VPN Service" msgstr "Menambah layanan VPN baru" msgid "Add VPN Service" msgstr "Tambah VPN Service" #, python-format msgid "Added IKE policy \"%s\"." msgstr "Ditambahkan IKE policy \"%s\"." #, python-format msgid "Added IPsec policy \"%s\"." msgstr "Ditambahkan IPsec policy \"%s\"." #, python-format msgid "Added IPsec site connection \"%s\"." msgstr "Ditambahkan IPsec site connection \"%s\"." #, python-format msgid "Added VPN service \"%s\"." msgstr "Ditambahkan VPN service \"%s\"." #, python-format msgid "Added endpoint group \"%s\"." msgstr "Ditambahkan endpoint group \"%s\"." msgid "Admin State" msgstr "Admin State" msgid "Admin State is enabled by default." msgstr "Admin State diaktifkan secara default" msgid "All fields are optional." msgstr "Semua field bersifat opsional." msgid "An IKE policy is an association of the following attributes:" msgstr "Kebijakan IKE (IKE policy) adalah asosiasi dari atribut berikut:" msgid "An IPsec policy is an association of the following attributes" msgstr "Kebijakan IPsec adalah asosiasi atribut berikut" msgid "Authorization algorithm" msgstr "Algoritma otorisasi" msgid "Authorization algorithm =" msgstr "Authorization algorithm =" msgid "Authorization mode" msgstr "Mode otorisasi" msgid "CIDR (for external systems)" msgstr "CIDR (untuk sistem eksternal)" msgid "Create IKE policy for current project." msgstr "Buat IKE policy untuk proyek saat ini." msgid "Create IPsec policy for current project." msgstr "Buat kebijakan IPsec untuk proyek saat ini." msgid "" "Create IPsec site connection for current project. Assign a name and " "description for the IPsec site connection. All fields in this tab are " "required." msgstr "" "Buat koneksi situs IPsec untuk proyek saat ini. Tetapkan nama dan deskripsi " "untuk koneksi situs IPsec. Semua kolom dalam tab ini diperlukan." msgid "Create VPN service for current project." msgstr "Buat layanan VPN untuk proyek saat ini." msgid "Create endpoint group for current project." msgstr "Buat grup endpoint untuk proyek saat ini." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Created" msgstr "Created" msgid "DPD Timeout must be greater than DPD Interval" msgstr "DPD Timeout harus lebih besar dari DPD Interval" msgid "Dead peer detection action" msgstr "Tindakan deteksi peer mati" msgid "Dead peer detection actions" msgstr "Tindakan deteksi rekan mati" msgid "Dead peer detection interval" msgstr "Interval deteksi rekan mati" msgid "Dead peer detection timeout" msgstr "Dead peer detection timeout (DPD timeout)" msgid "Delete Endpoint Group" msgid_plural "Delete Endpoint Groups" msgstr[0] "Delete Endpoint Group" msgid "Delete IKE Policy" msgid_plural "Delete IKE Policies" msgstr[0] "Delete IKE Policy" msgid "Delete IPsec Policy" msgid_plural "Delete IPsec Policies" msgstr[0] "Delete IPsec Policy" msgid "Delete IPsec Site Connection" msgid_plural "Delete IPsec Site Connections" msgstr[0] "Delete IPsec Site Connection" msgid "Delete VPN Service" msgid_plural "Delete VPN Services" msgstr[0] "Delete VPN Service" msgid "Description" msgstr "Deskripsi" msgid "Description:" msgstr "Deskripsi:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Down" msgstr "Down" msgid "Edit Connection" msgstr "Edit Connection" msgid "Edit Endpoint Group" msgstr "Edit Endpoint Group" msgid "Edit IKE Policy" msgstr "Mengedit IKE Policy" msgid "Edit IPsec Policy" msgstr "Edit IPsec Policy" msgid "Edit IPsec Site Connection" msgstr "Edit IPsec Site Connection" msgid "Edit IPsec policy" msgstr "Edit IPsec policy" msgid "Edit IPsec site connection" msgstr "Edit IPsec site connection" msgid "Edit VPN Service" msgstr "Mengedit VPN Service" msgid "Enable Admin State" msgstr "Enable Admin State" msgid "Encapsulation mode" msgstr "modus enkapsulasi" msgid "Encryption algorithm" msgstr "Algoritma Enkripsi" msgid "Encryption algorithm =" msgstr "Encryption algorithm =" msgid "Endpoint Groups" msgstr "Endpoint Groups" msgid "Endpoint Groups Details" msgstr "Endpoint Groups Details" #, python-format msgid "Endpoint group %s was successfully updated." msgstr "Endpoint group %s berhasil diupdate" msgid "Endpoint group for local subnet(s)" msgstr "Grup endpoint untuk subnet lokal" msgid "Endpoint group for remote peer CIDR(s)" msgstr "Endpoint group untuk remote peer CIDR(s)" msgid "Endpoints" msgstr "Endpoints (titik akhir)" msgid "Endpoints =" msgstr "Endpoints =" msgid "Equal to or greater than 60" msgstr "Sama atau lebih besar dari 60" msgid "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgstr "" "Sama dengan atau lebih besar dari 68 jika subnet lokal IPv4. Sama dengan " "atau lebih besar dari 1280 jika subnet lokal IPv6." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Error" msgstr "Kesalahan" msgid "External System CIDRs" msgstr "External System CIDRs" msgid "External System Subnets" msgstr "External System Subnets" #, python-format msgid "Failed to update IKE policy %s" msgstr "Gagal memperbarui IKE policy %s" #, python-format msgid "Failed to update IPsec policy %s" msgstr "Gagal memperbarui IPsec policy %s" #, python-format msgid "Failed to update IPsec site connection %s" msgstr "Gagal memperbarui IPsec site connection %s" #, python-format msgid "Failed to update VPN service %s" msgstr "Gagal memperbarui VPN service %s" #, python-format msgid "Failed to update endpoint group %s" msgstr "Gagal memperbarui endpoint group %s" msgid "" "Fields in this tab are optional. You can configure the detail of IPsec site " "connection created." msgstr "" "Kolom dalam tab ini bersifat opsional. Anda dapat mengkonfigurasi detail " "koneksi situs IPsec yang dibuat." msgid "ID" msgstr "ID" msgid "IKE Phase 1 negotiation mode" msgstr "Modus negosiasi IKE Tahap 1" msgid "IKE Phase1 negotiation mode" msgstr "Modus negosiasi IKE Phase1" msgid "IKE Policies" msgstr "IKE Policy (kebijakan IKE)" msgid "IKE Policy" msgstr "IKE Policy" msgid "IKE Policy =" msgstr "IKE Policy =" msgid "IKE Policy Details" msgstr "Rincian IKE Policy" msgid "IKE Policy ID =" msgstr "IKE Policy ID =" #, python-format msgid "IKE policy %s was successfully updated." msgstr "IKE policy %s berhasil diupdate" msgid "IKE policy associated with this connection" msgstr "IKE policy associated with this connection" msgid "IKE version" msgstr "IKE version" msgid "IPsec Policies" msgstr "IPsec Policies" msgid "IPsec Policy" msgstr "IPsec Policy" msgid "IPsec Policy =" msgstr "IPsec Policy =" msgid "IPsec Policy Details" msgstr "IPsec Policy Details" msgid "IPsec Policy ID =" msgstr "IPsec Policy ID =" msgid "IPsec Site Connection Details" msgstr "IPsec Site Connection Details" msgid "IPsec Site Connections" msgstr "IPsec Site Connections" msgid "IPsec connection validation requires that local endpoints are subnets" msgstr "Validasi koneksi IPsec mengharuskan bahwa endpoint lokal adalah subnet" msgid "" "IPsec connection validation requires that local endpoints are subnets, and " "peer endpoints are CIDRs." msgstr "" "Validasi koneksi IPsec mengharuskan bahwa endpoint lokal adalah subnet, dan " "peer endpoint adalah CIDR." msgid "IPsec connection validation requires that peer endpoints are CIDRs" msgstr "Validasi koneksi IPsec mengharuskan bahwa endpoint peer adalah CIDRs" #, python-format msgid "IPsec policy %s was successfully updated." msgstr "IPsec policy %s berhasil diupdate" msgid "IPsec policy associated with this connection" msgstr "IPsec policy terkait dengan koneksi ini" #, python-format msgid "IPsec site connection %s was successfully updated." msgstr "Koneksi situs IPsec% s berhasil diperbarui." msgid "IPv4" msgstr "IPv4" msgid "IPv4:" msgstr "IPv4:" msgid "IPv6" msgstr "IPv6" msgid "IPv6:" msgstr "IPv6:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Inactive" msgstr "Tidak aktif" msgid "Initiator state" msgstr "Initiator state (keadaan inisiator)" msgid "" "Life time consists of units and value. Units in 'seconds' and the default " "value is 3600." msgstr "" "Life time terdiri dari unit dan nilai. Unit dalam 'detik' dan nilai " "defaultnya adalah 3.600." msgid "Lifetime" msgstr "Lifetime" msgid "Lifetime Units" msgstr "Lifetime Units" msgid "Lifetime Value" msgstr "Lifetime Value" msgid "Lifetime units" msgstr "Lifetime units" msgid "Lifetime units for IKE keys" msgstr "Lifetime units for IKE keys" msgid "Lifetime value" msgstr "Lifetime value (nilai lifetime)" msgid "Lifetime value for IKE keys" msgstr "Lifetime value for IKE keys" msgid "Lifetime value for IKE keys " msgstr "Nilai Lifetime untuk IKE key " msgid "Local Endpoint Group" msgstr "Local Endpoint Group" msgid "Local Endpoint Group(s)" msgstr "Local Endpoint Group(s)" msgid "Local Side Public IPs" msgstr "Local Side Public IP (IP publik sisi lokal)" msgid "Local System Subnets" msgstr "Local System Subnets" msgid "Local subnet(s). This field is valid if type is Subnet" msgstr "Local subnet(s). Field ini berlaku jika tipe Subnet" msgid "" "Local subnets which the new IPsec connection is connected to. Required if no " "subnet is specified in a VPN service selected." msgstr "" "Subnet lokal yang koneksi IPsec baru terhubung. Diperlukan jika tidak ada " "subnet yang ditentukan dalam layanan VPN yang dipilih." msgid "MTU" msgstr "MTU" msgid "Maximum Transmission Unit size for the connection" msgstr "Ukuran unit transmission maksimum untuk sambungan" msgid "Name" msgstr "Nama" msgid "Name =" msgstr "Name =" msgid "" "Note: The recommended way to specify local subnets is to use endpoint groups " "in IPsec site connection. It is deprecated to specify subnet in VPN service. " "For a new VPN service or IPsec site connection, using endpoint group is " "recommended." msgstr "" "Catatan: Cara yang disarankan untuk menentukan subnet lokal adalah dengan " "menggunakan grup endpoint dalam koneksi situs IPsec. Sudah tidak berlaku " "lagi untuk menentukan subnet dalam layanan VPN. Untuk layanan VPN baru atau " "koneksi situs IPsec, gunakan grup endpoint." msgid "Optional Parameters" msgstr "Optional Parameter (parameter opsional)" msgid "Optional. No need to be specified when you use endpoint groups." msgstr "Pilihan. Tidak perlu ditentukan saat Anda menggunakan grup endpoint." msgid "PFS" msgstr "PFS" msgid "PFS =" msgstr "PFS =" msgid "PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14." msgstr "" "PFS dibatasi untuk menggunakan kelompok Diffie-Hellman 2, 5 (default) dan 14." msgid "Peer Endpoint Group" msgstr "Peer Endpoint Group" msgid "Peer Endpoint Group(s)" msgstr "Peer Endpoint Group(s)" msgid "Peer gateway public IPv4/IPv6 Address or FQDN" msgstr "Alamat IPv4/IPv6 publik gateway rekan atau FQDN" msgid "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgstr "Alamat IPv4/IPv6 publik gateway rekan atau FQDN untuk koneksi VPN." msgid "Peer router identity for authentication (Peer ID)" msgstr "Identitas router rekan untuk otentikasi (Peer ID)" msgid "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgstr "" "Identitas router rekan untuk otentikasi. Dapat alamat IPv4/IPv6, email, key " "ID, atau FQDN" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Create" msgstr "Pending Create (penundaan pembuatan)" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Delete" msgstr "Pending Delete" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Update" msgstr "Pending Update (penundaan pembaharuan)" msgid "Perfect Forward Secrecy" msgstr "Perfect Forward Secrecy" msgid "Pre-Shared Key (PSK) string" msgstr "Pre-Shared Key (PSK) string (string PSK)" msgid "Project ID" msgstr "Project ID" msgid "Remote peer CIDR(s) connected to the new IPsec connection." msgstr "Remote peer CIDR(s) terhubung ke new IPsec connection." msgid "Remote peer subnet" msgstr "Subnet peer jarak jauh" msgid "Remote peer subnet(s)" msgstr "Remote peer subnet (subnet rekan jauh)" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "Alamat rekan subnet jauh dengan mask dalam format CIDR dipisahkan dengan " "koma jika diperlukan (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24). This field is valid if " "type is CIDR" msgstr "" "Alamat subnet peer remote dengan mask dalam format CIDR dipisahkan dengan " "koma jika diperlukan (misalnya, 20.1.0.0/24, 21.1.0.0/24). Field ini berlaku " "jika tipe CIDR" msgid "Route mode" msgstr "Mode rute" msgid "Router" msgstr "Router" msgid "Router =" msgstr "Router =" msgid "Router ID =" msgstr "Router ID =" msgid "Save Changes" msgstr "Simpan perubahan" msgid "Scheduled deletion of IKE policy" msgid_plural "Scheduled deletion of IKE policies" msgstr[0] "Scheduled deletion of IKE policy" msgid "Scheduled deletion of IPsec policy" msgid_plural "Scheduled deletion of IPsec policies" msgstr[0] "Scheduled deletion of IPsec policy" msgid "Scheduled deletion of IPsec site connection" msgid_plural "Scheduled deletion of IPsec site connections" msgstr[0] "Scheduled deletion of IPsec site connection" msgid "Scheduled deletion of VPN service" msgid_plural "Scheduled deletion of VPN services" msgstr[0] "Scheduled deletion of VPN service" msgid "Scheduled deletion of endpoint group" msgid_plural "Scheduled deletion of endpoint groups" msgstr[0] "Scheduled deletion of endpoint group" msgid "Select IKE policy" msgstr "Memilih IKE policy" msgid "Select IPsec Policy" msgstr "Memilih IPsec Policy" msgid "Select VPN service" msgstr "Memilih VPN service" msgid "Select a Router" msgstr "Pilih Router" msgid "Select a Subnet" msgstr "Pilih subnet" msgid "Select local endpoint group" msgstr "Memilih local endpoint group" msgid "Select peer endpoint group" msgstr "Memilih peer endpoint group" msgid "" "Specify a name, description, router, and subnet (optional) for the VPN " "service." msgstr "" "Tentukan nama, deskripsi, router, dan subnet (opsional) untuk layanan VPN." msgid "Status" msgstr "Status" msgid "Status =" msgstr "Status = " msgid "Subnet" msgstr "Subnet" msgid "Subnet (for local systems)" msgstr "Subnet (untuk sistem lokal)" msgid "Subnet =" msgstr "Subnet =" msgid "Subnet ID =" msgstr "Subnet ID =" msgid "" "The VPN service is attached to a router and references to endpoint group or " "a single subnet to push to a remote site." msgstr "" "Layanan VPN terhubung ke router dan referensi ke grup endpoint atau subnet " "tunggal untuk mendorong ke situs jarak jauh." msgid "The pre-defined key string between the two peers of the VPN connection" msgstr "" "String kunci yang telah ditetapkan (pre-defined key string) antara dua rekan " "dari koneksi VPN" msgid "" "The router and admin state fields require to be enabled. All others are " "optional." msgstr "" "Bidang router dan admin state harus diaktifkan. Lainnya bersifat opsional." msgid "" "The state of IPsec site connection to start in. If disabled (not checked), " "IPsec site connection does not forward packets." msgstr "" "Status koneksi situs IPsec untuk memulai masuk. Jika dinonaktifkan (tidak " "dicentang), koneksi situs IPsec tidak meneruskan paket." msgid "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgstr "" "Keadaan layanan VPN untuk memulai masuk Jika dinonaktifkan (tidak " "dicentang), layanan VPN tidak meneruskan paket." msgid "The type of IPsec tunnel (tunnel/transport) to be used." msgstr "Jenis IPsec tunnel (tunnel/transport) yang akan digunakan." msgid "The type of protocol (esp, ah, ah-esp) used in IPsec policy." msgstr "Jenis protokol (esp, ah, ah-esp) digunakan dalam kebijakan IPsec." msgid "The type of version (v1/v2) that needs to be filtered." msgstr "Jenis versi (v1 / v2) yang perlu disaring." msgid "Transform Protocol" msgstr "Transform Protocol (protokol transform)" msgid "Type" msgstr "Type" msgid "Type =" msgstr "Type = (tipe=)" #, python-format msgid "Unable to add IKE policy \"%s\"." msgstr "Tidak dapat menambahkan IKE policy \"%s\"." #, python-format msgid "Unable to add IPsec policy \"%s\"." msgstr "Tidak dapat menambahkan IPsec policy \"%s\"." #, python-format msgid "Unable to add IPsec site connection \"%s\"." msgstr "Tidak dapat menambahkan IPsec site connection \"%s\"." #, python-format msgid "Unable to add VPN service \"%s\"." msgstr "Tidak dapat menambahkan VPN service \"%s\"." #, python-format msgid "Unable to add endpoint group \"%s\"." msgstr "Tidak dapat menambahkan endpoint group \"%s\"." msgid "Unable to retrieve IKE policies list." msgstr "Tidak dapat mengambil IKE policies list." msgid "Unable to retrieve IKE policy details." msgstr "Tidak dapat mengambil IKE policy details." msgid "Unable to retrieve IPsec policies list." msgstr "Tidak dapat mengambil IPsec policies list." msgid "Unable to retrieve IPsec policy details." msgstr "Tidak dapat mengambil IPsec policy details." msgid "Unable to retrieve IPsec policy list." msgstr "Tidak dapat mengambil IPsec policy list." msgid "Unable to retrieve IPsec site connection details." msgstr "Tidak dapat mengambil IPsec site connection details." msgid "Unable to retrieve IPsec site connections list." msgstr "Tidak dapat mengambil IPsec site connections list." msgid "Unable to retrieve VPN service details." msgstr "Tidak dapat mengambil VPN service details." msgid "Unable to retrieve VPN services list." msgstr "Tidak dapat mengambil VPN services list." msgid "Unable to retrieve endpoint group details." msgstr "Tidak dapat mengambil endpoint group details." msgid "Unable to retrieve endpoint group list." msgstr "Tidak dapat mengambil endpoint group list." msgid "Unable to retrieve networks list." msgstr "Tidak dapat mengambil daftar jaringan." msgid "Unable to retrieve routers list." msgstr "Tidak dapat mengambil daftar routers" msgid "VPN" msgstr "VPN" msgid "VPN Connections" msgstr "VPN Connections" msgid "VPN Service" msgstr "Service VPN" msgid "VPN Service =" msgstr "VPN Service =" msgid "VPN Service Details" msgstr "Rincian VPN Service " msgid "VPN Service ID =" msgstr "VPN Service ID =" msgid "VPN Services" msgstr "VPN Services (layanan VPN)" #, python-format msgid "VPN service %s was successfully updated." msgstr "VPN service %s berhasil diperbarui." msgid "VPN service associated with this connection" msgstr "Layanan VPN yang terkait dengan koneksi ini" msgid "Valid algorithms are 3des, aes-128, aes-192 and aes-256." msgstr "Algoritma yang valid adalah 3des, aes-128, aes-192 dan aes-256." msgid "Valid algorithms are sha1, sha256, sha384 and sha512." msgstr "Algoritma yang valid adalah sha1, sha256, sha384 dan sha512." msgid "Valid integer greater than the DPD interval" msgstr "Bilangan bulat yang valid lebih besar dari DPD interval" msgid "Valid integer lesser than DPD timeout" msgstr "Bilangan integer yang valid kurang dari DPD timeout" msgid "Valid integer lesser than the DPD timeout" msgstr "Bilangan integer yang valid kurang dari DPD timeout" msgid "Virtual Private Network" msgstr "Virtual Private Network" msgid "You may update IKE policy details here." msgstr "Anda dapat memperbarui rincian kebijakan IKE di sini." msgid "You may update IPsec policy details here." msgstr "Anda dapat memperbarui rincian kebijakan IPsec di sini." msgid "You may update IPsec site connection details here." msgstr "Anda dapat memperbarui detail koneksi situs IPsec di sini." msgid "You may update VPN service details here." msgstr "Anda dapat memperbarui rincian layanan VPN di sini." msgid "You may update endpoint group details here." msgstr "Anda dapat memperbarui rincian grup endpoint di sini." msgid "aes-128" msgstr "aes-128" msgid "aes-192" msgstr "aes-192" msgid "aes-256" msgstr "aes-256" msgid "ah" msgstr "ah" msgid "ah-esp" msgstr "ah-esp" msgid "bi-directional" msgstr "bi-directional (dua arah)" msgid "clear" msgstr "clear" msgid "disabled" msgstr "disabled" msgid "down" msgstr "down (turun)" msgid "esp" msgstr "esp" msgid "group14" msgstr "grup14" msgid "group2" msgstr "Grup2" msgid "group5" msgstr "Grup5" msgid "hold" msgstr "hold" msgid "response-only" msgstr "response-only (hanya tanggapan)" msgid "restart" msgstr "restart" msgid "restart-by-peer" msgstr "restart-by-peer" msgid "seconds" msgstr "seconds (detik)" msgid "sha1" msgstr "sha1" msgid "sha256" msgstr "sha256" msgid "sha384" msgstr "sha384" msgid "sha512" msgstr "sha512" msgid "transport" msgstr "transport" msgid "tunnel" msgstr "tunnel" msgid "up" msgstr "up (naik)" msgid "v1" msgstr "v1" msgid "v2" msgstr "v2" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.380892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/ja/0000775000175000017500000000000014750123115027120 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.390892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/ja/LC_MESSAGES/0000775000175000017500000000000014750123115030705 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/ja/LC_MESSAGES/django.po0000664000175000017500000006207714750122063032524 0ustar00jamespagejamespage# Akihiro Motoki , 2018. #zanata # Yuko Katabami , 2018. #zanata # Akihiro Motoki , 2019. #zanata # Takashi Kuroda , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2020-10-02 07:38+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-03-27 03:55+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 "" "(Deprecated) Remote peer subnet(s) address(es) with mask(s) in CIDR format " "separated with commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "(廃止予定) 接続相手のサブネットアドレスを CIDR 形式で指定します。複数指定する" "場合はコンマで区切ります (例: 20.1.0.0/24, 21.1.0.0/24)" msgid "-" msgstr "-" msgid "3des" msgstr "3des" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Active" msgstr "稼働中" msgid "Add" msgstr "追加" msgid "Add Endpoint Group" msgstr "エンドポイントグループの追加" msgid "Add IKE Policy" msgstr "IKE ポリシーの追加" msgid "Add IPsec Policy" msgstr "IPsec ポリシーの追加" msgid "Add IPsec Site Connection" msgstr "IPsec サイト間接続の追加" msgid "Add New Endpoint Groups" msgstr "エンドポイントグループの追加" msgid "Add New IKE Policy" msgstr "IKE ポリシーの追加" msgid "Add New IPsec Policy" msgstr "IPsec ポリシーの追加" msgid "Add New IPsec Site Connection" msgstr "IPsec サイト間接続の追加" msgid "Add New VPN Service" msgstr "VPN サービスの追加" msgid "Add VPN Service" msgstr "VPN サービスの追加" #, python-format msgid "Added IKE policy \"%s\"." msgstr "IKE ポリシー \"%s\" を追加しました。" #, python-format msgid "Added IPsec policy \"%s\"." msgstr "IPsec ポリシー \"%s\" を追加しました。" #, python-format msgid "Added IPsec site connection \"%s\"." msgstr "IPsec サイト間接続 \"%s\" を追加しました。" #, python-format msgid "Added VPN service \"%s\"." msgstr "VPN サービス \"%s\" を追加しました。" #, python-format msgid "Added endpoint group \"%s\"." msgstr "エンドポイントグループ \"%s\" を追加しました。" msgid "Admin State" msgstr "管理状態" msgid "Admin State is enabled by default." msgstr "管理状態はデフォルトで有効になっています。" msgid "All fields are optional." msgstr "すべてのフィールドは任意です。" msgid "An IKE policy is an association of the following attributes:" msgstr "IKE ポリシーでは、以下の属性を指定できます。" msgid "An IPsec policy is an association of the following attributes" msgstr "IPsec ポリシーでは、以下の属性を指定できます。" msgid "Authorization algorithm" msgstr "認可アルゴリズム" msgid "Authorization algorithm =" msgstr "認可アルゴリズム =" msgid "Authorization mode" msgstr "認可モード" msgid "CIDR (for external systems)" msgstr "CIDR (外部システム用)" msgid "Create IKE policy for current project." msgstr "現在のプロジェクトに IKE ポリシーを作成します。" msgid "Create IPsec policy for current project." msgstr "現在のプロジェクトに IPsec ポリシーを作成します。" msgid "" "Create IPsec site connection for current project. Assign a name and " "description for the IPsec site connection. All fields in this tab are " "required." msgstr "" "現在のプロジェクトに IPsec サイト間接続を作成します。 IPsec サイト間接続の名" "前と説明を入力してください。このタブのフィールドはすべて必須です。" msgid "Create VPN service for current project." msgstr "現在のプロジェクトに VPN サービスを作成します。" msgid "Create endpoint group for current project." msgstr "現在のプロジェクトにエンドポイントグループを作成します。" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Created" msgstr "作成済み" msgid "DPD Timeout must be greater than DPD Interval" msgstr "" "Dead Peer 検出タイムアウトは Dead Peer 検出間隔より大きくなければいけません。" msgid "Dead peer detection action" msgstr "Dead Peer 検出時のアクション" msgid "Dead peer detection actions" msgstr "Dead Peer 検出時のアクション" msgid "Dead peer detection interval" msgstr "Dead Peer 検出間隔" msgid "Dead peer detection timeout" msgstr "Dead Peer 検出タイムアウト" msgid "Delete Endpoint Group" msgid_plural "Delete Endpoint Groups" msgstr[0] "エンドポイントグループの削除" msgid "Delete IKE Policy" msgid_plural "Delete IKE Policies" msgstr[0] "IKE ポリシーの削除" msgid "Delete IPsec Policy" msgid_plural "Delete IPsec Policies" msgstr[0] "IPsec ポリシーの削除" msgid "Delete IPsec Site Connection" msgid_plural "Delete IPsec Site Connections" msgstr[0] "IPsec サイト間接続の削除" msgid "Delete VPN Service" msgid_plural "Delete VPN Services" msgstr[0] "VPN サービスの削除" msgid "Description" msgstr "説明" msgid "Description:" msgstr "説明:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Down" msgstr "停止中" msgid "Edit Connection" msgstr "接続の編集" msgid "Edit Endpoint Group" msgstr "エンドポイントグループの編集" msgid "Edit IKE Policy" msgstr "IKE ポリシーの編集" msgid "Edit IPsec Policy" msgstr "IPsec ポリシーの編集" msgid "Edit IPsec Site Connection" msgstr "IPsec サイト間接続の編集" msgid "Edit IPsec policy" msgstr "IPsec ポリシーの編集" msgid "Edit IPsec site connection" msgstr "IPsec サイト間接続の編集" msgid "Edit VPN Service" msgstr "VPN サービスの編集" msgid "Enable Admin State" msgstr "管理状態有効" msgid "Encapsulation mode" msgstr "カプセル化モード" msgid "Encryption algorithm" msgstr "暗号化アルゴリズム" msgid "Encryption algorithm =" msgstr "暗号化アルゴリズム =" msgid "Endpoint Groups" msgstr "エンドポイントグループ" msgid "Endpoint Groups Details" msgstr "エンドポイントグループの詳細" #, python-format msgid "Endpoint group %s was successfully updated." msgstr "エンドポイントグループ %s が正常に更新されました。" msgid "Endpoint group for local subnet(s)" msgstr "ローカルサブネットのエンドポイントグループ" msgid "Endpoint group for remote peer CIDR(s)" msgstr "接続相手の CIDR のエンドポイントグループ" msgid "Endpoints" msgstr "エンドポイント" msgid "Endpoints =" msgstr "エンドポイント =" msgid "Equal to or greater than 60" msgstr "60 以上" msgid "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgstr "ローカルサブネットが IPv4 の場合は 68 以上、IPv6 の場合は 1280 以上。" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Error" msgstr "エラー" msgid "External System CIDRs" msgstr "外部システムの CIDR" msgid "External System Subnets" msgstr "外部システムのサブネット" #, python-format msgid "Failed to update IKE policy %s" msgstr "IKE ポリシー %s を更新できません。" #, python-format msgid "Failed to update IPsec policy %s" msgstr "IPsec ポリシー %s を更新できません。" #, python-format msgid "Failed to update IPsec site connection %s" msgstr "IPsec サイト間接続 %s を更新できません。" #, python-format msgid "Failed to update VPN service %s" msgstr "VPN サービス %s を更新できません。" #, python-format msgid "Failed to update endpoint group %s" msgstr "エンドポイントグループ %s を更新できません。" msgid "" "Fields in this tab are optional. You can configure the detail of IPsec site " "connection created." msgstr "" "このタブのフィールドは任意項目です。作成する IPsec サイト間接続の詳細設定がで" "きます。" msgid "ID" msgstr "ID" msgid "IKE Phase 1 negotiation mode" msgstr "IKE フェーズ 1 のメッセージ交換モード" msgid "IKE Phase1 negotiation mode" msgstr "IKE フェーズ 1 のメッセージ交換モード" msgid "IKE Policies" msgstr "IKE ポリシー" msgid "IKE Policy" msgstr "IKE ポリシー" msgid "IKE Policy =" msgstr "IKE ポリシー =" msgid "IKE Policy Details" msgstr "IKE ポリシーの詳細" msgid "IKE Policy ID =" msgstr "IKE ポリシー ID =" #, python-format msgid "IKE policy %s was successfully updated." msgstr "IKE ポリシー %s が正常に更新されました。" msgid "IKE policy associated with this connection" msgstr "この接続に関連付ける IKE ポリシー" msgid "IKE version" msgstr "IKE バージョン" msgid "IPsec Policies" msgstr "IPsec ポリシー" msgid "IPsec Policy" msgstr "IPsec ポリシー" msgid "IPsec Policy =" msgstr "IPsec ポリシー =" msgid "IPsec Policy Details" msgstr "IPsec ポリシーの詳細" msgid "IPsec Policy ID =" msgstr "IPsec ポリシー ID =" msgid "IPsec Site Connection Details" msgstr "IPsec サイト間接続の詳細" msgid "IPsec Site Connections" msgstr "IPsec サイト間接続" msgid "IPsec connection validation requires that local endpoints are subnets" msgstr "ローカルのエンドポイントグループはサブネットでなければいけません。" msgid "" "IPsec connection validation requires that local endpoints are subnets, and " "peer endpoints are CIDRs." msgstr "" "ローカルのエンドポイントグループはサブネットで、ピアエンドポイントは CIDR で" "なければいけません。" msgid "IPsec connection validation requires that peer endpoints are CIDRs" msgstr "対向のエンドポイントグループは CIDR でなければいけません。" #, python-format msgid "IPsec policy %s was successfully updated." msgstr "IPsec ポリシー %s が正常に更新されました。" msgid "IPsec policy associated with this connection" msgstr "この接続に関連付ける IPsec ポリシー" #, python-format msgid "IPsec site connection %s was successfully updated." msgstr "IPsec サイト間接続 %s が正常に更新されました。" msgid "IPv4" msgstr "IPv4" msgid "IPv4:" msgstr "IPv4:" msgid "IPv6" msgstr "IPv6" msgid "IPv6:" msgstr "IPv6:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Inactive" msgstr "非稼働" msgid "Initiator state" msgstr "イニシエーターモード" msgid "" "Life time consists of units and value. Units in 'seconds' and the default " "value is 3600." msgstr "" "ライフタイムは単位と値で構成されます。単位は「秒」で、デフォルト値は 3600 で" "す。" msgid "Lifetime" msgstr "ライフタイム" msgid "Lifetime Units" msgstr "ライフタイムの単位" msgid "Lifetime Value" msgstr "ライフタイムの値" msgid "Lifetime units" msgstr "ライフタイムの単位" msgid "Lifetime units for IKE keys" msgstr "IKE 鍵のライフタイムの単位" msgid "Lifetime value" msgstr "ライフタイムの値" msgid "Lifetime value for IKE keys" msgstr "IKE 鍵のライフタイムの値" msgid "Lifetime value for IKE keys " msgstr "IKE 鍵のライフタイムの値" msgid "Local Endpoint Group" msgstr "ローカルのエンドポイントグループ" msgid "Local Endpoint Group(s)" msgstr "ローカルのエンドポイントグループ" msgid "Local Side Public IPs" msgstr "ローカル側のパブリック IP" msgid "Local System Subnets" msgstr "ローカルシステムのサブネット" msgid "Local subnet(s). This field is valid if type is Subnet" msgstr "" "ローカル側のサブネット。このフィールドが有効なのは、種別がサブネットの場合の" "みです。" msgid "" "Local subnets which the new IPsec connection is connected to. Required if no " "subnet is specified in a VPN service selected." msgstr "" "新規の IPsec 接続に接続されるローカルサブネット。 VPN サービスでサブネットが" "指定されていない場合に必要です。" msgid "MTU" msgstr "MTU" msgid "Maximum Transmission Unit size for the connection" msgstr "この接続の MTU (最大転送単位) の大きさ" msgid "Name" msgstr "名前" msgid "Name =" msgstr "名前 =" msgid "" "Note: The recommended way to specify local subnets is to use endpoint groups " "in IPsec site connection. It is deprecated to specify subnet in VPN service. " "For a new VPN service or IPsec site connection, using endpoint group is " "recommended." msgstr "" "注意: ローカルサブネットを指定する推奨の方法は、 IPsec サイト間接続でエンドポ" "イントグループを使用する方法です。 VPN サービスでサブネットを指定する方法は廃" "止予定です。新規の VPN サービスや IPsec サイト間接続では、エンドポイントグ" "ループを使うことをお勧めします。" msgid "Optional Parameters" msgstr "詳細パラメーター" msgid "Optional. No need to be specified when you use endpoint groups." msgstr "" "任意。エンドポイントグループを使用している場合には指定する必要はありません。" msgid "PFS" msgstr "PFS" msgid "PFS =" msgstr "PFS =" msgid "PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14." msgstr "" "PFS に指定できるのは Diffie-Hellman グループ 2、5 (デフォルト)、14 です。" msgid "Peer Endpoint Group" msgstr "対向のエンドポイントグループ" msgid "Peer Endpoint Group(s)" msgstr "対向のエンドポイントグループ" msgid "Peer gateway public IPv4/IPv6 Address or FQDN" msgstr "接続相手のゲートウェイのパブリック IPv4/IPv6 アドレスまたは FQDN" msgid "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgstr "" "VPN 接続の接続相手のゲートウェイのパブリック IPv4/IPv6 アドレスまたは FQDN" msgid "Peer router identity for authentication (Peer ID)" msgstr "接続相手のルーターの認証用識別子 (Peer ID)" msgid "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgstr "" "接続相手のルーターの認証用識別子。IPv4/IPv6 アドレス、メールアドレス、キー " "ID、FQDN が使用できます。" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Create" msgstr "作成待ち" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Delete" msgstr "削除待ち" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Update" msgstr "更新待ち" msgid "Perfect Forward Secrecy" msgstr "Perfect Forward Secrecy" msgid "Pre-Shared Key (PSK) string" msgstr "事前共有鍵 (Pre-Shared-Key; PSK)" msgid "Project ID" msgstr "プロジェクト ID" msgid "Remote peer CIDR(s) connected to the new IPsec connection." msgstr "新規の IPsec 接続に接続する対向の CIDR" msgid "Remote peer subnet" msgstr "接続相手のサブネット" msgid "Remote peer subnet(s)" msgstr "接続相手のサブネット" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "接続相手のサブネットアドレスを CIDR 形式で指定します。複数指定する場合はコン" "マで区切ります (例: 20.1.0.0/24, 21.1.0.0/24)" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24). This field is valid if " "type is CIDR" msgstr "" "接続相手のサブネットアドレスを CIDR 形式で指定します。複数指定する場合はコン" "マで区切ります (例: 20.1.0.0/24, 21.1.0.0/24)。このフィールドが有効なのは、種" "別が CIDR の場合のみです。" msgid "Route mode" msgstr "ルーティングモード" msgid "Router" msgstr "ルーター" msgid "Router =" msgstr "ルーター =" msgid "Router ID =" msgstr "ルーター ID =" msgid "Save Changes" msgstr "変更の保存" msgid "Scheduled deletion of IKE policy" msgid_plural "Scheduled deletion of IKE policies" msgstr[0] "IKE ポリシーの削除を予約しました" msgid "Scheduled deletion of IPsec policy" msgid_plural "Scheduled deletion of IPsec policies" msgstr[0] "IPsec ポリシーの削除を予約しました" msgid "Scheduled deletion of IPsec site connection" msgid_plural "Scheduled deletion of IPsec site connections" msgstr[0] "IPsec サイト間接続の削除を予約しました" msgid "Scheduled deletion of VPN service" msgid_plural "Scheduled deletion of VPN services" msgstr[0] "VPN サービスの削除を予約しました" msgid "Scheduled deletion of endpoint group" msgid_plural "Scheduled deletion of endpoint groups" msgstr[0] "エンドポイントグループの削除を予約しました" msgid "Select IKE policy" msgstr "IKE ポリシーを選択してください" msgid "Select IPsec Policy" msgstr "IPsec ポリシーを選択してください" msgid "Select VPN service" msgstr "VPN サービスを選択してください" msgid "Select a Router" msgstr "ルーターを選択してください" msgid "Select a Subnet" msgstr "サブネットを選択してください" msgid "Select local endpoint group" msgstr "ローカルのエンドポイントグループを選択してください" msgid "Select peer endpoint group" msgstr "対向のエンドポイントグループを選択してください" msgid "" "Specify a name, description, router, and subnet (optional) for the VPN " "service." msgstr "VPN サービスの名前、説明、ルーター、サブネット (省略可) を指定します。" msgid "Status" msgstr "ステータス" msgid "Status =" msgstr "ステータス =" msgid "Subnet" msgstr "サブネット" msgid "Subnet (for local systems)" msgstr "サブネット (ローカルシステム用)" msgid "Subnet =" msgstr "サブネット =" msgid "Subnet ID =" msgstr "サブネット ID =" msgid "" "The VPN service is attached to a router and references to endpoint group or " "a single subnet to push to a remote site." msgstr "" "VPN サービスはルーターに接続されます。また、(エンドポイントグループを使用しな" "い場合) リモートサイトと接続される 1 個のサブネットに関連付けます。" msgid "The pre-defined key string between the two peers of the VPN connection" msgstr "VPN 接続の両端間で共有される事前定義鍵" msgid "" "The router and admin state fields require to be enabled. All others are " "optional." msgstr "ルーター、管理状態のフィールドは必須です。他の項目は任意です。" msgid "" "The state of IPsec site connection to start in. If disabled (not checked), " "IPsec site connection does not forward packets." msgstr "" "IPsec サイト間接続の初期状態。無効の場合 (チェックが入っていない場合)、IPsec " "サイト間接続はパケット転送を行いません。" msgid "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgstr "" "VPN サービスの初期状態。無効の場合 (チェックが入っていない場合)、VPN サービス" "はパケット転送を行いません。" msgid "The type of IPsec tunnel (tunnel/transport) to be used." msgstr "使用する IPsec トンネル種別です。tunnel、transport を指定できます。" msgid "The type of protocol (esp, ah, ah-esp) used in IPsec policy." msgstr "" "この IPsec ポリシーで使用するプロトコル種別です。esp、ah、ah-esp を指定できま" "す。" msgid "The type of version (v1/v2) that needs to be filtered." msgstr "使用する IKE バージョンの種類です。v1、v2 を指定できます。" msgid "Transform Protocol" msgstr "トランスフォームプロトコル" msgid "Type" msgstr "種別" msgid "Type =" msgstr "種別 =" #, python-format msgid "Unable to add IKE policy \"%s\"." msgstr "IKE ポリシー \"%s\" を追加できません。" #, python-format msgid "Unable to add IPsec policy \"%s\"." msgstr "IPsec ポリシー \"%s\" を追加できません。" #, python-format msgid "Unable to add IPsec site connection \"%s\"." msgstr "IPsec サイト間接続 \"%s\" を追加できません。" #, python-format msgid "Unable to add VPN service \"%s\"." msgstr "VPN サービス \"%s\" を追加できません。" #, python-format msgid "Unable to add endpoint group \"%s\"." msgstr "エンドポイントグループ \"%s\" を追加できません。" msgid "Unable to retrieve IKE policies list." msgstr "IKE ポリシーの一覧を取得できません。" msgid "Unable to retrieve IKE policy details." msgstr "IKE ポリシーの詳細を取得できません。" msgid "Unable to retrieve IPsec policies list." msgstr "IPsec ポリシーの一覧を取得できません。" msgid "Unable to retrieve IPsec policy details." msgstr "IPsec ポリシーの詳細を取得できません。" msgid "Unable to retrieve IPsec policy list." msgstr "IPsec ポリシーの一覧を取得できません。" msgid "Unable to retrieve IPsec site connection details." msgstr "IPsec サイト間接続の詳細を取得できません。" msgid "Unable to retrieve IPsec site connections list." msgstr "IPsec サイト間接続の一覧を取得できません。" msgid "Unable to retrieve VPN service details." msgstr "VPN サービスの詳細を取得できません。" msgid "Unable to retrieve VPN services list." msgstr "VPN サービスの一覧を取得できません。" msgid "Unable to retrieve endpoint group details." msgstr "エンドポイントグループの詳細を取得できません。" msgid "Unable to retrieve endpoint group list." msgstr "エンドポイントグループの一覧を取得できません。" msgid "Unable to retrieve networks list." msgstr "ネットワーク一覧を取得できません。" msgid "Unable to retrieve routers list." msgstr "ルーターの一覧を取得できません。" msgid "VPN" msgstr "VPN" msgid "VPN Connections" msgstr "VPN 接続" msgid "VPN Service" msgstr "VPN サービス" msgid "VPN Service =" msgstr "VPN サービス =" msgid "VPN Service Details" msgstr "VPN サービスの詳細" msgid "VPN Service ID =" msgstr "VPN サービス ID =" msgid "VPN Services" msgstr "VPN サービス" #, python-format msgid "VPN service %s was successfully updated." msgstr "VPN サービス %s が正常に更新されました。" msgid "VPN service associated with this connection" msgstr "この接続に関連付ける VPN サービス" msgid "Valid algorithms are 3des, aes-128, aes-192 and aes-256." msgstr "有効なアルゴリズムは 3des、aes-128、aes-192、および aes-256 です。" msgid "Valid algorithms are sha1, sha256, sha384 and sha512." msgstr "有効なアルゴリズムは sha1、sha256、sha384、および sha512 です。" msgid "Valid integer greater than the DPD interval" msgstr "Dead Peer 検出間隔よりも大きい有効な整数値" msgid "Valid integer lesser than DPD timeout" msgstr "Dead Peer 検出タイムアウトよりも小さい有効な整数値" msgid "Valid integer lesser than the DPD timeout" msgstr "Dead Peer 検出タイムアウトよりも小さい有効な整数値" msgid "Virtual Private Network" msgstr "仮想プライベートネットワーク" msgid "You may update IKE policy details here." msgstr "IKE ポリシーの詳細をここから更新できます。" msgid "You may update IPsec policy details here." msgstr "IPsec ポリシーの詳細をここから更新できます。" msgid "You may update IPsec site connection details here." msgstr "IPsec サイト間接続の詳細をここから更新できます。" msgid "You may update VPN service details here." msgstr "VPN サービスの詳細をここから更新できます。" msgid "You may update endpoint group details here." msgstr "エンドポイントグループの詳細をここから更新できます。" msgid "aes-128" msgstr "aes-128" msgid "aes-192" msgstr "aes-192" msgid "aes-256" msgstr "aes-256" msgid "ah" msgstr "ah" msgid "ah-esp" msgstr "ah-esp" msgid "bi-directional" msgstr "bi-directional" msgid "clear" msgstr "clear" msgid "disabled" msgstr "disabled" msgid "down" msgstr "down" msgid "esp" msgstr "esp" msgid "group14" msgstr "group14" msgid "group2" msgstr "group2" msgid "group5" msgstr "group5" msgid "hold" msgstr "hold" msgid "response-only" msgstr "response-only" msgid "restart" msgstr "restart" msgid "restart-by-peer" msgstr "restart-by-peer" msgid "seconds" msgstr "秒" msgid "sha1" msgstr "sha1" msgid "sha256" msgstr "sha256" msgid "sha384" msgstr "sha384" msgid "sha512" msgstr "sha512" msgid "transport" msgstr "トランスポート" msgid "tunnel" msgstr "トンネル" msgid "up" msgstr "up" msgid "v1" msgstr "v1" msgid "v2" msgstr "v2" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.380892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/ko_KR/0000775000175000017500000000000014750123115027533 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.390892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/ko_KR/LC_MESSAGES/0000775000175000017500000000000014750123115031320 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/ko_KR/LC_MESSAGES/django.po0000664000175000017500000005774714750122063033147 0ustar00jamespagejamespage# Ian Y. Choi , 2015. #zanata # Andreas Jaeger , 2016. #zanata # Ian Y. Choi , 2016. #zanata # Sungjin Kang , 2016. #zanata # skywalker54 , 2016. #zanata # ByungYeol Woo , 2017. #zanata # Ian Y. Choi , 2017. #zanata # Sungjin Kang , 2017. #zanata # bryan tak , 2017. #zanata # johjuhyun , 2017. #zanata # minwook-shin , 2017. #zanata # ByungYeol Woo , 2018. #zanata # Ian Y. Choi , 2018. #zanata # Sungjin Kang , 2018. #zanata # Wonil Choi , 2018. #zanata # ByungYeol Woo , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2020-10-02 07:38+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-05-01 10:56+0000\n" "Last-Translator: ByungYeol Woo \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 "" "(Deprecated) Remote peer subnet(s) address(es) with mask(s) in CIDR format " "separated with commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "(지원종료됨) 필요할 경우 쉼표로 구별된 CIDR 형식의 마스크가 있는 원격 피어 서" "브넷 주소 (예: 20.1.0.0/24, 21.1.0.0/24)" msgid "-" msgstr "-" msgid "3des" msgstr "3des" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Active" msgstr "활성" msgid "Add" msgstr "추가" msgid "Add Endpoint Group" msgstr "엔드포인트 그룹 추가" msgid "Add IKE Policy" msgstr "IKE 정책 추가" msgid "Add IPsec Policy" msgstr "IPsec 정책 추가" msgid "Add IPsec Site Connection" msgstr "IPsec 사이트 연결 추가" msgid "Add New Endpoint Groups" msgstr "새 엔드포인트 그룹 추가" msgid "Add New IKE Policy" msgstr "새로운 IKE 정책 추가" msgid "Add New IPsec Policy" msgstr "새로운 IPsec 정책 추가" msgid "Add New IPsec Site Connection" msgstr "새로운 IPsec 사이트 연결 추가" msgid "Add New VPN Service" msgstr "새로운 VPN 서비스 추가" msgid "Add VPN Service" msgstr "VPN 서비스 추가" #, python-format msgid "Added IKE policy \"%s\"." msgstr "IKE 정책 \"%s\"를 추가하였습니다." #, python-format msgid "Added IPsec policy \"%s\"." msgstr "IPsec 정책 \"%s\"를 추가하였습니다." #, python-format msgid "Added IPsec site connection \"%s\"." msgstr "IPsec 사이트 연결 \"%s\"를 추가하였습니다." #, python-format msgid "Added VPN service \"%s\"." msgstr "다음 VPN 서비스가 추가되었습니다. \"%s\"" #, python-format msgid "Added endpoint group \"%s\"." msgstr "엔드포인트 그룹 \"%s\"를 추가하였습니다." msgid "Admin State" msgstr "관리자 상태" msgid "Admin State is enabled by default." msgstr "기본적으로 관리자 상태는 활성화 상태입니다." msgid "All fields are optional." msgstr "모든 필드는 선택 항목입니다." msgid "An IKE policy is an association of the following attributes:" msgstr "IKE 정책은 다음과 같은 속성이 있습니다:" msgid "An IPsec policy is an association of the following attributes" msgstr "IPsec 정책은 다음과 같은 속성이 있습니다." msgid "Authorization algorithm" msgstr "인증 알고리즘" msgid "Authorization algorithm =" msgstr "인증 알고리즘=" msgid "Authorization mode" msgstr "인증 모드" msgid "CIDR (for external systems)" msgstr "CIDR (외부 시스템용)" msgid "Create IKE policy for current project." msgstr "현재 프로젝트에대한 IKE 정책을 생성합니다." msgid "Create IPsec policy for current project." msgstr "현재 프로젝트의 IPsec 정책을 생성합니다." msgid "" "Create IPsec site connection for current project. Assign a name and " "description for the IPsec site connection. All fields in this tab are " "required." msgstr "" "현재 프로젝트에 IPsec 사이트 연결을 생성합니다. 해당 IPsec 사이트 연결에 대" "한 이름과 설명을 입력하십시오. 이 탭의 모든 필드는 필수항목입니다." msgid "Create VPN service for current project." msgstr "현재 프로젝트의 VPN 서비스를 생성합니다." msgid "Create endpoint group for current project." msgstr "현재 프로젝트에대한 엔드포인트 그룹을 생성합니다." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Created" msgstr "생성됨" msgid "DPD Timeout must be greater than DPD Interval" msgstr "DPD 타임아웃은 DPD Interval보다 커야 합니다." msgid "Dead peer detection action" msgstr "죽은 피어 감지 동작" msgid "Dead peer detection actions" msgstr "죽은 피어 감지 동작" msgid "Dead peer detection interval" msgstr "죽은 피어 감지 간격" msgid "Dead peer detection timeout" msgstr "죽은 피어 감지 타임아웃" msgid "Delete Endpoint Group" msgid_plural "Delete Endpoint Groups" msgstr[0] "엔드포인트 그룹 삭제" msgid "Delete IKE Policy" msgid_plural "Delete IKE Policies" msgstr[0] "IKE 정책 삭제" msgid "Delete IPsec Policy" msgid_plural "Delete IPsec Policies" msgstr[0] "IPsec 정책 삭제" msgid "Delete IPsec Site Connection" msgid_plural "Delete IPsec Site Connections" msgstr[0] "IPsec 사이트 연결 삭제" msgid "Delete VPN Service" msgid_plural "Delete VPN Services" msgstr[0] "VPN 서비스 삭제" msgid "Description" msgstr "설명" msgid "Description:" msgstr "설명:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Down" msgstr "Down" msgid "Edit Connection" msgstr "연결 편집" msgid "Edit Endpoint Group" msgstr "엔드포인트 그룹 편집" msgid "Edit IKE Policy" msgstr "IKE 정책 편집" msgid "Edit IPsec Policy" msgstr "IPsec 정책 편집" msgid "Edit IPsec Site Connection" msgstr "IPsec 사이트 접속 편집" msgid "Edit IPsec policy" msgstr "IPsec 정책 편집" msgid "Edit IPsec site connection" msgstr "IPsec 사이트 접속 편집" msgid "Edit VPN Service" msgstr "VPN 서비스 편집" msgid "Enable Admin State" msgstr "관리 상태 활성화" msgid "Encapsulation mode" msgstr "캡슐화 모드" msgid "Encryption algorithm" msgstr "암호화 알고리즘" msgid "Encryption algorithm =" msgstr "암호화 알고리즘=" msgid "Endpoint Groups" msgstr "엔드포인트 그룹" msgid "Endpoint Groups Details" msgstr "엔드포인트 그룹 세부 정보" #, python-format msgid "Endpoint group %s was successfully updated." msgstr "엔드포인트 그룹 %s를 성공적으로 업데이트 하였습니다." msgid "Endpoint group for local subnet(s)" msgstr "로컬 서브넷용 엔드포인트 그룹" msgid "Endpoint group for remote peer CIDR(s)" msgstr "원격 피어 CIDR용 엔드포인트 그룹" msgid "Endpoints" msgstr "Endpoints" msgid "Endpoints =" msgstr "엔드포인트=" msgid "Equal to or greater than 60" msgstr "60이상" msgid "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgstr "" "로컬 서브넷이 IPv4이면 68이상입니다. 그리고 로컬 서브넷이 IPv6라면 1280이상입" "니다." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Error" msgstr "오류" msgid "External System CIDRs" msgstr "외부 시스템 CIDR" msgid "External System Subnets" msgstr "외부 시스템 서브넷" #, python-format msgid "Failed to update IKE policy %s" msgstr "IKE 정책 %s를 업데이트하지 못 했습니다." #, python-format msgid "Failed to update IPsec policy %s" msgstr "IPsec 정책 %s를 업데이트 하지 못하였습니다" #, python-format msgid "Failed to update IPsec site connection %s" msgstr "IPsec 사이트 연결 %s를 업데이트 하지 못하였습니다." #, python-format msgid "Failed to update VPN service %s" msgstr "VPN 서비스 %s를 업데이트 하는데 실패했습니다." #, python-format msgid "Failed to update endpoint group %s" msgstr "엔드포인트 그룹 %s 업데이트가 실패했습니다." msgid "" "Fields in this tab are optional. You can configure the detail of IPsec site " "connection created." msgstr "" "이 탭의 항목은 선택 사항입니다. 생성된 IPsec 사이트 연결에 대한 세부 사항을 " "구성할 수 있습니다." msgid "ID" msgstr "ID" msgid "IKE Phase 1 negotiation mode" msgstr "IKE Phase 1 협상 모드" msgid "IKE Phase1 negotiation mode" msgstr "IKE Phase1 협상 모드" msgid "IKE Policies" msgstr "IKE 정책" msgid "IKE Policy" msgstr "IKE 정책" msgid "IKE Policy =" msgstr "IKE 정책=" msgid "IKE Policy Details" msgstr "IKE 정책 세부 정보" msgid "IKE Policy ID =" msgstr "IKE 정책 ID=" #, python-format msgid "IKE policy %s was successfully updated." msgstr "IKE 정책 %s를 성공적으로 업데이트 했습니다." msgid "IKE policy associated with this connection" msgstr "이 연결에 적용할 IKE 정책" msgid "IKE version" msgstr "IKE 버전" msgid "IPsec Policies" msgstr "IPsec 정책" msgid "IPsec Policy" msgstr "IPsec 정책" msgid "IPsec Policy =" msgstr "IPsec 정책=" msgid "IPsec Policy Details" msgstr "IPsec 정책 세부 정보" msgid "IPsec Policy ID =" msgstr "IPsec 정책 ID=" msgid "IPsec Site Connection Details" msgstr "IPsec 사이트 연결 세부 정보" msgid "IPsec Site Connections" msgstr "IPsec 사이트 연결" msgid "IPsec connection validation requires that local endpoints are subnets" msgstr "IPsec 연결 유효성을 위해선 로컬 엔드포인트가 서브넷이어야 합니다." msgid "" "IPsec connection validation requires that local endpoints are subnets, and " "peer endpoints are CIDRs." msgstr "" "IPsec 연결 유효성을 위해선 로컬 엔드포인트가 서브넷이어야 하고 상대 엔드포인" "트는 CIDR이어야 합니다." msgid "IPsec connection validation requires that peer endpoints are CIDRs" msgstr "IPsec 연결 유효성을 위해선 상대 엔드포인트가 CIDR이어야 합니다." #, python-format msgid "IPsec policy %s was successfully updated." msgstr "IPsec 정책 %s를 성공적으로 업데이트 했습니다." msgid "IPsec policy associated with this connection" msgstr "이 연결에 적용할 IPsec 정책" #, python-format msgid "IPsec site connection %s was successfully updated." msgstr "IPsec 사이트 연결 %s를 성공적으로 업데이트하였습니다." msgid "IPv4" msgstr "IPv4" msgid "IPv4:" msgstr "IPv4:" msgid "IPv6" msgstr "IPv6" msgid "IPv6:" msgstr "IPv6:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Inactive" msgstr "비활성" msgid "Initiator state" msgstr "Initiator 상태" msgid "" "Life time consists of units and value. Units in 'seconds' and the default " "value is 3600." msgstr "" "수명(lifetime)은 단위와 값으로 구성됩니다. '초(seconds)' 단위이며 기본값은 " "3600입니다." msgid "Lifetime" msgstr "수명(Lifetime)" msgid "Lifetime Units" msgstr "수명 단위" msgid "Lifetime Value" msgstr "수명 값" msgid "Lifetime units" msgstr "Lifetime units" msgid "Lifetime units for IKE keys" msgstr "IKE 키의 수명 단위" msgid "Lifetime value" msgstr "Lifetime value" msgid "Lifetime value for IKE keys" msgstr "IKE 키의 수명 값" msgid "Lifetime value for IKE keys " msgstr "IKE 키의 수명 값" msgid "Local Endpoint Group" msgstr "로컬 엔드포인트 그룹" msgid "Local Endpoint Group(s)" msgstr "로컬 엔드포인트 그룹" msgid "Local Side Public IPs" msgstr "로컬 사이트 공용 IP" msgid "Local System Subnets" msgstr "로컬 시스템 서브넷" msgid "Local subnet(s). This field is valid if type is Subnet" msgstr "로컬 서브넷. 이 항목은 유형이 서브넷인 경우 유효합니다" msgid "" "Local subnets which the new IPsec connection is connected to. Required if no " "subnet is specified in a VPN service selected." msgstr "" "새로운 IPsec 연결이 연결된 로컬 서브넷. VPN 서비스에 서브넷이 지정되지 않을 " "경우 필요합니다." msgid "MTU" msgstr "MTU" msgid "Maximum Transmission Unit size for the connection" msgstr "연결에 대한 최대 전달 단위 크기" msgid "Name" msgstr "이름" msgid "Name =" msgstr "Name =" msgid "" "Note: The recommended way to specify local subnets is to use endpoint groups " "in IPsec site connection. It is deprecated to specify subnet in VPN service. " "For a new VPN service or IPsec site connection, using endpoint group is " "recommended." msgstr "" "참고: 로컬 서브넷을 지정하는 권장 방법은 IPsec 사이트 연결에서 엔드포인트 그" "룹을 이용하는 것입니다. VPN 서비스에서 서브넷을 지정하는 것은 지원종료되었습" "니다. 새로운 VPN 서비스나 IPsec 사이트 연결에는 엔드포인트 그룹을 사용하는 것" "이 권장됩니다." msgid "Optional Parameters" msgstr "옵션 매개 변수" msgid "Optional. No need to be specified when you use endpoint groups." msgstr "선택사항. 엔드포인트 그룹을 사용할 땐 지정할 필요가 없습니다." msgid "PFS" msgstr "PFS" msgid "PFS =" msgstr "PFS=" msgid "PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14." msgstr "PFS는 Diffie-Hellman 그룹 2, 5 (기본) 그리고 14만 사용할 수 있습니다." msgid "Peer Endpoint Group" msgstr "상대 엔드포인트 그룹" msgid "Peer Endpoint Group(s)" msgstr "상대 엔드포인트 그룹" msgid "Peer gateway public IPv4/IPv6 Address or FQDN" msgstr "피어 게이트웨이 공용 IPv4/IPv6 주소나 FQDN" msgid "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgstr "VPN에 연결을 위한 피어 게이트웨이 공용 IPv4/IPv6 주소나 FQDN" msgid "Peer router identity for authentication (Peer ID)" msgstr "신원 인증을 위한 피어 라우터 ID (피어 ID)" msgid "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgstr "" "신원 인증을 위한 피어 라우터 ID. IPv4/IPv6 주소, e-mail, 키 ID, FQDN으로도 가" "능합니다." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Create" msgstr "생성 대기중" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Delete" msgstr "삭제 대기중" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Update" msgstr "업데이트 대기중" msgid "Perfect Forward Secrecy" msgstr "완벽한 Forward 보안" msgid "Pre-Shared Key (PSK) string" msgstr "사전 공유키 (PSK) 문자" msgid "Project ID" msgstr "프로젝트 ID" msgid "Remote peer CIDR(s) connected to the new IPsec connection." msgstr "새로운 IPsec 연결로 연결된 원격 피어 CIDR." msgid "Remote peer subnet" msgstr "원격 피어 서브넷" msgid "Remote peer subnet(s)" msgstr "원격 피어 서브넷" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "필요한 경우, CIDR 포멧으로 마스크와 원격 비어 서브넷 주소를 쉼표로 구분합니" "다. (예: 20.1.0.0/24, 21.1.0.0/24)" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24). This field is valid if " "type is CIDR" msgstr "" "필요한 경우, 쉼표로 나눈 CIDR 포맷 마스크로 구성된 원격 상대방 서브넷 주소 " "(예: 20.1.0.0/24, 21.1.0.0/24). 이 필드는 타입이 CIDR일 경우에 유효합니다." msgid "Route mode" msgstr "라우트 모드" msgid "Router" msgstr "라우터" msgid "Router =" msgstr "라우터=" msgid "Router ID =" msgstr "라우터 ID =" msgid "Save Changes" msgstr "변경사항 저장" msgid "Scheduled deletion of IKE policy" msgid_plural "Scheduled deletion of IKE policies" msgstr[0] "IKE 정책 예약 삭제" msgid "Scheduled deletion of IPsec policy" msgid_plural "Scheduled deletion of IPsec policies" msgstr[0] "IPsec 정책 예약 삭제" msgid "Scheduled deletion of IPsec site connection" msgid_plural "Scheduled deletion of IPsec site connections" msgstr[0] "IPsec 사이트 연결 예약 삭제" msgid "Scheduled deletion of VPN service" msgid_plural "Scheduled deletion of VPN services" msgstr[0] "VPN 서비스 예약 삭제" msgid "Scheduled deletion of endpoint group" msgid_plural "Scheduled deletion of endpoint groups" msgstr[0] "엔드포인트 그룹의 예약 삭제" msgid "Select IKE policy" msgstr "IKE 정책 선택" msgid "Select IPsec Policy" msgstr "IPsec 정책 선택" msgid "Select VPN service" msgstr "VPN 서비스 선택" msgid "Select a Router" msgstr "라우터 선택" msgid "Select a Subnet" msgstr "서브넷 선택" msgid "Select local endpoint group" msgstr "로컬 엔드포인트 그룹 선택" msgid "Select peer endpoint group" msgstr "로컬 엔드포인트 피어 선택" msgid "" "Specify a name, description, router, and subnet (optional) for the VPN " "service." msgstr "VPN 서비스의 이름, 설명, 라우터, 그리고 서브넷을 지정합니다." msgid "Status" msgstr "상태" msgid "Status =" msgstr "상태 = " msgid "Subnet" msgstr "서브넷" msgid "Subnet (for local systems)" msgstr "서브넷 (로컬 시스템용)" msgid "Subnet =" msgstr "서브넷=" msgid "Subnet ID =" msgstr "서브넷 ID=" msgid "" "The VPN service is attached to a router and references to endpoint group or " "a single subnet to push to a remote site." msgstr "" "VPN 서비스는 라우터에 연결되어 있고 원격 사이트로 푸쉬하기 위한 엔드포인트 그" "룹이나 단일 서브넷에 대한 참조입니다." msgid "The pre-defined key string between the two peers of the VPN connection" msgstr "VPN에 연결하는 2개의 피어간에 미리 정의돈 문자열을 사용합니다." msgid "" "The router and admin state fields require to be enabled. All others are " "optional." msgstr "" "라우터, 관리자 상태 필드는 활성화 되어야 합니다. 그 외에는 모두 선택 항목입니" "다." msgid "" "The state of IPsec site connection to start in. If disabled (not checked), " "IPsec site connection does not forward packets." msgstr "" "시작할 IPsec 사이트 연결 상태. 비활성화된 경우 (선택하지 않은 경우), IPsec 사" "이트 연결은 패킷을 전달하지 않습니다." msgid "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgstr "" "시작할 VPN 서비스 상태. 비활성화된 경우 (선택하지 않은 경우), VPN 서비스는 패" "킷을 전달하지 않습니다." msgid "The type of IPsec tunnel (tunnel/transport) to be used." msgstr "사용될 IPsec 터널 (터널/전송) 유형입니다." msgid "The type of protocol (esp, ah, ah-esp) used in IPsec policy." msgstr "IPsec 정책에 사용되는 프로토콜 유형(esp, ah, ah-esp)입니다." msgid "The type of version (v1/v2) that needs to be filtered." msgstr "필터링이 필요한 버전 유형(v1/v2)입니다." msgid "Transform Protocol" msgstr "변환 프로토콜" msgid "Type" msgstr "타입" msgid "Type =" msgstr "Type =" #, python-format msgid "Unable to add IKE policy \"%s\"." msgstr "IKE 정책 \"%s\"를 추가할 수 없습니다." #, python-format msgid "Unable to add IPsec policy \"%s\"." msgstr "IPsec 정책 \"%s\"를 추가할 수 없습니다." #, python-format msgid "Unable to add IPsec site connection \"%s\"." msgstr "IPsec 사이트 연결 \"%s\"를 추가 할 수 없습니다." #, python-format msgid "Unable to add VPN service \"%s\"." msgstr "다음 VPN 서비스를 추가할 수 없습니다. \"%s\"" #, python-format msgid "Unable to add endpoint group \"%s\"." msgstr "엔드포인트 그룹 \"%s\"를 추가할 수 없습니다." msgid "Unable to retrieve IKE policies list." msgstr "IKE 정책 목록을 가져올 수 없습니다." msgid "Unable to retrieve IKE policy details." msgstr "IKE 정책 세부 정보를 가져올 수 없습니다." msgid "Unable to retrieve IPsec policies list." msgstr "IPsec 정책 목록을 찾지 못 했습니다." msgid "Unable to retrieve IPsec policy details." msgstr "IPsec 정책 세부 정보를 가져올 수 없습니다." msgid "Unable to retrieve IPsec policy list." msgstr "IPsec 정책 목록을 가져올 수 없습니다." msgid "Unable to retrieve IPsec site connection details." msgstr "IPsec 사이트 연결 세부 정보를 가져올 수 없습니다." msgid "Unable to retrieve IPsec site connections list." msgstr "IPsec 사이트 연결 목록을 가져올 수 없습니다." msgid "Unable to retrieve VPN service details." msgstr "VPN 서비스 세부 정보를 가져올 수 없습니다." msgid "Unable to retrieve VPN services list." msgstr "VPN 서비스 목록을 가져올 수 없습니다." msgid "Unable to retrieve endpoint group details." msgstr "엔드포인트 그룹 세부 정보를 가져올 수 없습니다." msgid "Unable to retrieve endpoint group list." msgstr "엔드포인트 그룹 목록을 가져올 수 없습니다." msgid "Unable to retrieve networks list." msgstr "네트워크 목록을 찾지 못 했습니다." msgid "Unable to retrieve routers list." msgstr "라우터 목록을 찾지 못했습니다." msgid "VPN" msgstr "VPN" msgid "VPN Connections" msgstr "VPN 연결" msgid "VPN Service" msgstr "VPN 서비스" msgid "VPN Service =" msgstr "VPN 서비스=" msgid "VPN Service Details" msgstr "VPN 서비스 세부 정보" msgid "VPN Service ID =" msgstr "VPN 서비스 ID=" msgid "VPN Services" msgstr "VPN 서비스" #, python-format msgid "VPN service %s was successfully updated." msgstr "VPN 서비스 %s를 성공적으로 업데이트하였습니다." msgid "VPN service associated with this connection" msgstr "이 연결에 연동할 VPN 서비스 " msgid "Valid algorithms are 3des, aes-128, aes-192 and aes-256." msgstr "유효한 알고리즘은 3des, aes-128, aes-192, aes-256 입니다." msgid "Valid algorithms are sha1, sha256, sha384 and sha512." msgstr "유효한 알고리즘은 sha1, sha256, sha384, sha512 입니다." msgid "Valid integer greater than the DPD interval" msgstr "DPD 간격을 보다 큰 유효한 정수" msgid "Valid integer lesser than DPD timeout" msgstr "DPD 타임아웃보다 적은 유효한 정수" msgid "Valid integer lesser than the DPD timeout" msgstr "DPD 타임아웃보다 작은 유효한 정수" msgid "Virtual Private Network" msgstr "가상 내부 네트워크" msgid "You may update IKE policy details here." msgstr "IKE 정책의 세부 정보를 수정할 수 있습니다." msgid "You may update IPsec policy details here." msgstr "IPsec 정책의 세부 정보를 업데이트 할 수 있습니다." msgid "You may update IPsec site connection details here." msgstr "IPsec 사이트 연결 세부 정보를 업데이트 할 수 있습니다." msgid "You may update VPN service details here." msgstr "VPN 서비스의 세부 정보를 업데이트 할 수 있습니다." msgid "You may update endpoint group details here." msgstr "엔드포인트 그룹 세부 사항을 여기서 업데이트 할 수 있습니다." msgid "aes-128" msgstr "aes-128" msgid "aes-192" msgstr "aes-192" msgid "aes-256" msgstr "aes-256" msgid "ah" msgstr "ah" msgid "ah-esp" msgstr "ah-esp" msgid "bi-directional" msgstr "bi-directional" msgid "clear" msgstr "clear" msgid "disabled" msgstr "disabled" msgid "down" msgstr "down" msgid "esp" msgstr "esp" msgid "group14" msgstr "group14" msgid "group2" msgstr "group2" msgid "group5" msgstr "group5" msgid "hold" msgstr "hold" msgid "response-only" msgstr "response-only" msgid "restart" msgstr "restart" msgid "restart-by-peer" msgstr "restart-by-peer" msgid "seconds" msgstr "초" msgid "sha1" msgstr "sha1" msgid "sha256" msgstr "sha256" msgid "sha384" msgstr "sha384" msgid "sha512" msgstr "sha512" msgid "transport" msgstr "transport" msgid "tunnel" msgstr "tunnel" msgid "up" msgstr "up" msgid "v1" msgstr "v1" msgid "v2" msgstr "v2" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.380892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/pt_BR/0000775000175000017500000000000014750123115027534 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.390892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/pt_BR/LC_MESSAGES/0000775000175000017500000000000014750123115031321 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/pt_BR/LC_MESSAGES/django.po0000664000175000017500000002126714750122063033134 0ustar00jamespagejamespage# Carlos Marques , 2016. #zanata # José Mello , 2016. #zanata # Fernando Pimenta , 2017. #zanata # Marcio , 2017. #zanata # Rodrigo Loures , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-03-01 16:15+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-01-27 06:42+0000\n" "Last-Translator: Copied by Zanata \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 "-" msgstr "-" msgid "3des" msgstr "3des" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Active" msgstr "Ativo" msgid "Add" msgstr "Adicionar" msgid "Add IKE Policy" msgstr "Adicionar Política IKE" msgid "Add New IKE Policy" msgstr "Adicionar Nova Política IKE" msgid "Add New VPN Service" msgstr "Adicionar um Novo Serviço de VPN" msgid "Add VPN Service" msgstr "Adicionar Serviço VPN" msgid "Authorization algorithm" msgstr "Algorítimo de autorização" msgid "Authorization algorithm =" msgstr "Algoritmo de autorização = " msgctxt "Current status of an IPsec site connection and VPN service" msgid "Created" msgstr "Criado" msgid "DPD Timeout must be greater than DPD Interval" msgstr "O tempo limite de DPD deve ser maior que o intervalo de DPD" msgid "Dead peer detection actions" msgstr "Ações de detecção de peer inativo" msgid "Dead peer detection interval" msgstr "Intervalo de detecção de peer inativo" msgid "Dead peer detection timeout" msgstr "Tempo limite de detecção de peer inativo" msgid "Delete IKE Policy" msgid_plural "Delete IKE Policies" msgstr[0] "Excluir Política IKE" msgstr[1] "Excluir Políticas IKE" msgid "Delete VPN Service" msgid_plural "Delete VPN Services" msgstr[0] "Excluir Serviço de VPN" msgstr[1] "Excluir Serviços de VPN" # #-#-#-#-# app_reserved_uids.pot (Installation Guide 0.1) #-#-#-#-# # #-#-#-#-# basic_environment.pot (Installation Guide 0.1) #-#-#-#-# # #-#-#-#-# overview.pot (Installation Guide 0.1) #-#-#-#-# msgid "Description" msgstr "Descrição" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Down" msgstr "Inativo" msgid "Edit Connection" msgstr "Editar Conexão" msgid "Edit IKE Policy" msgstr "Editar Política IKE " msgid "Edit VPN Service" msgstr "Editar Serviço VPN" msgid "Enable Admin State" msgstr "Ativar Estado Administrativo" msgid "Encapsulation mode" msgstr "Modo de encapsulamento" msgid "Encryption algorithm" msgstr "Algoritmo de criptografia" msgid "Encryption algorithm =" msgstr "Algoritmo de criptografia = " msgid "Endpoints" msgstr "Endpoints" msgid "Equal to or greater than 60" msgstr "Maior ou igual a 60" msgid "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgstr "" "Igual ou maior que 68 se a sub-rede local for IPv4. Igual ou maior que 1280 " "se a sub-rede local for IPv6." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Error" msgstr "Erro" msgid "IKE Phase1 negotiation mode" msgstr "Modo de negociação do IKE Fase 1" msgid "IKE Policies" msgstr "Políticas IKE" msgid "IKE Policy" msgstr "Política IKE" msgid "IKE Policy =" msgstr "Política IKE = " msgid "IKE Policy Details" msgstr "Detalhes da Política IKE" msgid "IKE Policy ID =" msgstr "ID da Política IKE =" msgid "IKE version" msgstr "Versão IKE" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Inactive" msgstr "Inativo" msgid "Initiator state" msgstr "Estado do iniciador" msgid "Lifetime units" msgstr "Unidades de tempo de vida" msgid "Lifetime units for IKE keys" msgstr "Unidades de tempo de vida para as chaves IKE" msgid "Lifetime value" msgstr "Valor do tempo de vida" msgid "Lifetime value for IKE keys" msgstr "Valor do tempo de vida para chaves IKE" msgid "Lifetime value for IKE keys " msgstr "Valor do Tempo de Vida para chaves IKE" msgid "Local Side Public IPs" msgstr "Lado Local de IPs Públicos" msgid "Maximum Transmission Unit size for the connection" msgstr "Tamanho máximo de Unidade de Transmissão para a conexão" msgid "Name" msgstr "Nome" msgid "Name =" msgstr "Nome =" msgid "Optional Parameters" msgstr "Parâmetros Opcionais" msgid "PFS" msgstr "PFS" msgid "PFS =" msgstr "PFS = " msgid "Peer gateway public IPv4/IPv6 Address or FQDN" msgstr "Endereço público IPv4/IPv6 ou FQDN do gateway do peer " msgid "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgstr "" "Endereço público IPv4/IPv6 ou FQDN do gateway do peer para a Conexão VPN" msgid "Peer router identity for authentication (Peer ID)" msgstr "Identidade do roteador do peer para autenticação (peer ID)" msgid "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgstr "" "Identidade do roteador do peer para autenticação. Pode ser um endereço IPv4/" "IPv6, e-mail, ID de chave ou FQDN" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Create" msgstr "Criação Pendente" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Delete" msgstr "Deleção Pendente" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Update" msgstr "Atualização Pendente" msgid "Perfect Forward Secrecy" msgstr "Sigilo de Encaminhamento Perfeito" msgid "Pre-Shared Key (PSK) string" msgstr "String de Chave Pré-Compartilhada (PSK) " msgid "Remote peer subnet(s)" msgstr "Sub-redes do peer remoto" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "Endereços de sub-redes remotas com máscaras no formato CIDR, separados por " "vírgulas se necessário(ex. 20.1.0.0/24, 21.1.0.0/24) " msgid "Router" msgstr "Roteador" msgid "Router =" msgstr "Roteador =" msgid "Router ID =" msgstr "ID do Roteador =" msgid "Save Changes" msgstr "Salvar Alterações" msgid "Select a Router" msgstr "Selecione um Roteador" msgid "Select a Subnet" msgstr "Selecione a sub-rede" msgid "Status" msgstr "Status" msgid "Status =" msgstr "Status =" msgid "Subnet" msgstr "Sub-rede" msgid "Subnet =" msgstr "Subrede = " msgid "Subnet ID =" msgstr "ID da Subrede =" msgid "The pre-defined key string between the two peers of the VPN connection" msgstr "A sequência de chaves pré-definida entre dois peers da conexão VPN" msgid "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgstr "" "O estado em que o serviço VPN deve ser iniciado. Se desabilitado (não " "marcado), o serviço VPN não encaminha pacotes." msgid "Transform Protocol" msgstr "Transformar Protocolo" msgid "Type" msgstr "Tipo" msgid "Type =" msgstr "Tipo =" msgid "Unable to retrieve networks list." msgstr "Não é possível recuperar lista de redes." msgid "Unable to retrieve routers list." msgstr "Não é possível recuperar a lista de roteadores." msgid "VPN" msgstr "VPN" msgid "VPN Service" msgstr "Serviço de VPN" msgid "VPN Service =" msgstr "Serviço VPN =" msgid "VPN Service Details" msgstr "Detalhes do Serviço de VPN" msgid "VPN Service ID =" msgstr "ID do Serviço VPN =" msgid "VPN Services" msgstr "Serviços de VPN" msgid "Valid integer greater than the DPD interval" msgstr "Número inteiro válido maior que o intervalo DPD" msgid "Valid integer lesser than DPD timeout" msgstr "Número inteiro válido menor que o tempo limite do DPD" msgid "Valid integer lesser than the DPD timeout" msgstr "Número inteiro válido menor que o tempo limite DPD" msgid "Virtual Private Network" msgstr "Rede Virtual Privada" msgid "aes-128" msgstr "aes-128" msgid "aes-192" msgstr "aes-192" msgid "aes-256" msgstr "aes-256" msgid "ah" msgstr "ah" msgid "ah-esp" msgstr "ah-esp" msgid "bi-directional" msgstr "bi-direcional" msgid "clear" msgstr "limpar" msgid "disabled" msgstr "desabilitado" msgid "down" msgstr "Inativo" msgid "esp" msgstr "esp" msgid "group14" msgstr "group14" msgid "group2" msgstr "group2" msgid "group5" msgstr "group5" msgid "hold" msgstr "manter" msgid "response-only" msgstr "somente resposta" msgid "restart" msgstr "reiniciar" msgid "restart-by-peer" msgstr "reniciar-por-peer" msgid "seconds" msgstr "segundos" msgid "sha1" msgstr "sha1" msgid "transport" msgstr "Transporte" msgid "tunnel" msgstr "Túnel" msgid "up" msgstr "Ativo" msgid "v1" msgstr "v1" msgid "v2" msgstr "v2" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.380892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/ru/0000775000175000017500000000000014750123115027154 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.390892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/ru/LC_MESSAGES/0000775000175000017500000000000014750123115030741 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/ru/LC_MESSAGES/django.po0000664000175000017500000007643414750122063032562 0ustar00jamespagejamespage# Antonio Kless , 2015. #zanata # Fedor Tarasenko , 2015. #zanata # OpenStack Infra , 2015. #zanata # Aleksey Alekseenko <9118250541@mail.ru>, 2016. #zanata # Alexander , 2016. #zanata # Andreas Jaeger , 2016. #zanata # Andrew , 2016. #zanata # Artem , 2016. #zanata # Daisy , 2016. #zanata # Fedor Tarasenko , 2016. #zanata # Nikita Burtsev , 2016. #zanata # Artem , 2017. #zanata # Ilya Alekseyev , 2017. #zanata # Roman Gorshunov , 2020. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2020-10-02 07:38+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-03 11:35+0000\n" "Last-Translator: Roman Gorshunov \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 "" "(Deprecated) Remote peer subnet(s) address(es) with mask(s) in CIDR format " "separated with commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "(Устаревший функционал) Адрес(а) подсетей удаленных узлов с масками в " "формате CIDR, разделенные запятыми при необходимости (например, 20.1.0.0/24, " "21.1.0.0/24)" msgid "-" msgstr "-" msgid "3des" msgstr "3des" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Active" msgstr "Активен" msgid "Add" msgstr "Добавить" msgid "Add Endpoint Group" msgstr "Добавить группу конечных точек" msgid "Add IKE Policy" msgstr "Добавить политику IKE" msgid "Add IPsec Policy" msgstr "Добавить политику IPsec" msgid "Add IPsec Site Connection" msgstr "Добавить IPsec подключение" msgid "Add New Endpoint Groups" msgstr "Добавить группы конечных точек" msgid "Add New IKE Policy" msgstr "Добавить политику IKE" msgid "Add New IPsec Policy" msgstr "Добавить политику IPsec" msgid "Add New IPsec Site Connection" msgstr "Добавить новое IPsec подключение" msgid "Add New VPN Service" msgstr "Добавить новый сервис VPN" msgid "Add VPN Service" msgstr "Добавить сервис VPN" #, python-format msgid "Added IKE policy \"%s\"." msgstr "Добавлена политика IKE \"%s\"." #, python-format msgid "Added IPsec policy \"%s\"." msgstr "Добавлена политика IPsec \"%s\"." #, python-format msgid "Added IPsec site connection \"%s\"." msgstr "Добавлено подключение IPsec \"%s\"." #, python-format msgid "Added VPN service \"%s\"." msgstr "Добавлен сервис VPN \"%s\"." #, python-format msgid "Added endpoint group \"%s\"." msgstr "Добавлена группа конечных точек \"%s\"." msgid "Admin State" msgstr "Административное состояние" msgid "Admin State is enabled by default." msgstr "Административное состояние по умолчанию - включено." msgid "All fields are optional." msgstr "Все поля не обязательны." msgid "An IKE policy is an association of the following attributes:" msgstr "Политика IKE объединяет следующие атрибуты:" msgid "An IPsec policy is an association of the following attributes" msgstr "Политика IPsec это сочетание следующих атрибутов" msgid "Authorization algorithm" msgstr " Алгоритм авторизации" msgid "Authorization algorithm =" msgstr " Алгоритм авторизации =" msgid "Authorization mode" msgstr "Режим авторизации" msgid "CIDR (for external systems)" msgstr "CIDR (для внешних систем)" msgid "Create IKE policy for current project." msgstr "Создание политики IKE для текущего проекта." msgid "Create IPsec policy for current project." msgstr "Создание политики IPsec для текущего проекта." msgid "" "Create IPsec site connection for current project. Assign a name and " "description for the IPsec site connection. All fields in this tab are " "required." msgstr "" "Создание нового IPsec подключения для текущего проекта. Укажите имя и " "название для IPsec подключения. Все поля на данной вкладке обязательны для " "заполнения." msgid "Create VPN service for current project." msgstr "Создайте VPN сервис для текущего проекта." msgid "Create endpoint group for current project." msgstr "Создайте группу конечных точек для текущего проекта." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Created" msgstr "Создано" msgid "DPD Timeout must be greater than DPD Interval" msgstr "Таймаут DPD должен быть больше, чем интервал DPD" msgid "Dead peer detection action" msgstr "Действие при обнаружение недоступного пира" msgid "Dead peer detection actions" msgstr "Действия при обнаружение недоступного пира" msgid "Dead peer detection interval" msgstr "Интервал обнаружения недоступного пира" msgid "Dead peer detection timeout" msgstr "Время ожидания для обнаружения недоступного пира" msgid "Delete Endpoint Group" msgid_plural "Delete Endpoint Groups" msgstr[0] "Удалить группу конечных точек" msgstr[1] "Удалить группы конечных точек" msgstr[2] "Удалить группы конечных точек" msgid "Delete IKE Policy" msgid_plural "Delete IKE Policies" msgstr[0] "Удалить политику IKE" msgstr[1] "Удалить политики IKE" msgstr[2] "Удалить политики IKE" msgid "Delete IPsec Policy" msgid_plural "Delete IPsec Policies" msgstr[0] "Удалить политику IPsec" msgstr[1] "Удалить политики IPsec" msgstr[2] "Удалить политики IPsec" msgid "Delete IPsec Site Connection" msgid_plural "Delete IPsec Site Connections" msgstr[0] "Удалить IPsec соединение" msgstr[1] "Удалить IPsec соединения" msgstr[2] "Удалить IPsec соединения" msgid "Delete VPN Service" msgid_plural "Delete VPN Services" msgstr[0] "Удалить службу VPN" msgstr[1] "Удалить службы VPN" msgstr[2] "Удалить службы VPN" msgid "Description" msgstr "Описание" msgid "Description:" msgstr "Описание:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Down" msgstr "Выключен" msgid "Edit Connection" msgstr "Редактировать подключение" msgid "Edit Endpoint Group" msgstr "Редактировать группу конечных точек" msgid "Edit IKE Policy" msgstr "Редактировать IKE политику" msgid "Edit IPsec Policy" msgstr "Редактировать IPsec политику" msgid "Edit IPsec Site Connection" msgstr "Редактировать подключение IPsec сайта" msgid "Edit IPsec policy" msgstr "Редактировать IPsec политику" msgid "Edit IPsec site connection" msgstr "Редактировать подключение IPsec сайта" msgid "Edit VPN Service" msgstr "Редактировать VPN сервис" msgid "Enable Admin State" msgstr "Разрешить Admin State" msgid "Encapsulation mode" msgstr "Режим инкапсуляции" msgid "Encryption algorithm" msgstr "Алгоритм шифрования" msgid "Encryption algorithm =" msgstr "Алгоритм шифрования =" msgid "Endpoint Groups" msgstr "Группы конечных точек" msgid "Endpoint Groups Details" msgstr "Информация о группах конечных точек" #, python-format msgid "Endpoint group %s was successfully updated." msgstr "Группа конечных точек туннелей %s была успешно обновлена." msgid "Endpoint group for local subnet(s)" msgstr "Группа конечных точек для локальных подсетей" msgid "Endpoint group for remote peer CIDR(s)" msgstr "Группа конечных точек для CIDR удалённых подключений" msgid "Endpoints" msgstr "Точки доступа" msgid "Endpoints =" msgstr "Конечные точки =" msgid "Equal to or greater than 60" msgstr "Равен или больше 60" msgid "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgstr "" "Равен или больше 68, если локальная подсеть IPv4. Равен или больше 1280, " "если локальная подсеть IPv6." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Error" msgstr "Ошибка" msgid "External System CIDRs" msgstr "CIDR'ы внешних систем" msgid "External System Subnets" msgstr "Подсети внешних систем" #, python-format msgid "Failed to update IKE policy %s" msgstr "Не удалось обновить IKE политику %s" #, python-format msgid "Failed to update IPsec policy %s" msgstr "Не удалось обновить IPsec политику %s" #, python-format msgid "Failed to update IPsec site connection %s" msgstr "Не удалось обновить подключение IPsec сайта %s" #, python-format msgid "Failed to update VPN service %s" msgstr "Не удалось обновить VPN сервис %s" #, python-format msgid "Failed to update endpoint group %s" msgstr "Неудалось обновить группу конечных точек туннелей %s" msgid "" "Fields in this tab are optional. You can configure the detail of IPsec site " "connection created." msgstr "" "Поля на данной заклады не обязательны для заполнения. Вы можете изменить " "параметры созданного IPsec подключения." msgid "ID" msgstr "ID" msgid "IKE Phase 1 negotiation mode" msgstr "Режим согласования IKE Phase1" msgid "IKE Phase1 negotiation mode" msgstr "Режим согласования IKE Phase1" msgid "IKE Policies" msgstr "Политики IKE" msgid "IKE Policy" msgstr "Политика IKE" msgid "IKE Policy =" msgstr "Политика IKE =" msgid "IKE Policy Details" msgstr "Информация о политики IKE" msgid "IKE Policy ID =" msgstr "ID политики IKE =" #, python-format msgid "IKE policy %s was successfully updated." msgstr "IKE политика %s была успешно обновлена." msgid "IKE policy associated with this connection" msgstr "Политика IKE для данного подключения" msgid "IKE version" msgstr "Версия IKE" msgid "IPsec Policies" msgstr "Политики IPsec =" msgid "IPsec Policy" msgstr "Политика IPsec" msgid "IPsec Policy =" msgstr "Политика IPsec =" msgid "IPsec Policy Details" msgstr "Информация о политике IPsec" msgid "IPsec Policy ID =" msgstr "ID политики IPsec =" msgid "IPsec Site Connection Details" msgstr "Информация об IPsec подключении" msgid "IPsec Site Connections" msgstr "Подключения IPsec" msgid "IPsec connection validation requires that local endpoints are subnets" msgstr "" "Процедура проверки IPsec соединения требует, чтобы локальные конечные точки " "подключения были подсетями" msgid "" "IPsec connection validation requires that local endpoints are subnets, and " "peer endpoints are CIDRs." msgstr "" "Процедура проверки IPsec соединения требует, чтобы локальные конечные точки " "подключения были подсетями, а удалённые конечные точки подключения были в " "формате CIDR." msgid "IPsec connection validation requires that peer endpoints are CIDRs" msgstr "" "Процедура проверки IPsec соединения требует, чтобы удалённые конечные точки " "подключения были в формате CIDR" #, python-format msgid "IPsec policy %s was successfully updated." msgstr "IPsec политика %s была успешно обновлена." msgid "IPsec policy associated with this connection" msgstr "Политика IPsec для данного подключения" #, python-format msgid "IPsec site connection %s was successfully updated." msgstr "Подключение IPsec сайта %s было успешно обновлено." msgid "IPv4" msgstr "IPv4" msgid "IPv4:" msgstr "IPv4:" msgid "IPv6" msgstr "IPv6" msgid "IPv6:" msgstr "IPv6:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Inactive" msgstr "Неактивный" msgid "Initiator state" msgstr "Состояние инициатора" msgid "" "Life time consists of units and value. Units in 'seconds' and the default " "value is 3600." msgstr "" "Время жизни содержит единицы измерения и значение. Единица измерения " "'секунды' и значение по умолчанию 3600." msgid "Lifetime" msgstr "Жизненный цикл" msgid "Lifetime Units" msgstr "Единицы измерения жизненного цикла" msgid "Lifetime Value" msgstr "Размер жизненного цикла" msgid "Lifetime units" msgstr "Единицы измерения жизненного цикла" msgid "Lifetime units for IKE keys" msgstr "Единицы измерения жизненного цикла IKE ключей" msgid "Lifetime value" msgstr "Размер жизненного цикла" msgid "Lifetime value for IKE keys" msgstr "Размер жизненного цикла IKE ключей" msgid "Lifetime value for IKE keys " msgstr "Размер жизненного цикла IKE ключей" msgid "Local Endpoint Group" msgstr "Локальнаю группа конечных точек" msgid "Local Endpoint Group(s)" msgstr "Локальные группы конечных точек" msgid "Local Side Public IPs" msgstr "Локальные публичные IP" msgid "Local System Subnets" msgstr "Подсети локальных систем" msgid "Local subnet(s). This field is valid if type is Subnet" msgstr "Локальные подсети. Это поле корректно, если тип записи - подсеть" msgid "" "Local subnets which the new IPsec connection is connected to. Required if no " "subnet is specified in a VPN service selected." msgstr "" "Локальная подсеть, к которой подключено новое IPsec соединение. Это " "обязательный параметр, если вы не указали подсеть в выбраном VPN сервисе." msgid "MTU" msgstr "MTU" msgid "Maximum Transmission Unit size for the connection" msgstr "Размер MTU для подключения" msgid "Name" msgstr "Имя" msgid "Name =" msgstr "Имя = " msgid "" "Note: The recommended way to specify local subnets is to use endpoint groups " "in IPsec site connection. It is deprecated to specify subnet in VPN service. " "For a new VPN service or IPsec site connection, using endpoint group is " "recommended." msgstr "" "Примечание: для указания локальных подсетей рекомендуется использовать " "группы конечных точек в IPsec соединении.Прямое указание подсетей в сервисе " "VPN явлется устаревшим. Для новых сервисов VPN или IPsec подключений " "рекомендуется использовать круппы конечных точек подключений." msgid "Optional Parameters" msgstr "Дополнительные параметры" msgid "Optional. No need to be specified when you use endpoint groups." msgstr "" "Необязательный параметр, если вы используете группы конечных точек " "подключения." msgid "PFS" msgstr "PFS" msgid "PFS =" msgstr "PFS =" msgid "PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14." msgstr "" "PFS (совершенная прямая секретность) ограниченна использованием групп Диффи-" "Хелмана 2, 5 (по умолчанию) и 14." msgid "Peer Endpoint Group" msgstr "Удалённая группа конечных точек" msgid "Peer Endpoint Group(s)" msgstr "Удалённые группы конечных точек" msgid "Peer gateway public IPv4/IPv6 Address or FQDN" msgstr "Публичный IPv4/IPv6 адрес или FQDN шлюза пира" msgid "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgstr "Публичный IPv4/IPv6 адрес или FQDN шлюза пира для VPN подключения" msgid "Peer router identity for authentication (Peer ID)" msgstr "Идентификатор маршрутизатора пира для аутентификации (Peer ID)" msgid "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgstr "" "Идентификатор маршрутизатора пира для аутентификации. Может быть IPv4/IPv6 " "адрес, адрес электронной почты, ID ключа или FQDN" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Create" msgstr "Ожидает создание" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Delete" msgstr "Ожидает удаления" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Update" msgstr "Ожидает обновления" msgid "Perfect Forward Secrecy" msgstr "Совершенная прямая секретность" msgid "Pre-Shared Key (PSK) string" msgstr "Строка заранее установленного ключа совместного использования (PSK)" msgid "Project ID" msgstr "ID проекта" msgid "Remote peer CIDR(s) connected to the new IPsec connection." msgstr "CIDR удалённых подключений, подключенных к новому IPsec туннелю" msgid "Remote peer subnet" msgstr "Подсеть удаленного пира" msgid "Remote peer subnet(s)" msgstr "Подсеть(и) удаленного пира" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "Адрес(а) подсетей удаленных узлов с масками в формате CIDR, разделенные " "запятыми при необходимости (например, 20.1.0.0/24, 21.1.0.0/24) " msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24). This field is valid if " "type is CIDR" msgstr "" "Адрес(а) подсетей удаленных узлов с масками в формате CIDR, разделенные " "запятыми при необходимости (например, 20.1.0.0/24, 21.1.0.0/24). Это поле " "корректно, если тип записи - формат CIDR" msgid "Route mode" msgstr "Режим маршрутизации" msgid "Router" msgstr "Маршрутизатор" msgid "Router =" msgstr "Маршрутизатор =" msgid "Router ID =" msgstr "ID маршрутизатора =" msgid "Save Changes" msgstr "Сохранить изменения" msgid "Scheduled deletion of IKE policy" msgid_plural "Scheduled deletion of IKE policies" msgstr[0] "Запланировано удаление политики IKE" msgstr[1] "Запланировано удаление политик IKE" msgstr[2] "Запланировано удаление политик IKE" msgid "Scheduled deletion of IPsec policy" msgid_plural "Scheduled deletion of IPsec policies" msgstr[0] "Запланировано удаление политики IPsec" msgstr[1] "Запланировано удаление политик IPsec" msgstr[2] "Запланировано удаление политик IPsec" msgid "Scheduled deletion of IPsec site connection" msgid_plural "Scheduled deletion of IPsec site connections" msgstr[0] "Запланировано удаление IPsec соединение" msgstr[1] "Запланировано удаление IPsec соединений" msgstr[2] "Запланировано удаление IPsec соединений" msgid "Scheduled deletion of VPN service" msgid_plural "Scheduled deletion of VPN services" msgstr[0] "Запланировано удаление сервиса VPN" msgstr[1] "Запланировано удаление сервисов VPN" msgstr[2] "Запланировано удаление сервисов VPN" msgid "Scheduled deletion of endpoint group" msgid_plural "Scheduled deletion of endpoint groups" msgstr[0] "Запланировано удаление группы конечных точек" msgstr[1] "Запланировано удаление групп конечных точек" msgstr[2] "Запланировано удаление групп конечных точек" msgid "Select IKE policy" msgstr "Выберите политику IKE" msgid "Select IPsec Policy" msgstr "Выберите политику IPsec" msgid "Select VPN service" msgstr "Выберите сервис VPN" msgid "Select a Router" msgstr "Выберите Маршрутизатор" msgid "Select a Subnet" msgstr "Выбор подсети" msgid "Select local endpoint group" msgstr "Выберите локальную группу конечных точек" msgid "Select peer endpoint group" msgstr "Выберите удалённую группу конечных точек" msgid "" "Specify a name, description, router, and subnet (optional) for the VPN " "service." msgstr "" "Укажите имя, описание, маршрутизатор и (опционально) подсеть для сервиса VPN." msgid "Status" msgstr "Статус" msgid "Status =" msgstr "Статус =" msgid "Subnet" msgstr "Подсеть" msgid "Subnet (for local systems)" msgstr "Подсеть (для локальных систем)" msgid "Subnet =" msgstr "Подсеть =" msgid "Subnet ID =" msgstr "ID подсети =" msgid "" "The VPN service is attached to a router and references to endpoint group or " "a single subnet to push to a remote site." msgstr "" "Служба VPN связана с маршрутизатором и использует одну группу конечных точек " "или одну подсеть для передачи данных на удаленную локацию." msgid "The pre-defined key string between the two peers of the VPN connection" msgstr "Предопределённый ключ PSK между двумя точками VPN соединения " msgid "" "The router and admin state fields require to be enabled. All others are " "optional." msgstr "" "Поля маршрутизатор и административное состояние должны быть заполнены. Все " "остальные поля необязательны." msgid "" "The state of IPsec site connection to start in. If disabled (not checked), " "IPsec site connection does not forward packets." msgstr "" "Состояние начала подключения сайта по протоколу IPsec. Если отключено (нет " "флажка), то IPsec соединение не пересылает пакеты." msgid "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgstr "" "Состояние, в котором запускается служба VPN. Если она отключена (нет " "флажка), то это означает, что служба VPN не пересылает пакеты." msgid "The type of IPsec tunnel (tunnel/transport) to be used." msgstr "Тип туннеля IPsec (туннель/транспорт) который будет использован." msgid "The type of protocol (esp, ah, ah-esp) used in IPsec policy." msgstr "Тип протокола (esp, ah, ah-esp) используемый в политике IPsec." msgid "The type of version (v1/v2) that needs to be filtered." msgstr "Тип версии (v1/v2) для фильтрации." msgid "Transform Protocol" msgstr "Протокол трансформации" msgid "Type" msgstr "Тип" msgid "Type =" msgstr "Тип =" #, python-format msgid "Unable to add IKE policy \"%s\"." msgstr "Не удалось добавить политику IKE \"%s\"." #, python-format msgid "Unable to add IPsec policy \"%s\"." msgstr "Не удалось добавить политику IPsec \"%s\"." #, python-format msgid "Unable to add IPsec site connection \"%s\"." msgstr "Не удалось добавить подключение IPsec \"%s\"." #, python-format msgid "Unable to add VPN service \"%s\"." msgstr "Не удалось добавить сервис VPN \"%s\"." #, python-format msgid "Unable to add endpoint group \"%s\"." msgstr "Не удалось добавить группу конечных точек \"%s\"." msgid "Unable to retrieve IKE policies list." msgstr "Не удалось получить список политик IKE." msgid "Unable to retrieve IKE policy details." msgstr "Не удалось получить информацию о политике IKE." msgid "Unable to retrieve IPsec policies list." msgstr "Не удалось получить список политик IPsec." msgid "Unable to retrieve IPsec policy details." msgstr "Не удалось получить информацию о политике IPsec." msgid "Unable to retrieve IPsec policy list." msgstr "Не удалось получить список политик IPsec." msgid "Unable to retrieve IPsec site connection details." msgstr "Не удалось получить информацию об IPsec подключении" msgid "Unable to retrieve IPsec site connections list." msgstr "Не удалось получить список IPsec подключений." msgid "Unable to retrieve VPN service details." msgstr "Не удалось получить информацию о сервисе VPN." msgid "Unable to retrieve VPN services list." msgstr "Не удалось получить список сервисов VPN." msgid "Unable to retrieve endpoint group details." msgstr "Не удалось получить информацию о группе конечных точек." msgid "Unable to retrieve endpoint group list." msgstr "Не удалось получить список групп конечных точек." msgid "Unable to retrieve networks list." msgstr "Не удалось получить список сетей." msgid "Unable to retrieve routers list." msgstr "Не удалось получить список Маршрутизаторов." msgid "VPN" msgstr "VPN" msgid "VPN Connections" msgstr "Подключения VPN" msgid "VPN Service" msgstr "Сервис VPN" msgid "VPN Service =" msgstr "Сервис VPN =" msgid "VPN Service Details" msgstr "Информация о сервисе VPN" msgid "VPN Service ID =" msgstr "ID сервиса VPN =" msgid "VPN Services" msgstr "Сервисы VPN" #, python-format msgid "VPN service %s was successfully updated." msgstr "VPN сервис %s был успешно обновлен." msgid "VPN service associated with this connection" msgstr "Сервис VPN для данного подключения" msgid "Valid algorithms are 3des, aes-128, aes-192 and aes-256." msgstr "Доступные алгоритмы: 3des, aes-128, aes-192 и aes-256." msgid "Valid algorithms are sha1, sha256, sha384 and sha512." msgstr "Доступные алгоритмы: sha1, sha256, sha384 и sha512." msgid "Valid integer greater than the DPD interval" msgstr "Допустимое целое число большее интервала DPD" msgid "Valid integer lesser than DPD timeout" msgstr "Допустимое целое число, меньшее таймаута DPD" msgid "Valid integer lesser than the DPD timeout" msgstr "Допустимое целое число, большее таймаута DPD" msgid "Virtual Private Network" msgstr "Виртуальная частная сеть" msgid "You may update IKE policy details here." msgstr " Здесь вы можете обновить данные о политике IKE." msgid "You may update IPsec policy details here." msgstr " Здесь вы можете обновить данные о политике IPSec." msgid "You may update IPsec site connection details here." msgstr " Здесь вы можете обновить данные о политике IPSec сайта. " msgid "You may update VPN service details here." msgstr " Здесь вы можете обновить данные VPN сервиса." msgid "You may update endpoint group details here." msgstr " Здесь вы можете изменить конфигурацию группы конечных точек." msgid "aes-128" msgstr "aes-128" msgid "aes-192" msgstr "aes-192" msgid "aes-256" msgstr "aes-256" msgid "ah" msgstr "ah" msgid "ah-esp" msgstr "ah-esp" msgid "bi-directional" msgstr "bi-направленный" msgid "clear" msgstr "очистить" msgid "disabled" msgstr "запрещено" msgid "down" msgstr "вниз" msgid "esp" msgstr "esp" msgid "group14" msgstr "group14" msgid "group2" msgstr "group2" msgid "group5" msgstr "group5" msgid "hold" msgstr "держать" msgid "response-only" msgstr "только ответ" msgid "restart" msgstr "начать заново" msgid "restart-by-peer" msgstr "перезапуск-пиром" msgid "seconds" msgstr "секунды" msgid "sha1" msgstr "sha1" msgid "sha256" msgstr "sha256" msgid "sha384" msgstr "sha384" msgid "sha512" msgstr "sha512" msgid "transport" msgstr "транспортировать" msgid "tunnel" msgstr "туннельный" msgid "up" msgstr "вверх" msgid "v1" msgstr "v1" msgid "v2" msgstr "v2" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.380892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/tr_TR/0000775000175000017500000000000014750123115027560 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3918922 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/tr_TR/LC_MESSAGES/0000775000175000017500000000000014750123115031345 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/tr_TR/LC_MESSAGES/django.po0000664000175000017500000002040414750122063033150 0ustar00jamespagejamespage# Mücahit Büyükyılmaz , 2015. #zanata # OpenStack Infra , 2015. #zanata # Mücahit Büyükyılmaz , 2016. #zanata # işbaran akçayır , 2017. #zanata # yasemin demiral , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-03-01 16:15+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-09-28 11:08+0000\n" "Last-Translator: Copied by Zanata \n" "Language-Team: Turkish (Turkey)\n" "Language: tr_TR\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n>1)\n" msgid "-" msgstr "-" msgid "3des" msgstr "3des" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Active" msgstr "Etkin" msgid "Add" msgstr "Ekle" msgid "Add IKE Policy" msgstr "IKE İlkesi Ekle" msgid "Add New IKE Policy" msgstr "Yeni IKE İlkesi Ekle" msgid "Add New VPN Service" msgstr "Yeni VPN Servisi Ekle" msgid "Add VPN Service" msgstr "VPN Servisi Ekle" msgid "Authorization algorithm" msgstr "Yetkilendirme algoritması" msgid "Authorization algorithm =" msgstr "Yetkilendirme algoritması =" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Created" msgstr "Oluşturuldu" msgid "DPD Timeout must be greater than DPD Interval" msgstr "DPD Zaman aşımı DPD Aralığından büyük olmalıdır" msgid "Dead peer detection actions" msgstr "Ölü eş algılama eylemleri" msgid "Dead peer detection interval" msgstr "Ölü eş algılama zaman aralığı" msgid "Dead peer detection timeout" msgstr "Ölü eş algılama zaman aşımı" msgid "Delete IKE Policy" msgid_plural "Delete IKE Policies" msgstr[0] "IKE İlkesini Sil" msgstr[1] "IKE İlkelerini Sil" msgid "Delete VPN Service" msgid_plural "Delete VPN Services" msgstr[0] "VPN Servisini Sil" msgstr[1] "VPN Servislerini Sil" msgid "Description" msgstr "Açıklama" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Down" msgstr "Down" msgid "Edit Connection" msgstr "Bağlantıyı Düzenle" msgid "Edit IKE Policy" msgstr "IKE İlkesini Düzenle" msgid "Edit VPN Service" msgstr "VPN Servisini Düzenle" msgid "Enable Admin State" msgstr "Yönetici Durumunu Etkinleştir" msgid "Encapsulation mode" msgstr "Sarmalama kipi" msgid "Encryption algorithm" msgstr "Şifreleme algoritması" msgid "Encryption algorithm =" msgstr "Şifreleme algoritması =" msgid "Endpoints" msgstr "Uçnoktalar" msgid "Equal to or greater than 60" msgstr "60'a eşit ya da 60'dan daha büyük" msgid "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgstr "" "Yerel alt ağ IPv4 ise 68 ya da daha büyük. Yerel alt ağ IPv6 ise 1280 ya da " "daha büyük." msgctxt "Current status of an IPsec site connection and VPN service" msgid "Error" msgstr "Hata" msgid "IKE Phase1 negotiation mode" msgstr "IKE Phase1 müzakere kipi" msgid "IKE Policies" msgstr "IKE İlkeleri" msgid "IKE Policy" msgstr "IKE İlkesi" msgid "IKE Policy =" msgstr "IKE İlkesi =" msgid "IKE Policy Details" msgstr "IKE İlkesi Detayları" msgid "IKE Policy ID =" msgstr "IKE İlke ID'si =" msgid "IKE version" msgstr "IKE sürümü" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Inactive" msgstr "Pasif" msgid "Initiator state" msgstr "Başlatıcı durumu" msgid "Lifetime units" msgstr "Ömür birimleri" msgid "Lifetime units for IKE keys" msgstr "IKE anahtarları için ömür birimleri" msgid "Lifetime value" msgstr "Ömür değeri" msgid "Lifetime value for IKE keys" msgstr "IKE anahtarları için ömür değeri" msgid "Lifetime value for IKE keys " msgstr "IKE anahtarları için ömür değeri " msgid "Local Side Public IPs" msgstr "Yerel Taraf Açık IP'ler" msgid "Maximum Transmission Unit size for the connection" msgstr "Bağlantı için Azami Aktarım Birimi boyutu" msgid "Name" msgstr "İsim" msgid "Name =" msgstr "Ad =" msgid "Optional Parameters" msgstr "İsteğe Bağlı Parametreler" msgid "PFS" msgstr "PFS" msgid "PFS =" msgstr "PFS =" msgid "Peer gateway public IPv4/IPv6 Address or FQDN" msgstr "Eş geçit açık IPv4/IPv6 Adresi veya FQDN" msgid "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgstr "VPN Bağlantısı için eş geçit açık IPv4/IPv6 Adresi veya FQDN" msgid "Peer router identity for authentication (Peer ID)" msgstr "Kimlik doğrulama için eş yönlendirici kimliği (Eş ID)" msgid "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgstr "" "Kimlik doğrulama için eş yönlendirici kimliği. IPv4/IPv6 adresi, e-posta, " "anahtar ID'si, veya FQDN olabilir" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Create" msgstr "Oluşturma Bekleniyor" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Delete" msgstr "Silme Bekleniyor" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Update" msgstr "Güncelleme Bekleniyor" msgid "Perfect Forward Secrecy" msgstr "Mükemmel İleri Gizlilik" msgid "Pre-Shared Key (PSK) string" msgstr "Öncede Paylaşılmış Anahtar (PSK) karakter dizisi" msgid "Remote peer subnet(s)" msgstr "Uzak eş alt ağ(lar)ı" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "Gerekliyse virgülle ayrılmış CIDR biçiminde maskeli uzak eş alt ağ(lar)ı " "adres(ler)i" msgid "Router" msgstr "Yönlendirici" msgid "Router =" msgstr "Yönlendirici =" msgid "Router ID =" msgstr "Yönlendirici ID'si =" msgid "Save Changes" msgstr "Değişiklikleri Kaydet" msgid "Select a Router" msgstr "Bir Router Seçin" msgid "Select a Subnet" msgstr "Bir alt ağ seçin" msgid "Status" msgstr "Durum" msgid "Status =" msgstr "Durum =" msgid "Subnet" msgstr "Alt Ağ" msgid "Subnet =" msgstr "Alt ağ =" msgid "Subnet ID =" msgstr "Alt ağ ID'si =" msgid "The pre-defined key string between the two peers of the VPN connection" msgstr "VPN bağlantısının iki ucu arasındaki önceden tanımlı anahtar metin" msgid "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgstr "" "VPN servisinin başlangıç durumu. Kapalıysa (seçili değilse), VPN servisi " "paketleri yönlendirmez." msgid "Transform Protocol" msgstr "Dönüştürme İletişim Kuralı" msgid "Type" msgstr "Tür" msgid "Type =" msgstr "Tür =" msgid "Unable to retrieve networks list." msgstr "Ağ listesi alınamadı." msgid "Unable to retrieve routers list." msgstr "Router listesi alınamıyor." msgid "VPN" msgstr "VPN" msgid "VPN Service" msgstr "VPN Servisi" msgid "VPN Service =" msgstr "VPN Servisİ =" msgid "VPN Service Details" msgstr "VPN Servis Detayları" msgid "VPN Service ID =" msgstr "VPN Servis ID'si =" msgid "VPN Services" msgstr "VPN Servisleri" msgid "Valid integer greater than the DPD interval" msgstr "DPD aralığından büyük bir tam sayı." msgid "Valid integer lesser than DPD timeout" msgstr "DPD zaman aşımından küçük geçerli tam sayı" msgid "Valid integer lesser than the DPD timeout" msgstr "DPD zaman aşımından küçük geçerli tam sayı" msgid "Virtual Private Network" msgstr "Sanal Özel Ağ" msgid "aes-128" msgstr "aes-128" msgid "aes-192" msgstr "aes-192" msgid "aes-256" msgstr "aes-256" msgid "ah" msgstr "ah" msgid "ah-esp" msgstr "ah-esp" msgid "bi-directional" msgstr "iki-yönlü" msgid "clear" msgstr "temizle" msgid "disabled" msgstr "disabled" msgid "down" msgstr "down" msgid "esp" msgstr "esp" msgid "group14" msgstr "grup14" msgid "group2" msgstr "grup2" msgid "group5" msgstr "grup5" msgid "hold" msgstr "beklet" msgid "response-only" msgstr "yalnızca-cevap" msgid "restart" msgstr "yeniden başlat" msgid "restart-by-peer" msgstr "eşe-göre-yeniden-başlat" msgid "seconds" msgstr "saniye" msgid "sha1" msgstr "sha1" msgid "transport" msgstr "aktarım" msgid "tunnel" msgstr "tünel" msgid "up" msgstr "up" msgid "v1" msgstr "v1" msgid "v2" msgstr "v2" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.381892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/zh_Hans/0000775000175000017500000000000014750123115030120 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3918922 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/zh_Hans/LC_MESSAGES/0000775000175000017500000000000014750123115031705 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/locale/zh_Hans/LC_MESSAGES/django.po0000664000175000017500000005210514750122063033513 0ustar00jamespagejamespage# BillXiang , 2016. #zanata # Linda , 2016. #zanata # Long Yu , 2016. #zanata # sunanchen , 2016. #zanata # Bin , 2017. #zanata # TigerFang , 2017. #zanata # Tony , 2017. #zanata # bkb , 2017. #zanata # blkart , 2017. #zanata # vuuv , 2017. #zanata # zhonghuali , 2017. #zanata # Tony , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2021-03-02 23:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-03-22 04:43+0000\n" "Last-Translator: Tony \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 "" "(Deprecated) Remote peer subnet(s) address(es) with mask(s) in CIDR format " "separated with commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "(已过时)CIDR 格式的远程对等子网地址及子网掩码,用逗号分隔(例如," "20.1.0.0/24, 21.1.0.0/24)" msgid "-" msgstr "_" msgid "3des" msgstr "3des" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Active" msgstr "运行中" msgid "Add" msgstr "添加" msgid "Add Endpoint Group" msgstr "添加端点组" msgid "Add IKE Policy" msgstr "添加 IKE 策略" msgid "Add IPsec Policy" msgstr "添加 IPsec 策略" msgid "Add IPsec Site Connection" msgstr "添加 IPsec 站点连接" msgid "Add New Endpoint Groups" msgstr "添加新端点组" msgid "Add New IKE Policy" msgstr "添加新的 IKE 策略" msgid "Add New IPsec Policy" msgstr "添加新的 IPsec 策略" msgid "Add New IPsec Site Connection" msgstr "添加新的 IPsec 站点连接" msgid "Add New VPN Service" msgstr "添加新的 VPN 服务" msgid "Add VPN Service" msgstr "添加 VPN 服务" #, python-format msgid "Added IKE policy \"%s\"." msgstr "添加的 IKE 策略 \"%s\"。" #, python-format msgid "Added IPsec policy \"%s\"." msgstr "添加的 IPsec 策略 \"%s\"。" #, python-format msgid "Added IPsec site connection \"%s\"." msgstr "添加的 IPsec 站点连接 \"%s\"。" #, python-format msgid "Added VPN service \"%s\"." msgstr "添加的 VPN 服务 \"%s\"。" #, python-format msgid "Added endpoint group \"%s\"." msgstr "添加的端点组 \"%s\"。" msgid "Admin State" msgstr "管理状态" msgid "Admin State is enabled by default." msgstr "管理状态被默认启用。" msgid "All fields are optional." msgstr "所有的选项都是可选的。" msgid "An IKE policy is an association of the following attributes:" msgstr "IKE 策略是以下属性的集合:" msgid "An IPsec policy is an association of the following attributes" msgstr "IPsec 策略是以下属性的集合" msgid "Authorization algorithm" msgstr "授权算法" msgid "Authorization algorithm =" msgstr "授权算法 =" msgid "Authorization mode" msgstr "授权模式" msgid "CIDR (for external systems)" msgstr "CIDR (外部系统)" msgid "Create IKE policy for current project." msgstr "为当前项目创建 IKE 策略。" msgid "Create IPsec policy for current project." msgstr "为当前项目创建 IPsec 策略。" msgid "" "Create IPsec site connection for current project. Assign a name and " "description for the IPsec site connection. All fields in this tab are " "required." msgstr "" "为当前项目创建 IPsec 站点连接。为 IPsec 站点连接分配名称和描述。当前选项卡中" "的所有字段都是必填字段。" msgid "Create VPN service for current project." msgstr "为当前项目创建 VPN 服务" msgid "Create endpoint group for current project." msgstr "为当前项目创建站点组。" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Created" msgstr "已创建" msgid "DPD Timeout must be greater than DPD Interval" msgstr "DPD 超时必须大于 DPD 间隔" msgid "Dead peer detection action" msgstr "已失效对等检测" msgid "Dead peer detection actions" msgstr "已失效对等检测操作" msgid "Dead peer detection interval" msgstr "已失效对等检测间隔" msgid "Dead peer detection timeout" msgstr "已失效对等检测超时" msgid "Delete Endpoint Group" msgid_plural "Delete Endpoint Groups" msgstr[0] "删除端点组" msgid "Delete IKE Policy" msgid_plural "Delete IKE Policies" msgstr[0] "删除 IKE 策略" msgid "Delete IPsec Policy" msgid_plural "Delete IPsec Policies" msgstr[0] "删除I Psec 策略" msgid "Delete IPsec Site Connection" msgid_plural "Delete IPsec Site Connections" msgstr[0] "删除 IPsec 站点连接" msgid "Delete VPN Service" msgid_plural "Delete VPN Services" msgstr[0] "删除 VPN 服务" msgid "Description" msgstr "描述" msgid "Description:" msgstr "描述:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Down" msgstr "关闭" msgid "Edit Connection" msgstr "编辑连接" msgid "Edit Endpoint Group" msgstr "编辑端点组" msgid "Edit IKE Policy" msgstr "编辑 IKE 策略" msgid "Edit IPsec Policy" msgstr "编辑 IPsec 策略" msgid "Edit IPsec Site Connection" msgstr "编辑 IPsec 站点连接" msgid "Edit IPsec policy" msgstr "编辑 IPsec 策略" msgid "Edit IPsec site connection" msgstr "编辑 IPsec 站点连接" msgid "Edit VPN Service" msgstr "编辑 VPN 服务" msgid "Enable Admin State" msgstr "启用管理员状态" msgid "Encapsulation mode" msgstr "封装模式" msgid "Encryption algorithm" msgstr "加密算法" msgid "Encryption algorithm =" msgstr "端点算法 =" msgid "Endpoint Groups" msgstr "端点组" msgid "Endpoint Groups Details" msgstr "端点组详情" #, python-format msgid "Endpoint group %s was successfully updated." msgstr "端点组 %s 已被成功更新。" msgid "Endpoint group for local subnet(s)" msgstr "本地子网的端点组" msgid "Endpoint group for remote peer CIDR(s)" msgstr "远程对等 CIDR 的端点组" msgid "Endpoints" msgstr "服务地址。" msgid "Endpoints =" msgstr "端点 =" msgid "Equal to or greater than 60" msgstr "等于或大于 60" msgid "" "Equal to or greater than 68 if the local subnet is IPv4. Equal to or greater " "than 1280 if the local subnet is IPv6." msgstr "" "如果本地子网是 IPv4,那么等于或者大于 68。如果本地子网是 IPv6,那么等于或大" "于 1280。" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Error" msgstr "Error" msgid "External System CIDRs" msgstr "外部系统 CIDR" msgid "External System Subnets" msgstr "外部系统子网" #, python-format msgid "Failed to update IKE policy %s" msgstr "更新 IKE 策略 %s 失败" #, python-format msgid "Failed to update IPsec policy %s" msgstr "更新 IPsec 策略 %s 失败" #, python-format msgid "Failed to update IPsec site connection %s" msgstr "更新 IPsec 站点连接 %s 失败" #, python-format msgid "Failed to update VPN service %s" msgstr "更新 VPN 服务service %s 失败。" #, python-format msgid "Failed to update endpoint group %s" msgstr "更新端点组 %s 失败" msgid "" "Fields in this tab are optional. You can configure the detail of IPsec site " "connection created." msgstr "本标签中的字段都是可选的。您可以配置已创建的 IPsec站点连接的详情。" msgid "ID" msgstr "ID" msgid "IKE Phase 1 negotiation mode" msgstr "IKE Phase1协商模式" msgid "IKE Phase1 negotiation mode" msgstr "IKE Phase1 协商模式" msgid "IKE Policies" msgstr "IKE 策略" msgid "IKE Policy" msgstr "IKE 策略" msgid "IKE Policy =" msgstr "IKE 策略 =" msgid "IKE Policy Details" msgstr "IKE 策略详情" msgid "IKE Policy ID =" msgstr "IKE 策略 ID =" #, python-format msgid "IKE policy %s was successfully updated." msgstr "成功更新 IKE 策略 %s。" msgid "IKE policy associated with this connection" msgstr "与这个连接相关联的 IKE 策略" msgid "IKE version" msgstr "IKE 版本" msgid "IPsec Policies" msgstr "IPsec 策略" msgid "IPsec Policy" msgstr "IPsec 策略" msgid "IPsec Policy =" msgstr "IPsec 策略 =" msgid "IPsec Policy Details" msgstr "IPsec 策略详情" msgid "IPsec Policy ID =" msgstr "IPsec 策略 ID =" msgid "IPsec Site Connection Details" msgstr "IPsec 站点连接详情" msgid "IPsec Site Connections" msgstr "IPsec 站点连接" msgid "IPsec connection validation requires that local endpoints are subnets" msgstr "IPsec 连接验证需要本地端点是子网" msgid "" "IPsec connection validation requires that local endpoints are subnets, and " "peer endpoints are CIDRs." msgstr "IPsec 连接验证需要本地端点是子网,对等端点是 CIDR。" msgid "IPsec connection validation requires that peer endpoints are CIDRs" msgstr "IPsec 连接验证需要对等端点是 CIDRs" #, python-format msgid "IPsec policy %s was successfully updated." msgstr "IPsec 策略 %s 已被成功更新。" msgid "IPsec policy associated with this connection" msgstr "与这个连接相关联的 IPsec 策略" #, python-format msgid "IPsec site connection %s was successfully updated." msgstr "IPsec 站点连接 %s 被成功更新。" msgid "IPv4" msgstr "IPv4" msgid "IPv4:" msgstr "IPv4:" msgid "IPv6" msgstr "IPv6" msgid "IPv6:" msgstr "IPv6:" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Inactive" msgstr "失效" msgid "Initiator state" msgstr "发起者状态" msgid "" "Life time consists of units and value. Units in 'seconds' and the default " "value is 3600." msgstr "生存期由单位和值组成。单位是“秒”,默认值是 3600。" msgid "Lifetime" msgstr "生存期" msgid "Lifetime Units" msgstr "生存周期单位" msgid "Lifetime Value" msgstr "生存周期值" msgid "Lifetime units" msgstr "生存期单位" msgid "Lifetime units for IKE keys" msgstr "IKE 密钥的生存期单位" msgid "Lifetime value" msgstr "生存期值" msgid "Lifetime value for IKE keys" msgstr "IKE 密钥的生存期值" msgid "Lifetime value for IKE keys " msgstr "IKE 密钥的生存周期" msgid "Local Endpoint Group" msgstr "本地端点组" msgid "Local Endpoint Group(s)" msgstr "本地端点组" msgid "Local Side Public IPs" msgstr "本地端公共 IP" msgid "Local System Subnets" msgstr "本地系统子网" msgid "Local subnet(s). This field is valid if type is Subnet" msgstr "本地子网。如果类型是子网则这个项有效" msgid "" "Local subnets which the new IPsec connection is connected to. Required if no " "subnet is specified in a VPN service selected." msgstr "" "新的 IPsec 连接要连接到的本地子网。如果没有在选择的 VPN 服务中指定子网,则需" "要这个设置。" msgid "MTU" msgstr "MTU" msgid "Maximum Transmission Unit size for the connection" msgstr "此连接的最大传输单元大小" msgid "Name" msgstr "名称" msgid "Name =" msgstr "名称 =" msgid "" "Note: The recommended way to specify local subnets is to use endpoint groups " "in IPsec site connection. It is deprecated to specify subnet in VPN service. " "For a new VPN service or IPsec site connection, using endpoint group is " "recommended." msgstr "" "备注:指定本地子网的推荐方法是使用 IPsec 站点连接中的端点组。对于一个新的 " "VPN 服务或 IPsec 站点连接,推荐使用端点组。" msgid "Optional Parameters" msgstr "可选参数" msgid "Optional. No need to be specified when you use endpoint groups." msgstr "可选。当使用端点组时不需要指定。" msgid "PFS" msgstr "PFS" msgid "PFS =" msgstr "PFS =" msgid "PFS limited to using Diffie-Hellman groups 2, 5 (default) and 14." msgstr "PFS 被限制为只能使用 Diffie-Hellman 组 2、5(默认)和 14。" msgid "Peer Endpoint Group" msgstr "对等端点组" msgid "Peer Endpoint Group(s)" msgstr "对等端点组" msgid "Peer gateway public IPv4/IPv6 Address or FQDN" msgstr "对等网关公共 IPv4/IPv6 地址或 FQDN" msgid "Peer gateway public IPv4/IPv6 address or FQDN for the VPN Connection" msgstr "VPN 连接的对等网关公共 IPv4/IPv6 地址或 FQDN" msgid "Peer router identity for authentication (Peer ID)" msgstr "用于认证的对等路由器身份(对等标识)" msgid "" "Peer router identity for authentication. Can be IPv4/IPv6 address, e-mail, " "key ID, or FQDN" msgstr "" "用于认证的对等路由器身份。可以是 IPv4/IPv6 地址、电子邮件、密钥标识或 FQDN" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Create" msgstr "暂挂创建" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Delete" msgstr "正在暂停删除动作" msgctxt "Current status of an IPsec site connection and VPN service" msgid "Pending Update" msgstr "暂挂更新" msgid "Perfect Forward Secrecy" msgstr "完善前向保密" msgid "Pre-Shared Key (PSK) string" msgstr " 预共享密钥 (PSK) 字符串" msgid "Project ID" msgstr "项目 ID" msgid "Remote peer CIDR(s) connected to the new IPsec connection." msgstr "连接到新的 IPsec 连接的远程对等 CIDR。" msgid "Remote peer subnet" msgstr "远程对等子网" msgid "Remote peer subnet(s)" msgstr "远程对等子网" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24)" msgstr "" "CIDR 格式的远程对等子网地址及子网掩码,用逗号分隔(例如,20.1.0.0/24, " "21.1.0.0/24)" msgid "" "Remote peer subnet(s) address(es) with mask(s) in CIDR format separated with " "commas if needed (e.g. 20.1.0.0/24, 21.1.0.0/24). This field is valid if " "type is CIDR" msgstr "" "CIDR 格式的远程对等子网地址及子网掩码,用逗号分隔(例如,20.1.0.0/24, " "21.1.0.0/24)" msgid "Route mode" msgstr "路由模式" msgid "Router" msgstr "路由器" msgid "Router =" msgstr "路由器 =" msgid "Router ID =" msgstr "路由器ID = " msgid "Save Changes" msgstr "保存变更" msgid "Scheduled deletion of IKE policy" msgid_plural "Scheduled deletion of IKE policies" msgstr[0] "已调度删除 IKE 策略" msgid "Scheduled deletion of IPsec policy" msgid_plural "Scheduled deletion of IPsec policies" msgstr[0] "已调度删除 IPsec 策略" msgid "Scheduled deletion of IPsec site connection" msgid_plural "Scheduled deletion of IPsec site connections" msgstr[0] "已调度删除 IPsec 站点连接" msgid "Scheduled deletion of VPN service" msgid_plural "Scheduled deletion of VPN services" msgstr[0] "已调度删除 VPN 服务" msgid "Scheduled deletion of endpoint group" msgid_plural "Scheduled deletion of endpoint groups" msgstr[0] "已调度删除端点组" msgid "Select IKE policy" msgstr "选择 IKE 策略" msgid "Select IPsec Policy" msgstr "选择 IPsec 策略" msgid "Select VPN service" msgstr "选择 VPN 服务" msgid "Select a Router" msgstr "选择一个路由器" msgid "Select a Subnet" msgstr "选择子网" msgid "Select local endpoint group" msgstr "选择本地端点组" msgid "Select peer endpoint group" msgstr "选择对等端点组" msgid "" "Specify a name, description, router, and subnet (optional) for the VPN " "service." msgstr "为VPN服务指定名称,描述信息,路由以及子网(可选)。" msgid "Status" msgstr "状态" msgid "Status =" msgstr "状态 =" msgid "Subnet" msgstr "子网" msgid "Subnet (for local systems)" msgstr "子网 (本地系统)" msgid "Subnet =" msgstr "子网 =" msgid "Subnet ID =" msgstr "子网 ID =" msgid "" "The VPN service is attached to a router and references to endpoint group or " "a single subnet to push to a remote site." msgstr "VPN 服务连接到路由器,并引用端点组或单个子网以推送至远程站点。" msgid "The pre-defined key string between the two peers of the VPN connection" msgstr "VPN 连接的两个对等之间的预定义密钥字符串" msgid "" "The router and admin state fields require to be enabled. All others are " "optional." msgstr "路由及管理状态是必须的。其他的选项是可选的。" msgid "" "The state of IPsec site connection to start in. If disabled (not checked), " "IPsec site connection does not forward packets." msgstr "" "开始的 IPsec 站点连接状态。如果禁用(没有勾选),IPsec 站点连接不转发数据包。" msgid "" "The state of VPN service to start in. If disabled (not checked), VPN service " "does not forward packets." msgstr "VPN 服务的起始状态。如果为禁用 (未选中),那么 VPN 服务不转发包。" msgid "The type of IPsec tunnel (tunnel/transport) to be used." msgstr "使用的 IPsec tunnel (tunnel/transport) 类型。" msgid "The type of protocol (esp, ah, ah-esp) used in IPsec policy." msgstr "IPsec 策略中使用的协议类型(esp、ah、ah-esp)。" msgid "The type of version (v1/v2) that needs to be filtered." msgstr "需要进行筛选的版本种类 (v1/v2)" msgid "Transform Protocol" msgstr "转换协议" msgid "Type" msgstr "类型" msgid "Type =" msgstr "类型 =" #, python-format msgid "Unable to add IKE policy \"%s\"." msgstr "无法添加 IKE 策略 \"%s\"。" #, python-format msgid "Unable to add IPsec policy \"%s\"." msgstr "无法添加 IPsec 策略 \"%s\"。" #, python-format msgid "Unable to add IPsec site connection \"%s\"." msgstr "无法添加 IPsec 站点连接 \"%s\"。" #, python-format msgid "Unable to add VPN service \"%s\"." msgstr "无法添加 VPN 服务 \"%s\"。" #, python-format msgid "Unable to add endpoint group \"%s\"." msgstr "无法添加端点组 \"%s\"。" msgid "Unable to retrieve IKE policies list." msgstr "无法获取 IKE 策略列表。" msgid "Unable to retrieve IKE policy details." msgstr "无法获取 IKE 策略详情。" msgid "Unable to retrieve IPsec policies list." msgstr "无法获取 IPsec 策略列表。" msgid "Unable to retrieve IPsec policy details." msgstr "无法获取 IPsec 策略详情。" msgid "Unable to retrieve IPsec policy list." msgstr "无法获取 IPsec 策略列表。" msgid "Unable to retrieve IPsec site connection details." msgstr "无法获取 IPsec 站点连接详情。" msgid "Unable to retrieve IPsec site connections list." msgstr "无法获取 IPsec站点连接列表。" msgid "Unable to retrieve VPN service details." msgstr "无法获取 VPN 服务详情。" msgid "Unable to retrieve VPN services list." msgstr "无法获取 VPN 服务列表。" msgid "Unable to retrieve endpoint group details." msgstr "无法获取端点组详情。" msgid "Unable to retrieve endpoint group list." msgstr "无法获取端点组列表。" msgid "Unable to retrieve networks list." msgstr "无法检索网络列表。" msgid "Unable to retrieve routers list." msgstr "无法检索路由器列表。" msgid "VPN" msgstr "VPN" msgid "VPN Connections" msgstr "VPN 连接" msgid "VPN Service" msgstr " VPN 服务" msgid "VPN Service =" msgstr "VPN 服务 =" msgid "VPN Service Details" msgstr " VPN 服务详情" msgid "VPN Service ID =" msgstr "VPN 服务 ID =" msgid "VPN Services" msgstr " VPN 服务" #, python-format msgid "VPN service %s was successfully updated." msgstr "VPN 服务 %s 已被成功更新。" msgid "VPN service associated with this connection" msgstr "与这个连接相关联的 VPN 服务" msgid "Valid algorithms are 3des, aes-128, aes-192 and aes-256." msgstr "有效算法为 3des、aes-128、aes-192 和 aes-256。" msgid "Valid algorithms are sha1, sha256, sha384 and sha512." msgstr "有效算法为 sha1、sha256、sha384 和 sha512。" msgid "Valid integer greater than the DPD interval" msgstr "大于 DPD 间隔的有效整数" msgid "Valid integer lesser than DPD timeout" msgstr "小于 DPD 超时的有效整数" msgid "Valid integer lesser than the DPD timeout" msgstr "小于 DPD 超时的有效整数" msgid "Virtual Private Network" msgstr "虚拟专用网络" msgid "You may update IKE policy details here." msgstr "您可以在此处更新 IKE 策略详情。" msgid "You may update IPsec policy details here." msgstr "您可以在此处更新 IPsec 策略详情。" msgid "You may update IPsec site connection details here." msgstr "您可以在此处更新 IPsec 站点连接详情。" msgid "You may update VPN service details here." msgstr "您可以在此处更新 VPN 服务详情。" msgid "You may update endpoint group details here." msgstr "您可以在此处更新端点组的详情。" msgid "aes-128" msgstr "aes-128" msgid "aes-192" msgstr "aes-192" msgid "aes-256" msgstr "aes-256" msgid "ah" msgstr "ah" msgid "ah-esp" msgstr "ah-esp" msgid "bi-directional" msgstr "双向" msgid "clear" msgstr "清除" msgid "disabled" msgstr "禁用" msgid "down" msgstr "关闭" msgid "esp" msgstr "esp" msgid "group14" msgstr "group14" msgid "group2" msgstr "group2" msgid "group5" msgstr "group5" msgid "hold" msgstr "保留" msgid "response-only" msgstr "仅应答" msgid "restart" msgstr "重启" msgid "restart-by-peer" msgstr "被对等重新启动" msgid "seconds" msgstr "秒" msgid "sha1" msgstr "sha1" msgid "sha256" msgstr "sha256" msgid "sha384" msgstr "sha384" msgid "sha512" msgstr "sha512" msgid "transport" msgstr "网络运输" msgid "tunnel" msgstr "通道" msgid "up" msgstr "启动" msgid "v1" msgstr "v1" msgid "v2" msgstr "v2" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3918922 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/0000775000175000017500000000000014750123115026246 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/__init__.py0000664000175000017500000000000014750122063030346 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3918922 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/api_tests/0000775000175000017500000000000014750123115030241 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/api_tests/__init__.py0000664000175000017500000000000014750122063032341 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/api_tests/test_vpnaas.py0000664000175000017500000004216414750122063033152 0ustar00jamespagejamespage# 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 neutronclient.v2_0 import client from openstack_dashboard import api from openstack_dashboard.test import helpers from neutron_vpnaas_dashboard.api import vpn as api_vpn from neutron_vpnaas_dashboard.test import helpers as test neutronclient = client.Client class VPNaasApiTests(test.APITestCase): @helpers.create_mocks({neutronclient: ('create_vpnservice',)}) def test_vpnservice_create(self): vpnservice1 = self.api_vpnservices.first() form_data = { 'name': vpnservice1['name'], 'description': vpnservice1['description'], 'subnet_id': vpnservice1['subnet_id'], 'router_id': vpnservice1['router_id'], 'admin_state_up': vpnservice1['admin_state_up'] } vpnservice = {'vpnservice': self.api_vpnservices.first()} self.mock_create_vpnservice.return_value = vpnservice ret_val = api_vpn.vpnservice_create(self.request, **form_data) self.assertIsInstance(ret_val, api_vpn.VPNService) self.mock_create_vpnservice.assert_called_once_with( {'vpnservice': form_data}) @helpers.create_mocks({neutronclient: ('list_vpnservices', 'list_ipsec_site_connections'), api.neutron: ('subnet_list', 'router_list')}) def test_vpnservice_list(self): vpnservices = {'vpnservices': self.vpnservices.list()} vpnservices_dict = {'vpnservices': self.api_vpnservices.list()} subnets = self.subnets.list() routers = self.routers.list() ipsecsiteconnections_dict = { 'ipsec_site_connections': self.api_ipsecsiteconnections.list()} self.mock_list_vpnservices.return_value = vpnservices_dict self.mock_subnet_list.return_value = subnets self.mock_router_list.return_value = routers self.mock_list_ipsec_site_connections.return_value = \ ipsecsiteconnections_dict ret_val = api_vpn.vpnservice_list(self.request) for (v, d) in zip(ret_val, vpnservices['vpnservices']): self.assertIsInstance(v, api_vpn.VPNService) self.assertTrue(v.name, d.name) self.assertTrue(v.id) self.mock_list_vpnservices.assert_called_once_with() self.mock_subnet_list.assert_called_once_with(self.request) self.mock_router_list.assert_called_once_with(self.request) self.mock_list_ipsec_site_connections.assert_called_once_with() @helpers.create_mocks({neutronclient: ('show_vpnservice', 'list_ipsec_site_connections'), api.neutron: ('subnet_get', 'router_get')}) def test_vpnservice_get(self): vpnservice = self.vpnservices.first() vpnservice_dict = {'vpnservice': self.api_vpnservices.first()} subnet = self.subnets.first() router = self.routers.first() ipsecsiteconnections_dict = { 'ipsec_site_connections': self.api_ipsecsiteconnections.list()} self.mock_show_vpnservice.return_value = vpnservice_dict self.mock_subnet_get.return_value = subnet self.mock_router_get.return_value = router self.mock_list_ipsec_site_connections.return_value = \ ipsecsiteconnections_dict ret_val = api_vpn.vpnservice_get(self.request, vpnservice.id) self.assertIsInstance(ret_val, api_vpn.VPNService) self.mock_show_vpnservice.assert_called_once_with(vpnservice.id) self.mock_subnet_get.assert_called_once_with(self.request, subnet.id) self.mock_router_get.assert_called_once_with(self.request, router.id) self.mock_list_ipsec_site_connections.assert_called_once_with() @helpers.create_mocks({neutronclient: ('create_endpoint_group',)}) def test_endpointgroup_create(self): endpointgroup = self.api_endpointgroups.first() form_data = { 'name': endpointgroup['name'], 'description': endpointgroup['description'], 'type': endpointgroup['type'], 'endpoints': endpointgroup['endpoints'] } endpoint_group = {'endpoint_group': self.api_endpointgroups.first()} self.mock_create_endpoint_group.return_value = endpoint_group ret_val = api_vpn.endpointgroup_create(self.request, **form_data) self.assertIsInstance(ret_val, api_vpn.EndpointGroup) self.mock_create_endpoint_group.assert_called_once_with( {'endpoint_group': form_data}) @helpers.create_mocks({neutronclient: ('list_endpoint_groups', 'list_ipsec_site_connections')}) def test_endpointgroup_list(self): endpointgroups = {'endpoint_groups': self.endpointgroups.list()} endpointgroups_dict = { 'endpoint_groups': self.api_endpointgroups.list()} ipsecsiteconnections_dict = { 'ipsec_site_connections': self.api_ipsecsiteconnections.list()} self.mock_list_endpoint_groups.return_value = endpointgroups_dict self.mock_list_ipsec_site_connections.return_value = \ ipsecsiteconnections_dict ret_val = api_vpn.endpointgroup_list(self.request) for (v, d) in zip(ret_val, endpointgroups['endpoint_groups']): self.assertIsInstance(v, api_vpn.EndpointGroup) self.assertTrue(v.name, d.name) self.assertTrue(v.id) self.mock_list_endpoint_groups.assert_called_once_with() self.mock_list_ipsec_site_connections.assert_called_once_with() @helpers.create_mocks({neutronclient: ('show_endpoint_group', 'list_ipsec_site_connections')}) def test_endpointgroup_get(self): endpoint_group = self.endpointgroups.first() endpoint_group_dict = { 'endpoint_group': self.api_endpointgroups.first()} ipsecsiteconnections_dict = { 'ipsec_site_connections': self.api_ipsecsiteconnections.list()} self.mock_show_endpoint_group.return_value = endpoint_group_dict self.mock_list_ipsec_site_connections.return_value = \ ipsecsiteconnections_dict ret_val = api_vpn.endpointgroup_get(self.request, endpoint_group.id) self.assertIsInstance(ret_val, api_vpn.EndpointGroup) self.mock_show_endpoint_group.assert_called_once_with( endpoint_group.id) self.mock_list_ipsec_site_connections.assert_called_once_with() @helpers.create_mocks({neutronclient: ('create_ikepolicy',)}) def test_ikepolicy_create(self): ikepolicy1 = self.api_ikepolicies.first() form_data = { 'name': ikepolicy1['name'], 'description': ikepolicy1['description'], 'auth_algorithm': ikepolicy1['auth_algorithm'], 'encryption_algorithm': ikepolicy1['encryption_algorithm'], 'ike_version': ikepolicy1['ike_version'], 'lifetime': ikepolicy1['lifetime'], 'phase1_negotiation_mode': ikepolicy1['phase1_negotiation_mode'], 'pfs': ikepolicy1['pfs'] } ikepolicy = {'ikepolicy': self.api_ikepolicies.first()} self.mock_create_ikepolicy.return_value = ikepolicy ret_val = api_vpn.ikepolicy_create(self.request, **form_data) self.assertIsInstance(ret_val, api_vpn.IKEPolicy) self.mock_create_ikepolicy.assert_called_once_with( {'ikepolicy': form_data}) @helpers.create_mocks({neutronclient: ('list_ikepolicies', 'list_ipsec_site_connections')}) def test_ikepolicy_list(self): ikepolicies = {'ikepolicies': self.ikepolicies.list()} ikepolicies_dict = {'ikepolicies': self.api_ikepolicies.list()} ipsecsiteconnections_dict = { 'ipsec_site_connections': self.api_ipsecsiteconnections.list()} self.mock_list_ikepolicies.return_value = ikepolicies_dict self.mock_list_ipsec_site_connections.return_value = \ ipsecsiteconnections_dict ret_val = api_vpn.ikepolicy_list(self.request) for (v, d) in zip(ret_val, ikepolicies['ikepolicies']): self.assertIsInstance(v, api_vpn.IKEPolicy) self.assertTrue(v.name, d.name) self.assertTrue(v.id) self.mock_list_ikepolicies.assert_called_once_with() self.mock_list_ipsec_site_connections.assert_called_once_with() @helpers.create_mocks({neutronclient: ('show_ikepolicy', 'list_ipsec_site_connections')}) def test_ikepolicy_get(self): ikepolicy = self.ikepolicies.first() ikepolicy_dict = {'ikepolicy': self.api_ikepolicies.first()} ipsecsiteconnections_dict = { 'ipsec_site_connections': self.api_ipsecsiteconnections.list()} self.mock_show_ikepolicy.return_value = ikepolicy_dict self.mock_list_ipsec_site_connections.return_value = \ ipsecsiteconnections_dict ret_val = api_vpn.ikepolicy_get(self.request, ikepolicy.id) self.assertIsInstance(ret_val, api_vpn.IKEPolicy) self.mock_show_ikepolicy.assert_called_once_with(ikepolicy.id) self.mock_list_ipsec_site_connections.assert_called_once_with() @helpers.create_mocks({neutronclient: ('create_ipsecpolicy',)}) def test_ipsecpolicy_create(self): ipsecpolicy1 = self.api_ipsecpolicies.first() form_data = { 'name': ipsecpolicy1['name'], 'description': ipsecpolicy1['description'], 'auth_algorithm': ipsecpolicy1['auth_algorithm'], 'encryption_algorithm': ipsecpolicy1['encryption_algorithm'], 'encapsulation_mode': ipsecpolicy1['encapsulation_mode'], 'lifetime': ipsecpolicy1['lifetime'], 'pfs': ipsecpolicy1['pfs'], 'transform_protocol': ipsecpolicy1['transform_protocol'] } ipsecpolicy = {'ipsecpolicy': self.api_ipsecpolicies.first()} self.mock_create_ipsecpolicy.return_value = ipsecpolicy ret_val = api_vpn.ipsecpolicy_create(self.request, **form_data) self.assertIsInstance(ret_val, api_vpn.IPsecPolicy) self.mock_create_ipsecpolicy.assert_called_once_with( {'ipsecpolicy': form_data}) @helpers.create_mocks({neutronclient: ('list_ipsecpolicies', 'list_ipsec_site_connections')}) def test_ipsecpolicy_list(self): ipsecpolicies = {'ipsecpolicies': self.ipsecpolicies.list()} ipsecpolicies_dict = {'ipsecpolicies': self.api_ipsecpolicies.list()} ipsecsiteconnections_dict = { 'ipsec_site_connections': self.api_ipsecsiteconnections.list()} self.mock_list_ipsecpolicies.return_value = ipsecpolicies_dict self.mock_list_ipsec_site_connections.return_value = \ ipsecsiteconnections_dict ret_val = api_vpn.ipsecpolicy_list(self.request) for (v, d) in zip(ret_val, ipsecpolicies['ipsecpolicies']): self.assertIsInstance(v, api_vpn.IPsecPolicy) self.assertTrue(v.name, d.name) self.assertTrue(v.id) self.mock_list_ipsecpolicies.assert_called_once_with() self.mock_list_ipsec_site_connections.assert_called_once_with() @helpers.create_mocks({neutronclient: ('show_ipsecpolicy', 'list_ipsec_site_connections')}) def test_ipsecpolicy_get(self): ipsecpolicy = self.ipsecpolicies.first() ipsecpolicy_dict = {'ipsecpolicy': self.api_ipsecpolicies.first()} ipsecsiteconnections_dict = { 'ipsec_site_connections': self.api_ipsecsiteconnections.list()} self.mock_show_ipsecpolicy.return_value = ipsecpolicy_dict self.mock_list_ipsec_site_connections.return_value = \ ipsecsiteconnections_dict ret_val = api_vpn.ipsecpolicy_get(self.request, ipsecpolicy.id) self.assertIsInstance(ret_val, api_vpn.IPsecPolicy) self.mock_show_ipsecpolicy.assert_called_once_with(ipsecpolicy.id) self.mock_list_ipsec_site_connections.assert_called_once_with() @helpers.create_mocks({neutronclient: ('create_ipsec_site_connection',)}) def test_ipsecsiteconnection_create(self): ipsecsiteconnection1 = self.api_ipsecsiteconnections.first() form_data = { 'name': ipsecsiteconnection1['name'], 'description': ipsecsiteconnection1['description'], 'dpd': ipsecsiteconnection1['dpd'], 'ikepolicy_id': ipsecsiteconnection1['ikepolicy_id'], 'initiator': ipsecsiteconnection1['initiator'], 'ipsecpolicy_id': ipsecsiteconnection1['ipsecpolicy_id'], 'mtu': ipsecsiteconnection1['mtu'], 'peer_address': ipsecsiteconnection1['peer_address'], 'peer_cidrs': ipsecsiteconnection1['peer_cidrs'], 'peer_id': ipsecsiteconnection1['peer_id'], 'psk': ipsecsiteconnection1['psk'], 'vpnservice_id': ipsecsiteconnection1['vpnservice_id'], 'admin_state_up': ipsecsiteconnection1['admin_state_up'] } ipsecsiteconnection = {'ipsec_site_connection': self.api_ipsecsiteconnections.first()} self.mock_create_ipsec_site_connection.return_value = \ ipsecsiteconnection ret_val = api_vpn.ipsecsiteconnection_create( self.request, **form_data) self.assertIsInstance(ret_val, api_vpn.IPsecSiteConnection) self.mock_create_ipsec_site_connection.assert_called_once_with( {'ipsec_site_connection': form_data}) @helpers.create_mocks({neutronclient: ('list_ipsec_site_connections', 'list_ikepolicies', 'list_ipsecpolicies', 'list_vpnservices')}) def test_ipsecsiteconnection_list(self): ipsecsiteconnections = { 'ipsec_site_connections': self.ipsecsiteconnections.list()} ipsecsiteconnections_dict = { 'ipsec_site_connections': self.api_ipsecsiteconnections.list()} ikepolicies_dict = {'ikepolicies': self.api_ikepolicies.list()} ipsecpolicies_dict = {'ipsecpolicies': self.api_ipsecpolicies.list()} vpnservices_dict = {'vpnservices': self.api_vpnservices.list()} self.mock_list_ipsec_site_connections.return_value = \ ipsecsiteconnections_dict self.mock_list_ikepolicies.return_value = ikepolicies_dict self.mock_list_ipsecpolicies.return_value = ipsecpolicies_dict self.mock_list_vpnservices.return_value = vpnservices_dict ret_val = api_vpn.ipsecsiteconnection_list(self.request) for (v, d) in zip(ret_val, ipsecsiteconnections['ipsec_site_connections']): self.assertIsInstance(v, api_vpn.IPsecSiteConnection) self.assertTrue(v.name, d.name) self.assertTrue(v.id) self.mock_list_ipsec_site_connections.assert_called_once_with() self.mock_list_ikepolicies.assert_called_once_with() self.mock_list_ipsecpolicies.assert_called_once_with() self.mock_list_vpnservices.assert_called_once_with() @helpers.create_mocks({neutronclient: ('show_ipsec_site_connection', 'show_ikepolicy', 'show_ipsecpolicy', 'show_vpnservice')}) def test_ipsecsiteconnection_get(self): ipsecsiteconnection = self.ipsecsiteconnections.first() connection_dict = {'ipsec_site_connection': self.api_ipsecsiteconnections.first()} ikepolicy_dict = {'ikepolicy': self.api_ikepolicies.first()} ipsecpolicy_dict = {'ipsecpolicy': self.api_ipsecpolicies.first()} vpnservice_dict = {'vpnservice': self.api_vpnservices.first()} self.mock_show_ipsec_site_connection.return_value = connection_dict self.mock_show_ikepolicy.return_value = ikepolicy_dict self.mock_show_ipsecpolicy.return_value = ipsecpolicy_dict self.mock_show_vpnservice.return_value = vpnservice_dict ret_val = api_vpn.ipsecsiteconnection_get(self.request, ipsecsiteconnection.id) self.assertIsInstance(ret_val, api_vpn.IPsecSiteConnection) self.mock_show_ipsec_site_connection.assert_called_once_with( ipsecsiteconnection.id) self.mock_show_ikepolicy.assert_called_once_with( ipsecsiteconnection.ikepolicy_id) self.mock_show_ipsecpolicy.assert_called_once_with( ipsecsiteconnection.ipsecpolicy_id) self.mock_show_vpnservice.assert_called_once_with( ipsecsiteconnection.vpnservice_id) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/helpers.py0000664000175000017500000000203214750122063030260 0ustar00jamespagejamespage# 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 openstack_dashboard.test import helpers from neutron_vpnaas_dashboard.test.test_data import utils class TestDataLoaderMixin(object): def _setup_test_data(self): super(TestDataLoaderMixin, self)._setup_test_data() utils.load_data(self) class TestCase(TestDataLoaderMixin, helpers.TestCase): pass class BaseAdminViewTests(TestDataLoaderMixin, helpers.TestCase): pass class APITestCase(TestDataLoaderMixin, helpers.APITestCase): pass ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/settings.py0000664000175000017500000000346414750122063030470 0ustar00jamespagejamespage# 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 from horizon.test.settings import * # noqa from openstack_dashboard.test.settings import * # noqa import openstack_dashboard.enabled from openstack_dashboard.utils import settings import neutron_vpnaas_dashboard.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 neutron_vpnaas_dashboard settings.update_dashboards( [ openstack_dashboard.enabled, neutron_vpnaas_dashboard.enabled, ], HORIZON_CONFIG, INSTALLED_APPS ) # Ensure any duplicate apps are removed after the update_dashboards call INSTALLED_APPS = list(set(INSTALLED_APPS)) # -------------------- # Test-only settings # -------------------- # TEST_GLOBAL_MOCKS_ON_PANELS: defines what and how methods should be # mocked globally for unit tests and Selenium tests. # 'method' is required. 'return_value' and 'side_effect' # are optional and passed to mock.patch(). TEST_GLOBAL_MOCKS_ON_PANELS['vpn'] = { 'method': ('neutron_vpnaas_dashboard.dashboards.project.vpn.panel.' 'VPN.can_access'), 'return_value': True, } ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3918922 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/test_data/0000775000175000017500000000000014750123115030216 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/test_data/__init__.py0000664000175000017500000000000014750122063032316 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/test_data/utils.py0000664000175000017500000000175114750122063031735 0ustar00jamespagejamespage# 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 openstack_dashboard.test.test_data import utils def load_data(load_onto=None): from neutron_vpnaas_dashboard.test.test_data import vpnaas_data # The order of these loaders matters, some depend on others. loaders = ( vpnaas_data.data, ) if load_onto: for data_func in loaders: data_func(load_onto) return load_onto else: return utils.TestData(*loaders) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/test/test_data/vpnaas_data.py0000664000175000017500000002313214750122063033053 0ustar00jamespagejamespage# Copyright 2012 Nebula, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from openstack_dashboard.test.test_data import utils from neutron_vpnaas_dashboard.api import vpn def data(TEST): # Data returned by neutron_vpnaas_dashboard.api.vpn wrapper. TEST.vpnservices = utils.TestDataContainer() TEST.ikepolicies = utils.TestDataContainer() TEST.ipsecpolicies = utils.TestDataContainer() TEST.ipsecsiteconnections = utils.TestDataContainer() TEST.endpointgroups = utils.TestDataContainer() # Data return by neutronclient. TEST.api_vpnservices = utils.TestDataContainer() TEST.api_ikepolicies = utils.TestDataContainer() TEST.api_ipsecpolicies = utils.TestDataContainer() TEST.api_ipsecsiteconnections = utils.TestDataContainer() TEST.api_endpointgroups = utils.TestDataContainer() # 1st VPN service. vpnservice_dict = {'id': '09a26949-6231-4f72-942a-0c8c0ddd4d61', 'tenant_id': '1', 'name': 'cloud_vpn1', 'description': 'vpn description', 'subnet_id': TEST.subnets.first().id, 'router_id': TEST.routers.first().id, 'vpn_type': 'ipsec', 'ipsecsiteconnections': [], 'admin_state_up': True, 'status': 'Active', 'ipsecsiteconns': TEST.ipsecsiteconnections.list() } TEST.api_vpnservices.add(vpnservice_dict) TEST.vpnservices.add(vpn.VPNService(vpnservice_dict)) # 2nd VPN service. vpnservice_dict = {'id': '09a26949-6231-4f72-942a-0c8c0ddd4d62', 'tenant_id': '1', 'name': 'cloud_vpn2', 'description': 'vpn description', 'subnet_id': TEST.subnets.first().id, 'router_id': TEST.routers.first().id, 'vpn_type': 'ipsec', 'ipsecsiteconnections': [], 'admin_state_up': True, 'status': 'Active', 'ipsecsiteconns': [], 'external_v4_ip': '10.0.0.0/24', 'external_v6_ip': 'fd4c:a535:831c::/64' } TEST.api_vpnservices.add(vpnservice_dict) TEST.vpnservices.add(vpn.VPNService(vpnservice_dict)) # 1st Endpoint Group endpointgroup_dict = {'id': 'baa588ff-e1b9-4256-8687-9f06315f64b7', 'tenant_id': '1', 'name': 'endpoint_group_one', 'description': 'the first test endpoint group', 'type': 'subnet', 'endpoints': [TEST.subnets.first().id] } TEST.api_endpointgroups.add(endpointgroup_dict) TEST.endpointgroups.add(vpn.EndpointGroup(endpointgroup_dict)) # 1st IKE policy ikepolicy_dict = {'id': 'a1f009b7-0ffa-43a7-ba19-dcabb0b4c981', 'tenant_id': '1', 'name': 'ikepolicy_1', 'description': 'ikepolicy description', 'auth_algorithm': 'sha1', 'encryption_algorithm': 'aes-256', 'ike_version': 'v1', 'lifetime': {'units': 'seconds', 'value': 3600}, 'phase1_negotiation_mode': 'main', 'pfs': 'group5', 'ipsecsiteconns': TEST.ipsecsiteconnections.list()} TEST.api_ikepolicies.add(ikepolicy_dict) TEST.ikepolicies.add(vpn.IKEPolicy(ikepolicy_dict)) # 2nd IKE policy ikepolicy_dict = {'id': 'a1f009b7-0ffa-43a7-ba19-dcabb0b4c982', 'tenant_id': '1', 'name': 'ikepolicy_2', 'description': 'ikepolicy description', 'auth_algorithm': 'sha1', 'encryption_algorithm': 'aes-256', 'ike_version': 'v1', 'lifetime': {'units': 'seconds', 'value': 3600}, 'phase1_negotiation_mode': 'aggressive', 'pfs': 'group5', 'ipsecsiteconns': []} TEST.api_ikepolicies.add(ikepolicy_dict) TEST.ikepolicies.add(vpn.IKEPolicy(ikepolicy_dict)) # 3rd IKE policy ikepolicy_dict = {'id': 'a1f009b7-0ffa-43a7-ba19-dcabb0b4c983', 'tenant_id': '1', 'name': 'ikepolicy_3', 'description': 'ikepolicy description', 'auth_algorithm': 'sha1', 'encryption_algorithm': 'aes-256', 'ike_version': 'v1', 'lifetime': {'units': 'seconds', 'value': 3600}, 'phase1_negotiation_mode': 'main', 'pfs': 'group5', 'ipsecsiteconns': []} TEST.api_ikepolicies.add(ikepolicy_dict) TEST.ikepolicies.add(vpn.IKEPolicy(ikepolicy_dict)) # 1st IPsec policy ipsecpolicy_dict = {'id': '8376e1dd-2b1c-4346-b23c-6989e75ecdb8', 'tenant_id': '1', 'name': 'ipsecpolicy_1', 'description': 'ipsecpolicy description', 'auth_algorithm': 'sha1', 'encapsulation_mode': 'tunnel', 'encryption_algorithm': '3des', 'lifetime': {'units': 'seconds', 'value': 3600}, 'pfs': 'group5', 'transform_protocol': 'esp', 'ipsecsiteconns': TEST.ipsecsiteconnections.list()} TEST.api_ipsecpolicies.add(ipsecpolicy_dict) TEST.ipsecpolicies.add(vpn.IPsecPolicy(ipsecpolicy_dict)) # 2nd IPsec policy ipsecpolicy_dict = {'id': '8376e1dd-2b1c-4346-b23c-6989e75ecdb9', 'tenant_id': '1', 'name': 'ipsecpolicy_2', 'description': 'ipsecpolicy description', 'auth_algorithm': 'sha1', 'encapsulation_mode': 'tunnel', 'encryption_algorithm': '3des', 'lifetime': {'units': 'seconds', 'value': 3600}, 'pfs': 'group5', 'transform_protocol': 'esp', 'ipsecsiteconns': []} TEST.api_ipsecpolicies.add(ipsecpolicy_dict) TEST.ipsecpolicies.add(vpn.IPsecPolicy(ipsecpolicy_dict)) # 1st IPsec site connection ipsecsiteconnection_dict = {'id': 'dd1dd3a0-f349-49be-b013-245e147763d6', 'tenant_id': '1', 'name': 'ipsec_connection_1', 'description': 'vpn connection description', 'dpd': {'action': 'hold', 'interval': 30, 'timeout': 120}, 'ikepolicy_id': ikepolicy_dict['id'], 'initiator': 'bi-directional', 'ipsecpolicy_id': ipsecpolicy_dict['id'], 'mtu': 1500, 'peer_address': '2607:f0d0:4545:3:200:f8ff:fe21:67cf', 'peer_cidrs': ['20.1.0.0/24', '21.1.0.0/24'], 'peer_id': '2607:f0d0:4545:3:200:f8ff:fe21:67cf', 'psk': 'secret', 'vpnservice_id': vpnservice_dict['id'], 'admin_state_up': True, 'status': 'Active'} TEST.api_ipsecsiteconnections.add(ipsecsiteconnection_dict) TEST.ipsecsiteconnections.add( vpn.IPsecSiteConnection(ipsecsiteconnection_dict)) # 2nd IPsec site connection ipsecsiteconnection_dict = {'id': 'dd1dd3a0-f349-49be-b013-245e147763d7', 'tenant_id': '1', 'name': 'ipsec_connection_2', 'description': 'vpn connection description', 'dpd': {'action': 'hold', 'interval': 30, 'timeout': 120}, 'ikepolicy_id': ikepolicy_dict['id'], 'initiator': 'bi-directional', 'ipsecpolicy_id': ipsecpolicy_dict['id'], 'mtu': 1500, 'peer_address': '172.0.0.2', 'peer_cidrs': ['20.1.0.0/24'], 'peer_id': '172.0.0.2', 'psk': 'secret', 'vpnservice_id': vpnservice_dict['id'], 'admin_state_up': True, 'status': 'Active'} TEST.api_ipsecsiteconnections.add(ipsecsiteconnection_dict) TEST.ipsecsiteconnections.add( vpn.IPsecSiteConnection(ipsecsiteconnection_dict)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard/version.py0000664000175000017500000000122414750122063027326 0ustar00jamespagejamespage# 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_info = pbr.version.VersionInfo('neutron_vpnaas_dashboard') ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.386892 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard.egg-info/0000775000175000017500000000000014750123115026761 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581580.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard.egg-info/PKG-INFO0000644000175000017500000000307414750123114030057 0ustar00jamespagejamespageMetadata-Version: 2.1 Name: neutron-vpnaas-dashboard Version: 11.1.0.dev3 Summary: Neutron VPNaaS Dashboard Home-page: https://docs.openstack.org/neutron-vpnaas-dashboard/latest/ Author: OpenStack Author-email: openstack-discuss@lists.openstack.org Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Requires-Python: >=3.9 License-File: LICENSE License-File: AUTHORS Requires-Dist: pbr!=2.1.0,>=2.0.0 Requires-Dist: horizon>=23.4.0 Requires-Dist: python-neutronclient>=6.7.0 ======================== Neutron VPNaaS Dashboard ======================== OpenStack Dashboard panels for Neutron VPNaaS * Documentation: https://docs.openstack.org/neutron-vpnaas-dashboard/latest/ * Source: https://opendev.org/openstack/neutron-vpnaas-dashboard * Bugs: https://bugs.launchpad.net/neutron-vpnaas-dashboard * Release Notes: https://docs.openstack.org/releasenotes/neutron-vpnaas-dashboard/ Team and repository tags ------------------------ .. image:: https://governance.openstack.org/tc/badges/neutron-vpnaas-dashboard.svg :target: https://governance.openstack.org/tc/reference/tags/index.html ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581580.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard.egg-info/SOURCES.txt0000664000175000017500000001421614750123114030650 0ustar00jamespagejamespage.zuul.yaml AUTHORS CONTRIBUTING.rst ChangeLog HACKING.rst LICENSE README.rst babel-django.cfg babel-djangojs.cfg manage.py requirements.txt setup.cfg setup.py test-requirements.txt tox.ini deliverables/pike/neutron-vpnaas-dashboard.yaml deliverables/queens/neutron-vpnaas-dashboard.yaml devstack/README.rst devstack/plugin.sh devstack/settings doc/requirements.txt doc/source/conf.py doc/source/index.rst doc/source/configuration/index.rst doc/source/contributor/devstack-plugin.rst doc/source/contributor/index.rst doc/source/install/index.rst neutron_vpnaas_dashboard/__init__.py neutron_vpnaas_dashboard/version.py neutron_vpnaas_dashboard.egg-info/PKG-INFO neutron_vpnaas_dashboard.egg-info/SOURCES.txt neutron_vpnaas_dashboard.egg-info/dependency_links.txt neutron_vpnaas_dashboard.egg-info/not-zip-safe neutron_vpnaas_dashboard.egg-info/pbr.json neutron_vpnaas_dashboard.egg-info/requires.txt neutron_vpnaas_dashboard.egg-info/top_level.txt neutron_vpnaas_dashboard/api/__init__.py neutron_vpnaas_dashboard/api/vpn.py neutron_vpnaas_dashboard/dashboards/__init__.py neutron_vpnaas_dashboard/dashboards/project/__init__.py neutron_vpnaas_dashboard/dashboards/project/vpn/__init__.py neutron_vpnaas_dashboard/dashboards/project/vpn/forms.py neutron_vpnaas_dashboard/dashboards/project/vpn/panel.py neutron_vpnaas_dashboard/dashboards/project/vpn/tables.py neutron_vpnaas_dashboard/dashboards/project/vpn/tabs.py neutron_vpnaas_dashboard/dashboards/project/vpn/tests.py neutron_vpnaas_dashboard/dashboards/project/vpn/urls.py neutron_vpnaas_dashboard/dashboards/project/vpn/views.py neutron_vpnaas_dashboard/dashboards/project/vpn/workflows.py neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_add_endpoint_group_help.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_add_ike_policy_help.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_add_ipsec_policy_help.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_add_vpn_service_help.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_endpointgroup_details.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_ikepolicy_details.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_ipsecpolicy_details.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_ipsecsiteconnection_details.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_endpointgroup.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_ikepolicy.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_ipsecpolicy.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_ipsecsiteconnection.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_update_vpnservice.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_vpn_ips.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/_vpnservice_details.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/index.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_endpointgroup.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_ikepolicy.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_ipsecpolicy.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_ipsecsiteconnection.html neutron_vpnaas_dashboard/dashboards/project/vpn/templates/vpn/update_vpnservice.html neutron_vpnaas_dashboard/enabled/_7100_project_vpn_panel.py neutron_vpnaas_dashboard/enabled/__init__.py neutron_vpnaas_dashboard/locale/.placeholder neutron_vpnaas_dashboard/locale/de/LC_MESSAGES/django.po neutron_vpnaas_dashboard/locale/en_GB/LC_MESSAGES/django.po neutron_vpnaas_dashboard/locale/id/LC_MESSAGES/django.po neutron_vpnaas_dashboard/locale/ja/LC_MESSAGES/django.po neutron_vpnaas_dashboard/locale/ko_KR/LC_MESSAGES/django.po neutron_vpnaas_dashboard/locale/pt_BR/LC_MESSAGES/django.po neutron_vpnaas_dashboard/locale/ru/LC_MESSAGES/django.po neutron_vpnaas_dashboard/locale/tr_TR/LC_MESSAGES/django.po neutron_vpnaas_dashboard/locale/zh_Hans/LC_MESSAGES/django.po neutron_vpnaas_dashboard/test/__init__.py neutron_vpnaas_dashboard/test/helpers.py neutron_vpnaas_dashboard/test/settings.py neutron_vpnaas_dashboard/test/api_tests/__init__.py neutron_vpnaas_dashboard/test/api_tests/test_vpnaas.py neutron_vpnaas_dashboard/test/test_data/__init__.py neutron_vpnaas_dashboard/test/test_data/utils.py neutron_vpnaas_dashboard/test/test_data/vpnaas_data.py releasenotes/notes/.placeholder releasenotes/notes/add-aggressive-negotiation-mode-ad665f5cfda2e08b.yaml releasenotes/notes/add-more-formats-to-ipsec-site-connection-e105363b9125b1ed.yaml releasenotes/notes/auth-algorithm-fbfe0831ab8dc346.yaml releasenotes/notes/django2-support-ef2f2bd52a8bb63f.yaml releasenotes/notes/drop-py-2-7-bfbdac2889ac051a.yaml releasenotes/notes/drop-python-3-6-and-3-7-39c229fcb744870f.yaml releasenotes/notes/endpoint-group-3bb4083130952d17.yaml releasenotes/notes/split-out-from-horizon-4807f953d5dc0799.yaml releasenotes/source/2023.1.rst releasenotes/source/2023.2.rst releasenotes/source/2024.1.rst releasenotes/source/2024.2.rst releasenotes/source/conf.py releasenotes/source/index.rst releasenotes/source/pike.rst releasenotes/source/queens.rst releasenotes/source/rocky.rst releasenotes/source/stein.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/es/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/pt_BR/LC_MESSAGES/releasenotes.po releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581580.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard.egg-info/dependency_links.txt0000664000175000017500000000000114750123114033026 0ustar00jamespagejamespage ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581045.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard.egg-info/not-zip-safe0000664000175000017500000000000114750122065031212 0ustar00jamespagejamespage ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581580.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard.egg-info/pbr.json0000664000175000017500000000005714750123114030440 0ustar00jamespagejamespage{"git_version": "159f688", "is_release": false}././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581580.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard.egg-info/requires.txt0000664000175000017500000000007714750123114031364 0ustar00jamespagejamespagehorizon>=23.4.0 pbr!=2.1.0,>=2.0.0 python-neutronclient>=6.7.0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581580.0 neutron_vpnaas_dashboard-11.1.0.dev3/neutron_vpnaas_dashboard.egg-info/top_level.txt0000664000175000017500000000003114750123114031504 0ustar00jamespagejamespageneutron_vpnaas_dashboard ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3828921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/0000775000175000017500000000000014750123115022707 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3928921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/0000775000175000017500000000000014750123115024037 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/.placeholder0000664000175000017500000000000014750122063026311 0ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000021500000000000010213 xustar00119 path=neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/add-aggressive-negotiation-mode-ad665f5cfda2e08b.yaml 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/add-aggressive-negotiation-mode-ad665f5cfda20000664000175000017500000000015714750122063034071 0ustar00jamespagejamespage--- features: - | The ``phase1 negotiation mode`` supports the ``aggressive`` option for IKE policy. ././@PaxHeader0000000000000000000000000000022700000000000010216 xustar00129 path=neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/add-more-formats-to-ipsec-site-connection-e105363b9125b1ed.yaml 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/add-more-formats-to-ipsec-site-connection-e10000664000175000017500000000033714750122063034252 0ustar00jamespagejamespage--- fixes: - | Add support the attributes of IPsec site connection to be able to get more formats like FQDN other than IP format. For more information, see bug `1261127 `_. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/auth-algorithm-fbfe0831ab8dc346.yaml0000664000175000017500000000031714750122063032225 0ustar00jamespagejamespage--- features: - | neutron-vpnaas-dashboard now supports all auth algorithms. neutron-vpnaas supports sha1, sha256, sha384, sha512 for IKE policy auth_algorithm and IPsec policy auth_algorithm. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/django2-support-ef2f2bd52a8bb63f.yaml0000664000175000017500000000031114750122063032410 0ustar00jamespagejamespage--- upgrade: - | Supported django versions are chagned aligning with the supported versions by horizon. Django 1.11 and 2.0 are supported now. Django 1.8 to 1.10 are no longer supported. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/drop-py-2-7-bfbdac2889ac051a.yaml0000664000175000017500000000035714750122063031253 0ustar00jamespagejamespage--- upgrade: - | Python 2.7 support has been dropped. Last release of neutron-vpnaas- dashboard to support Python 2.7 is OpenStack Train. The minimum version of Python now supported by neutron-vpnaas-dashboard is Python 3.6. ././@PaxHeader0000000000000000000000000000020500000000000010212 xustar00111 path=neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/drop-python-3-6-and-3-7-39c229fcb744870f.yaml 22 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/drop-python-3-6-and-3-7-39c229fcb744870f.yam0000664000175000017500000000020114750122063032543 0ustar00jamespagejamespage--- upgrade: - | Python 3.6 & 3.7 support has been dropped. The minimum version of Python now supported is Python 3.8. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/endpoint-group-3bb4083130952d17.yaml0000664000175000017500000000010014750122063031650 0ustar00jamespagejamespage--- features: - | Add support for Endpoint Group feature. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581581.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/reno.cache0000664000175000017500000001331514750123115025772 0ustar00jamespagejamespage--- dates: - date: 1616415229 version: 4.0.0.0rc1 - date: 1504000167 version: 1.0.0 - date: 1710400837 version: 10.0.0.0rc1 - date: 1677660497 version: 8.0.0.0rc1 - date: 1518102668 version: 1.2.1 - date: 1683187729 version: train-eol - date: 1711634146 version: 10.0.0.0rc2 - date: 1592214501 version: 1.6.1 - date: 1504001848 version: 1.1.0 - date: 1568387137 version: 1.6.0 - date: 1633342075 version: queens-eol - date: 1727866307 version: 11.0.0 - date: 1633342145 version: stein-eol - date: 1618398360 version: 4.0.0 - date: 1600864989 version: 3.0.0.0rc1 - date: 1738569114 version: victoria-eol - date: 1602670485 version: 3.0.0 - date: 1726147453 version: 11.0.0.0rc1 - date: 1516975981 version: 1.2.0 - date: 1651072057 version: victoria-em - date: 1572294885 version: queens-em - date: 1606416755 version: stein-em - date: 1620986953 version: train-em - date: 1519319436 version: 1.2.2 - date: 1709726312 version: victoria-eom - date: 1663158328 version: 7.0.0.0rc1 - date: 1648640925 version: 6.0.0 - date: 1582924306 version: rocky-em - date: 1632313685 version: 5.0.0.0rc1 - date: 1709726848 version: wallaby-eom - date: 1633342055 version: pike-eol - date: 1667474220 version: wallaby-em - date: 1550139323 version: 1.5.0 - date: 1633518998 version: 5.0.0 - date: 1664972008 version: 7.0.0 - date: 1679487971 version: 8.0.0 - date: 1646900206 version: 6.0.0.0rc1 - date: 1636977689 version: ussuri-em - date: 1589366879 version: 2.0.0 - date: 1633342112 version: rocky-eol - date: 1705503408 version: ussuri-eol - date: 1696417597 version: 9.0.0 - date: 1526316502 version: 1.3.0 - date: 1709727425 version: xena-eom - date: 1533750878 version: 1.4.0 - date: 1707151561 version: yoga-eom - date: 1712142255 version: 10.0.0 - date: 1502568181 version: 0.1.0 - date: 1572273984 version: 1.2.3 - date: 1714467200 version: zed-eom - date: 1582035010 version: 1.5.2 - date: 1553684965 version: 1.5.1 - date: 1694655075 version: 9.0.0.0rc1 - date: 1731580360 version: 2023.1-eom - date: 1681994297 version: xena-em - date: 1587571592 version: 2.0.0.0rc1 file-contents: releasenotes/notes/add-aggressive-negotiation-mode-ad665f5cfda2e08b.yaml: features: - 'The ``phase1 negotiation mode`` supports the ``aggressive`` option for IKE policy. ' releasenotes/notes/add-more-formats-to-ipsec-site-connection-e105363b9125b1ed.yaml: fixes: - 'Add support the attributes of IPsec site connection to be able to get more formats like FQDN other than IP format. For more information, see bug `1261127 `_. ' releasenotes/notes/auth-algorithm-fbfe0831ab8dc346.yaml: features: - 'neutron-vpnaas-dashboard now supports all auth algorithms. neutron-vpnaas supports sha1, sha256, sha384, sha512 for IKE policy auth_algorithm and IPsec policy auth_algorithm. ' releasenotes/notes/django2-support-ef2f2bd52a8bb63f.yaml: upgrade: - 'Supported django versions are chagned aligning with the supported versions by horizon. Django 1.11 and 2.0 are supported now. Django 1.8 to 1.10 are no longer supported. ' releasenotes/notes/drop-py-2-7-bfbdac2889ac051a.yaml: upgrade: - 'Python 2.7 support has been dropped. Last release of neutron-vpnaas- dashboard to support Python 2.7 is OpenStack Train. The minimum version of Python now supported by neutron-vpnaas-dashboard is Python 3.6. ' releasenotes/notes/drop-python-3-6-and-3-7-39c229fcb744870f.yaml: upgrade: - 'Python 3.6 & 3.7 support has been dropped. The minimum version of Python now supported is Python 3.8. ' releasenotes/notes/endpoint-group-3bb4083130952d17.yaml: features: - 'Add support for Endpoint Group feature. ' releasenotes/notes/split-out-from-horizon-4807f953d5dc0799.yaml: features: - 'Neutron VPNaaS support in the OpenStack Dashboard is now split out into a separate package ``neutron-vpnaas-dashboard``. You need to install ``neutron-vpnaas-dashboard`` after upgrading the OpenStack Dashboard to Pike release and add ``enabled`` file for Neutron VPNaaS dashboard. ' prelude: 'Neutron VPNaaS support in the OpenStack Dashboard is now split out into a separate python package. ' notes: - files: - - releasenotes/notes/split-out-from-horizon-4807f953d5dc0799.yaml - !!binary | OWIxNDNmZjRkYTMwZDcyMWRmNTBkYTA3MzJmY2UyZWEzZjQxMTgzOA== version: 0.1.0 - files: - - releasenotes/notes/add-more-formats-to-ipsec-site-connection-e105363b9125b1ed.yaml - !!binary | OWJhMDM4MmU4ZGFiMjcxZDNmOTFmM2IwMTE0MzJjYWQ5OTk3ZjM4Zg== version: 1.2.0 - files: - - releasenotes/notes/endpoint-group-3bb4083130952d17.yaml - !!binary | OWY5YWRiYjgzZjViNTIxYjZmMTRkY2YzMDE5ZTI1YjIxNmJlN2Q0MA== version: 1.1.0 - files: - - releasenotes/notes/django2-support-ef2f2bd52a8bb63f.yaml - !!binary | ZDlmZDM3N2UyOWQzZDU5NTAxZTI4YzA2ZmY3NmM5YWZiNDNkNzZkZQ== version: 1.3.0 - files: - - releasenotes/notes/auth-algorithm-fbfe0831ab8dc346.yaml - !!binary | NTE1NzIxOTEwN2M0ZDk0MDkyMmRmYzgwY2M0YjA0MTE5ZWMwZDVjZg== version: 1.5.0 - files: - - releasenotes/notes/drop-py-2-7-bfbdac2889ac051a.yaml - !!binary | ZTQ5ODk3OTdmYmUyMzE1NDEwNGZjNzZlNzlmOGVlOTViNTNjODNjMg== version: 2.0.0 - files: - - releasenotes/notes/add-aggressive-negotiation-mode-ad665f5cfda2e08b.yaml - !!binary | NDg0YjU3ZTQzNjI5ZmMzZGI2ODE2NmZiNmMxYWJlNjI0YTJlNmEwMw== version: 3.0.0 - files: - - releasenotes/notes/drop-python-3-6-and-3-7-39c229fcb744870f.yaml - !!binary | Y2M2N2JjZDQwNzgyYTgwNjIwYTM2YTJhZTAwNTUzMmUzZTAzZjI1Nw== version: 7.0.0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/notes/split-out-from-horizon-4807f953d5dc0799.yaml0000664000175000017500000000066314750122063033420 0ustar00jamespagejamespage--- prelude: > Neutron VPNaaS support in the OpenStack Dashboard is now split out into a separate python package. features: - | Neutron VPNaaS support in the OpenStack Dashboard is now split out into a separate package ``neutron-vpnaas-dashboard``. You need to install ``neutron-vpnaas-dashboard`` after upgrading the OpenStack Dashboard to Pike release and add ``enabled`` file for Neutron VPNaaS dashboard. ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.394892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/0000775000175000017500000000000014750123115024207 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/2023.1.rst0000664000175000017500000000021014750122063025460 0ustar00jamespagejamespage=========================== 2023.1 Series Release Notes =========================== .. release-notes:: :branch: unmaintained/2023.1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/2023.2.rst0000664000175000017500000000020214750122063025462 0ustar00jamespagejamespage=========================== 2023.2 Series Release Notes =========================== .. release-notes:: :branch: stable/2023.2 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/2024.1.rst0000664000175000017500000000020214750122063025462 0ustar00jamespagejamespage=========================== 2024.1 Series Release Notes =========================== .. release-notes:: :branch: stable/2024.1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/2024.2.rst0000664000175000017500000000020214750122063025463 0ustar00jamespagejamespage=========================== 2024.2 Series Release Notes =========================== .. release-notes:: :branch: stable/2024.2 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/conf.py0000664000175000017500000001514714750122063025517 0ustar00jamespagejamespage# -*- 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. # Glance Release Notes documentation build configuration file, created by # sphinx-quickstart on Tue Nov 3 17:40:50 2015. # # 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 = [ 'reno.sphinxext', 'openstackdocstheme', ] # openstackdocstheme options openstackdocs_repo_name = 'openstack/neutron-vpnaas-dashboard' openstackdocs_auto_name = False openstackdocs_bug_project = 'neutron-vpnaas-dashboard' openstackdocs_bug_tag = 'doc' # 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 = u'Neutron VPNaaS Dashboard Release Notes' copyright = u'2017, OpenStack Foundation' # Release notes are version independent. # The full version, including alpha/beta/rc tags. release = '' # The short X.Y version. version = '' # 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 = 'openstackdocs' # 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 = [] # 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. # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # html_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. # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'neutronvpnaasdashboardReleaseNotesdoc' # -- Options for Internationalization output ------------------------------ locale_dirs = ['locale/'] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/index.rst0000664000175000017500000000045714750122063026057 0ustar00jamespagejamespage====================================== Neutron VPNaaS Dashboard Release Notes ====================================== .. toctree:: :maxdepth: 1 unreleased 2024.2 2024.1 2023.2 2023.1 zed yoga xena wallaby victoria ussuri train stein rocky queens pike ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.383892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/0000775000175000017500000000000014750123115025446 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3828921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/cs/0000775000175000017500000000000014750123115026053 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.394892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/cs/LC_MESSAGES/0000775000175000017500000000000014750123115027640 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/cs/LC_MESSAGES/releasenotes.po0000664000175000017500000000150014750122063032666 0ustar00jamespagejamespage# Lenka Husáková , 2016. #zanata # Zbyněk Schwarz , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: Neutron VPNaaS Dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-02 21:28+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 "Bug Fixes" msgstr "Opravy chyb" msgid "Current Series Release Notes" msgstr "Poznámky k vydání současné verze" msgid "Pike Series Release Notes" msgstr "Poznámky k vydání verze Pike" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3828921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/de/0000775000175000017500000000000014750123115026036 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.394892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/de/LC_MESSAGES/0000775000175000017500000000000014750123115027623 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po0000664000175000017500000001063514750122063032662 0ustar00jamespagejamespage# Frank Kloeker , 2017. #zanata # Robert Simai , 2017. #zanata # Robert Simai , 2018. #zanata # Andreas Jaeger , 2019. #zanata # Andreas Jaeger , 2020. #zanata msgid "" msgstr "" "Project-Id-Version: Neutron VPNaaS Dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-02 23:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2020-10-05 06:36+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 "0.1.0" msgstr "0.1.0" msgid "1.1.0" msgstr "1.1.0" msgid "1.2.0" msgstr "1.2.0" msgid "1.3.0" msgstr "1.3.0" msgid "1.5.0" msgstr "1.5.0" msgid "2.0.0" msgstr "2.0.0" msgid "Add support for Endpoint Group feature." msgstr "Unterstützung für das Endpunkt-Gruppenfeature hinzugefügt." msgid "" "Add support the attributes of IPsec site connection to be able to get more " "formats like FQDN other than IP format. For more information, see bug " "`1261127 `_." msgstr "" "Unterstützung für Attribute der IPsec Site Connection hinzugefügt, um " "weitere Formate wie FQDN anstatt des IP Formats zu ermöglichen. Weitere " "Informationen finden Sie in Bug `1261127 `_." msgid "Bug Fixes" msgstr "Fehlerkorrekturen" msgid "Current Series Release Notes" msgstr "Aktuelle Serie Releasenotes" msgid "Neutron VPNaaS Dashboard Release Notes" msgstr "Neutron VPNaaS Dashboard Releasenotes" msgid "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate package ``neutron-vpnaas-dashboard``. You need to install ``neutron-" "vpnaas-dashboard`` after upgrading the OpenStack Dashboard to Pike release " "and add ``enabled`` file for Neutron VPNaaS dashboard." msgstr "" "Neutron VPNaaS Unterstützung im OpenStack Dashboard wurde ins separate Paket " "``neutron-vpnaas-dashboard`` ausgelagert. Sie müssen ``neutron-vpnaas-" "dashboard`` nach einem Upgrade des OpenStack Dashboards zum Pike Release " "installieren und eine ``enabled`` in der Datei für das Neutron VPNaaS " "Dashboard hinzufügen." msgid "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate python package." msgstr "" "Neutron VPNaaS Unterstützung im OpenStack Dashboard wurde in ein separates " "Python-Paket ausgelagert." msgid "New Features" msgstr "Neue Funktionen" msgid "Pike Series Release Notes" msgstr "Pike Serie Release Notes" msgid "Prelude" msgstr "Einleitung" msgid "" "Python 2.7 support has been dropped. Last release of neutron-vpnaas- " "dashboard to support Python 2.7 is OpenStack Train. The minimum version of " "Python now supported by neutron-vpnaas-dashboard is Python 3.6." msgstr "" "Python 2.7 Unterstützung wurde beendet. Der letzte Release von neutron-" "vpnaas-dashboard der Python 2.7 unterstützt ist OpenStack Train. Die minimal " "Python Version welche von neutron-vpnaas-dashboard unterstützt wird, ist " "Python 3.6." msgid "Queens Series Release Notes" msgstr "Queens Serie Releasenotes" msgid "Rocky Series Release Notes" msgstr "Rocky Serie Releasenotes" msgid "Stein Series Release Notes" msgstr "Stein Serie Releasenotes" msgid "" "Supported django versions are chagned aligning with the supported versions " "by horizon. Django 1.11 and 2.0 are supported now. Django 1.8 to 1.10 are no " "longer supported." msgstr "" "Unterstützte Django-Versionen ändern sich mit der von Horizon unterstützten " "Versionen. Django 1.11 und 2.0 werden jetzt unterstützt. Django 1.8 bis 1.10 " "werden nicht mehr unterstützt." msgid "Train Series Release Notes" msgstr "Train Serie Releasenotes" msgid "Upgrade Notes" msgstr "Aktualisierungsnotizen" msgid "Ussuri Series Release Notes" msgstr "Ussuri Serie Releasenotes" msgid "Victoria Series Release Notes" msgstr "Victoria Serie Releasenotes" msgid "" "neutron-vpnaas-dashboard now supports all auth algorithms. neutron-vpnaas " "supports sha1, sha256, sha384, sha512 for IKE policy auth_algorithm and " "IPsec policy auth_algorithm." msgstr "" "Neutron-VPNaaS-dashboard unterstützt nun alle Auth Algorithmen, Neutron-" "VPNaaS unterstützt SHA1, SHA256, SHA384, SHA512 als IKE Policy Auth " "Algorithmus und IPsec Policy Auth-Algorithmus." ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3828921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/en_GB/0000775000175000017500000000000014750123115026420 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.394892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/en_GB/LC_MESSAGES/0000775000175000017500000000000014750123115030205 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po0000664000175000017500000001216414750122063033243 0ustar00jamespagejamespage# Andi Chandler , 2017. #zanata # Andi Chandler , 2018. #zanata # Andi Chandler , 2019. #zanata # Andi Chandler , 2020. #zanata # Andi Chandler , 2022. #zanata # Andi Chandler , 2023. #zanata msgid "" msgstr "" "Project-Id-Version: Neutron VPNaaS Dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-28 09:02+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2023-05-08 11:49+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 "0.1.0" msgstr "0.1.0" msgid "1.1.0" msgstr "1.1.0" msgid "1.2.0" msgstr "1.2.0" msgid "1.3.0" msgstr "1.3.0" msgid "1.5.0" msgstr "1.5.0" msgid "2.0.0" msgstr "2.0.0" msgid "2023.1 Series Release Notes" msgstr "2023.1 Series Release Notes" msgid "3.0.0" msgstr "3.0.0" msgid "7.0.0" msgstr "7.0.0" msgid "Add support for Endpoint Group feature." msgstr "Add support for Endpoint Group feature." msgid "" "Add support the attributes of IPsec site connection to be able to get more " "formats like FQDN other than IP format. For more information, see bug " "`1261127 `_." msgstr "" "Add support the attributes of IPsec site connection to be able to get more " "formats like FQDN other than IP format. For more information, see bug " "`1261127 `_." msgid "Bug Fixes" msgstr "Bug Fixes" msgid "Current Series Release Notes" msgstr "Current Series Release Notes" msgid "Neutron VPNaaS Dashboard Release Notes" msgstr "Neutron VPNaaS Dashboard Release Notes" msgid "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate package ``neutron-vpnaas-dashboard``. You need to install ``neutron-" "vpnaas-dashboard`` after upgrading the OpenStack Dashboard to Pike release " "and add ``enabled`` file for Neutron VPNaaS dashboard." msgstr "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate package ``neutron-vpnaas-dashboard``. You need to install ``neutron-" "vpnaas-dashboard`` after upgrading the OpenStack Dashboard to Pike release " "and add ``enabled`` file for Neutron VPNaaS dashboard." msgid "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate python package." msgstr "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate Python package." msgid "New Features" msgstr "New Features" msgid "Pike Series Release Notes" msgstr "Pike Series Release Notes" msgid "Prelude" msgstr "Prelude" msgid "" "Python 2.7 support has been dropped. Last release of neutron-vpnaas- " "dashboard to support Python 2.7 is OpenStack Train. The minimum version of " "Python now supported by neutron-vpnaas-dashboard is Python 3.6." msgstr "" "Python 2.7 support has been dropped. Last release of neutron-vpnaas- " "dashboard to support Python 2.7 is OpenStack Train. The minimum version of " "Python now supported by neutron-vpnaas-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 "Queens Series Release Notes" msgstr "Queens Series Release Notes" msgid "Rocky Series Release Notes" msgstr "Rocky Series Release Notes" msgid "Stein Series Release Notes" msgstr "Stein Series Release Notes" msgid "" "Supported django versions are chagned aligning with the supported versions " "by horizon. Django 1.11 and 2.0 are supported now. Django 1.8 to 1.10 are no " "longer supported." msgstr "" "Supported Django versions are changed aligning with the supported versions " "by Horizon. Django 1.11 and 2.0 are supported now. Django 1.8 to 1.10 are no " "longer supported." msgid "" "The ``phase1 negotiation mode`` supports the ``aggressive`` option for IKE " "policy." msgstr "" "The ``phase1 negotiation mode`` supports the ``aggressive`` option for IKE " "policy." 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 "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" msgid "" "neutron-vpnaas-dashboard now supports all auth algorithms. neutron-vpnaas " "supports sha1, sha256, sha384, sha512 for IKE policy auth_algorithm and " "IPsec policy auth_algorithm." msgstr "" "neutron-vpnaas-dashboard now supports all auth algorithms. neutron-vpnaas " "supports sha1, sha256, sha384, sha512 for IKE policy auth_algorithm and " "IPsec policy auth_algorithm." ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3828921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/es/0000775000175000017500000000000014750123115026055 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.394892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/es/LC_MESSAGES/0000775000175000017500000000000014750123115027642 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/es/LC_MESSAGES/releasenotes.po0000664000175000017500000000142414750122063032675 0ustar00jamespagejamespage# Jose Porrua , 2016. #zanata # Eduardo Gonzalez Gutierrez , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: Neutron VPNaaS Dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-02 21:28+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-09-27 03:49+0000\n" "Last-Translator: Eduardo Gonzalez Gutierrez \n" "Language-Team: Spanish\n" "Language: es\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "Bug Fixes" msgstr "Corrección de errores" msgid "Current Series Release Notes" msgstr "Notas de la versión actual" msgid "New Features" msgstr "Nuevas Funcionalidades" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3828921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/fr/0000775000175000017500000000000014750123115026055 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.394892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/fr/LC_MESSAGES/0000775000175000017500000000000014750123115027642 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po0000664000175000017500000000161214750122063032674 0ustar00jamespagejamespage# Gérald LONLAS , 2016. #zanata # Gaelle , 2017. #zanata # Loic Nicolle , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: Neutron VPNaaS Dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-02-08 08:19+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-11-14 07:50+0000\n" "Last-Translator: Gaelle \n" "Language-Team: French\n" "Language: fr\n" "X-Generator: Zanata 3.9.6\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" msgid "0.1.0" msgstr "0.1.0" msgid "Bug Fixes" msgstr "Corrections de bugs" msgid "Current Series Release Notes" msgstr "Notes sur la Release Actuelle" msgid "New Features" msgstr "Nouvelles fonctionnalités" msgid "Pike Series Release Notes" msgstr "Note de release pour Pike" ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3828921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/id/0000775000175000017500000000000014750123115026042 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.394892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/id/LC_MESSAGES/0000775000175000017500000000000014750123115027627 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po0000664000175000017500000000671014750122063032665 0ustar00jamespagejamespage# suhartono , 2017. #zanata # suhartono , 2018. #zanata # suhartono , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-11 06:40+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-07-16 06:43+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 "0.1.0" msgstr "0.1.0" msgid "1.1.0" msgstr "1.1.0" msgid "1.2.0" msgstr "1.2.0" msgid "1.3.0" msgstr "1.3.0" msgid "1.5.0" msgstr "1.5.0" msgid "Add support for Endpoint Group feature." msgstr "Tambahkan dukungan untuk fitur Endpoint Group." msgid "" "Add support the attributes of IPsec site connection to be able to get more " "formats like FQDN other than IP format. For more information, see bug " "`1261127 `_." msgstr "" "Tambahkan dukungan atribut koneksi situs IPsec agar bisa mendapatkan lebih " "banyak format seperti FQDN selain dari format IP. Untuk informasi lebih " "lanjut, lihat bug `1261127 ` _." msgid "Bug Fixes" msgstr "Perbaikan bug" msgid "Current Series Release Notes" msgstr "Catatan rilis seri saat ini" msgid "Neutron VPNaaS Dashboard Release Notes" msgstr "Catatan Rilis Neutron VPNaaS Dashboard" msgid "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate package ``neutron-vpnaas-dashboard``. You need to install ``neutron-" "vpnaas-dashboard`` after upgrading the OpenStack Dashboard to Pike release " "and add ``enabled`` file for Neutron VPNaaS dashboard." msgstr "" "Dukungan Neutron VPNaaS di Dasbor OpenStack kini dipisah menjadi paket " "terpisah ``neutron-vpnaas-dashboard``. Anda perlu menginstal ``neutron-" "vpnaas-dashboard`` setelah memutakhirkan OpenStack Dashboard ke rilis Pike " "dan menambahkan ``enabled`` file untuk dashboard Neutron VPNaaS." msgid "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate python package." msgstr "" "Dukungan Neutron VPNaaS di Dasbor OpenStack kini dibagi menjadi paket python " "terpisah." msgid "New Features" msgstr "Fitur baru" msgid "Pike Series Release Notes" msgstr "Catatan Rilis Seri Pike" msgid "Prelude" msgstr "Prelude" msgid "Queens Series Release Notes" msgstr "Catatan Rilis Seri Queens" msgid "Rocky Series Release Notes" msgstr "Catatan Rilis Seri Rocky" msgid "Stein Series Release Notes" msgstr "Catatan Rilis Seri Stein" msgid "" "Supported django versions are chagned aligning with the supported versions " "by horizon. Django 1.11 and 2.0 are supported now. Django 1.8 to 1.10 are no " "longer supported." msgstr "" "Versi django yang didukung diubah sejajar dengan versi yang didukung oleh " "horizon. Django 1,11 dan 2,0 didukung sekarang. Django 1.8 hingga 1.10 tidak " "lagi didukung." msgid "Upgrade Notes" msgstr "Catatan Upgrade" msgid "" "neutron-vpnaas-dashboard now supports all auth algorithms. neutron-vpnaas " "supports sha1, sha256, sha384, sha512 for IKE policy auth_algorithm and " "IPsec policy auth_algorithm." msgstr "" "neutron-vpnaas-dashboard sekarang mendukung semua algoritma auth. neutron-" "vpnaas mendukung sha1, sha256, sha384, sha512 untuk IKE policy " "auth_algorithm dan IPsec policy auth_algorithm." ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.383892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/ja/0000775000175000017500000000000014750123115026040 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.394892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/ja/LC_MESSAGES/0000775000175000017500000000000014750123115027625 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/ja/LC_MESSAGES/releasenotes.po0000664000175000017500000000204614750122063032661 0ustar00jamespagejamespage# Akihiro Motoki , 2017. #zanata # Hidekazu Nakamura , 2017. #zanata # Shu Muto , 2017. #zanata # Yuko Fukuda , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: Neutron VPNaaS Dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-02-08 08:19+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-10-12 05:59+0000\n" "Last-Translator: Yuko Fukuda \n" "Language-Team: Japanese\n" "Language: ja\n" "X-Generator: Zanata 3.9.6\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "0.1.0" msgstr "0.1.0" msgid "1.1.0" msgstr "1.1.0" msgid "Bug Fixes" msgstr "バグ修正" msgid "Current Series Release Notes" msgstr "開発中バージョンのリリースノート" msgid "New Features" msgstr "新機能" msgid "Pike Series Release Notes" msgstr "Pike バージョンのリリースノート" msgid "Prelude" msgstr "前置" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.383892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/ko_KR/0000775000175000017500000000000014750123115026453 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.394892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/ko_KR/LC_MESSAGES/0000775000175000017500000000000014750123115030240 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po0000664000175000017500000000310614750122063033272 0ustar00jamespagejamespage# ByungYeol Woo , 2017. #zanata # SEOKJAE BARK , 2017. #zanata # Sungjin Kang , 2017. #zanata # minwook-shin , 2017. #zanata # ByungYeol Woo , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-09-26 14:23+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-10-02 04:11+0000\n" "Last-Translator: ByungYeol Woo \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 "0.1.0" msgstr "0.1.0" msgid "1.1.0" msgstr "1.1.0" msgid "1.2.0" msgstr "1.2.0" msgid "1.3.0" msgstr "1.3.0" msgid "1.5.0" msgstr "1.5.0" msgid "Add support for Endpoint Group feature." msgstr "엔드포인트 그룹 기능 추가" msgid "Bug Fixes" msgstr "버그 수정" msgid "Current Series Release Notes" msgstr "최신 시리즈에 대한 릴리즈 노트" msgid "Neutron VPNaaS Dashboard Release Notes" msgstr "Neutron VPNaaS 대시보드 릴리즈 노트" msgid "New Features" msgstr "새로운 기능" msgid "Pike Series Release Notes" msgstr "Pike 시리즈 릴리즈 노트" msgid "Prelude" msgstr "서문" msgid "Queens Series Release Notes" msgstr "Queens 시리즈 릴리즈 노트" msgid "Rocky Series Release Notes" msgstr "Rocky 시리즈 릴리즈 노트" msgid "Stein Series Release Notes" msgstr "Stein 시리즈 릴리즈 노트" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.383892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/pt_BR/0000775000175000017500000000000014750123115026454 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3958921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/pt_BR/LC_MESSAGES/0000775000175000017500000000000014750123115030241 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/pt_BR/LC_MESSAGES/releasenotes.po0000664000175000017500000000151614750122063033276 0ustar00jamespagejamespage# Rodrigo Loures , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: Neutron VPNaaS Dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-01 16:15+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-01-25 10:14+0000\n" "Last-Translator: Rodrigo Loures \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 "Bug Fixes" msgstr "Correção de erros" msgid "Current Series Release Notes" msgstr "Atual - Séries de Notas de Versão" msgid "New Features" msgstr "Novos recursos" msgid "Pike Series Release Notes" msgstr "Pike - Série de Notas de Versão" msgid "Prelude" msgstr "Prelúdio" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.383892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/ru/0000775000175000017500000000000014750123115026074 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3958921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/ru/LC_MESSAGES/0000775000175000017500000000000014750123115027661 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po0000664000175000017500000001202514750122063032713 0ustar00jamespagejamespage# Alexander , 2016. #zanata # Artem , 2017. #zanata # Roman Gorshunov , 2020. #zanata msgid "" msgstr "" "Project-Id-Version: neutron-vpnaas-dashboard\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-04-08 17:29+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-03 11:47+0000\n" "Last-Translator: Roman Gorshunov \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 "0.1.0" msgstr "0.1.0" msgid "1.1.0" msgstr "1.1.0" msgid "1.2.0" msgstr "1.2.0" msgid "1.3.0" msgstr "1.3.0" msgid "1.5.0" msgstr "1.5.0" msgid "Add support for Endpoint Group feature." msgstr "Добавлена поддержка групп конечных точек." msgid "" "Add support the attributes of IPsec site connection to be able to get more " "formats like FQDN other than IP format. For more information, see bug " "`1261127 `_." msgstr "" "К атрибутам подключения сайтов по IPsec добавлена поддержка использования " "FQDN формата? в дополнение к имеющемуся формату IP. Для дополнительной " "информации обратитесь к сообщению об ошибке `1261127 `_." msgid "Bug Fixes" msgstr "Исправленные ошибки" msgid "Current Series Release Notes" msgstr "Примечания к текущему релизу" msgid "Neutron VPNaaS Dashboard Release Notes" msgstr "Примечания к релизу панели Neutron VPNaaS" msgid "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate package ``neutron-vpnaas-dashboard``. You need to install ``neutron-" "vpnaas-dashboard`` after upgrading the OpenStack Dashboard to Pike release " "and add ``enabled`` file for Neutron VPNaaS dashboard." msgstr "" "Поддержка Neutron VPNaaS в панели управления OpenStack теперь выделена в " "отдельный Python модуль ``neutron-vpnaas-dashboard``. При обновлении панели " "управления OpenStack до релиза Pike, вам потребуется установить модуль " "``neutron-vpnaas-dashboard`` и добавить файл ``enabled`` для панели " "управления Neutron VPNaaS." msgid "" "Neutron VPNaaS support in the OpenStack Dashboard is now split out into a " "separate python package." msgstr "" "Поддержка Neutron VPNaaS в панели управления OpenStack теперь выделена в " "отдельный Python модуль." msgid "New Features" msgstr "Новые особенности" msgid "Pike Series Release Notes" msgstr "Примечания к релизу Pike" msgid "Prelude" msgstr "Введение" msgid "" "Python 2.7 support has been dropped. Last release of neutron-vpnaas- " "dashboard to support Python 2.7 is OpenStack Train. The minimum version of " "Python now supported by neutron-vpnaas-dashboard is Python 3.6." msgstr "" "Поддержка Python 2.7 более не производится. Последним релизом neutron-" "vpnaas- dashboard, поддерживавшим Python 2.7 был OpenStack Train. " "Минимальная поддерживаемая neutron-vpnaas-dashboard версия – Python 3.6." msgid "Queens Series Release Notes" msgstr "Примечания к релизу Queens" msgid "Rocky Series Release Notes" msgstr "Примечания к релизу Rocky" msgid "Stein Series Release Notes" msgstr "Примечания к релизу Stein" msgid "" "Supported django versions are chagned aligning with the supported versions " "by horizon. Django 1.11 and 2.0 are supported now. Django 1.8 to 1.10 are no " "longer supported." msgstr "" "Поддерживаемые версии Django изменены, чтобы соответствовать поддерживаемым " "версиям в horizon. Сейчас поддерживаются Django 1.11 и 2.0. Django версий с " "1.8 по 1.10 более не поддерживаются." msgid "Train Series Release Notes" msgstr "Примечания к релизу Train" msgid "Upgrade Notes" msgstr "Информация об обновлении" msgid "" "neutron-vpnaas-dashboard now supports all auth algorithms. neutron-vpnaas " "supports sha1, sha256, sha384, sha512 for IKE policy auth_algorithm and " "IPsec policy auth_algorithm." msgstr "" "neutron-vpnaas-dashboard теперь поддерживает все алгоритмы аутентификации. " "neutron-vpnaas поддерживает sha1, sha256, sha384 и sha512 для политики IKE и " "политики IPsec auth_algorithm." ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1738581581.383892 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/zh_CN/0000775000175000017500000000000014750123115026447 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3958921 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/zh_CN/LC_MESSAGES/0000775000175000017500000000000014750123115030234 5ustar00jamespagejamespage././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po0000664000175000017500000000151514750122063033270 0ustar00jamespagejamespage# Bin , 2017. #zanata # TigerFang , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: Neutron VPNaaS Dashboard Release Notes\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-01 16:15+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-12-28 02:43+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 "0.1.0" msgstr "0.1.0" msgid "Bug Fixes" msgstr "修复的问题" msgid "Current Series Release Notes" msgstr "当前版本发布声明" msgid "New Features" msgstr "新功能" msgid "Pike Series Release Notes" msgstr "Pike版本发布声明" msgid "Prelude" msgstr "前奏" ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/pike.rst0000664000175000017500000000017214750122063025672 0ustar00jamespagejamespage========================= Pike Series Release Notes ========================= .. release-notes:: :branch: stable/pike ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/queens.rst0000664000175000017500000000020214750122063026234 0ustar00jamespagejamespage=========================== Queens Series Release Notes =========================== .. release-notes:: :branch: stable/queens ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/rocky.rst0000664000175000017500000000017614750122063026075 0ustar00jamespagejamespage========================== Rocky Series Release Notes ========================== .. release-notes:: :branch: stable/rocky ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/stein.rst0000664000175000017500000000017614750122063026070 0ustar00jamespagejamespage========================== Stein Series Release Notes ========================== .. release-notes:: :branch: stable/stein ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/train.rst0000664000175000017500000000017614750122063026063 0ustar00jamespagejamespage========================== Train Series Release Notes ========================== .. release-notes:: :branch: stable/train ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/unreleased.rst0000664000175000017500000000015314750122063027070 0ustar00jamespagejamespage============================ Current Series Release Notes ============================ .. release-notes:: ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/ussuri.rst0000664000175000017500000000020214750122063026266 0ustar00jamespagejamespage=========================== Ussuri Series Release Notes =========================== .. release-notes:: :branch: stable/ussuri ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/victoria.rst0000664000175000017500000000022014750122063026554 0ustar00jamespagejamespage============================= Victoria Series Release Notes ============================= .. release-notes:: :branch: unmaintained/victoria ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/wallaby.rst0000664000175000017500000000021414750122063026372 0ustar00jamespagejamespage============================ Wallaby Series Release Notes ============================ .. release-notes:: :branch: unmaintained/wallaby ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/xena.rst0000664000175000017500000000020014750122063025665 0ustar00jamespagejamespage========================= Xena Series Release Notes ========================= .. release-notes:: :branch: unmaintained/xena ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/yoga.rst0000664000175000017500000000020014750122063025671 0ustar00jamespagejamespage========================= Yoga Series Release Notes ========================= .. release-notes:: :branch: unmaintained/yoga ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/releasenotes/source/zed.rst0000664000175000017500000000016614750122063025527 0ustar00jamespagejamespage======================== Zed Series Release Notes ======================== .. release-notes:: :branch: stable/zed ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/requirements.txt0000664000175000017500000000103414750122063023501 0ustar00jamespagejamespage# 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. # The order of packages is significant, because pip processes them in the order # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. pbr!=2.1.0,>=2.0.0 # Apache-2.0 horizon>=23.4.0 # Apache-2.0 python-neutronclient>=6.7.0 # Apache-2.0 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1738581581.3958921 neutron_vpnaas_dashboard-11.1.0.dev3/setup.cfg0000664000175000017500000000145114750123115022040 0ustar00jamespagejamespage[metadata] name = neutron-vpnaas-dashboard summary = Neutron VPNaaS Dashboard description_file = README.rst author = OpenStack author_email = openstack-discuss@lists.openstack.org home_page = https://docs.openstack.org/neutron-vpnaas-dashboard/latest/ python_requires = >=3.9 classifier = Environment :: OpenStack Intended Audience :: Information Technology Intended Audience :: System Administrators License :: OSI Approved :: Apache Software License Operating System :: POSIX :: Linux Programming Language :: Python Programming Language :: Python :: 3 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 [files] packages = neutron_vpnaas_dashboard [egg_info] tag_build = tag_date = 0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/setup.py0000664000175000017500000000200614750122063021727 0ustar00jamespagejamespage# 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. # THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT import setuptools # In python < 2.7.4, a lazy loading of package `pbr` will break # setuptools if some other modules registered functions in `atexit`. # solution from: http://bugs.python.org/issue15881#msg170215 try: import multiprocessing # noqa except ImportError: pass setuptools.setup( setup_requires=['pbr>=2.0.0'], pbr=True) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/test-requirements.txt0000664000175000017500000000060014750122063024454 0ustar00jamespagejamespage# The order of packages is significant, because pip processes them in the order # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. # Hacking should appear first in case something else depends on pep8 hacking>=3.0.1,<3.1.0 # Apache-2.0 coverage!=4.4,>=4.0 # Apache-2.0 flake8-import-order==0.13 # LGPLv3 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1738581043.0 neutron_vpnaas_dashboard-11.1.0.dev3/tox.ini0000664000175000017500000000504314750122063021534 0ustar00jamespagejamespage[tox] envlist = py38,pep8 minversion = 3.1.1 skipsdist = True ignore_basepython_conflict = True [testenv] usedevelop = True basepython = python3 setenv = VIRTUAL_ENV={envdir} NOSE_WITH_OPENSTACK=1 NOSE_OPENSTACK_COLOR=1 NOSE_OPENSTACK_RED=0.05 NOSE_OPENSTACK_YELLOW=0.025 NOSE_OPENSTACK_SHOW_ELAPSED=1 deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt commands = python manage.py test {posargs} --settings=neutron_vpnaas_dashboard.test.settings [testenv:pep8] commands = flake8 {posargs} {envpython} {toxinidir}/manage.py extract_messages --module neutron_vpnaas_dashboard --verbosity 0 --check-only [testenv:venv] commands = {posargs} [testenv:cover] commands = coverage erase coverage run {toxinidir}/manage.py test neutron_vpnaas_dashboard --settings=neutron_vpnaas_dashboard.test.settings {posargs} coverage xml --omit '.tox/cover/*' -o 'cover/coverage.xml' coverage html --omit '.tox/cover/*' -d 'cover/htmlcov' [testenv:docs] deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/doc/requirements.txt commands = sphinx-build -W -b html doc/source doc/build/html [testenv:pdf-docs] envdir = {toxworkdir}/docs deps = {[testenv:docs]deps} allowlist_externals = make commands = sphinx-build -W -b latex doc/source doc/build/pdf make -C doc/build/pdf [testenv:releasenotes] deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/doc/requirements.txt commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html [flake8] exclude = .venv,.git,.tox,dist,*lib/python*,*egg,build,node_modules,.tmp # Enable the following hacking rules which are disabled by default # H203 Use assertIs(Not)None to check for None # H904 Delay string interpolations at logging calls enable-extensions = H203,H904 # W504 line break after binary operator # (W503 and W504 are incompatible and we need to choose one of them. # Existing codes follows W503, so we disable W504.) # F405 TEMPLATES may be undefined, or defined from star imports # (because it is not easy to avoid this in openstack_dashboard.test.settings) ignore = W504,F405 max-complexity = 20 # flake8-import-order configurations import-order-style = pep8 application-import-names = neutron_vpnaas_dashboard [flake8:local-plugins] extension = M322 = horizon.hacking.checks:no_mutable_default_args