Retire project
Leave README around for those that follow. http://lists.openstack.org/pipermail/openstack-discuss/2019-February/003186.html http://lists.openstack.org/pipermail/openstack-discuss/2018-November/000057.html Change-Id: I26328db6e404147e99415df4c0ebf863c1ad5661
This commit is contained in:
parent
d13410cd3b
commit
2af6f86f1b
|
@ -1,7 +0,0 @@
|
|||
build
|
||||
layers
|
||||
.tox
|
||||
interfaces
|
||||
.testrepository
|
||||
*__pycache__*
|
||||
*.pyc
|
|
@ -1,8 +0,0 @@
|
|||
[DEFAULT]
|
||||
test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
|
||||
OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
|
||||
OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \
|
||||
${PYTHON:-python} -m subunit.run discover -t ./ ./unit_tests $LISTOPT $IDOPTION
|
||||
|
||||
test_id_option=--load-list $IDFILE
|
||||
test_list_option=--list
|
|
@ -1,4 +1,3 @@
|
|||
- project:
|
||||
templates:
|
||||
- python-charm-jobs
|
||||
- openstack-python35-jobs
|
||||
- noop-jobs
|
||||
|
|
202
LICENSE
202
LICENSE
|
@ -1,202 +0,0 @@
|
|||
|
||||
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.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
35
README.md
35
README.md
|
@ -1,31 +1,6 @@
|
|||
# Overview
|
||||
This project is no longer maintained.
|
||||
|
||||
Murano charm provides a catalog of applications deployable on Openstack cloud.
|
||||
|
||||
# Usage
|
||||
|
||||
Murano relies on services from the mysql/percona, rabbitmq-server and keystone charms:
|
||||
|
||||
$ juju deploy murano
|
||||
$ juju deploy keystone
|
||||
$ juju deploy mysql
|
||||
$ juju deploy rabbitmq-server
|
||||
$ juju add-relation murano rabbitmq-server
|
||||
$ juju add-relation murano mysql
|
||||
$ juju add-relation murano keystone
|
||||
|
||||
# Build
|
||||
$ git clone https://github.com/viswesn/charm-murano
|
||||
$ cd charm-murano
|
||||
$ charm build -s xenial -o build src
|
||||
|
||||
# Config
|
||||
$ juju config murano ext-network=my_ext_net
|
||||
$ juju config murano router=my_router
|
||||
$ juju config murano default_dns=10.166.62.1
|
||||
|
||||
# Bugs
|
||||
|
||||
Please report bugs on [Launchpad](https://bugs.launchpad.net/charm-murano/+filebug).
|
||||
|
||||
For general questions please refer to the OpenStack [Charm Guide](https://github.com/openstack/charm-guide).
|
||||
The contents of this repository are still available in the Git
|
||||
source code management system. To see the contents of this
|
||||
repository before it reached its end of life, please check out the
|
||||
previous commit with "git checkout HEAD^1".
|
||||
|
|
16
copyright
16
copyright
|
@ -1,16 +0,0 @@
|
|||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0
|
||||
|
||||
Files: *
|
||||
Copyright: 2015, Canonical Ltd.
|
||||
License: Apache-2.0
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
692
icon.svg
692
icon.svg
|
@ -1,692 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="96"
|
||||
height="96"
|
||||
id="svg6517"
|
||||
version="1.1"
|
||||
inkscape:version="0.48+devel r12591"
|
||||
sodipodi:docname="openstack-nova.svg">
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4.0745361"
|
||||
inkscape:cx="52.297655"
|
||||
inkscape:cy="14.695244"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g4336"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1029"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="true"
|
||||
showguides="false"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false">
|
||||
<inkscape:grid
|
||||
id="grid821"
|
||||
type="xygrid" />
|
||||
<sodipodi:guide
|
||||
id="guide823"
|
||||
position="18.34962,45.78585"
|
||||
orientation="1,0" />
|
||||
<sodipodi:guide
|
||||
id="guide827"
|
||||
position="78.02001,46.32673"
|
||||
orientation="1,0" />
|
||||
<sodipodi:guide
|
||||
inkscape:label=""
|
||||
id="guide4184"
|
||||
position="65.586619,19.307"
|
||||
orientation="-0.087155743,0.9961947" />
|
||||
<sodipodi:guide
|
||||
inkscape:label=""
|
||||
id="guide4188"
|
||||
position="62.756032,71.583147"
|
||||
orientation="-0.087155743,0.9961947" />
|
||||
<sodipodi:guide
|
||||
inkscape:label=""
|
||||
id="guide4190"
|
||||
position="47.812194,78.049658"
|
||||
orientation="-0.087155743,0.9961947" />
|
||||
<sodipodi:guide
|
||||
id="guide4194"
|
||||
position="25.60516,42.21665"
|
||||
orientation="1,0" />
|
||||
<sodipodi:guide
|
||||
inkscape:label=""
|
||||
id="guide4202"
|
||||
position="25.60516,42.070975"
|
||||
orientation="-0.087155743,0.9961947" />
|
||||
<sodipodi:guide
|
||||
inkscape:label=""
|
||||
id="guide4204"
|
||||
position="25.60516,42.070975"
|
||||
orientation="-0.70710678,-0.70710678" />
|
||||
<sodipodi:guide
|
||||
inkscape:label=""
|
||||
id="guide4242"
|
||||
position="51.81985,44.36226"
|
||||
orientation="-0.70710678,-0.70710678" />
|
||||
<sodipodi:guide
|
||||
inkscape:label=""
|
||||
id="guide4252"
|
||||
position="73.5625,75.210937"
|
||||
orientation="-0.70710678,-0.70710678" />
|
||||
<sodipodi:guide
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(140,140,240)"
|
||||
id="guide4254"
|
||||
position="18.34962,75.472017"
|
||||
orientation="-0.70710678,-0.70710678" />
|
||||
<sodipodi:guide
|
||||
inkscape:label=""
|
||||
id="guide4288"
|
||||
position="21.871042,21.577512"
|
||||
orientation="-0.70710678,-0.70710678" />
|
||||
<sodipodi:guide
|
||||
orientation="-0.70710678,-0.70710678"
|
||||
position="53.455078,57.640625"
|
||||
id="guide4492"
|
||||
inkscape:label="" />
|
||||
<sodipodi:guide
|
||||
orientation="-0.70710678,-0.70710678"
|
||||
position="78.02001,45.018716"
|
||||
id="guide4496"
|
||||
inkscape:label="" />
|
||||
<sodipodi:guide
|
||||
orientation="-0.70710678,-0.70710678"
|
||||
position="53.445312,18.244773"
|
||||
id="guide4515"
|
||||
inkscape:label="" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs6519">
|
||||
<filter
|
||||
id="filter1121"
|
||||
inkscape:label="Inner Shadow"
|
||||
style="color-interpolation-filters:sRGB;">
|
||||
<feFlood
|
||||
id="feFlood1123"
|
||||
result="flood"
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="0.59999999999999998" />
|
||||
<feComposite
|
||||
id="feComposite1125"
|
||||
result="composite1"
|
||||
operator="out"
|
||||
in2="SourceGraphic"
|
||||
in="flood" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur1127"
|
||||
result="blur"
|
||||
stdDeviation="1"
|
||||
in="composite1" />
|
||||
<feOffset
|
||||
id="feOffset1129"
|
||||
result="offset"
|
||||
dy="2"
|
||||
dx="0" />
|
||||
<feComposite
|
||||
id="feComposite1131"
|
||||
result="composite2"
|
||||
operator="atop"
|
||||
in2="SourceGraphic"
|
||||
in="offset" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter950"
|
||||
inkscape:label="Drop Shadow"
|
||||
style="color-interpolation-filters:sRGB;">
|
||||
<feFlood
|
||||
id="feFlood952"
|
||||
result="flood"
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="0.25" />
|
||||
<feComposite
|
||||
id="feComposite954"
|
||||
result="composite1"
|
||||
operator="in"
|
||||
in2="SourceGraphic"
|
||||
in="flood" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur956"
|
||||
result="blur"
|
||||
stdDeviation="1"
|
||||
in="composite1" />
|
||||
<feOffset
|
||||
id="feOffset958"
|
||||
result="offset"
|
||||
dy="1"
|
||||
dx="0" />
|
||||
<feComposite
|
||||
id="feComposite960"
|
||||
result="composite2"
|
||||
operator="over"
|
||||
in2="offset"
|
||||
in="SourceGraphic" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:label="Badge Shadow"
|
||||
id="filter891"
|
||||
inkscape:collect="always">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur893"
|
||||
stdDeviation="0.71999962"
|
||||
inkscape:collect="always" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3831">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.86309522"
|
||||
id="feGaussianBlur3833" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3868"
|
||||
x="-0.17186206"
|
||||
width="1.3437241"
|
||||
y="-0.1643077"
|
||||
height="1.3286154">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.62628186"
|
||||
id="feGaussianBlur3870" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
id="linearGradient4328"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4330"
|
||||
offset="0"
|
||||
style="stop-color:#871f1c;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4332"
|
||||
offset="1"
|
||||
style="stop-color:#651715;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient902"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop904"
|
||||
offset="0"
|
||||
style="stop-color:#cccccc;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop906"
|
||||
offset="1"
|
||||
style="stop-color:#e6e6e6;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="Background">
|
||||
<stop
|
||||
style="stop-color:#22779e;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4178" />
|
||||
<stop
|
||||
style="stop-color:#2991c0;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4180" />
|
||||
</linearGradient>
|
||||
<clipPath
|
||||
id="clipPath873"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<g
|
||||
style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
|
||||
inkscape:label="Layer 1"
|
||||
id="g875"
|
||||
transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)">
|
||||
<path
|
||||
sodipodi:nodetypes="sssssssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path877"
|
||||
d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
|
||||
style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<style
|
||||
type="text/css"
|
||||
id="style867">
|
||||
.fil0 {fill:#1F1A17}
|
||||
</style>
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="635.29077"
|
||||
x2="-220"
|
||||
y1="731.29077"
|
||||
x1="-220"
|
||||
id="linearGradient908"
|
||||
xlink:href="#linearGradient902"
|
||||
inkscape:collect="always" />
|
||||
<clipPath
|
||||
id="clipPath16">
|
||||
<path
|
||||
d="m -9,-9 614,0 0,231 -614,0 0,-231 z"
|
||||
id="path18" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath116">
|
||||
<path
|
||||
d="m 91.7368,146.3253 -9.7039,-1.577 -8.8548,-3.8814 -7.5206,-4.7308 -7.1566,-8.7335 -4.0431,-4.282 -3.9093,-1.4409 -1.034,2.5271 1.8079,2.6096 0.4062,3.6802 1.211,-0.0488 1.3232,-1.2069 -0.3569,3.7488 -1.4667,0.9839 0.0445,1.4286 -3.4744,-1.9655 -3.1462,-3.712 -0.6559,-3.3176 1.3453,-2.6567 1.2549,-4.5133 2.5521,-1.2084 2.6847,0.1318 2.5455,1.4791 -1.698,-8.6122 1.698,-9.5825 -1.8692,-4.4246 -6.1223,-6.5965 1.0885,-3.941 2.9002,-4.5669 5.4688,-3.8486 2.9007,-0.3969 3.225,-0.1094 -2.012,-8.2601 7.3993,-3.0326 9.2188,-1.2129 3.1535,2.0619 0.2427,5.5797 3.5178,5.8224 0.2426,4.6094 8.4909,-0.6066 7.8843,0.7279 -7.8843,-4.7307 1.3343,-5.701 4.9731,-7.763 4.8521,-2.0622 3.8814,1.5769 1.577,3.1538 8.1269,6.1861 1.5769,-1.3343 12.7363,-0.485 2.5473,2.0619 0.2426,3.6391 -0.849,1.5767 -0.6066,9.8251 -4.2454,8.4909 0.7276,3.7605 2.5475,-1.3343 7.1566,-6.6716 3.5175,-0.2424 3.8815,1.5769 3.8818,2.9109 1.9406,6.3077 11.4021,-0.7277 6.914,2.6686 5.5797,5.2157 4.0028,7.5206 0.9706,8.8546 -0.8493,10.3105 -2.1832,9.2185 -2.1836,2.9112 -3.0322,0.9706 -5.3373,-5.8224 -4.8518,-1.6982 -4.2455,7.0353 -4.2454,3.8815 -2.3049,1.4556 -9.2185,7.6419 -7.3993,4.0028 -7.3993,0.6066 -8.6119,-1.4556 -7.5206,-2.7899 -5.2158,-4.2454 -4.1241,-4.9734 -4.2454,-1.2129"
|
||||
id="path118" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath128">
|
||||
<path
|
||||
d="m 91.7368,146.3253 -9.7039,-1.577 -8.8548,-3.8814 -7.5206,-4.7308 -7.1566,-8.7335 -4.0431,-4.282 -3.9093,-1.4409 -1.034,2.5271 1.8079,2.6096 0.4062,3.6802 1.211,-0.0488 1.3232,-1.2069 -0.3569,3.7488 -1.4667,0.9839 0.0445,1.4286 -3.4744,-1.9655 -3.1462,-3.712 -0.6559,-3.3176 1.3453,-2.6567 1.2549,-4.5133 2.5521,-1.2084 2.6847,0.1318 2.5455,1.4791 -1.698,-8.6122 1.698,-9.5825 -1.8692,-4.4246 -6.1223,-6.5965 1.0885,-3.941 2.9002,-4.5669 5.4688,-3.8486 2.9007,-0.3969 3.225,-0.1094 -2.012,-8.2601 7.3993,-3.0326 9.2188,-1.2129 3.1535,2.0619 0.2427,5.5797 3.5178,5.8224 0.2426,4.6094 8.4909,-0.6066 7.8843,0.7279 -7.8843,-4.7307 1.3343,-5.701 4.9731,-7.763 4.8521,-2.0622 3.8814,1.5769 1.577,3.1538 8.1269,6.1861 1.5769,-1.3343 12.7363,-0.485 2.5473,2.0619 0.2426,3.6391 -0.849,1.5767 -0.6066,9.8251 -4.2454,8.4909 0.7276,3.7605 2.5475,-1.3343 7.1566,-6.6716 3.5175,-0.2424 3.8815,1.5769 3.8818,2.9109 1.9406,6.3077 11.4021,-0.7277 6.914,2.6686 5.5797,5.2157 4.0028,7.5206 0.9706,8.8546 -0.8493,10.3105 -2.1832,9.2185 -2.1836,2.9112 -3.0322,0.9706 -5.3373,-5.8224 -4.8518,-1.6982 -4.2455,7.0353 -4.2454,3.8815 -2.3049,1.4556 -9.2185,7.6419 -7.3993,4.0028 -7.3993,0.6066 -8.6119,-1.4556 -7.5206,-2.7899 -5.2158,-4.2454 -4.1241,-4.9734 -4.2454,-1.2129"
|
||||
id="path130" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3850">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3852" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3854" />
|
||||
</linearGradient>
|
||||
<clipPath
|
||||
id="clipPath3095"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3097"
|
||||
d="m 976.648,389.551 -842.402,0 0,839.999 842.402,0 0,-839.999" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath3195"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3197"
|
||||
d="m 611.836,756.738 -106.34,105.207 c -8.473,8.289 -13.617,20.102 -13.598,33.379 L 598.301,790.207 c -0.031,-13.418 5.094,-25.031 13.535,-33.469" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath3235"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3237"
|
||||
d="m 1095.64,1501.81 c 35.46,-35.07 70.89,-70.11 106.35,-105.17 4.4,-4.38 7.11,-10.53 7.11,-17.55 l -106.37,105.21 c 0,7 -2.71,13.11 -7.09,17.51" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4389">
|
||||
<stop
|
||||
style="stop-color:#871f1c;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4391" />
|
||||
<stop
|
||||
style="stop-color:#c42e24;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4393" />
|
||||
</linearGradient>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4591">
|
||||
<path
|
||||
id="path4593"
|
||||
style="fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 1106.6009,730.43734 -0.036,21.648 c -0.01,3.50825 -2.8675,6.61375 -6.4037,6.92525 l -83.6503,7.33162 c -3.5205,0.30763 -6.3812,-2.29987 -6.3671,-5.8145 l 0.036,-21.6475 20.1171,-1.76662 -0.011,4.63775 c 0,1.83937 1.4844,3.19925 3.3262,3.0395 l 49.5274,-4.33975 c 1.8425,-0.166 3.3425,-1.78125 3.3538,-3.626 l 0.01,-4.63025 20.1,-1.7575"
|
||||
inkscape:connector-curvature="0" />
|
||||
</clipPath>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3850"
|
||||
id="radialGradient3856"
|
||||
cx="-26.508606"
|
||||
cy="93.399292"
|
||||
fx="-26.508606"
|
||||
fy="93.399292"
|
||||
r="20.40658"
|
||||
gradientTransform="matrix(-1.4333926,-2.2742838,1.1731823,-0.73941125,-174.08025,98.374394)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3885">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7442192"
|
||||
id="feGaussianBlur3887" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3850"
|
||||
id="linearGradient3895"
|
||||
x1="348.20132"
|
||||
y1="593.11615"
|
||||
x2="-51.879555"
|
||||
y2="993.19702"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-318.48033,212.32022)" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3850"
|
||||
id="radialGradient3902"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.4333926,-2.2742838,1.1731823,-0.73941125,-174.08025,98.374394)"
|
||||
cx="-26.508606"
|
||||
cy="93.399292"
|
||||
fx="-26.508606"
|
||||
fy="93.399292"
|
||||
r="20.40658" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3850"
|
||||
id="linearGradient3904"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-318.48033,212.32022)"
|
||||
x1="348.20132"
|
||||
y1="593.11615"
|
||||
x2="-51.879555"
|
||||
y2="993.19702" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="23.383789"
|
||||
x2="25.217773"
|
||||
y1="27.095703"
|
||||
x1="21.505859"
|
||||
id="linearGradient4318"
|
||||
xlink:href="#linearGradient4389"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="20.884073"
|
||||
x2="71.960243"
|
||||
y1="20.041777"
|
||||
x1="72.802544"
|
||||
id="linearGradient4326"
|
||||
xlink:href="#linearGradient4389"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="74.246689"
|
||||
x2="21.69179"
|
||||
y1="73.643555"
|
||||
x1="22.294922"
|
||||
id="linearGradient4334"
|
||||
xlink:href="#linearGradient4328"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="24.881023"
|
||||
x2="57.450542"
|
||||
y1="77.404816"
|
||||
x1="57.450542"
|
||||
id="linearGradient4319"
|
||||
xlink:href="#linearGradient4552"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient4552"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4554"
|
||||
offset="0"
|
||||
style="stop-color:#d93023;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4556"
|
||||
offset="1"
|
||||
style="stop-color:#e63f46;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4389"
|
||||
id="linearGradient4484"
|
||||
x1="-220.40578"
|
||||
y1="690.3606"
|
||||
x2="-210.33594"
|
||||
y2="680.29077"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata6522">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(268,-635.29076)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="BACKGROUND">
|
||||
<path
|
||||
sodipodi:nodetypes="sssssssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path6455"
|
||||
d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z"
|
||||
style="fill:url(#linearGradient908);fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)" />
|
||||
<path
|
||||
style="color:#000000;fill:#c42e24;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m -214.54492,673.65013 -3.27677,-3.27676 -1.60901,5.23664 z"
|
||||
id="path4494"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<g
|
||||
id="g4336">
|
||||
<g
|
||||
transform="matrix(0.06790711,0,0,-0.06790711,-239.0411,765.68623)"
|
||||
id="g3897"
|
||||
xml:space="default">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:0.7;color:#000000;fill:url(#radialGradient3902);fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter3831);enable-background:accumulate"
|
||||
d="m -48.09375,67.8125 c -0.873996,-0.0028 -2.089735,0.01993 -3.40625,0.09375 -2.633031,0.147647 -5.700107,0.471759 -7.78125,1.53125 a 1.0001,1.0001 0 0 0 -0.25,1.59375 L -38.8125,92.375 a 1.0001,1.0001 0 0 0 0.84375,0.3125 L -24,90.5625 a 1.0001,1.0001 0 0 0 0.53125,-1.71875 L -46.0625,68.125 a 1.0001,1.0001 0 0 0 -0.625,-0.28125 c 0,0 -0.532254,-0.02842 -1.40625,-0.03125 z"
|
||||
transform="matrix(10.616011,0,0,-10.616011,357.98166,1725.8152)"
|
||||
id="path3821"
|
||||
xml:space="default" />
|
||||
<path
|
||||
style="opacity:0.6;color:#000000;fill:none;stroke:#000000;stroke-width:2.77429962;stroke-linecap:round;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter3868);enable-background:accumulate"
|
||||
d="m -15.782705,81.725197 8.7458304,9.147937"
|
||||
id="path3858"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(10.616011,0,0,-10.616011,39.50133,1725.8152)"
|
||||
xml:space="default" />
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.3;color:#000000;fill:url(#linearGradient3904);fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter3885);enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
||||
d="m -95.18931,981.03569 a 10.617073,10.617073 0 0 1 -0.995251,-0.3318 l -42.795789,-5.308 a 10.617073,10.617073 0 0 1 -6.30326,-17.9145 L -4.2897203,812.5065 a 10.617073,10.617073 0 0 1 8.95726,-3.3175 l 49.0990503,7.63026 a 10.617073,10.617073 0 0 1 5.97151,17.91452 L -87.55905,978.04989 a 10.617073,10.617073 0 0 1 -7.63026,2.9858 z"
|
||||
id="path3874"
|
||||
inkscape:connector-curvature="0"
|
||||
xml:space="default" />
|
||||
</g>
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:#871f1c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="M 20.697266 20.515625 C 19.336871 21.10204 18.348875 22.456253 18.345703 23.970703 L 18.353516 69.601562 C 18.349848 70.477025 18.685456 71.239319 19.222656 71.802734 L 19.212891 71.8125 L 19.357422 71.955078 C 19.360505 71.957909 19.364093 71.960073 19.367188 71.962891 L 26.660156 79.126953 L 33.488281 71.738281 L 46.189453 70.625 L 42.914062 70.910156 L 42.916016 57.78125 L 46.193359 57.494141 L 46.189453 70.625 L 67.28125 68.777344 C 67.744386 68.736546 68.184049 68.603285 68.587891 68.404297 L 50.166016 49.982422 C 48.699776 51.494984 46.729983 52.522521 44.556641 52.712891 C 40.033111 53.109121 36.366627 49.757459 36.367188 45.224609 C 36.367486 42.805408 37.418405 40.54481 39.080078 38.896484 L 20.697266 20.515625 z M 31.453125 44.013672 L 31.453125 47.296875 L 18.353516 48.443359 L 18.353516 45.162109 L 31.453125 44.013672 z "
|
||||
transform="translate(-268,635.29076)"
|
||||
id="path4308" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:#c42e24;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="M 67.320312 16.253906 L 21.822266 20.212891 C 21.426436 20.248017 21.052174 20.362637 20.697266 20.515625 L 39.080078 38.896484 C 40.532076 37.45615 42.448898 36.481868 44.558594 36.296875 C 44.841364 36.271675 45.121104 36.261625 45.396484 36.265625 C 49.527224 36.323815 52.748977 39.536849 52.748047 43.787109 C 52.747491 46.142495 51.751712 48.346628 50.166016 49.982422 L 68.587891 68.404297 C 69.859183 67.777881 70.75673 66.462035 70.759766 65.015625 L 70.769531 43.849609 L 57.664062 45 L 57.664062 41.714844 L 70.771484 40.566406 L 70.775391 31.386719 L 77.232422 24.398438 L 69.892578 17.179688 L 69.884766 17.189453 C 69.251763 16.542736 68.342666 16.171306 67.320312 16.253906 z M 46.201172 18.09375 L 46.199219 31.228516 L 42.921875 31.515625 L 42.923828 18.378906 L 46.201172 18.09375 z "
|
||||
transform="translate(-268,635.29076)"
|
||||
id="path4233" />
|
||||
<rect
|
||||
xml:space="default"
|
||||
y="648.49109"
|
||||
x="-258.70667"
|
||||
height="69.20665"
|
||||
width="69.20665"
|
||||
id="rect3585-3"
|
||||
style="opacity:0.8;color:#000000;fill:none;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;color-interpolation:sRGB;color-interpolation-filters:sRGB;fill:url(#linearGradient4318);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;font-family:sans-serif;-inkscape-font-specification:sans-serif"
|
||||
d="M 22.029297 20.195312 L 21.822266 20.212891 C 19.919838 20.381715 18.370776 22.043134 18.349609 23.939453 L 24.662109 30.251953 L 25.605469 31.195312 L 25.605469 31.103516 C 25.609469 29.193966 27.168951 27.515473 29.082031 27.345703 L 29.171875 27.337891 L 28.373047 26.539062 L 22.029297 20.195312 z "
|
||||
transform="translate(-268,635.29076)"
|
||||
id="path4256" />
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.53600003;color:#000000;color-interpolation:sRGB;color-interpolation-filters:sRGB;fill:url(#linearGradient4326);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;font-family:sans-serif;-inkscape-font-specification:sans-serif;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 67.330078 16.253906 L 68.03125 16.955078 L 74.472656 23.396484 L 74.580078 23.386719 C 75.531927 23.309814 76.390588 23.620657 77.015625 24.185547 L 69.892578 17.179688 L 69.884766 17.189453 C 69.253843 16.544862 68.348328 16.174551 67.330078 16.253906 z M 77.054688 24.222656 C 77.115589 24.279686 77.164628 24.348282 77.220703 24.410156 L 77.232422 24.398438 L 77.054688 24.222656 z "
|
||||
transform="translate(-268,635.29076)"
|
||||
id="path4272" />
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;color-interpolation:sRGB;color-interpolation-filters:sRGB;fill:url(#linearGradient4334);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.7;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;font-family:sans-serif;-inkscape-font-specification:sans-serif;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 18.363281 69.712891 C 18.387957 70.540342 18.709001 71.264013 19.222656 71.802734 L 19.212891 71.8125 L 19.357422 71.955078 C 19.360505 71.957909 19.364093 71.960073 19.367188 71.962891 L 26.599609 79.068359 C 26.044831 78.550125 25.698241 77.821152 25.638672 76.988281 L 18.951172 70.298828 L 18.363281 69.712891 z M 26.636719 79.103516 L 26.660156 79.126953 L 26.664062 79.123047 C 26.655656 79.11562 26.645042 79.111033 26.636719 79.103516 z "
|
||||
transform="translate(-268,635.29076)"
|
||||
id="path4290" />
|
||||
<path
|
||||
style="color:#000000;fill:url(#linearGradient4484);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m -215.26953,678.69115 c 0.006,0.1288 0.0176,0.25589 0.0176,0.38672 -5.6e-4,2.35538 -0.99634,4.55952 -2.58203,6.19531 -1.46624,1.51256 -3.43604,2.5401 -5.60938,2.73047 -0.30925,0.0271 -0.61372,0.0325 -0.91406,0.0254 -0.72658,5.04296 -2.26463,7.8639 8.16992,7.10545 4.52375,-0.39625 8.19041,-4.39245 8.19141,-8.92578 9.2e-4,-4.2231 -3.18073,-7.41978 -7.27344,-7.51758 z"
|
||||
id="path4472"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccscccscc" />
|
||||
<path
|
||||
style="color:#000000;fill:#c42e24;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m -225.07617,653.66967 7.25586,7.13823 -3.9801,3.23422 -6.56873,-2.32363 -6.63708,-7.18094 z"
|
||||
id="path4488"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="color:#000000;fill:#871f1c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m -189.97071,686.28133 -3.02803,-3.02804 -12.89102,-0.94799 0.81148,9.35378 z"
|
||||
id="path4498"
|
||||
inkscape:connector-curvature="0"
|
||||
xml:space="preserve" /> <path
|
||||
style="color:#000000;fill:#871f1c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m -214.55469,713.04599 -3.27486,-3.27486 -3.97863,-11.80722 11.38992,-0.38581 z"
|
||||
id="path4517"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient4319);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
|
||||
d="M 74.580078 23.386719 L 53.457031 25.224609 L 53.455078 38.359375 L 50.177734 38.646484 L 50.179688 25.509766 L 29.082031 27.345703 C 27.168951 27.515473 25.609469 29.193966 25.605469 31.103516 L 25.609375 52.292969 L 38.708984 51.144531 L 38.708984 54.427734 L 25.609375 55.574219 L 25.613281 76.734375 C 25.605281 78.643715 27.159736 80.061651 29.072266 79.894531 L 74.541016 75.910156 C 76.462106 75.740926 78.015531 74.054318 78.019531 72.148438 L 78.029297 50.980469 L 64.919922 52.130859 L 64.919922 48.845703 L 78.029297 47.697266 C 78.041297 15.869576 78.040397 26.105479 78.029297 50.980469 L 78.041016 26.554688 C 78.044016 24.640387 76.496418 23.231889 74.580078 23.386719 z M 52.652344 43.396484 C 56.783084 43.454674 60.004836 46.667709 60.003906 50.917969 C 60.002836 55.451299 56.33625 59.4475 51.8125 59.84375 C 47.28897 60.23998 43.622487 56.888319 43.623047 52.355469 C 43.623607 47.822329 47.290413 43.824434 51.814453 43.427734 C 52.097223 43.402534 52.376964 43.392484 52.652344 43.396484 z M 53.449219 64.625 L 53.445312 77.755859 L 50.169922 78.041016 L 50.171875 64.912109 L 53.449219 64.625 z "
|
||||
transform="translate(-268,635.29076)"
|
||||
id="path4633-5" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:#871f1c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m -249.64648,680.45287 7.25586,7.13086 -0.002,-10.59473 -7.25995,-7.38148 z"
|
||||
id="path4486"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="color:#000000;fill:#871f1c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m -221.79883,653.38451 7.25586,7.13086 -0.002,13.13476 -3.27672,-3.27676 10e-4,-9.57284 -3.97904,-3.90716 z"
|
||||
id="path4490"
|
||||
inkscape:connector-curvature="0"
|
||||
xml:space="preserve"
|
||||
sodipodi:nodetypes="ccccccc" /> <path
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;opacity:0.3"
|
||||
d="M 74.580078 23.386719 L 53.457031 25.224609 L 53.457031 25.423828 L 74.580078 23.585938 C 76.496418 23.431107 78.044016 24.839606 78.041016 26.753906 L 78.041016 26.554688 C 78.044016 24.640387 76.496418 23.231889 74.580078 23.386719 z M 50.179688 25.509766 L 29.082031 27.345703 C 27.168951 27.515473 25.609469 29.193966 25.605469 31.103516 L 25.605469 31.302734 C 25.609469 29.393184 27.168951 27.714692 29.082031 27.544922 L 50.179688 25.708984 L 50.179688 25.509766 z M 53.455078 38.359375 L 50.177734 38.646484 L 50.177734 38.845703 L 53.455078 38.558594 L 53.455078 38.359375 z M 78.029297 50.980469 L 64.919922 52.130859 L 64.919922 52.330078 L 78.029297 51.179688 C 78.02997 49.670319 78.028699 52.375913 78.029297 50.980469 z M 59.998047 51.013672 C 59.945496 55.507129 56.304164 59.450311 51.8125 59.84375 C 47.322671 60.237028 43.682429 56.936547 43.628906 52.455078 C 43.628502 52.488557 43.623051 52.521149 43.623047 52.554688 C 43.622487 57.087538 47.28897 60.439199 51.8125 60.042969 C 56.33625 59.646719 60.002906 55.650517 60.003906 51.117188 C 60.003914 51.082063 59.998478 51.048654 59.998047 51.013672 z M 38.708984 54.427734 L 25.609375 55.574219 L 25.609375 55.773438 L 38.708984 54.626953 L 38.708984 54.427734 z M 53.445312 77.755859 L 50.169922 78.041016 L 50.169922 78.044922 L 53.445312 77.757812 L 53.445312 77.755859 z "
|
||||
transform="translate(-268,635.29076)"
|
||||
id="path4175" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
inkscape:label="PLACE YOUR PICTOGRAM HERE"
|
||||
id="layer3"
|
||||
inkscape:groupmode="layer" />
|
||||
<g
|
||||
sodipodi:insensitive="true"
|
||||
style="display:none"
|
||||
inkscape:label="BADGE"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
clip-path="none"
|
||||
id="g4394"
|
||||
transform="translate(-340.00001,-581)"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="g855">
|
||||
<g
|
||||
style="opacity:0.6;filter:url(#filter891)"
|
||||
clip-path="url(#clipPath873)"
|
||||
id="g870"
|
||||
inkscape:groupmode="maskhelper">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path844"
|
||||
sodipodi:cx="252"
|
||||
sodipodi:cy="552.36218"
|
||||
sodipodi:rx="12"
|
||||
sodipodi:ry="12"
|
||||
d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
|
||||
transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)" />
|
||||
</g>
|
||||
<g
|
||||
id="g862">
|
||||
<path
|
||||
transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)"
|
||||
d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
|
||||
sodipodi:ry="12"
|
||||
sodipodi:rx="12"
|
||||
sodipodi:cy="552.36218"
|
||||
sodipodi:cx="252"
|
||||
id="path4398"
|
||||
style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path4400"
|
||||
sodipodi:cx="252"
|
||||
sodipodi:cy="552.36218"
|
||||
sodipodi:rx="12"
|
||||
sodipodi:ry="12"
|
||||
d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z"
|
||||
transform="matrix(1.25,0,0,1.25,33,-100.45273)" />
|
||||
<path
|
||||
transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)"
|
||||
d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z"
|
||||
inkscape:randomized="0"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:arg2="1.6755161"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:r2="4.3458705"
|
||||
sodipodi:r1="7.2431178"
|
||||
sodipodi:cy="589.50385"
|
||||
sodipodi:cx="666.19574"
|
||||
sodipodi:sides="5"
|
||||
id="path4459"
|
||||
style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="star" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 36 KiB |
|
@ -1,6 +0,0 @@
|
|||
# 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.
|
||||
simplejson
|
||||
charm-tools
|
||||
flake8
|
|
@ -1,22 +0,0 @@
|
|||
# Overview
|
||||
|
||||
Murano charm provides a catalog of applications deployable on Openstack cloud.
|
||||
|
||||
# Usage
|
||||
|
||||
Murano relies on services from the mysql/percona, rabbitmq-server and keystone charms:
|
||||
|
||||
juju deploy murano
|
||||
juju deploy keystone
|
||||
juju deploy mysql
|
||||
juju deploy rabbitmq-server
|
||||
juju add-relation murano rabbitmq-server
|
||||
juju add-relation murano mysql
|
||||
juju add-relation murano keystone
|
||||
|
||||
|
||||
# Bugs
|
||||
|
||||
Please report bugs on [Launchpad](https://bugs.launchpad.net/charm-murano/+filebug).
|
||||
|
||||
For general questions please refer to the OpenStack [Charm Guide](https://github.com/openstack/charm-guide).
|
|
@ -1,47 +0,0 @@
|
|||
options:
|
||||
rabbit-user:
|
||||
default: murano
|
||||
type: string
|
||||
description: Username used to access rabbitmq queue.
|
||||
rabbit-vhost:
|
||||
default: openstack
|
||||
type: string
|
||||
description: RabbitMQ virtual host to request access on rabbitmq-server.
|
||||
database-user:
|
||||
default: murano
|
||||
type: string
|
||||
description: Database username.
|
||||
database:
|
||||
default: murano
|
||||
type: string
|
||||
description: Murano database name.
|
||||
debug:
|
||||
default: False
|
||||
type: boolean
|
||||
description: Enable debug logging
|
||||
verbose:
|
||||
default: False
|
||||
type: boolean
|
||||
description: Enable verbose logging
|
||||
region:
|
||||
default: RegionOne
|
||||
type: string
|
||||
description: OpenStack Region
|
||||
ext-network:
|
||||
default: ext_net
|
||||
type: string
|
||||
description: |
|
||||
The external network to connect for downloading the application packages
|
||||
on launch of VMs spawned by Murano.
|
||||
router:
|
||||
default: default_router
|
||||
type: string
|
||||
description: |
|
||||
The default router is to bridge the external network and isolated network
|
||||
created by Murano for each environment.
|
||||
default_dns:
|
||||
default: 8.8.8.8
|
||||
type: string
|
||||
description: |
|
||||
The default DNS used by the VMs spawned by Murano to download the
|
||||
application packages on poweron.
|
|
@ -1,16 +0,0 @@
|
|||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0
|
||||
|
||||
Files: *
|
||||
Copyright: 2015, Canonical Ltd.
|
||||
License: Apache-2.0
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
450
src/icon.svg
450
src/icon.svg
|
@ -1,450 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="96"
|
||||
height="96"
|
||||
id="svg6517"
|
||||
version="1.1"
|
||||
inkscape:version="0.91+devel r"
|
||||
sodipodi:docname="openvswitch01.svg"
|
||||
viewBox="0 0 96 96">
|
||||
<defs
|
||||
id="defs6519">
|
||||
<linearGradient
|
||||
id="Background">
|
||||
<stop
|
||||
id="stop4178"
|
||||
offset="0"
|
||||
style="stop-color:#22779e;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4180"
|
||||
offset="1"
|
||||
style="stop-color:#2991c0;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter1121">
|
||||
<feFlood
|
||||
flood-opacity="0.59999999999999998"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood1123" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="out"
|
||||
result="composite1"
|
||||
id="feComposite1125" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="1"
|
||||
result="blur"
|
||||
id="feGaussianBlur1127" />
|
||||
<feOffset
|
||||
dx="0"
|
||||
dy="2"
|
||||
result="offset"
|
||||
id="feOffset1129" />
|
||||
<feComposite
|
||||
in="offset"
|
||||
in2="SourceGraphic"
|
||||
operator="atop"
|
||||
result="composite2"
|
||||
id="feComposite1131" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter950">
|
||||
<feFlood
|
||||
flood-opacity="0.25"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood952" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="in"
|
||||
result="composite1"
|
||||
id="feComposite954" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="1"
|
||||
result="blur"
|
||||
id="feGaussianBlur956" />
|
||||
<feOffset
|
||||
dx="0"
|
||||
dy="1"
|
||||
result="offset"
|
||||
id="feOffset958" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="offset"
|
||||
operator="over"
|
||||
result="composite2"
|
||||
id="feComposite960" />
|
||||
</filter>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath873">
|
||||
<g
|
||||
transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
|
||||
id="g875"
|
||||
inkscape:label="Layer 1"
|
||||
style="display:inline;fill:#ff00ff;fill-opacity:1;stroke:none">
|
||||
<path
|
||||
style="display:inline;fill:#ff00ff;fill-opacity:1;stroke:none"
|
||||
d="M 46.702703,898.22775 H 97.297297 C 138.16216,898.22775 144,904.06497 144,944.92583 v 50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 H 46.702703 C 5.8378378,1042.3622 0,1036.525 0,995.66429 v -50.73846 c 0,-40.86086 5.8378378,-46.69808 46.702703,-46.69808 z"
|
||||
id="path877"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssssssss" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter891"
|
||||
inkscape:label="Badge Shadow">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.71999962"
|
||||
id="feGaussianBlur893" />
|
||||
</filter>
|
||||
<style
|
||||
id="style867"
|
||||
type="text/css"><![CDATA[
|
||||
.fil0 {fill:#1F1A17}
|
||||
]]></style>
|
||||
<clipPath
|
||||
id="clipPath16">
|
||||
<path
|
||||
id="path18"
|
||||
d="M -9,-9 H 605 V 222 H -9 Z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath116">
|
||||
<path
|
||||
id="path118"
|
||||
d="m 91.7368,146.3253 -9.7039,-1.577 -8.8548,-3.8814 -7.5206,-4.7308 -7.1566,-8.7335 -4.0431,-4.282 -3.9093,-1.4409 -1.034,2.5271 1.8079,2.6096 0.4062,3.6802 1.211,-0.0488 1.3232,-1.2069 -0.3569,3.7488 -1.4667,0.9839 0.0445,1.4286 -3.4744,-1.9655 -3.1462,-3.712 -0.6559,-3.3176 1.3453,-2.6567 1.2549,-4.5133 2.5521,-1.2084 2.6847,0.1318 2.5455,1.4791 -1.698,-8.6122 1.698,-9.5825 -1.8692,-4.4246 -6.1223,-6.5965 1.0885,-3.941 2.9002,-4.5669 5.4688,-3.8486 2.9007,-0.3969 3.225,-0.1094 -2.012,-8.2601 7.3993,-3.0326 9.2188,-1.2129 3.1535,2.0619 0.2427,5.5797 3.5178,5.8224 0.2426,4.6094 8.4909,-0.6066 7.8843,0.7279 -7.8843,-4.7307 1.3343,-5.701 4.9731,-7.763 4.8521,-2.0622 3.8814,1.5769 1.577,3.1538 8.1269,6.1861 1.5769,-1.3343 12.7363,-0.485 2.5473,2.0619 0.2426,3.6391 -0.849,1.5767 -0.6066,9.8251 -4.2454,8.4909 0.7276,3.7605 2.5475,-1.3343 7.1566,-6.6716 3.5175,-0.2424 3.8815,1.5769 3.8818,2.9109 1.9406,6.3077 11.4021,-0.7277 6.914,2.6686 5.5797,5.2157 4.0028,7.5206 0.9706,8.8546 -0.8493,10.3105 -2.1832,9.2185 -2.1836,2.9112 -3.0322,0.9706 -5.3373,-5.8224 -4.8518,-1.6982 -4.2455,7.0353 -4.2454,3.8815 -2.3049,1.4556 -9.2185,7.6419 -7.3993,4.0028 -7.3993,0.6066 -8.6119,-1.4556 -7.5206,-2.7899 -5.2158,-4.2454 -4.1241,-4.9734 -4.2454,-1.2129"
|
||||
inkscape:connector-curvature="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath128">
|
||||
<path
|
||||
id="path130"
|
||||
d="m 91.7368,146.3253 -9.7039,-1.577 -8.8548,-3.8814 -7.5206,-4.7308 -7.1566,-8.7335 -4.0431,-4.282 -3.9093,-1.4409 -1.034,2.5271 1.8079,2.6096 0.4062,3.6802 1.211,-0.0488 1.3232,-1.2069 -0.3569,3.7488 -1.4667,0.9839 0.0445,1.4286 -3.4744,-1.9655 -3.1462,-3.712 -0.6559,-3.3176 1.3453,-2.6567 1.2549,-4.5133 2.5521,-1.2084 2.6847,0.1318 2.5455,1.4791 -1.698,-8.6122 1.698,-9.5825 -1.8692,-4.4246 -6.1223,-6.5965 1.0885,-3.941 2.9002,-4.5669 5.4688,-3.8486 2.9007,-0.3969 3.225,-0.1094 -2.012,-8.2601 7.3993,-3.0326 9.2188,-1.2129 3.1535,2.0619 0.2427,5.5797 3.5178,5.8224 0.2426,4.6094 8.4909,-0.6066 7.8843,0.7279 -7.8843,-4.7307 1.3343,-5.701 4.9731,-7.763 4.8521,-2.0622 3.8814,1.5769 1.577,3.1538 8.1269,6.1861 1.5769,-1.3343 12.7363,-0.485 2.5473,2.0619 0.2426,3.6391 -0.849,1.5767 -0.6066,9.8251 -4.2454,8.4909 0.7276,3.7605 2.5475,-1.3343 7.1566,-6.6716 3.5175,-0.2424 3.8815,1.5769 3.8818,2.9109 1.9406,6.3077 11.4021,-0.7277 6.914,2.6686 5.5797,5.2157 4.0028,7.5206 0.9706,8.8546 -0.8493,10.3105 -2.1832,9.2185 -2.1836,2.9112 -3.0322,0.9706 -5.3373,-5.8224 -4.8518,-1.6982 -4.2455,7.0353 -4.2454,3.8815 -2.3049,1.4556 -9.2185,7.6419 -7.3993,4.0028 -7.3993,0.6066 -8.6119,-1.4556 -7.5206,-2.7899 -5.2158,-4.2454 -4.1241,-4.9734 -4.2454,-1.2129"
|
||||
inkscape:connector-curvature="0" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
id="linearGradient3850"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop3852"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3854"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3095">
|
||||
<path
|
||||
d="M 976.648,389.551 H 134.246 V 1229.55 H 976.648 V 389.551"
|
||||
id="path3097"
|
||||
inkscape:connector-curvature="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3195">
|
||||
<path
|
||||
d="m 611.836,756.738 -106.34,105.207 c -8.473,8.289 -13.617,20.102 -13.598,33.379 L 598.301,790.207 c -0.031,-13.418 5.094,-25.031 13.535,-33.469"
|
||||
id="path3197"
|
||||
inkscape:connector-curvature="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3235">
|
||||
<path
|
||||
d="m 1095.64,1501.81 c 35.46,-35.07 70.89,-70.11 106.35,-105.17 4.4,-4.38 7.11,-10.53 7.11,-17.55 l -106.37,105.21 c 0,7 -2.71,13.11 -7.09,17.51"
|
||||
id="path3237"
|
||||
inkscape:connector-curvature="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath4591"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 1106.6009,730.43734 -0.036,21.648 c -0.01,3.50825 -2.8675,6.61375 -6.4037,6.92525 l -83.6503,7.33162 c -3.5205,0.30763 -6.3812,-2.29987 -6.3671,-5.8145 l 0.036,-21.6475 20.1171,-1.76662 -0.011,4.63775 c 0,1.83937 1.4844,3.19925 3.3262,3.0395 l 49.5274,-4.33975 c 1.8425,-0.166 3.3425,-1.78125 3.3538,-3.626 l 0.01,-4.63025 20.1,-1.7575"
|
||||
style="fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path4593" />
|
||||
</clipPath>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.4333926,-2.2742838,1.1731823,-0.73941125,-174.08025,98.374394)"
|
||||
r="20.40658"
|
||||
fy="93.399292"
|
||||
fx="-26.508606"
|
||||
cy="93.399292"
|
||||
cx="-26.508606"
|
||||
id="radialGradient3856"
|
||||
xlink:href="#linearGradient3850"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientTransform="translate(-318.48033,212.32022)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="993.19702"
|
||||
x2="-51.879555"
|
||||
y1="593.11615"
|
||||
x1="348.20132"
|
||||
id="linearGradient3895"
|
||||
xlink:href="#linearGradient3850"
|
||||
inkscape:collect="always" />
|
||||
<clipPath
|
||||
id="clipPath3906"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<rect
|
||||
transform="scale(1,-1)"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#ff00ff;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
|
||||
id="rect3908"
|
||||
width="1019.1371"
|
||||
height="1019.1371"
|
||||
x="357.9816"
|
||||
y="-1725.8152" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
gradientTransform="translate(0,-1.111e-5)"
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4439-7"
|
||||
id="linearGradient908-9"
|
||||
x1="-220"
|
||||
y1="731.29077"
|
||||
x2="-220"
|
||||
y2="635.29077"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient4439-7"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4441-6"
|
||||
offset="0"
|
||||
style="stop-color:#f2f2f2;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4443-2"
|
||||
offset="1"
|
||||
style="stop-color:#f9f9f9;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter1121-2">
|
||||
<feFlood
|
||||
flood-opacity="0.59999999999999998"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood1123-6" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="out"
|
||||
result="composite1"
|
||||
id="feComposite1125-4" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="1"
|
||||
result="blur"
|
||||
id="feGaussianBlur1127-0" />
|
||||
<feOffset
|
||||
dx="0"
|
||||
dy="2"
|
||||
result="offset"
|
||||
id="feOffset1129-2" />
|
||||
<feComposite
|
||||
in="offset"
|
||||
in2="SourceGraphic"
|
||||
operator="atop"
|
||||
result="composite2"
|
||||
id="feComposite1131-1" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7.9580784"
|
||||
inkscape:cx="28.893746"
|
||||
inkscape:cy="26.083721"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer3"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1029"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="true"
|
||||
showguides="false"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-page="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid821" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="16,48"
|
||||
id="guide823" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="64,80"
|
||||
id="guide825" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="80,40"
|
||||
id="guide827" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="64,16"
|
||||
id="guide829" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6522">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="BACKGROUND"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(268,-635.29076)"
|
||||
style="display:inline"
|
||||
sodipodi:insensitive="true">
|
||||
<path
|
||||
style="display:inline;fill:url(#linearGradient908-9);fill-opacity:1;stroke:none;filter:url(#filter1121-2)"
|
||||
d="m -268,700.15562 v -33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 h 33.79408 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 v 33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 h -33.79408 c -27.21517,0 -31.10302,-3.89189 -31.10302,-31.13514 z"
|
||||
id="path6455-8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssssssss" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="FOLDS"
|
||||
sodipodi:insensitive="true" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="PLACE YOUR PICTOGRAM HERE"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#201f1f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="M 48.000977,13.601563 A 34.399006,34.399006 0 0 0 13.600586,48 34.399006,34.399006 0 0 0 48.000977,82.398437 34.399006,34.399006 0 0 0 82.399414,48 34.399006,34.399006 0 0 0 48.000977,13.601563 Z m 0,11.623046 A 22.775597,22.775597 0 0 1 70.776368,48 22.775597,22.775597 0 0 1 48.000977,70.77539 22.775597,22.775597 0 0 1 25.225586,48 22.775597,22.775597 0 0 1 48.000977,25.224609 Z"
|
||||
id="path4319"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4f8a49;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 57.626953,34.075195 v 5.279297 H 40.791016 v 6.835938 h 16.835937 v 5.279297 L 68.398437,42.772461 Z M 38.373047,44.530274 27.601562,53.227539 38.373047,61.924805 V 56.645508 H 55.208984 V 49.809571 H 38.373047 Z"
|
||||
id="rect4326"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="BADGE"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(-340.00001,-581)"
|
||||
id="g4394"
|
||||
clip-path="none">
|
||||
<g
|
||||
id="g855">
|
||||
<g
|
||||
inkscape:groupmode="maskhelper"
|
||||
id="g870"
|
||||
clip-path="url(#clipPath873)"
|
||||
style="opacity:0.6;filter:url(#filter891)">
|
||||
<circle
|
||||
transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
|
||||
id="path844"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
|
||||
cx="252"
|
||||
cy="552.36218"
|
||||
r="12" />
|
||||
</g>
|
||||
<g
|
||||
id="g862">
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
|
||||
id="path4398"
|
||||
transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)"
|
||||
cx="252"
|
||||
cy="552.36218"
|
||||
r="12" />
|
||||
<circle
|
||||
transform="matrix(1.25,0,0,1.25,33,-100.45273)"
|
||||
id="path4400"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
|
||||
cx="252"
|
||||
cy="552.36218"
|
||||
r="12" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"
|
||||
id="path4459"
|
||||
sodipodi:sides="5"
|
||||
sodipodi:cx="666.19574"
|
||||
sodipodi:cy="589.50385"
|
||||
sodipodi:r1="7.2431178"
|
||||
sodipodi:r2="4.3458705"
|
||||
sodipodi:arg1="1.0471976"
|
||||
sodipodi:arg2="1.6755161"
|
||||
inkscape:flatsided="false"
|
||||
inkscape:rounded="0.1"
|
||||
inkscape:randomized="0"
|
||||
d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z"
|
||||
transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 18 KiB |
|
@ -1,5 +0,0 @@
|
|||
includes: ['layer:openstack-api']
|
||||
options:
|
||||
basic:
|
||||
use_venv: True
|
||||
include_system_packages: True
|
|
@ -1,76 +0,0 @@
|
|||
import charmhelpers.contrib.openstack.utils as ch_utils
|
||||
import charmhelpers.core.hookenv as hookenv
|
||||
import charms_openstack.charm
|
||||
import charms_openstack.ip as os_ip
|
||||
|
||||
|
||||
class MuranoCharm(charms_openstack.charm.HAOpenStackCharm):
|
||||
# Internal name of charm
|
||||
service_name = name = 'murano'
|
||||
|
||||
# First release supported
|
||||
release = 'mitaka'
|
||||
|
||||
# List of packages to install for this charm
|
||||
packages = ['murano-api', 'murano-engine', 'python-pymysql', 'python-apt']
|
||||
|
||||
# Init services the charm manages
|
||||
services = ['haproxy', 'murano-api', 'murano-engine']
|
||||
|
||||
# Ports that need exposing.
|
||||
default_service = 'murano-api'
|
||||
api_ports = {
|
||||
'murano-api': {
|
||||
os_ip.PUBLIC: 8082,
|
||||
os_ip.ADMIN: 8082,
|
||||
os_ip.INTERNAL: 8082,
|
||||
}
|
||||
}
|
||||
|
||||
service_type = 'murano'
|
||||
required_relations = ['shared-db', 'amqp', 'identity-service']
|
||||
|
||||
restart_map = {
|
||||
'/etc/murano/murano.conf': services,
|
||||
}
|
||||
|
||||
ha_resources = ['vips', 'haproxy']
|
||||
|
||||
sync_cmd = ['murano-db-manage', '--config-file',
|
||||
'/etc/murano/murano.conf', 'upgrade']
|
||||
|
||||
def __init__(self, release=None, **kwargs):
|
||||
"""Custom initialiser for class
|
||||
If no release is passed, then the charm determines the release from the
|
||||
ch_utils.os_release() function.
|
||||
"""
|
||||
if release is None:
|
||||
release = ch_utils.os_release('python-keystonemiddleware')
|
||||
super().__init__(release=release, **kwargs)
|
||||
|
||||
def get_amqp_credentials(self):
|
||||
"""Provide the default amqp username and vhost as a tuple.
|
||||
|
||||
:returns (username, host): two strings to send to the amqp provider.
|
||||
"""
|
||||
return (self.config['rabbit-user'], self.config['rabbit-vhost'])
|
||||
|
||||
def get_database_setup(self):
|
||||
"""Provide the default database credentials as a list of 3-tuples
|
||||
|
||||
returns a structure of:
|
||||
[
|
||||
{'database': <database>,
|
||||
'username': <username>,
|
||||
'hostname': <hostname of this unit>
|
||||
'prefix': <the optional prefix for the database>, },
|
||||
]
|
||||
|
||||
:returns [{'database': ...}, ...]: credentials for multiple databases
|
||||
"""
|
||||
return [
|
||||
dict(
|
||||
database=self.config['database'],
|
||||
username=self.config['database-user'],
|
||||
hostname=hookenv.unit_private_ip(), )
|
||||
]
|
|
@ -1,26 +0,0 @@
|
|||
name: murano
|
||||
summary: OpenStack Application Catalog Service
|
||||
maintainer: OpenStack Charmers <openstack-charmers@list.ubuntu.com>
|
||||
description: |
|
||||
The Murano Project introduces an application catalog to OpenStack,
|
||||
enabling application developers and cloud administrators to publish various
|
||||
cloud-ready applications in a browsable categorized catalog
|
||||
tags:
|
||||
- openstack
|
||||
series:
|
||||
- xenial
|
||||
- trusty
|
||||
- yakkety
|
||||
requires:
|
||||
shared-db:
|
||||
interface: mysql-shared
|
||||
amqp:
|
||||
interface: rabbitmq
|
||||
identity-service:
|
||||
interface: keystone
|
||||
ha:
|
||||
interface: hacluster
|
||||
scope: container
|
||||
peers:
|
||||
cluster:
|
||||
interface: openstack-ha
|
|
@ -1,61 +0,0 @@
|
|||
# Copyright 2016 Canonical Ltd
|
||||
#
|
||||
# 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 charms_openstack.charm as charm
|
||||
import charms.reactive as reactive
|
||||
|
||||
# We need to import charm.openstack.murano to avoid
|
||||
# No derived OpenStackCharm() classes registered
|
||||
import charm.openstack.murano as murano
|
||||
assert murano
|
||||
|
||||
charm.use_defaults(
|
||||
'charm.installed',
|
||||
'amqp.connected',
|
||||
'shared-db.connected',
|
||||
'identity-service.connected',
|
||||
'identity-service.available', # enables SSL support
|
||||
'config.changed',
|
||||
'update-status')
|
||||
|
||||
COMPLETE_INTERFACE_STATES = [
|
||||
'shared-db.available',
|
||||
'identity-service.available',
|
||||
'amqp.available',
|
||||
]
|
||||
|
||||
|
||||
@reactive.when(*COMPLETE_INTERFACE_STATES)
|
||||
def render_config(*args):
|
||||
"""Render the configuration for charm when all the interfaces are
|
||||
available.
|
||||
"""
|
||||
with charm.provide_charm_instance() as charm_class:
|
||||
charm_class.render_with_interfaces(args)
|
||||
charm_class.assess_status()
|
||||
reactive.set_state('config.rendered')
|
||||
|
||||
|
||||
# db_sync checks if sync has been done so rerunning is a noop
|
||||
@reactive.when('config.rendered')
|
||||
def init_db():
|
||||
with charm.provide_charm_instance() as charm_class:
|
||||
charm_class.db_sync()
|
||||
|
||||
|
||||
@reactive.when('ha.connected')
|
||||
def cluster_connected(hacluster):
|
||||
with charm.provide_charm_instance() as charm_class:
|
||||
charm_class.configure_ha_resources(hacluster)
|
||||
charm_class.assess_status()
|
|
@ -1,45 +0,0 @@
|
|||
[DEFAULT]
|
||||
debug = {{ options.debug }}
|
||||
bind_host = {{ options.service_listen_info.murano_api.ip }}
|
||||
bind_port = {{ options.service_listen_info.murano_api.port }}
|
||||
{% include "parts/rabbitmq" %}
|
||||
|
||||
[oslo_messaging_notifications]
|
||||
driver=messagingv2
|
||||
|
||||
[database]
|
||||
connection = {{ shared_db.uri }}
|
||||
|
||||
{% include "parts/section-keystone-authtoken" %}
|
||||
{% if identity_service.auth_host -%}
|
||||
admin_user = {{ identity_service.service_username }}
|
||||
admin_password = {{ identity_service.service_password }}
|
||||
admin_tenant_name = {{ identity_service.service_tenant }}
|
||||
{% endif -%}
|
||||
|
||||
[service_credentials]
|
||||
{% if identity_service.auth_host -%}
|
||||
auth_type = password
|
||||
region_name = {{ options.region }}
|
||||
auth_url = {{ identity_service.auth_protocol }}://{{ identity_service.auth_host }}:{{ identity_service.auth_port }}
|
||||
project_name = {{ identity_service.service_tenant }}
|
||||
username = {{ identity_service.service_username }}
|
||||
password = {{ identity_service.service_password }}
|
||||
{%- endif %}
|
||||
|
||||
[rabbitmq]
|
||||
host = {{ amqp.host }}
|
||||
login = {{ amqp.username }}
|
||||
password = {{ amqp.password }}
|
||||
virtual_host = {{ amqp.vhost }}
|
||||
|
||||
{% include "parts/section-rabbitmq-oslo" %}
|
||||
|
||||
[murano]
|
||||
url = {{ options.external_endpoints.murano_api.url }}
|
||||
|
||||
[networking]
|
||||
external_network = {{ options.ext_network }}
|
||||
router_name = {{ options.router }}
|
||||
create_router = true
|
||||
default_dns = {{ options.default_dns }}
|
|
@ -1,10 +0,0 @@
|
|||
{% if amqp.host or amqp.hosts -%}
|
||||
{% if amqp.hosts -%}
|
||||
rabbit_hosts = {{ amqp.hosts }}
|
||||
{% else -%}
|
||||
rabbit_host = {{ amqp.host }}
|
||||
{% endif -%}
|
||||
rabbit_userid = {{ amqp.username }}
|
||||
rabbit_password = {{ amqp.password }}
|
||||
rabbit_virtual_host = {{ amqp.vhost }}
|
||||
{% endif -%}
|
|
@ -1,16 +0,0 @@
|
|||
# charm-proof
|
||||
charm-tools>=2.0.0
|
||||
# amulet deployment helpers
|
||||
bzr+lp:charm-helpers#egg=charmhelpers
|
||||
# BEGIN: Amulet OpenStack Charm Helper Requirements
|
||||
# Liberty client lower constraints
|
||||
amulet>=1.14.3,<2.0
|
||||
bundletester>=0.6.1,<1.0
|
||||
python-keystoneclient>=1.7.1,<2.0
|
||||
python-muranoclient>=0.8.3,<=0.9.0
|
||||
python-cinderclient>=1.4.0,<2.0
|
||||
python-heatclient>=0.8.0,<1.0
|
||||
python-novaclient>=2.30.1,<3.0
|
||||
pika>=0.10.0,<1.0
|
||||
distro-info
|
||||
# END: Amulet OpenStack Charm Helper Requirements
|
|
@ -1,9 +0,0 @@
|
|||
# Overview
|
||||
|
||||
This directory provides Amulet tests to verify basic deployment functionality
|
||||
from the perspective of this charm, its requirements and its features, as
|
||||
exercised in a subset of the full OpenStack deployment test bundle topology.
|
||||
|
||||
For full details on functional testing of OpenStack charms please refer to
|
||||
the [functional testing](http://docs.openstack.org/developer/charm-guide/testing.html#functional-testing)
|
||||
section of the OpenStack Charm Guide.
|
|
@ -1,367 +0,0 @@
|
|||
import subprocess
|
||||
import amulet
|
||||
import json
|
||||
import time
|
||||
|
||||
import muranoclient.client as murano_client
|
||||
from keystoneclient import session as keystone_session
|
||||
from keystoneclient.auth import identity as keystone_identity
|
||||
|
||||
from charmhelpers.contrib.openstack.amulet.deployment import (
|
||||
OpenStackAmuletDeployment
|
||||
)
|
||||
|
||||
from charmhelpers.contrib.openstack.amulet.utils import (
|
||||
OpenStackAmuletUtils,
|
||||
DEBUG,
|
||||
)
|
||||
|
||||
# Use DEBUG to turn on debug logging
|
||||
u = OpenStackAmuletUtils(DEBUG)
|
||||
|
||||
|
||||
class MuranoBasicDeployment(OpenStackAmuletDeployment):
|
||||
"""Amulet tests on a basic murano deployment."""
|
||||
|
||||
def __init__(self, series, openstack=None, source=None, stable=False):
|
||||
"""Deploy the entire test environment."""
|
||||
super(MuranoBasicDeployment, self).__init__(series, openstack,
|
||||
source, stable)
|
||||
self._add_services()
|
||||
self._add_relations()
|
||||
self._configure_services()
|
||||
self._deploy()
|
||||
|
||||
u.log.info('Waiting on extended status checks...')
|
||||
exclude_services = []
|
||||
self._auto_wait_for_status(exclude_services=exclude_services)
|
||||
|
||||
self.d.sentry.wait()
|
||||
self._initialize_tests()
|
||||
|
||||
def _add_services(self):
|
||||
"""Add services
|
||||
|
||||
Add the services that we're testing, where murano is local,
|
||||
and the rest of the service are from lp branches that are
|
||||
compatible with the local charm (e.g. stable or next).
|
||||
"""
|
||||
this_service = {'name': 'murano'}
|
||||
other_services = [
|
||||
{'name': 'percona-cluster', 'constraints': {'mem': '3072M'}},
|
||||
{'name': 'rabbitmq-server'},
|
||||
{'name': 'keystone'},
|
||||
]
|
||||
super(MuranoBasicDeployment, self)._add_services(this_service,
|
||||
other_services)
|
||||
|
||||
def _add_relations(self):
|
||||
"""Add all of the relations for the services."""
|
||||
relations = {
|
||||
'murano:shared-db': 'percona-cluster:shared-db',
|
||||
'murano:amqp': 'rabbitmq-server:amqp',
|
||||
'murano:identity-service': 'keystone:identity-service',
|
||||
'keystone:shared-db': 'percona-cluster:shared-db',
|
||||
|
||||
}
|
||||
super(MuranoBasicDeployment, self)._add_relations(relations)
|
||||
|
||||
def _configure_services(self):
|
||||
"""Configure all of the services."""
|
||||
keystone_config = {
|
||||
'admin-password': 'openstack',
|
||||
'admin-token': 'ubuntutesting'
|
||||
}
|
||||
pxc_config = {
|
||||
'dataset-size': '25%',
|
||||
'max-connections': 1000,
|
||||
'root-password': 'ChangeMe123',
|
||||
'sst-password': 'ChangeMe123',
|
||||
}
|
||||
configs = {
|
||||
'keystone': keystone_config,
|
||||
'percona-cluster': pxc_config,
|
||||
}
|
||||
super(MuranoBasicDeployment, self)._configure_services(configs)
|
||||
|
||||
def _get_token(self):
|
||||
return self.keystone.service_catalog.catalog['token']['id']
|
||||
|
||||
def _initialize_tests(self):
|
||||
"""Perform final initialization before tests get run."""
|
||||
# Access the sentries for inspecting service units
|
||||
self.murano_sentry = self.d.sentry['murano'][0]
|
||||
self.pxc_sentry = self.d.sentry['percona-cluster'][0]
|
||||
self.keystone_sentry = self.d.sentry['keystone'][0]
|
||||
self.rabbitmq_sentry = self.d.sentry['rabbitmq-server'][0]
|
||||
u.log.debug('openstack release val: {}'.format(
|
||||
self._get_openstack_release()))
|
||||
u.log.debug('openstack release str: {}'.format(
|
||||
self._get_openstack_release_string()))
|
||||
|
||||
# Authenticate admin with keystone endpoint
|
||||
self.keystone = u.authenticate_keystone_admin(self.keystone_sentry,
|
||||
user='admin',
|
||||
password='openstack',
|
||||
tenant='admin')
|
||||
|
||||
# Authenticate admin with murano endpoint
|
||||
murano_ep = self.keystone.service_catalog.url_for(
|
||||
service_type='application-catalog',
|
||||
endpoint_type='publicURL')
|
||||
|
||||
keystone_ep = self.keystone.service_catalog.url_for(
|
||||
service_type='identity',
|
||||
endpoint_type='publicURL')
|
||||
|
||||
auth = keystone_identity.V2Token(auth_url=keystone_ep,
|
||||
token=self.keystone.auth_token)
|
||||
sess = keystone_session.Session(auth=auth)
|
||||
self.murano = murano_client.Client(version=1, session=sess,
|
||||
endpoint_override=murano_ep)
|
||||
|
||||
def _run_action(self, unit_id, action, *args):
|
||||
command = ["juju", "action", "do", "--format=json", unit_id, action]
|
||||
command.extend(args)
|
||||
print("Running command: %s\n" % " ".join(command))
|
||||
output = subprocess.check_output(command)
|
||||
output_json = output.decode(encoding="UTF-8")
|
||||
data = json.loads(output_json)
|
||||
action_id = data[u'Action queued with id']
|
||||
return action_id
|
||||
|
||||
def _wait_on_action(self, action_id):
|
||||
command = ["juju", "action", "fetch", "--format=json", action_id]
|
||||
while True:
|
||||
try:
|
||||
output = subprocess.check_output(command)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return False
|
||||
output_json = output.decode(encoding="UTF-8")
|
||||
data = json.loads(output_json)
|
||||
if data[u"status"] == "completed":
|
||||
return True
|
||||
elif data[u"status"] == "failed":
|
||||
return False
|
||||
time.sleep(2)
|
||||
|
||||
def test_100_services(self):
|
||||
"""Verify the expected services are running on the corresponding
|
||||
service units."""
|
||||
u.log.debug('Checking system services on units...')
|
||||
|
||||
murano_svcs = [
|
||||
'murano-api', 'murano-engine'
|
||||
]
|
||||
|
||||
service_names = {
|
||||
self.murano_sentry: murano_svcs,
|
||||
}
|
||||
|
||||
ret = u.validate_services_by_name(service_names)
|
||||
if ret:
|
||||
amulet.raise_status(amulet.FAIL, msg=ret)
|
||||
|
||||
u.log.debug('OK')
|
||||
|
||||
def test_110_service_catalog(self):
|
||||
"""Verify that the service catalog endpoint data is valid."""
|
||||
u.log.debug('Checking keystone service catalog data...')
|
||||
endpoint_check = {
|
||||
'adminURL': u.valid_url,
|
||||
'id': u.not_null,
|
||||
'region': 'RegionOne',
|
||||
'publicURL': u.valid_url,
|
||||
'internalURL': u.valid_url
|
||||
}
|
||||
expected = {
|
||||
'application-catalog': [endpoint_check],
|
||||
}
|
||||
actual = self.keystone.service_catalog.get_endpoints()
|
||||
|
||||
ret = u.validate_svc_catalog_endpoint_data(expected, actual)
|
||||
if ret:
|
||||
amulet.raise_status(amulet.FAIL, msg=ret)
|
||||
|
||||
u.log.debug('OK')
|
||||
|
||||
def test_114_murano_api_endpoint(self):
|
||||
"""Verify the murano api endpoint data."""
|
||||
u.log.debug('Checking murano api endpoint data...')
|
||||
endpoints = self.keystone.endpoints.list()
|
||||
u.log.debug(endpoints)
|
||||
admin_port = internal_port = public_port = '8082'
|
||||
expected = {'id': u.not_null,
|
||||
'region': 'RegionOne',
|
||||
'adminurl': u.valid_url,
|
||||
'internalurl': u.valid_url,
|
||||
'publicurl': u.valid_url,
|
||||
'service_id': u.not_null}
|
||||
|
||||
ret = u.validate_endpoint_data(endpoints, admin_port, internal_port,
|
||||
public_port, expected)
|
||||
if ret:
|
||||
message = 'murano endpoint: {}'.format(ret)
|
||||
amulet.raise_status(amulet.FAIL, msg=message)
|
||||
|
||||
u.log.debug('OK')
|
||||
|
||||
def test_200_murano_identity_relation(self):
|
||||
"""Verify the murano to keystone identity-service relation data"""
|
||||
u.log.debug('Checking murano to keystone identity-service '
|
||||
'relation data...')
|
||||
unit = self.murano_sentry
|
||||
relation = ['identity-service', 'keystone:identity-service']
|
||||
murano_relation = unit.relation('identity-service',
|
||||
'keystone:identity-service')
|
||||
murano_ip = murano_relation['private-address']
|
||||
murano_endpoint = "http://%s:8082" % (murano_ip)
|
||||
|
||||
expected = {
|
||||
'admin_url': murano_endpoint,
|
||||
'internal_url': murano_endpoint,
|
||||
'private-address': murano_ip,
|
||||
'public_url': murano_endpoint,
|
||||
'region': 'RegionOne',
|
||||
'service': 'murano',
|
||||
}
|
||||
|
||||
ret = u.validate_relation_data(unit, relation, expected)
|
||||
if ret:
|
||||
message = u.relation_error('murano identity-service', ret)
|
||||
amulet.raise_status(amulet.FAIL, msg=message)
|
||||
|
||||
u.log.debug('OK')
|
||||
|
||||
def test_201_keystone_murano_identity_relation(self):
|
||||
"""Verify the keystone to murano identity-service relation data"""
|
||||
u.log.debug('Checking keystone:murano identity relation data...')
|
||||
unit = self.keystone_sentry
|
||||
relation = ['identity-service', 'murano:identity-service']
|
||||
id_relation = unit.relation('identity-service',
|
||||
'murano:identity-service')
|
||||
id_ip = id_relation['private-address']
|
||||
expected = {
|
||||
'admin_token': 'ubuntutesting',
|
||||
'auth_host': id_ip,
|
||||
'auth_port': "35357",
|
||||
'auth_protocol': 'http',
|
||||
'private-address': id_ip,
|
||||
'service_host': id_ip,
|
||||
'service_password': u.not_null,
|
||||
'service_port': "5000",
|
||||
'service_protocol': 'http',
|
||||
'service_tenant': 'services',
|
||||
'service_tenant_id': u.not_null,
|
||||
'service_username': 'murano',
|
||||
}
|
||||
ret = u.validate_relation_data(unit, relation, expected)
|
||||
if ret:
|
||||
message = u.relation_error('keystone identity-service', ret)
|
||||
amulet.raise_status(amulet.FAIL, msg=message)
|
||||
|
||||
u.log.debug('OK')
|
||||
|
||||
def test_203_murano_amqp_relation(self):
|
||||
"""Verify the murano to rabbitmq-server amqp relation data"""
|
||||
u.log.debug('Checking murano:rabbitmq amqp relation data...')
|
||||
unit = self.murano_sentry
|
||||
relation = ['amqp', 'rabbitmq-server:amqp']
|
||||
expected = {
|
||||
'username': 'murano',
|
||||
'private-address': u.valid_ip,
|
||||
'vhost': 'openstack'
|
||||
}
|
||||
|
||||
ret = u.validate_relation_data(unit, relation, expected)
|
||||
if ret:
|
||||
message = u.relation_error('murano amqp', ret)
|
||||
amulet.raise_status(amulet.FAIL, msg=message)
|
||||
|
||||
u.log.debug('OK')
|
||||
|
||||
def test_204_amqp_murano_relation(self):
|
||||
"""Verify the rabbitmq-server to murano amqp relation data"""
|
||||
u.log.debug('Checking rabbitmq:murano amqp relation data...')
|
||||
unit = self.rabbitmq_sentry
|
||||
relation = ['amqp', 'murano:amqp']
|
||||
expected = {
|
||||
'hostname': u.valid_ip,
|
||||
'private-address': u.valid_ip,
|
||||
'password': u.not_null,
|
||||
}
|
||||
|
||||
ret = u.validate_relation_data(unit, relation, expected)
|
||||
if ret:
|
||||
message = u.relation_error('rabbitmq amqp', ret)
|
||||
amulet.raise_status(amulet.FAIL, msg=message)
|
||||
|
||||
u.log.debug('OK')
|
||||
|
||||
u.log.debug('OK')
|
||||
|
||||
def test_900_restart_on_config_change(self):
|
||||
"""Verify that the specified services are restarted when the config
|
||||
is changed.
|
||||
"""
|
||||
sentry = self.murano_sentry
|
||||
juju_service = 'murano'
|
||||
|
||||
# Expected default and alternate values
|
||||
set_default = {'debug': 'False'}
|
||||
set_alternate = {'debug': 'True'}
|
||||
|
||||
# Services which are expected to restart upon config change,
|
||||
# and corresponding config files affected by the change
|
||||
conf_file = '/etc/murano/murano.conf'
|
||||
services = {
|
||||
'murano-api': conf_file,
|
||||
'murano-engine': conf_file,
|
||||
}
|
||||
|
||||
# Make config change, check for service restarts
|
||||
u.log.debug('Making config change on {}...'.format(juju_service))
|
||||
mtime = u.get_sentry_time(sentry)
|
||||
self.d.configure(juju_service, set_alternate)
|
||||
|
||||
sleep_time = 40
|
||||
for s, conf_file in services.iteritems():
|
||||
u.log.debug("Checking that service restarted: {}".format(s))
|
||||
if not u.validate_service_config_changed(sentry, mtime, s,
|
||||
conf_file,
|
||||
retry_count=4,
|
||||
retry_sleep_time=20,
|
||||
sleep_time=sleep_time):
|
||||
self.d.configure(juju_service, set_default)
|
||||
msg = "service {} didn't restart after config change".format(s)
|
||||
amulet.raise_status(amulet.FAIL, msg=msg)
|
||||
sleep_time = 0
|
||||
|
||||
self.d.configure(juju_service, set_default)
|
||||
u.log.debug('OK')
|
||||
|
||||
def _test_910_pause_and_resume(self):
|
||||
"""The services can be paused and resumed. """
|
||||
u.log.debug('Checking pause and resume actions...')
|
||||
unit_name = "murano/0"
|
||||
unit = self.d.sentry['murano'][0]
|
||||
juju_service = 'murano'
|
||||
|
||||
assert u.status_get(unit)[0] == "active"
|
||||
|
||||
action_id = self._run_action(unit_name, "pause")
|
||||
assert self._wait_on_action(action_id), "Pause action failed."
|
||||
assert u.status_get(unit)[0] == "maintenance"
|
||||
|
||||
# trigger config-changed to ensure that services are still stopped
|
||||
u.log.debug("Making config change on murano ...")
|
||||
self.d.configure(juju_service, {'debug': 'True'})
|
||||
assert u.status_get(unit)[0] == "maintenance"
|
||||
self.d.configure(juju_service, {'debug': 'False'})
|
||||
assert u.status_get(unit)[0] == "maintenance"
|
||||
|
||||
action_id = self._run_action(unit_name, "resume")
|
||||
assert self._wait_on_action(action_id), "Resume action failed."
|
||||
assert u.status_get(unit)[0] == "active"
|
||||
u.log.debug('OK')
|
|
@ -1,23 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright 2016 Canonical Ltd
|
||||
#
|
||||
# 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.
|
||||
|
||||
"""Amulet tests on a basic Murano Charm deployment on xenial-mitaka."""
|
||||
|
||||
from basic_deployment import MuranoBasicDeployment
|
||||
|
||||
if __name__ == '__main__':
|
||||
deployment = MuranoBasicDeployment(series='xenial')
|
||||
deployment.run_tests()
|
|
@ -1,17 +0,0 @@
|
|||
# Bootstrap the model if necessary.
|
||||
bootstrap: True
|
||||
# Re-use bootstrap node instead of destroying/re-bootstrapping.
|
||||
reset: True
|
||||
# Use tox/requirements to drive the venv instead of bundletester's venv feature.
|
||||
virtualenv: False
|
||||
# Leave makefile empty, otherwise unit/lint tests will rerun ahead of amulet.
|
||||
makefile: []
|
||||
# Do not specify juju PPA sources. Juju is presumed to be pre-installed
|
||||
# and configured in all test runner environments.
|
||||
#sources:
|
||||
# Do not specify or rely on system packages.
|
||||
#packages:
|
||||
# Do not specify python packages here. Use test-requirements.txt
|
||||
# and tox instead. ie. The venv is constructed before bundletester
|
||||
# is invoked.
|
||||
#python-packages:
|
53
src/tox.ini
53
src/tox.ini
|
@ -1,53 +0,0 @@
|
|||
# Source charm: ./src/tox.ini
|
||||
# This file is managed centrally by release-tools and should not be modified
|
||||
# within individual charm repos.
|
||||
[tox]
|
||||
envlist = pep8
|
||||
skipsdist = True
|
||||
|
||||
[testenv]
|
||||
setenv = VIRTUAL_ENV={envdir}
|
||||
PYTHONHASHSEED=0
|
||||
AMULET_SETUP_TIMEOUT=2700
|
||||
whitelist_externals = juju
|
||||
passenv = HOME TERM AMULET_*
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
install_command =
|
||||
pip install --allow-unverified python-apt {opts} {packages}
|
||||
|
||||
[testenv:pep8]
|
||||
basepython = python2.7
|
||||
commands = charm-proof
|
||||
|
||||
[testenv:func27-noop]
|
||||
# DRY RUN - For Debug
|
||||
basepython = python2.7
|
||||
commands =
|
||||
bundletester -vl DEBUG -r json -o func-results.json --test-pattern "gate-*" -n --no-destroy
|
||||
|
||||
[testenv:func27]
|
||||
# Run all gate tests which are +x (expected to always pass)
|
||||
basepython = python2.7
|
||||
commands =
|
||||
bundletester -vl DEBUG -r json -o func-results.json --test-pattern "gate-*" --no-destroy
|
||||
|
||||
[testenv:func27-smoke]
|
||||
# Run a specific test as an Amulet smoke test (expected to always pass)
|
||||
basepython = python2.7
|
||||
commands =
|
||||
bundletester -vl DEBUG -r json -o func-results.json gate-basic-xenial-mitaka --no-destroy
|
||||
|
||||
[testenv:func27-dfs]
|
||||
# Run all deploy-from-source tests which are +x (may not always pass!)
|
||||
basepython = python2.7
|
||||
commands =
|
||||
bundletester -vl DEBUG -r json -o func-results.json --test-pattern "dfs-*" --no-destroy
|
||||
|
||||
[testenv:func27-dev]
|
||||
# Run all development test targets which are +x (may not always pass!)
|
||||
basepython = python2.7
|
||||
commands =
|
||||
bundletester -vl DEBUG -r json -o func-results.json --test-pattern "dev-*" --no-destroy
|
||||
|
||||
[testenv:venv]
|
||||
commands = {posargs}
|
|
@ -1,6 +0,0 @@
|
|||
# Lint and unit test requirements
|
||||
flake8
|
||||
os-testr>=0.4.1
|
||||
charms.reactive
|
||||
mock>=1.2
|
||||
git+https://github.com/openstack/charms.openstack.git#egg=charms-openstack
|
47
tox.ini
47
tox.ini
|
@ -1,47 +0,0 @@
|
|||
# Source charm: ./tox.ini
|
||||
# This file is managed centrally by release-tools and should not be modified
|
||||
# within individual charm repos.
|
||||
[tox]
|
||||
skipsdist = True
|
||||
envlist = pep8,py34,py35
|
||||
skip_missing_interpreters = True
|
||||
|
||||
[testenv]
|
||||
setenv = VIRTUAL_ENV={envdir}
|
||||
PYTHONHASHSEED=0
|
||||
TERM=linux
|
||||
LAYER_PATH={toxinidir}/layers
|
||||
INTERFACE_PATH={toxinidir}/interfaces
|
||||
JUJU_REPOSITORY={toxinidir}/build
|
||||
passenv = http_proxy https_proxy
|
||||
install_command =
|
||||
pip install {opts} {packages}
|
||||
deps =
|
||||
-r{toxinidir}/requirements.txt
|
||||
|
||||
[testenv:build]
|
||||
basepython = python2.7
|
||||
commands =
|
||||
charm-build --log-level DEBUG -o {toxinidir}/build src {posargs}
|
||||
|
||||
[testenv:py34]
|
||||
basepython = python3.4
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands = ostestr {posargs}
|
||||
|
||||
[testenv:py35]
|
||||
basepython = python3.5
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands = ostestr {posargs}
|
||||
|
||||
[testenv:pep8]
|
||||
basepython = python2.7
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands = flake8 {posargs} src unit_tests
|
||||
|
||||
[testenv:venv]
|
||||
commands = {posargs}
|
||||
|
||||
[flake8]
|
||||
# E402 ignore necessary for path append before sys module import in actions
|
||||
ignore = E402
|
|
@ -1,22 +0,0 @@
|
|||
# Copyright 2016 Canonical Ltd
|
||||
#
|
||||
# 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 sys
|
||||
|
||||
sys.path.append('src')
|
||||
sys.path.append('src/lib')
|
||||
|
||||
# Mock out charmhelpers so that we can test without it.
|
||||
import charms_openstack.test_mocks # noqa
|
||||
charms_openstack.test_mocks.mock_charmhelpers()
|
|
@ -1,78 +0,0 @@
|
|||
# Copyright 2016 Canonical Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
|
||||
import unittest
|
||||
|
||||
import mock
|
||||
|
||||
import charm.openstack.murano as murano
|
||||
|
||||
|
||||
def FakeConfig(init_dict):
|
||||
|
||||
def _config(key=None):
|
||||
return init_dict[key] if key else init_dict
|
||||
|
||||
return _config
|
||||
|
||||
|
||||
class Helper(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self._patches = {}
|
||||
self._patches_start = {}
|
||||
self.ch_config_patch = mock.patch('charmhelpers.core.hookenv.config')
|
||||
self.ch_config = self.ch_config_patch.start()
|
||||
self.ch_config.side_effect = lambda: {'ssl_param': None}
|
||||
|
||||
def tearDown(self):
|
||||
for k, v in self._patches.items():
|
||||
v.stop()
|
||||
setattr(self, k, None)
|
||||
self._patches = None
|
||||
self._patches_start = None
|
||||
self.ch_config_patch.stop()
|
||||
|
||||
def patch(self, obj, attr, return_value=None, **kwargs):
|
||||
mocked = mock.patch.object(obj, attr, **kwargs)
|
||||
self._patches[attr] = mocked
|
||||
started = mocked.start()
|
||||
started.return_value = return_value
|
||||
self._patches_start[attr] = started
|
||||
setattr(self, attr, started)
|
||||
|
||||
def patch_object(self, obj, attr, return_value=None, name=None, new=None):
|
||||
if name is None:
|
||||
name = attr
|
||||
if new is not None:
|
||||
mocked = mock.patch.object(obj, attr, new=new)
|
||||
else:
|
||||
mocked = mock.patch.object(obj, attr)
|
||||
self._patches[name] = mocked
|
||||
started = mocked.start()
|
||||
if new is None:
|
||||
started.return_value = return_value
|
||||
self._patches_start[name] = started
|
||||
setattr(self, name, started)
|
||||
|
||||
|
||||
class TestMuranoCharm(Helper):
|
||||
|
||||
def test__init__(self):
|
||||
self.patch(murano.ch_utils, 'os_release')
|
||||
murano.MuranoCharm()
|
||||
self.os_release.assert_called_once_with('python-keystonemiddleware')
|
Loading…
Reference in New Issue