From eca37a1dad3aba829b4b265c15e67be2447b4a89 Mon Sep 17 00:00:00 2001 From: Alex Kavanagh Date: Tue, 2 Oct 2018 09:55:35 +0100 Subject: [PATCH] Update charm to PY3 only code This change upgrades the charm to PY3 only mode. Note the changes to charm-helpers has also been made to support Apache auditing code in PY3. Change-Id: Idd347de5818ec57cb05f38170fe0d6536157a0da --- actions/actions.py | 20 ++++++-- actions/openstack_upgrade.py | 18 +++++-- charm-helpers-hooks.yaml | 2 +- .../charmhelpers => charmhelpers}/__init__.py | 0 .../cli/__init__.py | 0 .../cli/benchmark.py | 0 .../cli/commands.py | 0 .../cli/hookenv.py | 0 .../charmhelpers => charmhelpers}/cli/host.py | 0 .../cli/unitdata.py | 0 .../contrib/__init__.py | 0 .../contrib/charmsupport/__init__.py | 0 .../contrib/charmsupport/nrpe.py | 0 .../contrib/charmsupport/volumes.py | 0 .../contrib/hahelpers/__init__.py | 0 .../contrib/hahelpers/apache.py | 0 .../contrib/hahelpers/cluster.py | 0 .../contrib/hardening/README.hardening.md | 0 .../contrib/hardening/__init__.py | 0 .../contrib/hardening/apache/__init__.py | 0 .../hardening/apache/checks/__init__.py | 0 .../contrib/hardening/apache/checks/config.py | 3 ++ .../apache/templates/99-hardening.conf | 0 .../hardening/apache/templates/__init__.py | 0 .../hardening/apache/templates/alias.conf | 0 .../contrib/hardening/audits/__init__.py | 0 .../contrib/hardening/audits/apache.py | 6 ++- .../contrib/hardening/audits/apt.py | 0 .../contrib/hardening/audits/file.py | 0 .../contrib/hardening/defaults/__init__.py | 0 .../contrib/hardening/defaults/apache.yaml | 0 .../hardening/defaults/apache.yaml.schema | 0 .../contrib/hardening/defaults/mysql.yaml | 0 .../hardening/defaults/mysql.yaml.schema | 0 .../contrib/hardening/defaults/os.yaml | 0 .../contrib/hardening/defaults/os.yaml.schema | 0 .../contrib/hardening/defaults/ssh.yaml | 0 .../hardening/defaults/ssh.yaml.schema | 0 .../contrib/hardening/harden.py | 0 .../contrib/hardening/host/__init__.py | 0 .../contrib/hardening/host/checks/__init__.py | 0 .../contrib/hardening/host/checks/apt.py | 0 .../contrib/hardening/host/checks/limits.py | 0 .../contrib/hardening/host/checks/login.py | 0 .../hardening/host/checks/minimize_access.py | 0 .../contrib/hardening/host/checks/pam.py | 0 .../contrib/hardening/host/checks/profile.py | 0 .../hardening/host/checks/securetty.py | 0 .../hardening/host/checks/suid_sgid.py | 0 .../contrib/hardening/host/checks/sysctl.py | 0 .../hardening/host/templates/10.hardcore.conf | 0 .../hardening/host/templates/99-hardening.sh | 0 .../host/templates/99-juju-hardening.conf | 0 .../hardening/host/templates/__init__.py | 0 .../hardening/host/templates/login.defs | 0 .../contrib/hardening/host/templates/modules | 0 .../hardening/host/templates/passwdqc.conf | 0 .../host/templates/pinerolo_profile.sh | 0 .../hardening/host/templates/securetty | 0 .../contrib/hardening/host/templates/tally2 | 0 .../contrib/hardening/mysql/__init__.py | 0 .../hardening/mysql/checks/__init__.py | 0 .../contrib/hardening/mysql/checks/config.py | 0 .../hardening/mysql/templates/__init__.py | 0 .../hardening/mysql/templates/hardening.cnf | 0 .../contrib/hardening/ssh/__init__.py | 0 .../contrib/hardening/ssh/checks/__init__.py | 0 .../contrib/hardening/ssh/checks/config.py | 0 .../hardening/ssh/templates/__init__.py | 0 .../hardening/ssh/templates/ssh_config | 0 .../hardening/ssh/templates/sshd_config | 0 .../contrib/hardening/templating.py | 0 .../contrib/hardening/utils.py | 0 .../contrib/network/__init__.py | 0 .../contrib/network/ip.py | 0 .../contrib/openstack/__init__.py | 0 .../contrib/openstack/alternatives.py | 0 .../contrib/openstack/amulet/__init__.py | 0 .../contrib/openstack/amulet/deployment.py | 0 .../contrib/openstack/amulet/utils.py | 0 .../contrib/openstack/cert_utils.py | 0 .../contrib/openstack/context.py | 0 .../contrib/openstack/exceptions.py | 0 .../contrib/openstack/files/__init__.py | 0 .../contrib/openstack/files/check_haproxy.sh | 0 .../files/check_haproxy_queue_depth.sh | 0 .../contrib/openstack/ha/__init__.py | 0 .../contrib/openstack/ha/utils.py | 0 .../contrib/openstack/ip.py | 0 .../contrib/openstack/keystone.py | 0 .../contrib/openstack/neutron.py | 0 .../contrib/openstack/ssh_migrations.py | 0 .../contrib/openstack/templates/__init__.py | 0 .../contrib/openstack/templates/ceph.conf | 0 .../contrib/openstack/templates/git.upstart | 0 .../contrib/openstack/templates/haproxy.cfg | 0 .../openstack/templates/memcached.conf | 0 .../templates/openstack_https_frontend | 0 .../templates/openstack_https_frontend.conf | 0 .../templates/section-keystone-authtoken | 0 .../section-keystone-authtoken-legacy | 0 .../section-keystone-authtoken-mitaka | 0 .../openstack/templates/section-oslo-cache | 0 .../templates/section-oslo-middleware | 0 .../templates/section-oslo-notifications | 0 .../openstack/templates/section-rabbitmq-oslo | 0 .../openstack/templates/section-zeromq | 0 .../templates/wsgi-openstack-api.conf | 0 .../templates/wsgi-openstack-metadata.conf | 0 .../contrib/openstack/templating.py | 0 .../contrib/openstack/utils.py | 0 .../contrib/openstack/vaultlocker.py | 0 .../contrib/python/__init__.py | 0 .../contrib/python/packages.py | 0 .../contrib/storage/__init__.py | 0 .../contrib/storage/linux/__init__.py | 0 .../contrib/storage/linux/bcache.py | 0 .../contrib/storage/linux/ceph.py | 0 .../contrib/storage/linux/loopback.py | 0 .../contrib/storage/linux/lvm.py | 0 .../contrib/storage/linux/utils.py | 0 .../core/__init__.py | 0 .../core/decorators.py | 0 .../core/files.py | 0 .../core/fstab.py | 0 .../core/hookenv.py | 0 .../core/host.py | 0 .../core/host_factory/__init__.py | 0 .../core/host_factory/centos.py | 0 .../core/host_factory/ubuntu.py | 0 .../core/hugepage.py | 0 .../core/kernel.py | 0 .../core/kernel_factory/__init__.py | 0 .../core/kernel_factory/centos.py | 0 .../core/kernel_factory/ubuntu.py | 0 .../core/services/__init__.py | 0 .../core/services/base.py | 0 .../core/services/helpers.py | 0 .../core/strutils.py | 0 .../core/sysctl.py | 0 .../core/templating.py | 0 .../core/unitdata.py | 0 .../fetch/__init__.py | 0 .../fetch/archiveurl.py | 0 .../fetch/bzrurl.py | 0 .../fetch/centos.py | 0 .../fetch/giturl.py | 0 .../fetch/snap.py | 0 .../fetch/ubuntu.py | 0 .../osplatform.py | 0 .../payload/__init__.py | 0 .../payload/archive.py | 0 .../payload/execd.py | 0 hooks/horizon_contexts.py | 16 +++--- hooks/horizon_hooks.py | 51 ++++++++++++------- hooks/horizon_utils.py | 8 +-- templates/haproxy.cfg | 4 +- test-requirements.txt | 3 +- tests/basic_deployment.py | 2 +- tox.ini | 9 ++-- unit_tests/__init__.py | 12 ++++- unit_tests/test_actions.py | 6 +-- unit_tests/test_actions_openstack_upgrade.py | 8 ++- unit_tests/test_horizon_contexts.py | 32 ++++++------ unit_tests/test_horizon_hooks.py | 21 +++++--- unit_tests/test_horizon_utils.py | 25 ++++----- unit_tests/test_utils.py | 4 +- 167 files changed, 153 insertions(+), 97 deletions(-) rename {hooks/charmhelpers => charmhelpers}/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/cli/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/cli/benchmark.py (100%) rename {hooks/charmhelpers => charmhelpers}/cli/commands.py (100%) rename {hooks/charmhelpers => charmhelpers}/cli/hookenv.py (100%) rename {hooks/charmhelpers => charmhelpers}/cli/host.py (100%) rename {hooks/charmhelpers => charmhelpers}/cli/unitdata.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/charmsupport/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/charmsupport/nrpe.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/charmsupport/volumes.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hahelpers/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hahelpers/apache.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hahelpers/cluster.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/README.hardening.md (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/apache/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/apache/checks/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/apache/checks/config.py (98%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/apache/templates/99-hardening.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/apache/templates/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/apache/templates/alias.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/audits/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/audits/apache.py (96%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/audits/apt.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/audits/file.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/defaults/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/defaults/apache.yaml (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/defaults/apache.yaml.schema (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/defaults/mysql.yaml (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/defaults/mysql.yaml.schema (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/defaults/os.yaml (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/defaults/os.yaml.schema (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/defaults/ssh.yaml (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/defaults/ssh.yaml.schema (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/harden.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/apt.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/limits.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/login.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/minimize_access.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/pam.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/profile.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/securetty.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/suid_sgid.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/checks/sysctl.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/10.hardcore.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/99-hardening.sh (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/99-juju-hardening.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/login.defs (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/modules (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/passwdqc.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/pinerolo_profile.sh (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/securetty (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/host/templates/tally2 (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/mysql/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/mysql/checks/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/mysql/checks/config.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/mysql/templates/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/mysql/templates/hardening.cnf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/ssh/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/ssh/checks/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/ssh/checks/config.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/ssh/templates/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/ssh/templates/ssh_config (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/ssh/templates/sshd_config (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/templating.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/hardening/utils.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/network/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/network/ip.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/alternatives.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/amulet/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/amulet/deployment.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/amulet/utils.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/cert_utils.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/context.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/exceptions.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/files/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/files/check_haproxy.sh (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/files/check_haproxy_queue_depth.sh (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/ha/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/ha/utils.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/ip.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/keystone.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/neutron.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/ssh_migrations.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/ceph.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/git.upstart (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/haproxy.cfg (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/memcached.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/openstack_https_frontend (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/openstack_https_frontend.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/section-keystone-authtoken (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/section-keystone-authtoken-legacy (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/section-keystone-authtoken-mitaka (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/section-oslo-cache (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/section-oslo-middleware (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/section-oslo-notifications (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/section-rabbitmq-oslo (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/section-zeromq (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/wsgi-openstack-api.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templates/wsgi-openstack-metadata.conf (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/templating.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/utils.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/openstack/vaultlocker.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/python/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/python/packages.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/storage/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/storage/linux/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/storage/linux/bcache.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/storage/linux/ceph.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/storage/linux/loopback.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/storage/linux/lvm.py (100%) rename {hooks/charmhelpers => charmhelpers}/contrib/storage/linux/utils.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/decorators.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/files.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/fstab.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/hookenv.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/host.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/host_factory/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/host_factory/centos.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/host_factory/ubuntu.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/hugepage.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/kernel.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/kernel_factory/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/kernel_factory/centos.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/kernel_factory/ubuntu.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/services/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/services/base.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/services/helpers.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/strutils.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/sysctl.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/templating.py (100%) rename {hooks/charmhelpers => charmhelpers}/core/unitdata.py (100%) rename {hooks/charmhelpers => charmhelpers}/fetch/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/fetch/archiveurl.py (100%) rename {hooks/charmhelpers => charmhelpers}/fetch/bzrurl.py (100%) rename {hooks/charmhelpers => charmhelpers}/fetch/centos.py (100%) rename {hooks/charmhelpers => charmhelpers}/fetch/giturl.py (100%) rename {hooks/charmhelpers => charmhelpers}/fetch/snap.py (100%) rename {hooks/charmhelpers => charmhelpers}/fetch/ubuntu.py (100%) rename {hooks/charmhelpers => charmhelpers}/osplatform.py (100%) rename {hooks/charmhelpers => charmhelpers}/payload/__init__.py (100%) rename {hooks/charmhelpers => charmhelpers}/payload/archive.py (100%) rename {hooks/charmhelpers => charmhelpers}/payload/execd.py (100%) diff --git a/actions/actions.py b/actions/actions.py index 3dd68aa4..1ebd1222 100755 --- a/actions/actions.py +++ b/actions/actions.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # # Copyright 2016 Canonical Ltd # @@ -17,10 +17,20 @@ import os import sys -sys.path.append('hooks/') +_path = os.path.dirname(os.path.realpath(__file__)) +_root = os.path.abspath(os.path.join(_path, '..')) + + +def _add_path(path): + if path not in sys.path: + sys.path.insert(1, path) + + +_add_path(_root) from charmhelpers.core.hookenv import action_fail -from horizon_utils import ( + +from hooks.horizon_utils import ( pause_unit_helper, resume_unit_helper, register_configs, @@ -29,14 +39,14 @@ from horizon_utils import ( def pause(args): """Pause the Ceilometer services. - @raises Exception should the service fail to stop. + :raises: Exception should the service fail to stop. """ pause_unit_helper(register_configs()) def resume(args): """Resume the Ceilometer services. - @raises Exception should the service fail to start.""" + :raises: Exception should the service fail to start.""" resume_unit_helper(register_configs()) diff --git a/actions/openstack_upgrade.py b/actions/openstack_upgrade.py index 16061524..a4e83bf2 100755 --- a/actions/openstack_upgrade.py +++ b/actions/openstack_upgrade.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # # Copyright 2016 Canonical Ltd # @@ -14,19 +14,29 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os import sys -sys.path.append('hooks/') +_path = os.path.dirname(os.path.realpath(__file__)) +_root = os.path.abspath(os.path.join(_path, '..')) + + +def _add_path(path): + if path not in sys.path: + sys.path.insert(1, path) + + +_add_path(_root) from charmhelpers.contrib.openstack.utils import ( do_action_openstack_upgrade, ) -from horizon_utils import ( +from hooks.horizon_utils import ( do_openstack_upgrade, ) -from horizon_hooks import ( +from hooks.horizon_hooks import ( config_changed, CONFIGS, ) diff --git a/charm-helpers-hooks.yaml b/charm-helpers-hooks.yaml index 0a509e82..7bf0aa05 100644 --- a/charm-helpers-hooks.yaml +++ b/charm-helpers-hooks.yaml @@ -1,5 +1,5 @@ repo: https://github.com/juju/charm-helpers -destination: hooks/charmhelpers +destination: charmhelpers include: - core - osplatform diff --git a/hooks/charmhelpers/__init__.py b/charmhelpers/__init__.py similarity index 100% rename from hooks/charmhelpers/__init__.py rename to charmhelpers/__init__.py diff --git a/hooks/charmhelpers/cli/__init__.py b/charmhelpers/cli/__init__.py similarity index 100% rename from hooks/charmhelpers/cli/__init__.py rename to charmhelpers/cli/__init__.py diff --git a/hooks/charmhelpers/cli/benchmark.py b/charmhelpers/cli/benchmark.py similarity index 100% rename from hooks/charmhelpers/cli/benchmark.py rename to charmhelpers/cli/benchmark.py diff --git a/hooks/charmhelpers/cli/commands.py b/charmhelpers/cli/commands.py similarity index 100% rename from hooks/charmhelpers/cli/commands.py rename to charmhelpers/cli/commands.py diff --git a/hooks/charmhelpers/cli/hookenv.py b/charmhelpers/cli/hookenv.py similarity index 100% rename from hooks/charmhelpers/cli/hookenv.py rename to charmhelpers/cli/hookenv.py diff --git a/hooks/charmhelpers/cli/host.py b/charmhelpers/cli/host.py similarity index 100% rename from hooks/charmhelpers/cli/host.py rename to charmhelpers/cli/host.py diff --git a/hooks/charmhelpers/cli/unitdata.py b/charmhelpers/cli/unitdata.py similarity index 100% rename from hooks/charmhelpers/cli/unitdata.py rename to charmhelpers/cli/unitdata.py diff --git a/hooks/charmhelpers/contrib/__init__.py b/charmhelpers/contrib/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/__init__.py rename to charmhelpers/contrib/__init__.py diff --git a/hooks/charmhelpers/contrib/charmsupport/__init__.py b/charmhelpers/contrib/charmsupport/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/charmsupport/__init__.py rename to charmhelpers/contrib/charmsupport/__init__.py diff --git a/hooks/charmhelpers/contrib/charmsupport/nrpe.py b/charmhelpers/contrib/charmsupport/nrpe.py similarity index 100% rename from hooks/charmhelpers/contrib/charmsupport/nrpe.py rename to charmhelpers/contrib/charmsupport/nrpe.py diff --git a/hooks/charmhelpers/contrib/charmsupport/volumes.py b/charmhelpers/contrib/charmsupport/volumes.py similarity index 100% rename from hooks/charmhelpers/contrib/charmsupport/volumes.py rename to charmhelpers/contrib/charmsupport/volumes.py diff --git a/hooks/charmhelpers/contrib/hahelpers/__init__.py b/charmhelpers/contrib/hahelpers/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hahelpers/__init__.py rename to charmhelpers/contrib/hahelpers/__init__.py diff --git a/hooks/charmhelpers/contrib/hahelpers/apache.py b/charmhelpers/contrib/hahelpers/apache.py similarity index 100% rename from hooks/charmhelpers/contrib/hahelpers/apache.py rename to charmhelpers/contrib/hahelpers/apache.py diff --git a/hooks/charmhelpers/contrib/hahelpers/cluster.py b/charmhelpers/contrib/hahelpers/cluster.py similarity index 100% rename from hooks/charmhelpers/contrib/hahelpers/cluster.py rename to charmhelpers/contrib/hahelpers/cluster.py diff --git a/hooks/charmhelpers/contrib/hardening/README.hardening.md b/charmhelpers/contrib/hardening/README.hardening.md similarity index 100% rename from hooks/charmhelpers/contrib/hardening/README.hardening.md rename to charmhelpers/contrib/hardening/README.hardening.md diff --git a/hooks/charmhelpers/contrib/hardening/__init__.py b/charmhelpers/contrib/hardening/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/__init__.py rename to charmhelpers/contrib/hardening/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/apache/__init__.py b/charmhelpers/contrib/hardening/apache/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/apache/__init__.py rename to charmhelpers/contrib/hardening/apache/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/apache/checks/__init__.py b/charmhelpers/contrib/hardening/apache/checks/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/apache/checks/__init__.py rename to charmhelpers/contrib/hardening/apache/checks/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/apache/checks/config.py b/charmhelpers/contrib/hardening/apache/checks/config.py similarity index 98% rename from hooks/charmhelpers/contrib/hardening/apache/checks/config.py rename to charmhelpers/contrib/hardening/apache/checks/config.py index 06482aac..341da9ee 100644 --- a/hooks/charmhelpers/contrib/hardening/apache/checks/config.py +++ b/charmhelpers/contrib/hardening/apache/checks/config.py @@ -14,6 +14,7 @@ import os import re +import six import subprocess @@ -95,6 +96,8 @@ class ApacheConfContext(object): ctxt = settings['hardening'] out = subprocess.check_output(['apache2', '-v']) + if six.PY3: + out = out.decode('utf-8') ctxt['apache_version'] = re.search(r'.+version: Apache/(.+?)\s.+', out).group(1) ctxt['apache_icondir'] = '/usr/share/apache2/icons/' diff --git a/hooks/charmhelpers/contrib/hardening/apache/templates/99-hardening.conf b/charmhelpers/contrib/hardening/apache/templates/99-hardening.conf similarity index 100% rename from hooks/charmhelpers/contrib/hardening/apache/templates/99-hardening.conf rename to charmhelpers/contrib/hardening/apache/templates/99-hardening.conf diff --git a/hooks/charmhelpers/contrib/hardening/apache/templates/__init__.py b/charmhelpers/contrib/hardening/apache/templates/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/apache/templates/__init__.py rename to charmhelpers/contrib/hardening/apache/templates/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/apache/templates/alias.conf b/charmhelpers/contrib/hardening/apache/templates/alias.conf similarity index 100% rename from hooks/charmhelpers/contrib/hardening/apache/templates/alias.conf rename to charmhelpers/contrib/hardening/apache/templates/alias.conf diff --git a/hooks/charmhelpers/contrib/hardening/audits/__init__.py b/charmhelpers/contrib/hardening/audits/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/audits/__init__.py rename to charmhelpers/contrib/hardening/audits/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/audits/apache.py b/charmhelpers/contrib/hardening/audits/apache.py similarity index 96% rename from hooks/charmhelpers/contrib/hardening/audits/apache.py rename to charmhelpers/contrib/hardening/audits/apache.py index d32bf44e..04825f5a 100644 --- a/hooks/charmhelpers/contrib/hardening/audits/apache.py +++ b/charmhelpers/contrib/hardening/audits/apache.py @@ -15,7 +15,7 @@ import re import subprocess -from six import string_types +import six from charmhelpers.core.hookenv import ( log, @@ -35,7 +35,7 @@ class DisabledModuleAudit(BaseAudit): def __init__(self, modules): if modules is None: self.modules = [] - elif isinstance(modules, string_types): + elif isinstance(modules, six.string_types): self.modules = [modules] else: self.modules = modules @@ -69,6 +69,8 @@ class DisabledModuleAudit(BaseAudit): def _get_loaded_modules(): """Returns the modules which are enabled in Apache.""" output = subprocess.check_output(['apache2ctl', '-M']) + if six.PY3: + output = output.decode('utf-8') modules = [] for line in output.splitlines(): # Each line of the enabled module output looks like: diff --git a/hooks/charmhelpers/contrib/hardening/audits/apt.py b/charmhelpers/contrib/hardening/audits/apt.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/audits/apt.py rename to charmhelpers/contrib/hardening/audits/apt.py diff --git a/hooks/charmhelpers/contrib/hardening/audits/file.py b/charmhelpers/contrib/hardening/audits/file.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/audits/file.py rename to charmhelpers/contrib/hardening/audits/file.py diff --git a/hooks/charmhelpers/contrib/hardening/defaults/__init__.py b/charmhelpers/contrib/hardening/defaults/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/defaults/__init__.py rename to charmhelpers/contrib/hardening/defaults/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/defaults/apache.yaml b/charmhelpers/contrib/hardening/defaults/apache.yaml similarity index 100% rename from hooks/charmhelpers/contrib/hardening/defaults/apache.yaml rename to charmhelpers/contrib/hardening/defaults/apache.yaml diff --git a/hooks/charmhelpers/contrib/hardening/defaults/apache.yaml.schema b/charmhelpers/contrib/hardening/defaults/apache.yaml.schema similarity index 100% rename from hooks/charmhelpers/contrib/hardening/defaults/apache.yaml.schema rename to charmhelpers/contrib/hardening/defaults/apache.yaml.schema diff --git a/hooks/charmhelpers/contrib/hardening/defaults/mysql.yaml b/charmhelpers/contrib/hardening/defaults/mysql.yaml similarity index 100% rename from hooks/charmhelpers/contrib/hardening/defaults/mysql.yaml rename to charmhelpers/contrib/hardening/defaults/mysql.yaml diff --git a/hooks/charmhelpers/contrib/hardening/defaults/mysql.yaml.schema b/charmhelpers/contrib/hardening/defaults/mysql.yaml.schema similarity index 100% rename from hooks/charmhelpers/contrib/hardening/defaults/mysql.yaml.schema rename to charmhelpers/contrib/hardening/defaults/mysql.yaml.schema diff --git a/hooks/charmhelpers/contrib/hardening/defaults/os.yaml b/charmhelpers/contrib/hardening/defaults/os.yaml similarity index 100% rename from hooks/charmhelpers/contrib/hardening/defaults/os.yaml rename to charmhelpers/contrib/hardening/defaults/os.yaml diff --git a/hooks/charmhelpers/contrib/hardening/defaults/os.yaml.schema b/charmhelpers/contrib/hardening/defaults/os.yaml.schema similarity index 100% rename from hooks/charmhelpers/contrib/hardening/defaults/os.yaml.schema rename to charmhelpers/contrib/hardening/defaults/os.yaml.schema diff --git a/hooks/charmhelpers/contrib/hardening/defaults/ssh.yaml b/charmhelpers/contrib/hardening/defaults/ssh.yaml similarity index 100% rename from hooks/charmhelpers/contrib/hardening/defaults/ssh.yaml rename to charmhelpers/contrib/hardening/defaults/ssh.yaml diff --git a/hooks/charmhelpers/contrib/hardening/defaults/ssh.yaml.schema b/charmhelpers/contrib/hardening/defaults/ssh.yaml.schema similarity index 100% rename from hooks/charmhelpers/contrib/hardening/defaults/ssh.yaml.schema rename to charmhelpers/contrib/hardening/defaults/ssh.yaml.schema diff --git a/hooks/charmhelpers/contrib/hardening/harden.py b/charmhelpers/contrib/hardening/harden.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/harden.py rename to charmhelpers/contrib/hardening/harden.py diff --git a/hooks/charmhelpers/contrib/hardening/host/__init__.py b/charmhelpers/contrib/hardening/host/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/__init__.py rename to charmhelpers/contrib/hardening/host/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/__init__.py b/charmhelpers/contrib/hardening/host/checks/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/__init__.py rename to charmhelpers/contrib/hardening/host/checks/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/apt.py b/charmhelpers/contrib/hardening/host/checks/apt.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/apt.py rename to charmhelpers/contrib/hardening/host/checks/apt.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/limits.py b/charmhelpers/contrib/hardening/host/checks/limits.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/limits.py rename to charmhelpers/contrib/hardening/host/checks/limits.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/login.py b/charmhelpers/contrib/hardening/host/checks/login.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/login.py rename to charmhelpers/contrib/hardening/host/checks/login.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/minimize_access.py b/charmhelpers/contrib/hardening/host/checks/minimize_access.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/minimize_access.py rename to charmhelpers/contrib/hardening/host/checks/minimize_access.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/pam.py b/charmhelpers/contrib/hardening/host/checks/pam.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/pam.py rename to charmhelpers/contrib/hardening/host/checks/pam.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/profile.py b/charmhelpers/contrib/hardening/host/checks/profile.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/profile.py rename to charmhelpers/contrib/hardening/host/checks/profile.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/securetty.py b/charmhelpers/contrib/hardening/host/checks/securetty.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/securetty.py rename to charmhelpers/contrib/hardening/host/checks/securetty.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/suid_sgid.py b/charmhelpers/contrib/hardening/host/checks/suid_sgid.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/suid_sgid.py rename to charmhelpers/contrib/hardening/host/checks/suid_sgid.py diff --git a/hooks/charmhelpers/contrib/hardening/host/checks/sysctl.py b/charmhelpers/contrib/hardening/host/checks/sysctl.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/checks/sysctl.py rename to charmhelpers/contrib/hardening/host/checks/sysctl.py diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/10.hardcore.conf b/charmhelpers/contrib/hardening/host/templates/10.hardcore.conf similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/10.hardcore.conf rename to charmhelpers/contrib/hardening/host/templates/10.hardcore.conf diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/99-hardening.sh b/charmhelpers/contrib/hardening/host/templates/99-hardening.sh similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/99-hardening.sh rename to charmhelpers/contrib/hardening/host/templates/99-hardening.sh diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/99-juju-hardening.conf b/charmhelpers/contrib/hardening/host/templates/99-juju-hardening.conf similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/99-juju-hardening.conf rename to charmhelpers/contrib/hardening/host/templates/99-juju-hardening.conf diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/__init__.py b/charmhelpers/contrib/hardening/host/templates/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/__init__.py rename to charmhelpers/contrib/hardening/host/templates/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/login.defs b/charmhelpers/contrib/hardening/host/templates/login.defs similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/login.defs rename to charmhelpers/contrib/hardening/host/templates/login.defs diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/modules b/charmhelpers/contrib/hardening/host/templates/modules similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/modules rename to charmhelpers/contrib/hardening/host/templates/modules diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/passwdqc.conf b/charmhelpers/contrib/hardening/host/templates/passwdqc.conf similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/passwdqc.conf rename to charmhelpers/contrib/hardening/host/templates/passwdqc.conf diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/pinerolo_profile.sh b/charmhelpers/contrib/hardening/host/templates/pinerolo_profile.sh similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/pinerolo_profile.sh rename to charmhelpers/contrib/hardening/host/templates/pinerolo_profile.sh diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/securetty b/charmhelpers/contrib/hardening/host/templates/securetty similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/securetty rename to charmhelpers/contrib/hardening/host/templates/securetty diff --git a/hooks/charmhelpers/contrib/hardening/host/templates/tally2 b/charmhelpers/contrib/hardening/host/templates/tally2 similarity index 100% rename from hooks/charmhelpers/contrib/hardening/host/templates/tally2 rename to charmhelpers/contrib/hardening/host/templates/tally2 diff --git a/hooks/charmhelpers/contrib/hardening/mysql/__init__.py b/charmhelpers/contrib/hardening/mysql/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/mysql/__init__.py rename to charmhelpers/contrib/hardening/mysql/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/mysql/checks/__init__.py b/charmhelpers/contrib/hardening/mysql/checks/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/mysql/checks/__init__.py rename to charmhelpers/contrib/hardening/mysql/checks/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/mysql/checks/config.py b/charmhelpers/contrib/hardening/mysql/checks/config.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/mysql/checks/config.py rename to charmhelpers/contrib/hardening/mysql/checks/config.py diff --git a/hooks/charmhelpers/contrib/hardening/mysql/templates/__init__.py b/charmhelpers/contrib/hardening/mysql/templates/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/mysql/templates/__init__.py rename to charmhelpers/contrib/hardening/mysql/templates/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/mysql/templates/hardening.cnf b/charmhelpers/contrib/hardening/mysql/templates/hardening.cnf similarity index 100% rename from hooks/charmhelpers/contrib/hardening/mysql/templates/hardening.cnf rename to charmhelpers/contrib/hardening/mysql/templates/hardening.cnf diff --git a/hooks/charmhelpers/contrib/hardening/ssh/__init__.py b/charmhelpers/contrib/hardening/ssh/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/ssh/__init__.py rename to charmhelpers/contrib/hardening/ssh/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/ssh/checks/__init__.py b/charmhelpers/contrib/hardening/ssh/checks/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/ssh/checks/__init__.py rename to charmhelpers/contrib/hardening/ssh/checks/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/ssh/checks/config.py b/charmhelpers/contrib/hardening/ssh/checks/config.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/ssh/checks/config.py rename to charmhelpers/contrib/hardening/ssh/checks/config.py diff --git a/hooks/charmhelpers/contrib/hardening/ssh/templates/__init__.py b/charmhelpers/contrib/hardening/ssh/templates/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/ssh/templates/__init__.py rename to charmhelpers/contrib/hardening/ssh/templates/__init__.py diff --git a/hooks/charmhelpers/contrib/hardening/ssh/templates/ssh_config b/charmhelpers/contrib/hardening/ssh/templates/ssh_config similarity index 100% rename from hooks/charmhelpers/contrib/hardening/ssh/templates/ssh_config rename to charmhelpers/contrib/hardening/ssh/templates/ssh_config diff --git a/hooks/charmhelpers/contrib/hardening/ssh/templates/sshd_config b/charmhelpers/contrib/hardening/ssh/templates/sshd_config similarity index 100% rename from hooks/charmhelpers/contrib/hardening/ssh/templates/sshd_config rename to charmhelpers/contrib/hardening/ssh/templates/sshd_config diff --git a/hooks/charmhelpers/contrib/hardening/templating.py b/charmhelpers/contrib/hardening/templating.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/templating.py rename to charmhelpers/contrib/hardening/templating.py diff --git a/hooks/charmhelpers/contrib/hardening/utils.py b/charmhelpers/contrib/hardening/utils.py similarity index 100% rename from hooks/charmhelpers/contrib/hardening/utils.py rename to charmhelpers/contrib/hardening/utils.py diff --git a/hooks/charmhelpers/contrib/network/__init__.py b/charmhelpers/contrib/network/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/network/__init__.py rename to charmhelpers/contrib/network/__init__.py diff --git a/hooks/charmhelpers/contrib/network/ip.py b/charmhelpers/contrib/network/ip.py similarity index 100% rename from hooks/charmhelpers/contrib/network/ip.py rename to charmhelpers/contrib/network/ip.py diff --git a/hooks/charmhelpers/contrib/openstack/__init__.py b/charmhelpers/contrib/openstack/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/__init__.py rename to charmhelpers/contrib/openstack/__init__.py diff --git a/hooks/charmhelpers/contrib/openstack/alternatives.py b/charmhelpers/contrib/openstack/alternatives.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/alternatives.py rename to charmhelpers/contrib/openstack/alternatives.py diff --git a/hooks/charmhelpers/contrib/openstack/amulet/__init__.py b/charmhelpers/contrib/openstack/amulet/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/amulet/__init__.py rename to charmhelpers/contrib/openstack/amulet/__init__.py diff --git a/hooks/charmhelpers/contrib/openstack/amulet/deployment.py b/charmhelpers/contrib/openstack/amulet/deployment.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/amulet/deployment.py rename to charmhelpers/contrib/openstack/amulet/deployment.py diff --git a/hooks/charmhelpers/contrib/openstack/amulet/utils.py b/charmhelpers/contrib/openstack/amulet/utils.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/amulet/utils.py rename to charmhelpers/contrib/openstack/amulet/utils.py diff --git a/hooks/charmhelpers/contrib/openstack/cert_utils.py b/charmhelpers/contrib/openstack/cert_utils.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/cert_utils.py rename to charmhelpers/contrib/openstack/cert_utils.py diff --git a/hooks/charmhelpers/contrib/openstack/context.py b/charmhelpers/contrib/openstack/context.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/context.py rename to charmhelpers/contrib/openstack/context.py diff --git a/hooks/charmhelpers/contrib/openstack/exceptions.py b/charmhelpers/contrib/openstack/exceptions.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/exceptions.py rename to charmhelpers/contrib/openstack/exceptions.py diff --git a/hooks/charmhelpers/contrib/openstack/files/__init__.py b/charmhelpers/contrib/openstack/files/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/files/__init__.py rename to charmhelpers/contrib/openstack/files/__init__.py diff --git a/hooks/charmhelpers/contrib/openstack/files/check_haproxy.sh b/charmhelpers/contrib/openstack/files/check_haproxy.sh similarity index 100% rename from hooks/charmhelpers/contrib/openstack/files/check_haproxy.sh rename to charmhelpers/contrib/openstack/files/check_haproxy.sh diff --git a/hooks/charmhelpers/contrib/openstack/files/check_haproxy_queue_depth.sh b/charmhelpers/contrib/openstack/files/check_haproxy_queue_depth.sh similarity index 100% rename from hooks/charmhelpers/contrib/openstack/files/check_haproxy_queue_depth.sh rename to charmhelpers/contrib/openstack/files/check_haproxy_queue_depth.sh diff --git a/hooks/charmhelpers/contrib/openstack/ha/__init__.py b/charmhelpers/contrib/openstack/ha/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/ha/__init__.py rename to charmhelpers/contrib/openstack/ha/__init__.py diff --git a/hooks/charmhelpers/contrib/openstack/ha/utils.py b/charmhelpers/contrib/openstack/ha/utils.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/ha/utils.py rename to charmhelpers/contrib/openstack/ha/utils.py diff --git a/hooks/charmhelpers/contrib/openstack/ip.py b/charmhelpers/contrib/openstack/ip.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/ip.py rename to charmhelpers/contrib/openstack/ip.py diff --git a/hooks/charmhelpers/contrib/openstack/keystone.py b/charmhelpers/contrib/openstack/keystone.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/keystone.py rename to charmhelpers/contrib/openstack/keystone.py diff --git a/hooks/charmhelpers/contrib/openstack/neutron.py b/charmhelpers/contrib/openstack/neutron.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/neutron.py rename to charmhelpers/contrib/openstack/neutron.py diff --git a/hooks/charmhelpers/contrib/openstack/ssh_migrations.py b/charmhelpers/contrib/openstack/ssh_migrations.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/ssh_migrations.py rename to charmhelpers/contrib/openstack/ssh_migrations.py diff --git a/hooks/charmhelpers/contrib/openstack/templates/__init__.py b/charmhelpers/contrib/openstack/templates/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/__init__.py rename to charmhelpers/contrib/openstack/templates/__init__.py diff --git a/hooks/charmhelpers/contrib/openstack/templates/ceph.conf b/charmhelpers/contrib/openstack/templates/ceph.conf similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/ceph.conf rename to charmhelpers/contrib/openstack/templates/ceph.conf diff --git a/hooks/charmhelpers/contrib/openstack/templates/git.upstart b/charmhelpers/contrib/openstack/templates/git.upstart similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/git.upstart rename to charmhelpers/contrib/openstack/templates/git.upstart diff --git a/hooks/charmhelpers/contrib/openstack/templates/haproxy.cfg b/charmhelpers/contrib/openstack/templates/haproxy.cfg similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/haproxy.cfg rename to charmhelpers/contrib/openstack/templates/haproxy.cfg diff --git a/hooks/charmhelpers/contrib/openstack/templates/memcached.conf b/charmhelpers/contrib/openstack/templates/memcached.conf similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/memcached.conf rename to charmhelpers/contrib/openstack/templates/memcached.conf diff --git a/hooks/charmhelpers/contrib/openstack/templates/openstack_https_frontend b/charmhelpers/contrib/openstack/templates/openstack_https_frontend similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/openstack_https_frontend rename to charmhelpers/contrib/openstack/templates/openstack_https_frontend diff --git a/hooks/charmhelpers/contrib/openstack/templates/openstack_https_frontend.conf b/charmhelpers/contrib/openstack/templates/openstack_https_frontend.conf similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/openstack_https_frontend.conf rename to charmhelpers/contrib/openstack/templates/openstack_https_frontend.conf diff --git a/hooks/charmhelpers/contrib/openstack/templates/section-keystone-authtoken b/charmhelpers/contrib/openstack/templates/section-keystone-authtoken similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/section-keystone-authtoken rename to charmhelpers/contrib/openstack/templates/section-keystone-authtoken diff --git a/hooks/charmhelpers/contrib/openstack/templates/section-keystone-authtoken-legacy b/charmhelpers/contrib/openstack/templates/section-keystone-authtoken-legacy similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/section-keystone-authtoken-legacy rename to charmhelpers/contrib/openstack/templates/section-keystone-authtoken-legacy diff --git a/hooks/charmhelpers/contrib/openstack/templates/section-keystone-authtoken-mitaka b/charmhelpers/contrib/openstack/templates/section-keystone-authtoken-mitaka similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/section-keystone-authtoken-mitaka rename to charmhelpers/contrib/openstack/templates/section-keystone-authtoken-mitaka diff --git a/hooks/charmhelpers/contrib/openstack/templates/section-oslo-cache b/charmhelpers/contrib/openstack/templates/section-oslo-cache similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/section-oslo-cache rename to charmhelpers/contrib/openstack/templates/section-oslo-cache diff --git a/hooks/charmhelpers/contrib/openstack/templates/section-oslo-middleware b/charmhelpers/contrib/openstack/templates/section-oslo-middleware similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/section-oslo-middleware rename to charmhelpers/contrib/openstack/templates/section-oslo-middleware diff --git a/hooks/charmhelpers/contrib/openstack/templates/section-oslo-notifications b/charmhelpers/contrib/openstack/templates/section-oslo-notifications similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/section-oslo-notifications rename to charmhelpers/contrib/openstack/templates/section-oslo-notifications diff --git a/hooks/charmhelpers/contrib/openstack/templates/section-rabbitmq-oslo b/charmhelpers/contrib/openstack/templates/section-rabbitmq-oslo similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/section-rabbitmq-oslo rename to charmhelpers/contrib/openstack/templates/section-rabbitmq-oslo diff --git a/hooks/charmhelpers/contrib/openstack/templates/section-zeromq b/charmhelpers/contrib/openstack/templates/section-zeromq similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/section-zeromq rename to charmhelpers/contrib/openstack/templates/section-zeromq diff --git a/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-api.conf b/charmhelpers/contrib/openstack/templates/wsgi-openstack-api.conf similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-api.conf rename to charmhelpers/contrib/openstack/templates/wsgi-openstack-api.conf diff --git a/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-metadata.conf b/charmhelpers/contrib/openstack/templates/wsgi-openstack-metadata.conf similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-metadata.conf rename to charmhelpers/contrib/openstack/templates/wsgi-openstack-metadata.conf diff --git a/hooks/charmhelpers/contrib/openstack/templating.py b/charmhelpers/contrib/openstack/templating.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/templating.py rename to charmhelpers/contrib/openstack/templating.py diff --git a/hooks/charmhelpers/contrib/openstack/utils.py b/charmhelpers/contrib/openstack/utils.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/utils.py rename to charmhelpers/contrib/openstack/utils.py diff --git a/hooks/charmhelpers/contrib/openstack/vaultlocker.py b/charmhelpers/contrib/openstack/vaultlocker.py similarity index 100% rename from hooks/charmhelpers/contrib/openstack/vaultlocker.py rename to charmhelpers/contrib/openstack/vaultlocker.py diff --git a/hooks/charmhelpers/contrib/python/__init__.py b/charmhelpers/contrib/python/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/python/__init__.py rename to charmhelpers/contrib/python/__init__.py diff --git a/hooks/charmhelpers/contrib/python/packages.py b/charmhelpers/contrib/python/packages.py similarity index 100% rename from hooks/charmhelpers/contrib/python/packages.py rename to charmhelpers/contrib/python/packages.py diff --git a/hooks/charmhelpers/contrib/storage/__init__.py b/charmhelpers/contrib/storage/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/storage/__init__.py rename to charmhelpers/contrib/storage/__init__.py diff --git a/hooks/charmhelpers/contrib/storage/linux/__init__.py b/charmhelpers/contrib/storage/linux/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/storage/linux/__init__.py rename to charmhelpers/contrib/storage/linux/__init__.py diff --git a/hooks/charmhelpers/contrib/storage/linux/bcache.py b/charmhelpers/contrib/storage/linux/bcache.py similarity index 100% rename from hooks/charmhelpers/contrib/storage/linux/bcache.py rename to charmhelpers/contrib/storage/linux/bcache.py diff --git a/hooks/charmhelpers/contrib/storage/linux/ceph.py b/charmhelpers/contrib/storage/linux/ceph.py similarity index 100% rename from hooks/charmhelpers/contrib/storage/linux/ceph.py rename to charmhelpers/contrib/storage/linux/ceph.py diff --git a/hooks/charmhelpers/contrib/storage/linux/loopback.py b/charmhelpers/contrib/storage/linux/loopback.py similarity index 100% rename from hooks/charmhelpers/contrib/storage/linux/loopback.py rename to charmhelpers/contrib/storage/linux/loopback.py diff --git a/hooks/charmhelpers/contrib/storage/linux/lvm.py b/charmhelpers/contrib/storage/linux/lvm.py similarity index 100% rename from hooks/charmhelpers/contrib/storage/linux/lvm.py rename to charmhelpers/contrib/storage/linux/lvm.py diff --git a/hooks/charmhelpers/contrib/storage/linux/utils.py b/charmhelpers/contrib/storage/linux/utils.py similarity index 100% rename from hooks/charmhelpers/contrib/storage/linux/utils.py rename to charmhelpers/contrib/storage/linux/utils.py diff --git a/hooks/charmhelpers/core/__init__.py b/charmhelpers/core/__init__.py similarity index 100% rename from hooks/charmhelpers/core/__init__.py rename to charmhelpers/core/__init__.py diff --git a/hooks/charmhelpers/core/decorators.py b/charmhelpers/core/decorators.py similarity index 100% rename from hooks/charmhelpers/core/decorators.py rename to charmhelpers/core/decorators.py diff --git a/hooks/charmhelpers/core/files.py b/charmhelpers/core/files.py similarity index 100% rename from hooks/charmhelpers/core/files.py rename to charmhelpers/core/files.py diff --git a/hooks/charmhelpers/core/fstab.py b/charmhelpers/core/fstab.py similarity index 100% rename from hooks/charmhelpers/core/fstab.py rename to charmhelpers/core/fstab.py diff --git a/hooks/charmhelpers/core/hookenv.py b/charmhelpers/core/hookenv.py similarity index 100% rename from hooks/charmhelpers/core/hookenv.py rename to charmhelpers/core/hookenv.py diff --git a/hooks/charmhelpers/core/host.py b/charmhelpers/core/host.py similarity index 100% rename from hooks/charmhelpers/core/host.py rename to charmhelpers/core/host.py diff --git a/hooks/charmhelpers/core/host_factory/__init__.py b/charmhelpers/core/host_factory/__init__.py similarity index 100% rename from hooks/charmhelpers/core/host_factory/__init__.py rename to charmhelpers/core/host_factory/__init__.py diff --git a/hooks/charmhelpers/core/host_factory/centos.py b/charmhelpers/core/host_factory/centos.py similarity index 100% rename from hooks/charmhelpers/core/host_factory/centos.py rename to charmhelpers/core/host_factory/centos.py diff --git a/hooks/charmhelpers/core/host_factory/ubuntu.py b/charmhelpers/core/host_factory/ubuntu.py similarity index 100% rename from hooks/charmhelpers/core/host_factory/ubuntu.py rename to charmhelpers/core/host_factory/ubuntu.py diff --git a/hooks/charmhelpers/core/hugepage.py b/charmhelpers/core/hugepage.py similarity index 100% rename from hooks/charmhelpers/core/hugepage.py rename to charmhelpers/core/hugepage.py diff --git a/hooks/charmhelpers/core/kernel.py b/charmhelpers/core/kernel.py similarity index 100% rename from hooks/charmhelpers/core/kernel.py rename to charmhelpers/core/kernel.py diff --git a/hooks/charmhelpers/core/kernel_factory/__init__.py b/charmhelpers/core/kernel_factory/__init__.py similarity index 100% rename from hooks/charmhelpers/core/kernel_factory/__init__.py rename to charmhelpers/core/kernel_factory/__init__.py diff --git a/hooks/charmhelpers/core/kernel_factory/centos.py b/charmhelpers/core/kernel_factory/centos.py similarity index 100% rename from hooks/charmhelpers/core/kernel_factory/centos.py rename to charmhelpers/core/kernel_factory/centos.py diff --git a/hooks/charmhelpers/core/kernel_factory/ubuntu.py b/charmhelpers/core/kernel_factory/ubuntu.py similarity index 100% rename from hooks/charmhelpers/core/kernel_factory/ubuntu.py rename to charmhelpers/core/kernel_factory/ubuntu.py diff --git a/hooks/charmhelpers/core/services/__init__.py b/charmhelpers/core/services/__init__.py similarity index 100% rename from hooks/charmhelpers/core/services/__init__.py rename to charmhelpers/core/services/__init__.py diff --git a/hooks/charmhelpers/core/services/base.py b/charmhelpers/core/services/base.py similarity index 100% rename from hooks/charmhelpers/core/services/base.py rename to charmhelpers/core/services/base.py diff --git a/hooks/charmhelpers/core/services/helpers.py b/charmhelpers/core/services/helpers.py similarity index 100% rename from hooks/charmhelpers/core/services/helpers.py rename to charmhelpers/core/services/helpers.py diff --git a/hooks/charmhelpers/core/strutils.py b/charmhelpers/core/strutils.py similarity index 100% rename from hooks/charmhelpers/core/strutils.py rename to charmhelpers/core/strutils.py diff --git a/hooks/charmhelpers/core/sysctl.py b/charmhelpers/core/sysctl.py similarity index 100% rename from hooks/charmhelpers/core/sysctl.py rename to charmhelpers/core/sysctl.py diff --git a/hooks/charmhelpers/core/templating.py b/charmhelpers/core/templating.py similarity index 100% rename from hooks/charmhelpers/core/templating.py rename to charmhelpers/core/templating.py diff --git a/hooks/charmhelpers/core/unitdata.py b/charmhelpers/core/unitdata.py similarity index 100% rename from hooks/charmhelpers/core/unitdata.py rename to charmhelpers/core/unitdata.py diff --git a/hooks/charmhelpers/fetch/__init__.py b/charmhelpers/fetch/__init__.py similarity index 100% rename from hooks/charmhelpers/fetch/__init__.py rename to charmhelpers/fetch/__init__.py diff --git a/hooks/charmhelpers/fetch/archiveurl.py b/charmhelpers/fetch/archiveurl.py similarity index 100% rename from hooks/charmhelpers/fetch/archiveurl.py rename to charmhelpers/fetch/archiveurl.py diff --git a/hooks/charmhelpers/fetch/bzrurl.py b/charmhelpers/fetch/bzrurl.py similarity index 100% rename from hooks/charmhelpers/fetch/bzrurl.py rename to charmhelpers/fetch/bzrurl.py diff --git a/hooks/charmhelpers/fetch/centos.py b/charmhelpers/fetch/centos.py similarity index 100% rename from hooks/charmhelpers/fetch/centos.py rename to charmhelpers/fetch/centos.py diff --git a/hooks/charmhelpers/fetch/giturl.py b/charmhelpers/fetch/giturl.py similarity index 100% rename from hooks/charmhelpers/fetch/giturl.py rename to charmhelpers/fetch/giturl.py diff --git a/hooks/charmhelpers/fetch/snap.py b/charmhelpers/fetch/snap.py similarity index 100% rename from hooks/charmhelpers/fetch/snap.py rename to charmhelpers/fetch/snap.py diff --git a/hooks/charmhelpers/fetch/ubuntu.py b/charmhelpers/fetch/ubuntu.py similarity index 100% rename from hooks/charmhelpers/fetch/ubuntu.py rename to charmhelpers/fetch/ubuntu.py diff --git a/hooks/charmhelpers/osplatform.py b/charmhelpers/osplatform.py similarity index 100% rename from hooks/charmhelpers/osplatform.py rename to charmhelpers/osplatform.py diff --git a/hooks/charmhelpers/payload/__init__.py b/charmhelpers/payload/__init__.py similarity index 100% rename from hooks/charmhelpers/payload/__init__.py rename to charmhelpers/payload/__init__.py diff --git a/hooks/charmhelpers/payload/archive.py b/charmhelpers/payload/archive.py similarity index 100% rename from hooks/charmhelpers/payload/archive.py rename to charmhelpers/payload/archive.py diff --git a/hooks/charmhelpers/payload/execd.py b/charmhelpers/payload/execd.py similarity index 100% rename from hooks/charmhelpers/payload/execd.py rename to charmhelpers/payload/execd.py diff --git a/hooks/horizon_contexts.py b/hooks/horizon_contexts.py index f4f19e2a..4577729f 100644 --- a/hooks/horizon_contexts.py +++ b/hooks/horizon_contexts.py @@ -14,6 +14,10 @@ # vim: set ts=4:et +from base64 import b64decode +import os +import json + from charmhelpers.core.hookenv import ( config, relation_ids, @@ -42,10 +46,6 @@ from charmhelpers.contrib.network.ip import ( from charmhelpers.core.host import pwgen -from base64 import b64decode -import os -import json - VALID_ENDPOINT_TYPES = { 'PUBLICURL': 'publicURL', 'INTERNALURL': 'internalURL', @@ -154,7 +154,8 @@ class IdentityServiceContext(OSContextGenerator): if len(regions) > 1: avail_regions = map(lambda r: {'endpoint': r[0], 'title': r[1]}, regions) - ctxt['regions'] = sorted(avail_regions) + ctxt['regions'] = sorted(avail_regions, + key=lambda k: k['endpoint']) # Allow the endpoint types to be specified via a config parameter. # The config parameter accepts either: @@ -202,8 +203,7 @@ class HorizonContext(OSContextGenerator): 'multi_domain': False if config('default-domain') else True, "default_create_volume": config("default-create-volume"), 'image_formats': config('image-formats'), - 'api_result_limit': config('api-result-limit') - if config('api-result-limit') > 0 else 1000, + 'api_result_limit': config('api-result-limit') or 1000 } return ctxt @@ -252,7 +252,7 @@ class ApacheSSLContext(OSContextGenerator): cert_out.write(b64decode(ssl_cert)) with open('/etc/ssl/private/dashboard.key', 'w') as key_out: key_out.write(b64decode(ssl_key)) - os.chmod('/etc/ssl/private/dashboard.key', 0600) + os.chmod('/etc/ssl/private/dashboard.key', 0o600) ctxt = { 'ssl_configured': True, 'ssl_cert': '/etc/ssl/certs/dashboard.cert', diff --git a/hooks/horizon_hooks.py b/hooks/horizon_hooks.py index 9c724451..d6e13905 100755 --- a/hooks/horizon_hooks.py +++ b/hooks/horizon_hooks.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # # Copyright 2016 Canonical Ltd # @@ -16,7 +16,22 @@ # vim: set ts=4:et +from base64 import b64decode +import os import sys + + +_path = os.path.dirname(os.path.realpath(__file__)) +_root = os.path.abspath(os.path.join(_path, '..')) + + +def _add_path(path): + if path not in sys.path: + sys.path.insert(1, path) + + +_add_path(_root) + from charmhelpers.core.hookenv import ( Hooks, UnregisteredHookError, log, @@ -54,7 +69,23 @@ from charmhelpers.contrib.openstack.utils import ( from charmhelpers.contrib.openstack.ha.utils import ( update_dns_ha_resource_params, ) -from horizon_utils import ( +from charmhelpers.contrib.network.ip import ( + get_iface_for_address, + get_netmask_for_address, + is_ipv6, + get_relation_ip, +) +from charmhelpers.contrib.openstack.cert_utils import ( + get_certificate_request, + process_certificates, +) +from charmhelpers.contrib.hahelpers.apache import install_ca_cert +from charmhelpers.contrib.hahelpers.cluster import get_hacluster_config +from charmhelpers.payload.execd import execd_preinstall +from charmhelpers.contrib.charmsupport import nrpe +from charmhelpers.contrib.hardening.harden import harden + +from hooks.horizon_utils import ( determine_packages, register_configs, restart_map, @@ -71,22 +102,6 @@ from horizon_utils import ( pause_unit_helper, resume_unit_helper, ) -from charmhelpers.contrib.network.ip import ( - get_iface_for_address, - get_netmask_for_address, - is_ipv6, - get_relation_ip, -) -from charmhelpers.contrib.openstack.cert_utils import ( - get_certificate_request, - process_certificates, -) -from charmhelpers.contrib.hahelpers.apache import install_ca_cert -from charmhelpers.contrib.hahelpers.cluster import get_hacluster_config -from charmhelpers.payload.execd import execd_preinstall -from charmhelpers.contrib.charmsupport import nrpe -from charmhelpers.contrib.hardening.harden import harden -from base64 import b64decode hooks = Hooks() CONFIGS = register_configs() diff --git a/hooks/horizon_utils.py b/hooks/horizon_utils.py index 8aeeaacb..6ad54a38 100644 --- a/hooks/horizon_utils.py +++ b/hooks/horizon_utils.py @@ -13,12 +13,12 @@ # limitations under the License. # vim: set ts=4:et -import horizon_contexts + +from collections import OrderedDict import os import subprocess import time import tarfile -from collections import OrderedDict import charmhelpers.contrib.openstack.context as context import charmhelpers.contrib.openstack.templating as templating @@ -54,6 +54,8 @@ from charmhelpers.fetch import ( apt_install ) +import hooks.horizon_contexts as horizon_contexts + BASE_PACKAGES = [ 'haproxy', 'memcached', @@ -212,7 +214,7 @@ def restart_map(): that should be restarted when file changes. ''' _map = [] - for f, ctxt in CONFIG_FILES.iteritems(): + for f, ctxt in CONFIG_FILES.items(): svcs = [] for svc in ctxt['services']: svcs.append(svc) diff --git a/templates/haproxy.cfg b/templates/haproxy.cfg index 1775f05e..e55ed17f 100644 --- a/templates/haproxy.cfg +++ b/templates/haproxy.cfg @@ -43,7 +43,7 @@ listen stats stats auth admin:{{ stat_password }} {% if units %} -{% for service, ports in service_ports.iteritems() -%} +{% for service, ports in service_ports.items() -%} listen {{ service }} bind *:{{ ports[0] }} {% if prefer_ipv6 -%} @@ -51,7 +51,7 @@ listen {{ service }} {%- endif %} balance source option tcplog - {% for unit, address in units.iteritems() -%} + {% for unit, address in units.items() -%} server {{ unit }} {{ address }}:{{ ports[1] }} check {% endfor %} {% endfor %} diff --git a/test-requirements.txt b/test-requirements.txt index 9edd4bbf..169ce6eb 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -5,7 +5,8 @@ coverage>=3.6 mock>=1.2 flake8>=2.2.4,<=2.4.1 os-testr>=0.4.1 -charm-tools>=2.0.0 +#charm-tools>=2.0.0 +git+https://github.com/juju/charm-tools.git#egg=charmtools requests==2.6.0 # BEGIN: Amulet OpenStack Charm Helper Requirements # Liberty client lower constraints diff --git a/tests/basic_deployment.py b/tests/basic_deployment.py index 79a8448a..2e924746 100644 --- a/tests/basic_deployment.py +++ b/tests/basic_deployment.py @@ -368,7 +368,7 @@ class OpenstackDashboardBasicDeployment(OpenStackAmuletDeployment): self.d.configure(juju_service, set_alternate) sleep_time = 30 - for s, conf_file in services.iteritems(): + for s, conf_file in services.items(): u.log.debug("Checking that service restarted: {}".format(s)) if not u.validate_service_config_changed(sentry, mtime, s, conf_file, diff --git a/tox.ini b/tox.ini index 930d5264..bb335887 100644 --- a/tox.ini +++ b/tox.ini @@ -2,8 +2,9 @@ # This file is managed centrally by release-tools and should not be modified # within individual charm repos. [tox] -envlist = pep8,py27 +envlist = pep8,py27,py35,py36 skipsdist = True +skip_missing_interpreters = True [testenv] setenv = VIRTUAL_ENV={envdir} @@ -17,9 +18,7 @@ whitelist_externals = juju passenv = HOME TERM AMULET_* CS_API_* [testenv:py27] -basepython = python2.7 -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt +commands = /bin/true [testenv:py35] basepython = python3.5 @@ -32,7 +31,7 @@ deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt [testenv:pep8] -basepython = python2.7 +basepython = python3 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt commands = flake8 {posargs} hooks unit_tests tests actions lib diff --git a/unit_tests/__init__.py b/unit_tests/__init__.py index 7eb3cc6b..5f289ae9 100644 --- a/unit_tests/__init__.py +++ b/unit_tests/__init__.py @@ -12,7 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os import sys -sys.path.append('actions') -sys.path.append('hooks') +_path = os.path.dirname(os.path.realpath(__file__)) +_root = os.path.abspath(os.path.join(_path, '..')) + + +def _add_path(path): + if path not in sys.path: + sys.path.insert(1, path) + +_add_path(_root) diff --git a/unit_tests/test_actions.py b/unit_tests/test_actions.py index 2edcc147..b58879ef 100644 --- a/unit_tests/test_actions.py +++ b/unit_tests/test_actions.py @@ -15,11 +15,11 @@ import mock from mock import patch -from test_utils import CharmTestCase +from unit_tests.test_utils import CharmTestCase -with patch('horizon_utils.register_configs') as configs: +with patch('hooks.horizon_utils.register_configs') as configs: configs.return_value = 'test-config' - import actions + import actions.actions as actions class PauseTestCase(CharmTestCase): diff --git a/unit_tests/test_actions_openstack_upgrade.py b/unit_tests/test_actions_openstack_upgrade.py index 8c752336..7e5c7150 100644 --- a/unit_tests/test_actions_openstack_upgrade.py +++ b/unit_tests/test_actions_openstack_upgrade.py @@ -28,12 +28,10 @@ mock_apt.apt_pkg = MagicMock() with patch('charmhelpers.contrib.hardening.harden.harden') as mock_dec: mock_dec.side_effect = (lambda *dargs, **dkwargs: lambda f: lambda *args, **kwargs: f(*args, **kwargs)) - with patch('horizon_utils.register_configs') as register_configs: - import openstack_upgrade + with patch('hooks.horizon_utils.register_configs') as register_configs: + import actions.openstack_upgrade as openstack_upgrade -from test_utils import ( - CharmTestCase -) +from unit_tests.test_utils import CharmTestCase TO_PATCH = [ 'CONFIGS', diff --git a/unit_tests/test_horizon_contexts.py b/unit_tests/test_horizon_contexts.py index 8a81a67e..b366e60e 100644 --- a/unit_tests/test_horizon_contexts.py +++ b/unit_tests/test_horizon_contexts.py @@ -12,13 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -from mock import MagicMock, patch, call -import horizon_contexts from contextlib import contextmanager +import io +from mock import MagicMock, patch, call -from test_utils import ( - CharmTestCase -) +import hooks.horizon_contexts as horizon_contexts + +from unit_tests.test_utils import CharmTestCase TO_PATCH = [ 'config', @@ -42,14 +42,14 @@ def patch_open(): Yields the mock for "open" and "file", respectively.''' mock_open = MagicMock(spec=open) - mock_file = MagicMock(spec=file) + mock_file = MagicMock(spec=io.FileIO) @contextmanager def stub_open(*args, **kwargs): mock_open(*args, **kwargs) yield mock_file - with patch('__builtin__.open', stub_open): + with patch('builtins.open', stub_open): yield mock_open, mock_file @@ -140,9 +140,11 @@ class TestHorizonContexts(CharmTestCase): def test_HorizonContext_defaults(self): self.assertEqual(horizon_contexts.HorizonContext()(), - {'compress_offline': True, 'debug': False, + {'compress_offline': True, + 'debug': False, 'customization_module': '', - 'default_role': 'Member', 'webroot': '/horizon', + 'default_role': 'Member', + 'webroot': '/horizon', 'ubuntu_theme': True, 'default_theme': None, 'custom_theme': False, @@ -541,7 +543,7 @@ class TestHorizonContexts(CharmTestCase): self.assertEqual(horizon_contexts.IdentityServiceContext()(), {}) - @patch("horizon_contexts.format_ipv6_addr") + @patch("hooks.horizon_contexts.format_ipv6_addr") def test_IdentityServiceContext_no_data(self, mock_format_ipv6_addr): self.relation_ids.return_value = ['foo'] self.related_units.return_value = ['bar'] @@ -550,7 +552,7 @@ class TestHorizonContexts(CharmTestCase): self.assertEqual(horizon_contexts.IdentityServiceContext()(), {}) - @patch("horizon_contexts.format_ipv6_addr") + @patch("hooks.horizon_contexts.format_ipv6_addr") def test_IdentityServiceContext_data(self, mock_format_ipv6_addr): mock_format_ipv6_addr.return_value = "foo" self.relation_ids.return_value = ['foo'] @@ -562,7 +564,7 @@ class TestHorizonContexts(CharmTestCase): {'service_host': 'foo', 'service_port': 5000, 'api_version': '2', 'service_protocol': 'http'}) - @patch("horizon_contexts.format_ipv6_addr") + @patch("hooks.horizon_contexts.format_ipv6_addr") def test_IdentityServiceContext_single_region(self, mock_format_ipv6_addr): mock_format_ipv6_addr.return_value = "foo" self.relation_ids.return_value = ['foo'] @@ -575,7 +577,7 @@ class TestHorizonContexts(CharmTestCase): {'service_host': 'foo', 'service_port': 5000, 'api_version': '2', 'service_protocol': 'http'}) - @patch("horizon_contexts.format_ipv6_addr") + @patch("hooks.horizon_contexts.format_ipv6_addr") def test_IdentityServiceContext_multi_region(self, mock_format_ipv6_addr): mock_format_ipv6_addr.return_value = "foo" self.relation_ids.return_value = ['foo'] @@ -592,7 +594,7 @@ class TestHorizonContexts(CharmTestCase): {'endpoint': 'http://foo:5000/v2.0', 'title': 'regionTwo'}]}) - @patch("horizon_contexts.format_ipv6_addr") + @patch("hooks.horizon_contexts.format_ipv6_addr") def test_IdentityServiceContext_api3(self, mock_format_ipv6_addr): mock_format_ipv6_addr.return_value = "foo" self.relation_ids.return_value = ['foo'] @@ -612,7 +614,7 @@ class TestHorizonContexts(CharmTestCase): 'admin_domain_id': 'admindomainid', 'service_protocol': 'http'}) - @patch("horizon_contexts.format_ipv6_addr") + @patch("hooks.horizon_contexts.format_ipv6_addr") def test_IdentityServiceContext_api3_missing(self, mock_format_ipv6_addr): mock_format_ipv6_addr.return_value = "foo" self.relation_ids.return_value = ['foo'] diff --git a/unit_tests/test_horizon_hooks.py b/unit_tests/test_horizon_hooks.py index 53446b49..222045e2 100644 --- a/unit_tests/test_horizon_hooks.py +++ b/unit_tests/test_horizon_hooks.py @@ -15,13 +15,13 @@ import sys from mock import MagicMock, patch, call -from test_utils import CharmTestCase +from unit_tests.test_utils import CharmTestCase # python-apt is not installed as part of test-requirements but is imported by # some charmhelpers modules so create a fake import. sys.modules['apt'] = MagicMock() -import horizon_utils as utils +import hooks.horizon_utils as utils _register_configs = utils.register_configs utils.register_configs = MagicMock() @@ -29,7 +29,7 @@ with patch('charmhelpers.contrib.hardening.harden.harden') as mock_dec: mock_dec.side_effect = (lambda *dargs, **dkwargs: lambda f: lambda *args, **kwargs: f(*args, **kwargs)) - import horizon_hooks as hooks + import hooks.horizon_hooks as hooks RESTART_MAP = utils.restart_map() utils.register_configs = _register_configs @@ -132,13 +132,15 @@ class TestHorizonHooks(CharmTestCase): ) self.assertTrue(self.apt_install.called) - @patch('horizon_hooks.check_custom_theme') + @patch('time.sleep') + @patch('hooks.horizon_hooks.check_custom_theme') @patch.object(hooks, 'determine_packages') @patch.object(utils, 'path_hash') @patch.object(utils, 'service') def test_upgrade_charm_hook(self, _service, _hash, _determine_packages, - _custom_theme): + _custom_theme, + _sleep): _determine_packages.return_value = [] side_effects = [] [side_effects.append(None) for f in RESTART_MAP.keys()] @@ -158,6 +160,9 @@ class TestHorizonHooks(CharmTestCase): ] self.assertEqual(ex, _service.call_args_list) self.assertTrue(_custom_theme.called) + # we mock out time.sleep, as otherwise the called code in + # restart_on_change actually sleeps for 9 seconds, + _sleep.assert_called() def test_ha_joined_complete_config(self): conf = { @@ -261,8 +266,8 @@ class TestHorizonHooks(CharmTestCase): self.assertTrue(self.update_dns_ha_resource_params.called) self.relation_set.assert_called_with(**args) - @patch('horizon_hooks.check_custom_theme') - @patch('horizon_hooks.keystone_joined') + @patch('hooks.horizon_hooks.check_custom_theme') + @patch('hooks.horizon_hooks.keystone_joined') def test_config_changed_no_upgrade(self, _joined, _custom_theme): def relation_ids_side_effect(rname): return { @@ -301,7 +306,7 @@ class TestHorizonHooks(CharmTestCase): self.open_port.assert_has_calls([call(80), call(443)]) self.assertTrue(_custom_theme.called) - @patch('horizon_hooks.check_custom_theme') + @patch('hooks.horizon_hooks.check_custom_theme') def test_config_changed_do_upgrade(self, _custom_theme): self.relation_ids.return_value = [] self.test_config.set('openstack-origin', 'cloud:precise-grizzly') diff --git a/unit_tests/test_horizon_utils.py b/unit_tests/test_horizon_utils.py index dea1229c..64441ff0 100644 --- a/unit_tests/test_horizon_utils.py +++ b/unit_tests/test_horizon_utils.py @@ -16,11 +16,10 @@ from mock import MagicMock, patch, call from collections import OrderedDict import charmhelpers.contrib.openstack.templating as templating templating.OSConfigRenderer = MagicMock() -import horizon_utils as horizon_utils -from test_utils import ( - CharmTestCase -) +import hooks.horizon_utils as horizon_utils + +from unit_tests.test_utils import CharmTestCase TO_PATCH = [ 'config', @@ -46,14 +45,16 @@ class TestHorizonUtils(CharmTestCase): def test_determine_packages(self, _get_os_codename_install_source): _get_os_codename_install_source.return_value = 'icehouse' - self.assertEqual(horizon_utils.determine_packages(), [ - 'haproxy', - 'python-novaclient', - 'python-keystoneclient', - 'openstack-dashboard-ubuntu-theme', - 'python-memcache', - 'openstack-dashboard', - 'memcached']) + self.assertEqual( + sorted(horizon_utils.determine_packages()), + sorted([ + 'haproxy', + 'python-novaclient', + 'python-keystoneclient', + 'openstack-dashboard-ubuntu-theme', + 'python-memcache', + 'openstack-dashboard', + 'memcached'])) @patch.object(horizon_utils, 'get_os_codename_install_source') def test_determine_packages_mitaka(self, _get_os_codename_install_source): diff --git a/unit_tests/test_utils.py b/unit_tests/test_utils.py index ce148df8..bef5ab4d 100644 --- a/unit_tests/test_utils.py +++ b/unit_tests/test_utils.py @@ -36,7 +36,7 @@ def load_config(): if not config: logging.error('Could not find config.yaml in any parent directory ' - 'of %s. ' % file) + 'of %s. ' % __file__) raise Exception return yaml.safe_load(open(config).read())['options'] @@ -49,7 +49,7 @@ def get_default_config(): ''' default_config = {} config = load_config() - for k, v in config.iteritems(): + for k, v in config.items(): if 'default' in v: default_config[k] = v['default'] else: