commit
dfe0795429
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
build
|
||||
layers
|
||||
.tox
|
||||
interfaces
|
||||
.testrepository
|
||||
.stestr
|
||||
*__pycache__*
|
||||
*.pyc
|
||||
*.swp
|
@ -1,5 +0,0 @@
|
||||
- project:
|
||||
templates:
|
||||
- python35-charm-jobs
|
||||
- openstack-python3-ussuri-jobs
|
||||
- openstack-cover-jobs
|
22
README.md
22
README.md
@ -1,22 +0,0 @@
|
||||
# Overview
|
||||
|
||||
This is a "source" charm, which is intended to be strictly the top
|
||||
layer of a built charm. This structure declares that any included
|
||||
layer assets are not intended to be consumed as a layer from a
|
||||
functional or design standpoint.
|
||||
|
||||
# Test and Build
|
||||
|
||||
Building, pushing and publishing to the charm store is automated
|
||||
by CI to ensure consistent flow. Manually building is useful for
|
||||
development and testing, however.
|
||||
|
||||
```
|
||||
tox -e pep8
|
||||
tox -e py35 # or py36
|
||||
tox -e build
|
||||
```
|
||||
|
||||
# Contact Information
|
||||
|
||||
Freenode IRC: #openstack-charms
|
16
copyright
Normal file
16
copyright
Normal file
@ -0,0 +1,16 @@
|
||||
Format: http://dep.debian.net/deps/dep5/
|
||||
|
||||
Files: *
|
||||
Copyright: Copyright 2021, Canonical Ltd., All Rights Reserved.
|
||||
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.
|
18
pip.sh
Executable file
18
pip.sh
Executable file
@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# This file is managed centrally by release-tools and should not be modified
|
||||
# within individual charm repos. See the 'global' dir contents for available
|
||||
# choices of tox.ini for OpenStack Charms:
|
||||
# https://github.com/openstack-charmers/release-tools
|
||||
#
|
||||
# setuptools 58.0 dropped the support for use_2to3=true which is needed to
|
||||
# install blessings (an indirect dependency of charm-tools).
|
||||
#
|
||||
# More details on the beahvior of tox and virtualenv creation can be found at
|
||||
# https://github.com/tox-dev/tox/issues/448
|
||||
#
|
||||
# This script is wrapper to force the use of the pinned versions early in the
|
||||
# process when the virtualenv was created and upgraded before installing the
|
||||
# depedencies declared in the target.
|
||||
pip install 'pip<20.3' 'setuptools<50.0.0'
|
||||
pip "$@"
|
@ -3,19 +3,20 @@
|
||||
# choices of *requirements.txt files for OpenStack Charms:
|
||||
# https://github.com/openstack-charmers/release-tools
|
||||
#
|
||||
# TODO: Distill the func test requirements from the lint/unit test
|
||||
# requirements. They are intertwined. Also, Zaza itself should specify
|
||||
# all of its own requirements and if it doesn't, fix it there.
|
||||
#
|
||||
pbr>=1.8.0,<1.9.0
|
||||
simplejson>=2.2.0
|
||||
netifaces>=0.10.4
|
||||
netaddr>=0.7.12,!=0.7.16
|
||||
Jinja2>=2.6 # BSD License (3 clause)
|
||||
six>=1.9.0
|
||||
# NOTE(lourot): This might look like a duplication of test-requirements.txt but
|
||||
# some tox targets use only test-requirements.txt whereas charm-build uses only
|
||||
# requirements.txt
|
||||
setuptools<50.0.0 # https://github.com/pypa/setuptools/commit/04e3df22df840c6bb244e9b27bc56750c44b7c85
|
||||
|
||||
# dnspython 2.0.0 dropped py3.5 support
|
||||
dnspython<2.0.0; python_version < '3.6'
|
||||
dnspython; python_version >= '3.6'
|
||||
# Build requirements
|
||||
charm-tools==2.8.3
|
||||
|
||||
psutil>=1.1.1,<2.0.0
|
||||
simplejson
|
||||
|
||||
# Newer versions use keywords that didn't exist in python 3.5 yet (e.g.
|
||||
# "ModuleNotFoundError")
|
||||
# NOTE(lourot): This might look like a duplication of test-requirements.txt but
|
||||
# some tox targets use only test-requirements.txt whereas charm-build uses only
|
||||
# requirements.txt
|
||||
importlib-metadata<3.0.0; python_version < '3.6'
|
||||
importlib-resources<3.0.0; python_version < '3.6'
|
||||
|
108
src/README.md
108
src/README.md
@ -1,19 +1,101 @@
|
||||
netapp Storage Backend for Cinder
|
||||
-------------------------------
|
||||
# Overview
|
||||
|
||||
Overview
|
||||
========
|
||||
The cinder charm is the Openstack block storage (i.e: Volume) service, whereas the cinder-netapp charm works as a subordinate of cinder, implementing a backend based on NetApp.
|
||||
|
||||
This charm provides a netapp storage backend for use with the Cinder
|
||||
charm.
|
||||
> **Note**: The cinder-netapp charm is supported starting with Openstack Queens.
|
||||
|
||||
To use:
|
||||
# Usage
|
||||
|
||||
juju deploy cinder
|
||||
juju deploy cinder-netapp
|
||||
juju add-relation cinder-netapp cinder
|
||||
## Configuration
|
||||
|
||||
Configuration
|
||||
=============
|
||||
This section covers common and/or important configuration options. See file `config.yaml` for the full list of options, along with their descriptions and default values. See the [Juju documentation][juju-docs-config-apps] for details on configuring applications.
|
||||
|
||||
See config.yaml for details of configuration options.
|
||||
### `netapp-storage-family`
|
||||
|
||||
The storage family type that is used for the storage system. Can be `ontap_cluster` for clustering data ONTAP, or `eseries`.
|
||||
|
||||
### `netapp-storage-protocol`
|
||||
|
||||
The SAN protocol to use. Can be either `iscsi` or `NFS`.
|
||||
|
||||
### `netapp-vserver`
|
||||
|
||||
Specifies the virtual storage server name on the storage cluster.
|
||||
|
||||
### `netapp-server-hostname`
|
||||
|
||||
The hostname or IP address for the storage server (can alternatively specify a proxy server).
|
||||
|
||||
### `netapp-server-port`
|
||||
|
||||
The TCP port used to communicate with the storage server or proxy.
|
||||
|
||||
If it's not specified, it will be deduced: For ONTAP drivers, it will be 80 for HTTP and 443 for HTTPS; for E-series, it will be 8080 and 8443, respectively.
|
||||
|
||||
### `netapp-login`
|
||||
|
||||
The username used to access the storage server or proxy.
|
||||
|
||||
### `netapp-password`
|
||||
|
||||
The password used to authenticate the `login` option.
|
||||
|
||||
### `netapp-nfs-shares-config`
|
||||
|
||||
Specifies a file that contains a list of NFS shares, each on its own line, to which the driver will attempt to provision
|
||||
Cinder volumes.
|
||||
|
||||
### `netapp-controller-ips`
|
||||
|
||||
If the storage family is `eseries`, this option specifies a comma-separated list of controller hostnames or IP addresses
|
||||
to be used for provisioning.
|
||||
|
||||
### `netapp-array-password`
|
||||
|
||||
The password for the NetApp E-series storage array.
|
||||
|
||||
### `netapp-storage-pools`
|
||||
|
||||
Specifies a comma-separated list of pool names to use.
|
||||
|
||||
### `use-multipath`
|
||||
|
||||
Whether to use multipath for image transfer.
|
||||
|
||||
### `netapp-enable-multiattach`
|
||||
|
||||
Specifies whether the driver should allow operations that involve multiple attachments to a volume.
|
||||
|
||||
### `volume-backend-name`
|
||||
|
||||
The service name to present to Cinder.
|
||||
|
||||
## Deployment
|
||||
|
||||
This charm's primary use is as a backend for the cinder charm. To do so, add a relation betweeen both charms:
|
||||
|
||||
juju add-relation cinder-netapp:storage-backend cinder:storage-backend
|
||||
|
||||
## Actions
|
||||
|
||||
This section lists Juju [actions][juju-docs-actions] supported by the charm. Actions allow specific operations to be performed on a per-unit basis. To display action descriptions run `juju actions --schema cinder-netapp`. If the charm is not deployed then see file `actions.yaml`.
|
||||
|
||||
* `pause`
|
||||
* `resume`
|
||||
* `restart-services`
|
||||
|
||||
# Documentation
|
||||
|
||||
The OpenStack Charms project maintains two documentation guides:
|
||||
|
||||
* [OpenStack Charm Guide][cg]: for project information, including development
|
||||
and support notes
|
||||
* [OpenStack Charms Deployment Guide][cdg]: for charm usage information
|
||||
|
||||
# Bugs
|
||||
|
||||
Please report bugs on [Launchpad][lp-bugs-charm-cinder-netapp].
|
||||
|
||||
[cg]: https://docs.openstack.org/charm-guide
|
||||
[cdg]: https://docs.openstack.org/project-deploy-guide/charm-deployment-guide
|
||||
[lp-bugs-charm-cinder-netapp]: https://bugs.launchpad.net/charm-cinder-netapp/+filebug
|
||||
|
@ -1,24 +1,11 @@
|
||||
"includes":
|
||||
- "layer:options"
|
||||
- "layer:basic"
|
||||
- "interface:tls-certificates"
|
||||
- "layer:openstack"
|
||||
- "interface:cinder-backend"
|
||||
"exclude": [".travis.yml", "tests", "tox.ini", "test-requirements.txt", "unit_tests",
|
||||
".gitignore", ".gitreview", ".zuul.yaml", "README.md", "requirements.txt"]
|
||||
"options":
|
||||
"basic":
|
||||
"use_venv": !!bool "true"
|
||||
"packages": []
|
||||
"python_packages": []
|
||||
"include_system_packages": !!bool "false"
|
||||
"openstack": {}
|
||||
"cinder-netapp": {}
|
||||
"repo": "https://github.com/openstack-charmers/cinder-storage-backend-template"
|
||||
"config":
|
||||
"deletes":
|
||||
- "debug"
|
||||
- "verbose"
|
||||
- "use-syslog"
|
||||
- "use-internal-endpoints"
|
||||
"is": "cinder-netapp"
|
||||
includes: ['layer:openstack', 'interface:cinder-backend']
|
||||
config:
|
||||
deletes:
|
||||
- debug
|
||||
- verbose
|
||||
- use-syslog
|
||||
- use-internal-endpoints
|
||||
- ssl_ca
|
||||
- ssl_cert
|
||||
- ssl_key
|
||||
repo: https://github.com/lmlg/charm-cinder-netapp
|
||||
|
@ -1,3 +1,18 @@
|
||||
# Copyright 2021 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
|
||||
|
||||
charms_openstack.charm.use_defaults('charm.default-select-release')
|
||||
@ -14,42 +29,45 @@ class CinderNetAppCharm(
|
||||
stateless = True
|
||||
# Specify any config that the user *must* set.
|
||||
mandatory_config = [
|
||||
'netapp-storage-family', 'netapp-storage-protocol', 'netapp-server-hostname',
|
||||
'volume-backend-name']
|
||||
'netapp-storage-family', 'netapp-storage-protocol',
|
||||
'netapp-server-hostname', 'volume-backend-name']
|
||||
|
||||
def cinder_configuration(self):
|
||||
service = self.config.get('volume-backend-name')
|
||||
cget = self.config.get
|
||||
service = cget('volume-backend-name')
|
||||
volumedriver = 'cinder.volume.drivers.netapp.common.NetAppDriver'
|
||||
driver_options_extension = []
|
||||
driver_transport = []
|
||||
driver_options_common = [
|
||||
('netapp_storage_family', self.config.get('netapp-storage-family')),
|
||||
('netapp_storage_protocol', self.config.get('netapp-storage-protocol')),
|
||||
('netapp_vserver', self.config.get('netapp-vserver')),
|
||||
('netapp_server_hostname', self.config.get('netapp-server-hostname')),
|
||||
('netapp_server_port', self.config.get('netapp-server-port')),
|
||||
('use_multipath_for_image_xfer', self.config.get('use-multipath')),
|
||||
('netapp_login', self.config.get('netapp-login')),
|
||||
('netapp_password', self.config.get('netapp-password')),
|
||||
('netapp_storage_family', cget('netapp-storage-family')),
|
||||
('netapp_storage_protocol', cget('netapp-storage-protocol')),
|
||||
('netapp_vserver', cget('netapp-vserver')),
|
||||
('netapp_server_hostname', cget('netapp-server-hostname')),
|
||||
('netapp_server_port', cget('netapp-server-port')),
|
||||
('use_multipath_for_image_xfer', cget('use-multipath')),
|
||||
('netapp_login', cget('netapp-login')),
|
||||
('netapp_password', cget('netapp-password')),
|
||||
('volume_driver', volumedriver),
|
||||
('volume_backend_name', service)]
|
||||
|
||||
if self.config.get('netapp-server-port') == 443:
|
||||
if cget('netapp-server-port') == 443:
|
||||
driver_transport = [
|
||||
('netapp_transport_type', "https")]
|
||||
|
||||
if self.config.get('netapp-storage-family') == "eseries":
|
||||
if cget('netapp-storage-family') == "eseries":
|
||||
driver_options_extension = [
|
||||
('netapp_controller_ips', self.config.get('netapp-controller-ips')),
|
||||
('netapp_sa_password', self.config.get('netapp-array-password')),
|
||||
('netapp_storage_pools', self.config.get('netapp-storage-pools')),
|
||||
('use_multipath_for_image_xfer', self.config.get('use-multipath'))]
|
||||
('netapp_controller_ips', cget('netapp-controller-ips')),
|
||||
('netapp_sa_password', cget('netapp-array-password')),
|
||||
('netapp_storage_pools', cget('netapp-storage-pools')),
|
||||
('use_multipath_for_image_xfer', cget('use-multipath'))]
|
||||
|
||||
if self.config.get('netapp-storage-protocol') == "nfs":
|
||||
if cget('netapp-storage-protocol') == "nfs":
|
||||
driver_options_extension = [
|
||||
('nfs_shares_config', self.config.get('netapp-nfs-shares-config'))]
|
||||
('nfs_shares_config', cget('netapp-nfs-shares-config'))]
|
||||
|
||||
return driver_options_common + driver_transport + \
|
||||
driver_options_extension
|
||||
|
||||
return driver_options_common + driver_transport + driver_options_extension
|
||||
|
||||
class CinderNetAppCharmRocky(CinderNetAppCharm):
|
||||
|
||||
@ -57,4 +75,3 @@ class CinderNetAppCharmRocky(CinderNetAppCharm):
|
||||
release = 'rocky'
|
||||
version_package = 'cinder-common'
|
||||
packages = []
|
||||
|
||||
|
@ -13,6 +13,9 @@ tags:
|
||||
series:
|
||||
- bionic
|
||||
- focal
|
||||
- groovy
|
||||
- hirsute
|
||||
- impish
|
||||
subordinate: true
|
||||
provides:
|
||||
storage-backend:
|
||||
|
@ -1,3 +1,9 @@
|
||||
# zaza
|
||||
# This file is managed centrally by release-tools and should not be modified
|
||||
# within individual charm repos. See the 'global' dir contents for available
|
||||
# choices of *requirements.txt files for OpenStack Charms:
|
||||
# https://github.com/openstack-charmers/release-tools
|
||||
#
|
||||
|
||||
# Functional Test Requirements (let Zaza's dependencies solve all dependencies here!)
|
||||
git+https://github.com/openstack-charmers/zaza.git#egg=zaza
|
||||
git+https://github.com/openstack-charmers/zaza-openstack-tests.git#egg=zaza.openstack
|
||||
|
52
src/tests/bundles/bionic-queens.yaml
Normal file
52
src/tests/bundles/bionic-queens.yaml
Normal file
@ -0,0 +1,52 @@
|
||||
series: bionic
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
'2':
|
||||
constraints: mem=4G root-disk=16G
|
||||
'3':
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql:
|
||||
charm: cs:~openstack-charmers-next/percona-cluster
|
||||
num_units: 1
|
||||
to:
|
||||
- '0'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
num_units: 1
|
||||
to:
|
||||
- '1'
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
num_units: 1
|
||||
options:
|
||||
block-device: /dev/vdb
|
||||
overwrite: "true"
|
||||
ephemeral-unmount: /mnt
|
||||
to:
|
||||
- '2'
|
||||
cinder-netapp:
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
to:
|
||||
- '3'
|
55
src/tests/bundles/bionic-rocky.yaml
Normal file
55
src/tests/bundles/bionic-rocky.yaml
Normal file
@ -0,0 +1,55 @@
|
||||
series: bionic
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
'2':
|
||||
constraints: mem=4G root-disk=16G
|
||||
'3':
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql:
|
||||
charm: cs:~openstack-charmers-next/percona-cluster
|
||||
num_units: 1
|
||||
to:
|
||||
- '0'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
options:
|
||||
openstack-origin: cloud:bionic-rocky
|
||||
num_units: 1
|
||||
to:
|
||||
- '1'
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: cloud:bionic-rocky
|
||||
block-device: /dev/vdb
|
||||
overwrite: "true"
|
||||
ephemeral-unmount: /mnt
|
||||
to:
|
||||
- '2'
|
||||
cinder-netapp:
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
to:
|
||||
- '3'
|
55
src/tests/bundles/bionic-stein.yaml
Normal file
55
src/tests/bundles/bionic-stein.yaml
Normal file
@ -0,0 +1,55 @@
|
||||
series: bionic
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
'2':
|
||||
constraints: mem=4G root-disk=16G
|
||||
'3':
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql:
|
||||
charm: cs:~openstack-charmers-next/percona-cluster
|
||||
num_units: 1
|
||||
to:
|
||||
- '0'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
options:
|
||||
openstack-origin: cloud:bionic-stein
|
||||
num_units: 1
|
||||
to:
|
||||
- '1'
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: cloud:bionic-stein
|
||||
block-device: /dev/vdb
|
||||
overwrite: "true"
|
||||
ephemeral-unmount: /mnt
|
||||
to:
|
||||
- '2'
|
||||
cinder-netapp:
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
to:
|
||||
- '3'
|
56
src/tests/bundles/bionic-train.yaml
Normal file
56
src/tests/bundles/bionic-train.yaml
Normal file
@ -0,0 +1,56 @@
|
||||
series: bionic
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
'2':
|
||||
constraints: mem=4G root-disk=16G
|
||||
'3':
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql:
|
||||
charm: cs:~openstack-charmers-next/percona-cluster
|
||||
num_units: 1
|
||||
to:
|
||||
- '0'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
options:
|
||||
openstack-origin: cloud:bionic-train
|
||||
num_units: 1
|
||||
to:
|
||||
- '1'
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
num_units: 1
|
||||
storage:
|
||||
block-devices: '40G'
|
||||
options:
|
||||
openstack-origin: cloud:bionic-train
|
||||
block-device: None
|
||||
overwrite: "true"
|
||||
to:
|
||||
- '2'
|
||||
cinder-netapp:
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
to:
|
||||
- '3'
|
@ -6,6 +6,7 @@ machines:
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
'2':
|
||||
constraints: mem=4G root-disk=16G
|
||||
'3':
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
@ -26,23 +27,29 @@ applications:
|
||||
- '0'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: cloud:bionic-ussuri
|
||||
num_units: 1
|
||||
to:
|
||||
- '1'
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
num_units: 1
|
||||
storage:
|
||||
block-devices: '40G'
|
||||
options:
|
||||
openstack-origin: cloud:bionic-ussuri
|
||||
block-device: None
|
||||
overwrite: "true"
|
||||
ephemeral-unmount: /mnt
|
||||
to:
|
||||
- '2'
|
||||
cinder-netapp:
|
||||
series: bionic
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
# Add config options here
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
|
@ -1,59 +1,76 @@
|
||||
series: focal
|
||||
variables:
|
||||
openstack-origin: &openstack-origin distro
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
constraints: mem=3072M
|
||||
'2':
|
||||
constraints: mem=3072M
|
||||
'3':
|
||||
'4':
|
||||
'5':
|
||||
constraints: mem=4G root-disk=16G
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
- - keystone:shared-db
|
||||
- keystone-mysql-router:shared-db
|
||||
- - keystone-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:shared-db
|
||||
- cinder-mysql-router:shared-db
|
||||
- - cinder-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql:
|
||||
charm: cs:~openstack-charmers-next/percona-cluster
|
||||
num_units: 1
|
||||
mysql-innodb-cluster:
|
||||
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
||||
num_units: 3
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '0'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
- '0'
|
||||
- '1'
|
||||
- '2'
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: distro
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '1'
|
||||
- '3'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers/keystone
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
num_units: 1
|
||||
to:
|
||||
- '4'
|
||||
keystone-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
num_units: 1
|
||||
storage:
|
||||
block-devices: '40G'
|
||||
options:
|
||||
openstack-origin: distro
|
||||
openstack-origin: *openstack-origin
|
||||
block-device: None
|
||||
overwrite: "true"
|
||||
to:
|
||||
- '2'
|
||||
- '5'
|
||||
cinder-netapp:
|
||||
series: focal
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
netapp-vserver: 'hou-cloud'
|
||||
netapp-server-hostname: '10.10.10.10'
|
||||
volume-backend-name: cinder-netapp
|
||||
netapp-server-port: 80
|
||||
netapp-login: admin
|
||||
netapp-password: Passw0rd
|
||||
use-multipath: True
|
||||
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
to:
|
||||
- '3'
|
||||
volume-backend-name: NETAPP
|
||||
cinder-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
||||
|
@ -1,58 +1,76 @@
|
||||
series: focal
|
||||
variables:
|
||||
openstack-origin: &openstack-origin cloud:focal-victoria
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
constraints: mem=3072M
|
||||
'2':
|
||||
constraints: mem=3072M
|
||||
'3':
|
||||
'4':
|
||||
'5':
|
||||
constraints: mem=4G root-disk=16G
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:shared-db
|
||||
- mysql:shared-db
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
- - keystone:shared-db
|
||||
- keystone-mysql-router:shared-db
|
||||
- - keystone-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:shared-db
|
||||
- cinder-mysql-router:shared-db
|
||||
- - cinder-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql:
|
||||
charm: cs:~openstack-charmers-next/percona-cluster
|
||||
num_units: 1
|
||||
mysql-innodb-cluster:
|
||||
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
||||
num_units: 3
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '0'
|
||||
- '0'
|
||||
- '1'
|
||||
- '2'
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '3'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: distro
|
||||
openstack-origin: *openstack-origin
|
||||
num_units: 1
|
||||
to:
|
||||
- '1'
|
||||
- '4'
|
||||
keystone-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
storage:
|
||||
block-devices: '40G'
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: distro
|
||||
openstack-origin: *openstack-origin
|
||||
block-device: None
|
||||
overwrite: "true"
|
||||
to:
|
||||
- '2'
|
||||
- '5'
|
||||
cinder-netapp:
|
||||
series: focal
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
netapp-vserver: 'hou-cloud'
|
||||
netapp-server-hostname: '10.10.10.10'
|
||||
volume-backend-name: cinder-netapp
|
||||
netapp-server-port: 80
|
||||
netapp-login: admin
|
||||
netapp-password: Passw0rd
|
||||
use-multipath: True
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
to:
|
||||
- '3'
|
||||
volume-backend-name: NETAPP
|
||||
cinder-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
||||
|
76
src/tests/bundles/focal-wallaby.yaml
Normal file
76
src/tests/bundles/focal-wallaby.yaml
Normal file
@ -0,0 +1,76 @@
|
||||
series: focal
|
||||
variables:
|
||||
openstack-origin: &openstack-origin cloud:focal-wallaby
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
constraints: mem=3072M
|
||||
'2':
|
||||
constraints: mem=3072M
|
||||
'3':
|
||||
'4':
|
||||
'5':
|
||||
constraints: mem=4G root-disk=16G
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- keystone-mysql-router:shared-db
|
||||
- - keystone-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:shared-db
|
||||
- cinder-mysql-router:shared-db
|
||||
- - cinder-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql-innodb-cluster:
|
||||
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
||||
num_units: 3
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '0'
|
||||
- '1'
|
||||
- '2'
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '3'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
num_units: 1
|
||||
to:
|
||||
- '4'
|
||||
keystone-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
storage:
|
||||
block-devices: '40G'
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
block-device: None
|
||||
overwrite: "true"
|
||||
to:
|
||||
- '5'
|
||||
cinder-netapp:
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
cinder-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
76
src/tests/bundles/focal-xena.yaml
Normal file
76
src/tests/bundles/focal-xena.yaml
Normal file
@ -0,0 +1,76 @@
|
||||
series: focal
|
||||
variables:
|
||||
openstack-origin: &openstack-origin cloud:focal-xena
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
constraints: mem=3072M
|
||||
'2':
|
||||
constraints: mem=3072M
|
||||
'3':
|
||||
'4':
|
||||
'5':
|
||||
constraints: mem=4G root-disk=16G
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- keystone-mysql-router:shared-db
|
||||
- - keystone-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:shared-db
|
||||
- cinder-mysql-router:shared-db
|
||||
- - cinder-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql-innodb-cluster:
|
||||
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
||||
num_units: 3
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '0'
|
||||
- '1'
|
||||
- '2'
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '3'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
num_units: 1
|
||||
to:
|
||||
- '4'
|
||||
keystone-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
storage:
|
||||
block-devices: '40G'
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
block-device: None
|
||||
overwrite: "true"
|
||||
to:
|
||||
- '5'
|
||||
cinder-netapp:
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
cinder-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
76
src/tests/bundles/groovy-victoria.yaml
Normal file
76
src/tests/bundles/groovy-victoria.yaml
Normal file
@ -0,0 +1,76 @@
|
||||
series: groovy
|
||||
variables:
|
||||
openstack-origin: &openstack-origin distro
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
constraints: mem=3072M
|
||||
'2':
|
||||
constraints: mem=3072M
|
||||
'3':
|
||||
'4':
|
||||
'5':
|
||||
constraints: mem=4G root-disk=16G
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- keystone-mysql-router:shared-db
|
||||
- - keystone-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:shared-db
|
||||
- cinder-mysql-router:shared-db
|
||||
- - cinder-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql-innodb-cluster:
|
||||
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
||||
num_units: 3
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '0'
|
||||
- '1'
|
||||
- '2'
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '3'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
num_units: 1
|
||||
to:
|
||||
- '4'
|
||||
keystone-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
storage:
|
||||
block-devices: '40G'
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
block-device: None
|
||||
overwrite: "true"
|
||||
to:
|
||||
- '5'
|
||||
cinder-netapp:
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
cinder-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
76
src/tests/bundles/hirsute-wallaby.yaml
Normal file
76
src/tests/bundles/hirsute-wallaby.yaml
Normal file
@ -0,0 +1,76 @@
|
||||
series: hirsute
|
||||
variables:
|
||||
openstack-origin: &openstack-origin distro
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
constraints: mem=3072M
|
||||
'2':
|
||||
constraints: mem=3072M
|
||||
'3':
|
||||
'4':
|
||||
'5':
|
||||
constraints: mem=4G root-disk=16G
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- keystone-mysql-router:shared-db
|
||||
- - keystone-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:shared-db
|
||||
- cinder-mysql-router:shared-db
|
||||
- - cinder-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql-innodb-cluster:
|
||||
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
||||
num_units: 3
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '0'
|
||||
- '1'
|
||||
- '2'
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '3'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
num_units: 1
|
||||
to:
|
||||
- '4'
|
||||
keystone-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
storage:
|
||||
block-devices: '40G'
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
block-device: None
|
||||
overwrite: "true"
|
||||
to:
|
||||
- '5'
|
||||
cinder-netapp:
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
cinder-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
76
src/tests/bundles/impish-xena.yaml
Normal file
76
src/tests/bundles/impish-xena.yaml
Normal file
@ -0,0 +1,76 @@
|
||||
series: impish
|
||||
variables:
|
||||
openstack-origin: &openstack-origin distro
|
||||
comment:
|
||||
- 'machines section to decide order of deployment. database sooner = faster'
|
||||
machines:
|
||||
'0':
|
||||
constraints: mem=3072M
|
||||
'1':
|
||||
constraints: mem=3072M
|
||||
'2':
|
||||
constraints: mem=3072M
|
||||
'3':
|
||||
'4':
|
||||
'5':
|
||||
constraints: mem=4G root-disk=16G
|
||||
relations:
|
||||
- - keystone:shared-db
|
||||
- keystone-mysql-router:shared-db
|
||||
- - keystone-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:shared-db
|
||||
- cinder-mysql-router:shared-db
|
||||
- - cinder-mysql-router:db-router
|
||||
- mysql-innodb-cluster:db-router
|
||||
- - cinder:identity-service
|
||||
- keystone:identity-service
|
||||
- - cinder:amqp
|
||||
- rabbitmq-server:amqp
|
||||
- - cinder:storage-backend
|
||||
- cinder-netapp:storage-backend
|
||||
applications:
|
||||
mysql-innodb-cluster:
|
||||
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
||||
num_units: 3
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '0'
|
||||
- '1'
|
||||
- '2'
|
||||
rabbitmq-server:
|
||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||
num_units: 1
|
||||
options:
|
||||
source: *openstack-origin
|
||||
to:
|
||||
- '3'
|
||||
keystone:
|
||||
charm: cs:~openstack-charmers-next/keystone
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
num_units: 1
|
||||
to:
|
||||
- '4'
|
||||
keystone-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
||||
cinder:
|
||||
charm: cs:~openstack-charmers-next/cinder
|
||||
storage:
|
||||
block-devices: '40G'
|
||||
num_units: 1
|
||||
options:
|
||||
openstack-origin: *openstack-origin
|
||||
block-device: None
|
||||
overwrite: "true"
|
||||
to:
|
||||
- '5'
|
||||
cinder-netapp:
|
||||
charm: cinder-netapp
|
||||
options:
|
||||
netapp-storage-family: ontap_cluster
|
||||
netapp-storage-protocol: iscsi
|
||||
volume-backend-name: NETAPP
|
||||
cinder-mysql-router:
|
||||
charm: cs:~openstack-charmers-next/mysql-router
|
8
src/tests/bundles/overlays/local-charm-overlay.yaml.j2
Normal file
8
src/tests/bundles/overlays/local-charm-overlay.yaml.j2
Normal file
@ -0,0 +1,8 @@
|
||||
applications:
|
||||
cinder-netapp:
|
||||
options:
|
||||
netapp-vserver: {{ NETAPP_VSERVER }}
|
||||
netapp-server-hostname: {{ NETAPP_SERVER_HOSTNAME }}
|
||||
netapp-server-port: {{ NETAPP_SERVER_PORT }}
|
||||
netapp-login: {{ NETAPP_LOGIN }}
|
||||
netapp-password: {{ NETAPP_PASSWORD }}
|
@ -1,9 +1,24 @@
|
||||
charm_name: cinder-netapp
|
||||
tests:
|
||||
- tests.tests_cinder_netapp.CindernetappTest
|
||||
- zaza.openstack.charm_tests.cinder_netapp.tests.CinderNetAppTest
|
||||
configure:
|
||||
- zaza.openstack.charm_tests.keystone.setup.add_demo_user
|
||||
gate_bundles:
|
||||
- xenial-stein
|
||||
- bionic-queens
|
||||
- bionic-rocky
|
||||
- bionic-stein
|
||||
- bionic-train
|
||||
- bionic-ussuri
|
||||
- focal-ussuri
|
||||
- focal-victoria
|
||||
- focal-wallaby
|
||||
- focal-xena
|
||||
- groovy-victoria
|
||||
- hirsute-wallaby
|
||||
smoke_bundles:
|
||||
- xenial-stein
|
||||
- bionic-ussuri
|
||||
dev_bundles:
|
||||
- impish-xena
|
||||
test_options:
|
||||
force_deploy:
|
||||
- impish-xena
|
||||
|
@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright 2019 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.
|
||||
|
||||
"""Encapsulate cinder-netapp testing."""
|
||||
|
||||
import logging
|
||||
import uuid
|
||||
|
||||
import zaza.model
|
||||
import zaza.openstack.charm_tests.test_utils as test_utils
|
||||
import zaza.openstack.utilities.openstack as openstack_utils
|
||||
|
||||
|
||||
class CindernetappTest(test_utils.OpenStackBaseTest):
|
||||
"""Encapsulate netapp tests."""
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
"""Run class setup for running tests."""
|
||||
super(CindernetappTest, cls).setUpClass()
|
||||
cls.keystone_session = openstack_utils.get_overcloud_keystone_session()
|
||||
cls.model_name = zaza.model.get_juju_model()
|
||||
cls.cinder_client = openstack_utils.get_cinder_session_client(
|
||||
cls.keystone_session)
|
||||
|
||||
def test_cinder_config(self):
|
||||
logging.info('netapp')
|
||||
expected_contents = {
|
||||
'cinder-netapp': {
|
||||
'iscsi_helper': ['tgtadm'],
|
||||
'volume_dd_blocksize': ['512']}}
|
||||
|
||||
zaza.model.run_on_leader(
|
||||
'cinder',
|
||||
'sudo cp /etc/cinder/cinder.conf /tmp/',
|
||||
model_name=self.model_name)
|
||||
zaza.model.block_until_oslo_config_entries_match(
|
||||
'cinder',
|
||||
'/tmp/cinder.conf',
|
||||
expected_contents,
|
||||
model_name=self.model_name,
|
||||
timeout=2)
|
||||
|
||||
def test_create_volume(self):
|
||||
test_vol_name = "zaza{}".format(uuid.uuid1().fields[0])
|
||||
vol_new = self.cinder_client.volumes.create(
|
||||
name=test_vol_name,
|
||||
size=2)
|
||||
openstack_utils.resource_reaches_status(
|
||||
self.cinder_client.volumes,
|
||||
vol_new.id,
|
||||
expected_status='available')
|
||||
test_vol = self.cinder_client.volumes.find(name=test_vol_name)
|
||||
self.assertEqual(
|
||||
getattr(test_vol, 'os-vol-host-attr:host').split('#')[0],
|
||||
'cinder@cinder-netapp')
|
||||
self.cinder_client.volumes.delete(vol_new)
|
34
src/tox.ini
34
src/tox.ini
@ -1,25 +1,46 @@
|
||||
# Source charm (with zaza): ./src/tox.ini
|
||||
# This file is managed centrally by release-tools and should not be modified
|
||||
# within individual charm repos. See the 'global' dir contents for available
|
||||
# choices of tox.ini for OpenStack Charms:
|
||||
# https://github.com/openstack-charmers/release-tools
|
||||
|
||||
[tox]
|
||||
envlist = pep8
|
||||
skipsdist = True
|
||||
# NOTE: Avoid build/test env pollution by not enabling sitepackages.
|
||||
sitepackages = False
|
||||
# NOTE: Avoid false positives by not skipping missing interpreters.
|
||||
skip_missing_interpreters = False
|
||||
# NOTES:
|
||||
# * We avoid the new dependency resolver by pinning pip < 20.3, see
|
||||
# https://github.com/pypa/pip/issues/9187
|
||||
# * Pinning dependencies requires tox >= 3.2.0, see
|
||||
# https://tox.readthedocs.io/en/latest/config.html#conf-requires
|
||||
# * It is also necessary to pin virtualenv as a newer virtualenv would still
|
||||
# lead to fetching the latest pip in the func* tox targets, see
|
||||
# https://stackoverflow.com/a/38133283
|
||||
requires = pip < 20.3
|
||||
virtualenv < 20.0
|
||||
# NOTE: https://wiki.canonical.com/engineering/OpenStack/InstallLatestToxOnOsci
|
||||
minversion = 3.18.0
|
||||
|
||||
[testenv]
|
||||
setenv = VIRTUAL_ENV={envdir}
|
||||
PYTHONHASHSEED=0
|
||||
whitelist_externals = juju
|
||||
passenv = HOME TERM CS_API_* OS_* AMULET_*
|
||||
allowlist_externals = juju
|
||||
passenv = HOME TERM CS_* OS_* TEST_*
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
install_command =
|
||||
pip install {opts} {packages}
|
||||
|
||||
[testenv:pep8]
|
||||
basepython = python3
|
||||
deps=charm-tools
|
||||
commands = charm-proof
|
||||
|
||||
[testenv:func-noop]
|
||||
basepython = python3
|
||||
commands =
|
||||
true
|
||||
functest-run-suite --help
|
||||
|
||||
[testenv:func]
|
||||
basepython = python3
|
||||
@ -31,5 +52,10 @@ basepython = python3
|
||||
commands =
|
||||
functest-run-suite --keep-model --smoke
|
||||
|
||||
[testenv:func-target]
|
||||
basepython = python3
|
||||
commands =
|
||||
functest-run-suite --keep-model --bundle {posargs}
|
||||
|
||||
[testenv:venv]
|
||||
commands = {posargs}
|
||||
|
@ -1,2 +1,3 @@
|
||||
#layer-basic uses wheelhouse to install python dependencies
|
||||
psutil
|
||||
psutil
|
||||
git+https://github.com/juju/charm-helpers.git#egg=charmhelpers
|
||||
|
@ -3,16 +3,49 @@
|
||||
# choices of *requirements.txt files for OpenStack Charms:
|
||||
# https://github.com/openstack-charmers/release-tools
|
||||
#
|
||||
# TODO: Distill the func test requirements from the lint/unit test
|
||||
# requirements. They are intertwined. Also, Zaza itself should specify
|
||||
# all of its own requirements and if it doesn't, fix it there.
|
||||
#
|
||||
charm-tools>=2.4.4
|
||||
requests>=2.18.4
|
||||
mock>=1.2
|
||||
flake8>=2.2.4,<=2.4.1
|
||||
setuptools<50.0.0 # https://github.com/pypa/setuptools/commit/04e3df22df840c6bb244e9b27bc56750c44b7c85
|
||||
|
||||
stestr>=2.2.0
|
||||
coverage>=4.5.2
|
||||
pyudev # for ceph-* charm unit tests (need to fix the ceph-* charm unit tests/mocking)
|
||||
git+https://github.com/openstack-charmers/zaza.git#egg=zaza;python_version>='3.0'
|
||||
git+https://github.com/openstack-charmers/zaza-openstack-tests.git#egg=zaza.openstack
|
||||
|
||||
# Dependency of stestr. Workaround for
|
||||
# https://github.com/mtreinish/stestr/issues/145
|
||||
cliff<3.0.0
|
||||
|
||||
# Dependencies of stestr. Newer versions use keywords that didn't exist in
|
||||
# python 3.5 yet (e.g. "ModuleNotFoundError")
|
||||
importlib-metadata<3.0.0; python_version < '3.6'
|
||||
importlib-resources<3.0.0; python_version < '3.6'
|
||||
|
||||
# Some Zuul nodes sometimes pull newer versions of these dependencies which
|
||||
# dropped support for python 3.5:
|
||||
osprofiler<2.7.0;python_version<'3.6'
|
||||
stevedore<1.31.0;python_version<'3.6'
|
||||
debtcollector<1.22.0;python_version<'3.6'
|
||||
oslo.utils<=3.41.0;python_version<'3.6'
|
||||
|
||||
requests>=2.18.4
|
||||
charms.reactive
|
||||
|
||||
# Newer mock seems to have some syntax which is newer than python3.5 (e.g.
|
||||
# f'{something}'
|
||||
mock>=1.2,<4.0.0; python_version < '3.6'
|
||||
mock>=1.2; python_version >= '3.6'
|
||||
|
||||
nose>=1.3.7
|
||||
coverage>=3.6
|
||||
git+https://github.com/openstack/charms.openstack.git#egg=charms.openstack
|
||||
#
|
||||
# Revisit for removal / mock improvement:
|
||||
#
|
||||
# NOTE(lourot): newer versions of cryptography require a Rust compiler to build,
|
||||
# see
|
||||
# * https://github.com/openstack-charmers/zaza/issues/421
|
||||
# * https://mail.python.org/pipermail/cryptography-dev/2021-January/001003.html
|
||||
#
|
||||
netifaces # vault
|
||||
psycopg2-binary # vault
|
||||
tenacity # vault
|
||||
pbr==5.6.0 # vault
|
||||
cryptography<3.4 # vault, keystone-saml-mellon
|
||||
lxml # keystone-saml-mellon
|
||||
hvac # vault, barbican-vault
|
||||
|
124
tox.ini
124
tox.ini
@ -1,62 +1,85 @@
|
||||
# Classic charm (with zaza): ./tox.ini
|
||||
# Source charm: ./tox.ini
|
||||
# This file is managed centrally by release-tools and should not be modified
|
||||
# within individual charm repos. See the 'global' dir contents for available
|
||||
# choices of tox.ini for OpenStack Charms:
|
||||
# https://github.com/openstack-charmers/release-tools
|
||||
#
|
||||
# TODO: Distill the func test requirements from the lint/unit test
|
||||
# requirements. They are intertwined. Also, Zaza itself should specify
|
||||
# all of its own requirements and if it doesn't, fix it there.
|
||||
|
||||
[tox]
|
||||
envlist = pep8,py3
|
||||
skipsdist = True
|
||||
envlist = pep8,py3
|
||||
# NOTE: Avoid build/test env pollution by not enabling sitepackages.
|
||||
sitepackages = False
|
||||
# NOTE: Avoid false positives by not skipping missing interpreters.
|
||||
skip_missing_interpreters = False
|
||||
# NOTES:
|
||||
# * We avoid the new dependency resolver by pinning pip < 20.3, see
|
||||
# https://github.com/pypa/pip/issues/9187
|
||||
# * Pinning dependencies requires tox >= 3.2.0, see
|
||||
# https://tox.readthedocs.io/en/latest/config.html#conf-requires
|
||||
# * It is also necessary to pin virtualenv as a newer virtualenv would still
|
||||
# lead to fetching the latest pip in the func* tox targets, see
|
||||
# https://stackoverflow.com/a/38133283
|
||||
requires =
|
||||
pip < 20.3
|
||||
virtualenv < 20.0
|
||||
setuptools<50.0.0
|
||||
|
||||
# NOTE: https://wiki.canonical.com/engineering/OpenStack/InstallLatestToxOnOsci
|
||||
minversion = 3.18.0
|
||||
|
||||
[testenv]
|
||||
setenv = VIRTUAL_ENV={envdir}
|
||||
PYTHONHASHSEED=0
|
||||
CHARM_DIR={envdir}
|
||||
TERM=linux
|
||||
LAYER_PATH={toxinidir}/layers
|
||||
INTERFACE_PATH={toxinidir}/interfaces
|
||||
JUJU_REPOSITORY={toxinidir}/build
|
||||
passenv = http_proxy https_proxy INTERFACE_PATH LAYER_PATH JUJU_REPOSITORY
|
||||
install_command =
|
||||
pip install {opts} {packages}
|
||||
commands = stestr run --slowest {posargs}
|
||||
whitelist_externals = juju
|
||||
passenv = HOME TERM CS_* OS_* TEST_*
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
{toxinidir}/pip.sh install {opts} {packages}
|
||||
deps =
|
||||
-r{toxinidir}/requirements.txt
|
||||
|
||||
[testenv:py35]
|
||||
basepython = python3.5
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
[testenv:build]
|
||||
basepython = python3
|
||||
commands =
|
||||
charm-build --log-level DEBUG --use-lock-file-branches -o {toxinidir}/build/builds src {posargs}
|
||||
|
||||
[testenv:py36]
|
||||
basepython = python3.6
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
|
||||
[testenv:py37]
|
||||
basepython = python3.7
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
|
||||
[testenv:py38]
|
||||
basepython = python3.8
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
[testenv:add-build-lock-file]
|
||||
basepython = python3
|
||||
commands =
|
||||
charm-build --log-level DEBUG --write-lock-file -o {toxinidir}/build/builds src {posargs}
|
||||
|
||||
[testenv:py3]
|
||||
basepython = python3
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands = stestr run --slowest {posargs}
|
||||
|
||||
[testenv:py35]
|
||||
basepython = python3.5
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands = stestr run --slowest {posargs}
|
||||
|
||||
[testenv:py36]
|
||||
basepython = python3.6
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands = stestr run --slowest {posargs}
|
||||
|
||||
[testenv:py37]
|
||||
basepython = python3.7
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands = stestr run --slowest {posargs}
|
||||
|
||||
[testenv:py38]
|
||||
basepython = python3.8
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands = stestr run --slowest {posargs}
|
||||
|
||||
[testenv:pep8]
|
||||
basepython = python3
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
commands = flake8 {posargs} hooks unit_tests tests actions lib files
|
||||
charm-proof
|
||||
deps = flake8==3.9.2
|
||||
charm-tools==2.8.3
|
||||
commands = flake8 {posargs} src unit_tests
|
||||
|
||||
[testenv:cover]
|
||||
# Technique based heavily upon
|
||||
@ -90,31 +113,6 @@ omit =
|
||||
basepython = python3
|
||||
commands = {posargs}
|
||||
|
||||
[testenv:func-noop]
|
||||
basepython = python3
|
||||
commands =
|
||||
functest-run-suite --help
|
||||
|
||||
[testenv:func]
|
||||
basepython = python3
|
||||
commands =
|
||||
functest-run-suite --keep-model
|
||||
|
||||
[testenv:func-smoke]
|
||||
basepython = python3
|
||||
commands =
|
||||
functest-run-suite --keep-model --smoke
|
||||
|
||||
[testenv:func-dev]
|
||||
basepython = python3
|
||||
commands =
|
||||
functest-run-suite --keep-model --dev
|
||||
|
||||
[testenv:func-target]
|
||||
basepython = python3
|
||||
commands =
|
||||
functest-run-suite --keep-model --bundle {posargs}
|
||||
|
||||
[flake8]
|
||||
ignore = E402,E226
|
||||
exclude = */charmhelpers
|
||||
# E402 ignore necessary for path append before sys module import in actions
|
||||
ignore = E402,W503,W504
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright 2016 Canonical Ltd
|
||||
# Copyright 2021 Canonical Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@ -36,13 +36,45 @@ class TestCinderNetAppCharm(test_utils.PatchHelper):
|
||||
def test_cinder_base(self):
|
||||
charm = self._patch_config_and_charm({})
|
||||
self.assertEqual(charm.name, 'cinder_netapp')
|
||||
self.assertTrue(charm.stateless)
|
||||
config = {k: v for (k, v) in charm.cinder_configuration()}
|
||||
self.assertIn('netapp_storage_family', config)
|
||||
self.assertIsNone(config['netapp_storage_family'])
|
||||
self.assertIn('netapp_storage_protocol', config)
|
||||
self.assertIsNone(config['netapp_storage_protocol'])
|
||||
self.assertIn('netapp_server_hostname', config)
|
||||
self.assertIsNone(config['netapp_server_hostname'])
|
||||
self.assertIn('volume_backend_name', config)
|
||||
self.assertIsNone(config['volume_backend_name'])
|
||||
self.assertEqual(config.get('volume_driver'),
|
||||
'cinder.volume.drivers.netapp.common.NetAppDriver')
|
||||
|
||||
def test_cinder_configuration(self):
|
||||
charm = self._patch_config_and_charm({'a': 'b'})
|
||||
def test_cinder_https(self):
|
||||
charm = self._patch_config_and_charm({'netapp-server-port': 443})
|
||||
config = charm.cinder_configuration()
|
||||
# Add check here that configuration is as expected.
|
||||
self.assertEqual(config, [('netapp_hostname', None),
|
||||
('netapp_login', None),
|
||||
('netapp_password', None),
|
||||
('volume_driver', None),
|
||||
('volume_backend_name', None)])
|
||||
self.assertIn(('netapp_transport_type', 'https'), config)
|
||||
|
||||
def test_cinder_eseries(self):
|
||||
econfig = {'netapp-storage-family': 'eseries',
|
||||
'netapp-controller-ips': '10.0.0.1',
|
||||
'netapp-array-password': 'abc123',
|
||||
'netapp-storage-pools': 'somePool',
|
||||
'use-multipath': True}
|
||||
charm = self._patch_config_and_charm(econfig)
|
||||
config = charm.cinder_configuration()
|
||||
self.assertIn(('netapp_controller_ips',
|
||||
econfig['netapp-controller-ips']), config)
|
||||
self.assertIn(('netapp_sa_password',
|
||||
econfig['netapp-array-password']), config)
|
||||
self.assertIn(('netapp_storage_pools',
|
||||
econfig['netapp-storage-pools']), config)
|
||||
self.assertIn(('use_multipath_for_image_xfer',
|
||||
econfig['use-multipath']), config)
|
||||
self.assertFalse(any(q[0] == 'nfs_shares_config' for q in config))
|
||||
|
||||
econfig = {'netapp-storage-protocol': 'nfs',
|
||||
'netapp-nfs-shares-config': 'NFSCONFIG'}
|
||||
charm = self._patch_config_and_charm(econfig)
|
||||
config = charm.cinder_configuration()
|
||||
self.assertIn(('nfs_shares_config',
|
||||
econfig['netapp-nfs-shares-config']), config)
|
||||
|
Loading…
Reference in New Issue
Block a user