From a506041d8eaf17d25aac94599fbb48c63661534c Mon Sep 17 00:00:00 2001
From: Corey Bryant <corey.bryant@canonical.com>
Date: Fri, 10 Jun 2022 20:14:47 +0000
Subject: [PATCH] Add Kinetic and Zed support

* sync charm-helpers to classic charms
* change openstack-origin/source default to zed
* align testing with zed
* add new zed bundles
* add zed bundles to tests.yaml
* add zed tests to osci.yaml and .zuul.yaml
* update build-on and run-on bases
* add bindep.txt for py310
* sync tox.ini and requirements.txt for ruamel
* use charmcraft_channel 2.0/stable
* drop reactive plugin overrides
* move interface/layer env vars to charmcraft.yaml

Change-Id: I4cae0a313230a8617beac36a2dbfe0c019c5e0de
---
 .zuul.yaml                                    |   2 +-
 bindep.txt                                    |   4 +
 charmcraft.yaml                               |  30 ++---
 osci.yaml                                     |   5 +-
 requirements.txt                              |  12 +-
 src/metadata.yaml                             |   2 +-
 src/tests/bundles/focal-yoga.yaml             | 108 ------------------
 .../{focal-xena.yaml => jammy-zed.yaml}       |   4 +-
 .../{impish-xena.yaml => kinetic-zed.yaml}    |   2 +-
 src/tests/tests.yaml                          |  11 +-
 test-requirements.txt                         |  18 +--
 tox.ini                                       |  23 +---
 12 files changed, 32 insertions(+), 189 deletions(-)
 create mode 100644 bindep.txt
 delete mode 100644 src/tests/bundles/focal-yoga.yaml
 rename src/tests/bundles/{focal-xena.yaml => jammy-zed.yaml} (96%)
 rename src/tests/bundles/{impish-xena.yaml => kinetic-zed.yaml} (99%)

diff --git a/.zuul.yaml b/.zuul.yaml
index fd20909..23bf5f6 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -1,4 +1,4 @@
 - project:
     templates:
-      - openstack-python3-charm-jobs
+      - openstack-python3-charm-zed-jobs
       - openstack-cover-jobs
diff --git a/bindep.txt b/bindep.txt
new file mode 100644
index 0000000..17575d9
--- /dev/null
+++ b/bindep.txt
@@ -0,0 +1,4 @@
+libffi-dev [platform:dpkg]
+libpq-dev [platform:dpkg]
+libxml2-dev [platform:dpkg]
+libxslt1-dev [platform:dpkg]
diff --git a/charmcraft.yaml b/charmcraft.yaml
index c9a0ed7..0604425 100644
--- a/charmcraft.yaml
+++ b/charmcraft.yaml
@@ -2,32 +2,24 @@ type: charm
 
 parts:
   charm:
-    build-packages:
-      - tox
-      - git
-      - python3-dev
-    override-build: |
-      apt-get install ca-certificates -y
-      tox -e build-reactive
-    override-stage: |
-      echo "Copying charm to staging area: $CHARMCRAFT_STAGE"
-      NAME=$(ls $CHARMCRAFT_PART_BUILD/build/builds)
-      cp -r $CHARMCRAFT_PART_BUILD/build/builds/$NAME/* $CHARMCRAFT_STAGE/
-    override-prime: |
-      # For some reason, the normal priming chokes on the fact that there's a
-      # hooks directory.
-      cp -r $CHARMCRAFT_STAGE/* .
+    source: src/
+    plugin: reactive
+    build-snaps:
+      - charm
+    build-environment:
+      - CHARM_INTERFACES_DIR: /root/project/interfaces/
+      - CHARM_LAYERS_DIR: /root/project/layers/
 
 bases:
   - build-on:
       - name: ubuntu
-        channel: "20.04"
+        channel: "22.04"
         architectures:
           - amd64
     run-on:
-      - name: ubuntu
-        channel: "20.04"
-        architectures: [amd64, s390x, ppc64el, arm64]
       - name: ubuntu
         channel: "22.04"
         architectures: [amd64, s390x, ppc64el, arm64]
+      - name: ubuntu
+        channel: "22.10"
+        architectures: [amd64, s390x, ppc64el, arm64]
diff --git a/osci.yaml b/osci.yaml
index 78c4b0c..3a8cc56 100644
--- a/osci.yaml
+++ b/osci.yaml
@@ -1,10 +1,9 @@
 - project:
     templates:
-      - charm-unit-jobs-py38
       - charm-unit-jobs-py310
-      - charm-xena-functional-jobs
-      - charm-yoga-functional-jobs
+      - charm-zed-functional-jobs
     vars:
       needs_charm_build: true
       charm_build_name: manila-dashboard
       build_type: charmcraft
+      charmcraft_channel: 2.0/stable
diff --git a/requirements.txt b/requirements.txt
index 7755b95..b3dc23f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -15,16 +15,6 @@ setuptools<50.0.0  # https://github.com/pypa/setuptools/commit/04e3df22df840c6bb
 #
 cryptography<3.4
 
-# Build requirements
-cffi==1.14.6; python_version < '3.6'  # cffi 1.15.0 drops support for py35.
-git+https://github.com/juju/charm-tools#egg=charm-tools
+git+https://github.com/juju/charm-tools.git
 
 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'
diff --git a/src/metadata.yaml b/src/metadata.yaml
index ac70a6c..547fe38 100644
--- a/src/metadata.yaml
+++ b/src/metadata.yaml
@@ -7,8 +7,8 @@ description: |
 tags:
 - openstack
 series:
-- focal
 - jammy
+- kinetic
 subordinate: true
 requires:
   dashboard:
diff --git a/src/tests/bundles/focal-yoga.yaml b/src/tests/bundles/focal-yoga.yaml
deleted file mode 100644
index a93f87e..0000000
--- a/src/tests/bundles/focal-yoga.yaml
+++ /dev/null
@@ -1,108 +0,0 @@
-variables:
-  openstack-origin: &openstack-origin cloud:focal-yoga
-
-local_overlay_enabled: False
-
-series: focal
-
-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':
-  '6':
-
-applications:
-  keystone-mysql-router:
-    charm: ch:mysql-router
-    channel: latest/edge
-  manila-mysql-router:
-    charm: ch:mysql-router
-    channel: latest/edge
-  openstack-dashboard-mysql-router:
-    charm: ch:mysql-router
-    channel: latest/edge
-
-  mysql-innodb-cluster:
-    charm: ch:mysql-innodb-cluster
-    num_units: 3
-    options:
-      source: *openstack-origin
-    to:
-      - '0'
-      - '1'
-      - '2'
-    channel: latest/edge
-
-  rabbitmq-server:
-    charm: ch:rabbitmq-server
-    num_units: 1
-    to:
-      - '3'
-    channel: latest/edge
-
-  keystone:
-    charm: ch:keystone
-    num_units: 1
-    options:
-      openstack-origin: *openstack-origin
-    to:
-      - '4'
-    channel: latest/edge
-
-  manila:
-    charm: ch:manila
-    num_units: 1
-    options:
-      openstack-origin: *openstack-origin
-    to:
-      - '5'
-    channel: latest/edge
-
-  openstack-dashboard:
-    charm: ch:openstack-dashboard
-    num_units: 1
-    options:
-      openstack-origin: *openstack-origin
-    to:
-      - '6'
-    channel: latest/edge
-
-  manila-dashboard:
-    charm: ../../../manila-dashboard.charm
-
-relations:
-
-  - - 'keystone:shared-db'
-    - 'keystone-mysql-router:shared-db'
-  - - 'keystone-mysql-router:db-router'
-    - 'mysql-innodb-cluster:db-router'
-
-  - - 'manila:shared-db'
-    - 'manila-mysql-router:shared-db'
-  - - 'manila-mysql-router:db-router'
-    - 'mysql-innodb-cluster:db-router'
-
-  - - 'manila:amqp'
-    - 'rabbitmq-server:amqp'
-
-  - - 'manila:identity-service'
-    - 'keystone:identity-service'
-
-  - - 'openstack-dashboard:shared-db'
-    - 'openstack-dashboard-mysql-router:shared-db'
-  - - 'openstack-dashboard-mysql-router:db-router'
-    - 'mysql-innodb-cluster:db-router'
-
-  - - 'openstack-dashboard:identity-service'
-    - 'keystone:identity-service'
-
-  - - 'openstack-dashboard:dashboard-plugin'
-    - 'manila-dashboard:dashboard'
diff --git a/src/tests/bundles/focal-xena.yaml b/src/tests/bundles/jammy-zed.yaml
similarity index 96%
rename from src/tests/bundles/focal-xena.yaml
rename to src/tests/bundles/jammy-zed.yaml
index 59775c7..8d53db8 100644
--- a/src/tests/bundles/focal-xena.yaml
+++ b/src/tests/bundles/jammy-zed.yaml
@@ -1,9 +1,9 @@
 variables:
-  openstack-origin: &openstack-origin cloud:focal-xena
+  openstack-origin: &openstack-origin cloud:jammy-zed
 
 local_overlay_enabled: False
 
-series: focal
+series: jammy
 
 comment:
 - 'machines section to decide order of deployment. database sooner = faster'
diff --git a/src/tests/bundles/impish-xena.yaml b/src/tests/bundles/kinetic-zed.yaml
similarity index 99%
rename from src/tests/bundles/impish-xena.yaml
rename to src/tests/bundles/kinetic-zed.yaml
index 2c83f5e..34d538b 100644
--- a/src/tests/bundles/impish-xena.yaml
+++ b/src/tests/bundles/kinetic-zed.yaml
@@ -3,7 +3,7 @@ variables:
 
 local_overlay_enabled: False
 
-series: impish
+series: kinetic
 
 comment:
 - 'machines section to decide order of deployment. database sooner = faster'
diff --git a/src/tests/tests.yaml b/src/tests/tests.yaml
index 8ca84a7..c781426 100644
--- a/src/tests/tests.yaml
+++ b/src/tests/tests.yaml
@@ -1,15 +1,15 @@
 charm_name: manila-dashboard
 
 smoke_bundles:
-- focal-xena
+- jammy-yoga
 
 gate_bundles:
-- focal-xena
-- impish-xena
+- jammy-yoga
 
 dev_bundles:
-- focal-yoga
 - jammy-yoga
+- jammy-zed
+- kinetic-zed
 
 target_deploy_status:
   manila:
@@ -24,5 +24,4 @@ tests:
 
 tests_options:
   force_deploy:
-    - impish-xena
-    - jammy-yoga
+    - kinetic-zed
diff --git a/test-requirements.txt b/test-requirements.txt
index a11a7d0..a7936e6 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -4,7 +4,6 @@
 #     https://github.com/openstack-charmers/release-tools
 #
 pyparsing<3.0.0  # aodhclient is pinned in zaza and needs pyparsing < 3.0.0, but cffi also needs it, so pin here.
-cffi==1.14.6; python_version < '3.6'  # cffi 1.15.0 drops support for py35.
 setuptools<50.0.0  # https://github.com/pypa/setuptools/commit/04e3df22df840c6bb244e9b27bc56750c44b7c85
 
 stestr>=2.2.0
@@ -13,25 +12,10 @@ stestr>=2.2.0
 # 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'
+mock>=1.2
 
 nose>=1.3.7
 coverage>=3.6
diff --git a/tox.ini b/tox.ini
index e22fe48..bdde110 100644
--- a/tox.ini
+++ b/tox.ini
@@ -31,10 +31,8 @@ minversion = 3.18.0
 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 INTERFACE_PATH LAYER_PATH JUJU_REPOSITORY
+passenv = no_proxy http_proxy https_proxy JUJU_REPOSITORY
 install_command =
   {toxinidir}/pip.sh install {opts} {packages}
 allowlist_externals =
@@ -50,7 +48,7 @@ basepython = python3
 deps = -r{toxinidir}/build-requirements.txt
 commands =
     charmcraft clean
-    charmcraft -v build
+    charmcraft -v pack
     {toxinidir}/rename.sh
 
 [testenv:build-reactive]
@@ -68,21 +66,6 @@ basepython = python3
 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:py38]
-basepython = python3.8
-deps = -r{toxinidir}/test-requirements.txt
-commands = stestr run --slowest {posargs}
-
-[testenv:py39]
-basepython = python3.9
-deps = -r{toxinidir}/test-requirements.txt
-commands = stestr run --slowest {posargs}
-
 [testenv:py310]
 basepython = python3.10
 deps = -r{toxinidir}/test-requirements.txt
@@ -91,7 +74,7 @@ commands = stestr run --slowest {posargs}
 [testenv:pep8]
 basepython = python3
 deps = flake8==3.9.2
-       charm-tools==2.8.3
+       git+https://github.com/juju/charm-tools.git
 commands = flake8 {posargs} src unit_tests
 
 [testenv:func-target]