diff --git a/Makefile b/Makefile index 3a865126..30d836e5 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ #!/usr/bin/make -PYTHON := /usr/bin/env python +PYTHON := /usr/bin/env python3 CHARM_DIR := $(PWD) HOOKS_DIR := $(PWD)/hooks TEST_PREFIX := PYTHONPATH=$(HOOKS_DIR) @@ -21,7 +21,7 @@ sync: bin/charm_helpers_sync.py test: @echo Starting unit tests... - @tox -e py27 + @tox -e py36 functional_test: @echo Starting amulet tests... diff --git a/actions/actions.py b/actions/actions.py index d2af6352..689b8c8d 100755 --- a/actions/actions.py +++ b/actions/actions.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # # Copyright 2016 Canonical Ltd # @@ -15,15 +15,22 @@ # limitations under the License. import os -import sys import re +from subprocess import check_output, CalledProcessError +import sys -from subprocess import ( - check_output, - CalledProcessError, -) -sys.path.append('hooks/') +_path = os.path.dirname(os.path.realpath(__file__)) +_root = os.path.abspath(os.path.join(_path, '..')) +_hooks = os.path.abspath(os.path.join(_path, '../hooks')) + + +def _add_path(path): + if path not in sys.path: + sys.path.insert(1, path) + +_add_path(_root) +_add_path(_hooks) from charmhelpers.core.hookenv import ( action_fail, @@ -33,7 +40,7 @@ from charmhelpers.core.hookenv import ( leader_set, ) -from rabbit_utils import ( +from hooks.rabbit_utils import ( ConfigRenderer, CONFIG_FILES, pause_unit_helper, @@ -80,7 +87,7 @@ def check_queues(args): queue_pattern = re.compile('.*\t[0-9]*') try: queues = check_output(['rabbitmqctl', 'list_queues', - '-p', vhost]).split('\n') + '-p', vhost]).decode('utf-8').split('\n') result = list({queue: size for (queue, size) in [i.split('\t') for i in queues if re.search(queue_pattern, i)] diff --git a/charm-helpers-hooks.yaml b/charm-helpers-hooks.yaml index af7ac56f..b26da1df 100644 --- a/charm-helpers-hooks.yaml +++ b/charm-helpers-hooks.yaml @@ -1,4 +1,4 @@ -destination: hooks/charmhelpers +destination: charmhelpers repo: https://github.com/juju/charm-helpers include: - fetch 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/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 100% rename from hooks/charmhelpers/contrib/hardening/apache/checks/config.py rename to charmhelpers/contrib/hardening/apache/checks/config.py 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 100% rename from hooks/charmhelpers/contrib/hardening/audits/apache.py rename to charmhelpers/contrib/hardening/audits/apache.py 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/peerstorage/__init__.py b/charmhelpers/contrib/peerstorage/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/peerstorage/__init__.py rename to charmhelpers/contrib/peerstorage/__init__.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/ssl/__init__.py b/charmhelpers/contrib/ssl/__init__.py similarity index 100% rename from hooks/charmhelpers/contrib/ssl/__init__.py rename to charmhelpers/contrib/ssl/__init__.py diff --git a/hooks/charmhelpers/contrib/ssl/service.py b/charmhelpers/contrib/ssl/service.py similarity index 100% rename from hooks/charmhelpers/contrib/ssl/service.py rename to charmhelpers/contrib/ssl/service.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/install b/hooks/install index 9be898b7..52bb5278 100755 --- a/hooks/install +++ b/hooks/install @@ -11,7 +11,7 @@ check_and_install() { fi } -PYTHON="python" +PYTHON="python3" for dep in ${DEPS[@]}; do check_and_install ${PYTHON} ${dep} diff --git a/hooks/rabbit_utils.py b/hooks/rabbit_utils.py index a5dc442f..4dadfc19 100644 --- a/hooks/rabbit_utils.py +++ b/hooks/rabbit_utils.py @@ -96,7 +96,7 @@ from charmhelpers.fetch import ( from charmhelpers.fetch import get_upstream_version -PACKAGES = ['rabbitmq-server', 'python-amqplib', 'lockfile-progs'] +PACKAGES = ['rabbitmq-server', 'python3-amqplib', 'lockfile-progs'] VERSION_PACKAGE = 'rabbitmq-server' @@ -191,6 +191,7 @@ def list_vhosts(): """ try: output = subprocess.check_output([RABBITMQ_CTL, 'list_vhosts']) + output = output.decode('utf-8') # NOTE(jamespage): Earlier rabbitmqctl versions append "...done" # to the output of list_vhosts @@ -217,7 +218,7 @@ def create_vhost(vhost): def user_exists(user): cmd = [RABBITMQ_CTL, 'list_users'] - out = subprocess.check_output(cmd) + out = subprocess.check_output(cmd).decode('utf-8') for line in out.split('\n')[1:]: _user = line.split('\t')[0] if _user == user: @@ -367,7 +368,9 @@ def rabbitmqctl_normalized_output(*args): ''' cmd = [RABBITMQ_CTL] cmd.extend(args) - out = subprocess.check_output(cmd, stderr=subprocess.STDOUT) + out = (subprocess + .check_output(cmd, stderr=subprocess.STDOUT) + .decode('utf-8')) # Output is in Erlang External Term Format (ETF). The amount of whitespace # (including newlines in the middle of data structures) in the output @@ -377,7 +380,7 @@ def rabbitmqctl_normalized_output(*args): # # Removing whitespace will let our simple pattern matching work and is a # compromise. - return out.translate(None, ' \t\n') + return out.translate(str.maketrans(dict.fromkeys(' \t\n'))) def wait_app(): @@ -397,7 +400,7 @@ def wait_app(): status_set('blocked', 'RabbitMQ failed to start') try: status_cmd = ['rabbitmqctl', 'status'] - log(subprocess.check_output(status_cmd), DEBUG) + log(subprocess.check_output(status_cmd).decode('utf-8'), DEBUG) except: pass raise ex @@ -531,7 +534,7 @@ def forget_cluster_node(node): return try: rabbitmqctl('forget_cluster_node', node) - except subprocess.CalledProcessError, e: + except subprocess.CalledProcessError as e: if e.returncode == 2: log("Unable to remove node '{}' from cluster. It is either still " "running or already removed. (Output: '{}')" @@ -597,7 +600,7 @@ def execute(cmd, die=False, echo=False): def print_line(l): if echo: - print l.strip('\n') + print(l.strip('\n')) sys.stdout.flush() for l in iter(p.stdout.readline, ''): @@ -726,7 +729,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/hooks/rabbitmq_server_relations.py b/hooks/rabbitmq_server_relations.py index 47c0ecd0..d148f312 100755 --- a/hooks/rabbitmq_server_relations.py +++ b/hooks/rabbitmq_server_relations.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3 # # Copyright 2016 Canonical Ltd # @@ -14,11 +14,21 @@ # See the License for the specific language governing permissions and # limitations under the License. +import glob import os import shutil import sys import subprocess -import glob + +_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) + try: import yaml # flake8: noqa @@ -276,7 +286,7 @@ def amqp_changed(relation_id=None, remote_unit=None): # peerstorage (replaced by leader get/set) and amqp # relations. queues = {} - for k, v in current.iteritems(): + for k, v in current.items(): amqp_rid = k.split('_')[0] x = '_'.join(k.split('_')[1:]) if amqp_rid not in queues: @@ -453,7 +463,7 @@ def update_cookie(leaders_cookie=None): service_stop('rabbitmq-server') with open(rabbit.COOKIE_PATH, 'wb') as out: - out.write(cookie) + out.write(cookie.encode('ascii')) if not is_unit_paused_set(): service_restart('rabbitmq-server') rabbit.wait_app() diff --git a/hooks/ssl_utils.py b/hooks/ssl_utils.py index a5e79e48..af78fbae 100644 --- a/hooks/ssl_utils.py +++ b/hooks/ssl_utils.py @@ -54,13 +54,16 @@ def configure_client_ssl(relation_data): if external_ca: if config('ssl_ca'): if "BEGIN CERTIFICATE" in config('ssl_ca'): - ssl_ca_encoded = base64.b64encode(config('ssl_ca')) + ssl_ca_encoded = (base64 + .b64encode(config('ssl_ca').encode('ascii')) + .decode('ascii')) else: ssl_ca_encoded = config('ssl_ca') relation_data['ssl_ca'] = ssl_ca_encoded return ca = ServiceCA.get_ca() - relation_data['ssl_ca'] = base64.b64encode(ca.get_ca_bundle()) + relation_data['ssl_ca'] = ( + base64.b64encode(ca.get_ca_bundle().encode('ascii')).decode('ascii')) def reconfigure_client_ssl(ssl_enabled=False): diff --git a/scripts/check_rabbitmq.py b/scripts/check_rabbitmq.py index 73f44d4c..f0c747b5 100755 --- a/scripts/check_rabbitmq.py +++ b/scripts/check_rabbitmq.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3 # # # # # # # # # # @@ -25,7 +25,7 @@ import socket try: from amqplib import client_0_8 as amqp except ImportError: - print "CRITICAL: amqplib not found" + print("CRITICAL: amqplib not found") sys.exit(2) from optparse import OptionParser @@ -34,14 +34,14 @@ ROUTE_KEY = "test_mq" def alarm_handler(signum, frame): - print "TIMEOUT waiting for all queued messages to be delivered" + print("TIMEOUT waiting for all queued messages to be delivered") os._exit(1) def get_connection(host_port, user, password, vhost, ssl, ssl_ca): """ connect to the amqp service """ if options.verbose: - print "Connection to %s requested" % host_port + print("Connection to {} requested".format(host_port)) try: params = {'host': host_port, 'userid': user, 'password': password, 'virtual_host': vhost, 'insist': False} @@ -51,15 +51,15 @@ def get_connection(host_port, user, password, vhost, ssl, ssl_ca): ret = amqp.Connection(**params) except (socket.error, TypeError), e: - print "ERROR: Could not connect to RabbitMQ server %s:%d" % ( - options.host, options.port) + print("ERROR: Could not connect to RabbitMQ server {}:{}" + .format(options.host, options.port)) if options.verbose: - print e + print(e) raise sys.exit(2) except Exception as ex: - print("ERROR: Unknown error connecting to RabbitMQ server %s:%d: %s" - % (options.host, options.port, ex)) + print("ERROR: Unknown error connecting to RabbitMQ server {}:{}: {}" + .format(options.host, options.port, ex)) if options.verbose: raise sys.exit(3) @@ -87,12 +87,12 @@ def setup_exchange(conn, exchange_name, exchange_type): chan.exchange_declare(exchange=exchange_name, type=exchange_type, durable=False, auto_delete=False,) if options.verbose: - print "Created new exchange %s (%s)" % ( - exchange_name, exchange_type) + print("Created new exchange {} ({})" + .format(exchange_name, exchange_type)) else: if options.verbose: - print "Exchange %s (%s) is already declared" % ( - exchange_name, exchange_type) + print("Exchange {} ({}) is already declared" + .format(exchange_name, exchange_type)) chan.close() return must_create @@ -104,12 +104,12 @@ class Consumer(object): def __init__(self, conn, exname): self.exname = exname self.connection = conn - self.name = "%s_queue" % exname + self.name = "{}_queue".format(exname) def setup(self): """ sets up the queue and links it to the exchange """ if options.verbose: - print self.name, "setup" + print("{} setup".format(self.name)) chan = self.connection.channel() # setup the queue chan.queue_declare(queue=self.name, durable=False, @@ -125,13 +125,14 @@ class Consumer(object): def loop(self, timeout=5): """ main loop for the consumer client """ - consumer_tag = "callback_%s" % self.name + consumer_tag = "callback_{}".format(self.name) chan = self.connection.channel() def callback(msg): """ callback for message received """ if options.verbose: - print "Client %s saw this message: '%s'" % (self.name, msg.body) + print("Client {} saw this message: '{}'" + .format(self.name, msg.body)) if self.check_end(msg): # we have been asked to quit self._quit = True chan.basic_consume(queue=self.name, no_ack=True, callback=callback, @@ -152,11 +153,11 @@ class Consumer(object): def send_message(chan, exname, counter=None, message=None): """ publish a message on the exchange """ if not message: - message = "This is test message %d" % counter + message = "This is test message {}".format(counter) msg = amqp.Message(message) chan.basic_publish(msg, exchange=exname, routing_key=ROUTE_KEY) if options.verbose: - print "Sent message: %s" % message + print("Sent message: {}".format(message)) def main_loop(conn, exname): @@ -181,15 +182,16 @@ def main_loop(conn, exname): def main(host, port, exname, extype, user, password, vhost, ssl, ssl_ca): """ setup the connection and the communication channel """ sys.stdout = os.fdopen(os.dup(1), "w", 0) - host_port = "%s:%s" % (host, port) + host_port = "{}:{}".format(host, port) conn = get_connection(host_port, user, password, vhost, ssl, ssl_ca) if setup_exchange(conn, exname, extype): if options.verbose: - print "Created %s exchange of type %s" % (exname, extype) + print("Created {} exchange of type {}".format(exname, extype)) else: if options.verbose: - print "Reusing existing exchange %s of type %s" % (exname, extype) + print("Reusing existing exchange {} of type {}" + .format(exname, extype)) ret = main_loop(conn, exname) try: @@ -238,14 +240,15 @@ if __name__ == '__main__': (options, args) = parser.parse_args() if options.verbose: - print """ -Using AMQP setup: host:port=%s:%d exchange_name=%s exchange_type=%s -""" % (options.host, options.port, options.exchange, options.type) + print(""" +Using AMQP setup: host:port={}:{} exchange_name={} exchange_type={} +""".format(options.host, options.port, options.exchange, options.type)) ret = main(options.host, options.port, options.exchange, options.type, options.user, options.password, options.vhost, options.ssl, options.ssl_ca) if ret: - print "Ok: sent and received %d test messages" % options.messages + print("Ok: sent and received {} test messages" + .format(options.messages)) sys.exit(0) - print "ERROR: Could not send/receive test messages" + print("ERROR: Could not send/receive test messages") sys.exit(3) diff --git a/scripts/check_rabbitmq_cluster.py b/scripts/check_rabbitmq_cluster.py index 251da161..1dfcc83c 100755 --- a/scripts/check_rabbitmq_cluster.py +++ b/scripts/check_rabbitmq_cluster.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3 """ Checks for RabbitMQ cluster partitions. diff --git a/scripts/check_rabbitmq_queues.py b/scripts/check_rabbitmq_queues.py index 5e1dff7e..fb15b806 100755 --- a/scripts/check_rabbitmq_queues.py +++ b/scripts/check_rabbitmq_queues.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3 # Copyright (C) 2011, 2012, 2014 Canonical # All Rights Reserved @@ -22,9 +22,10 @@ def gen_stats(data_lines): try: vhost, queue, _, _, m_all, _ = line.split(None, 5) except ValueError: - print "ERROR: problem parsing the stats file" + print("ERROR: problem parsing the stats file") sys.exit(2) - assert m_all.isdigit(), "Message count is not a number: %r" % m_all + assert m_all.isdigit(), ("Message count is not a number: {0!r}" + .format(m_all)) yield vhost, queue, int(m_all) @@ -88,12 +89,12 @@ if __name__ == "__main__": warnings.append( "%s in %s has %s messages" % (queue, vhost, message_no)) if len(criticals) > 0: - print "CRITICAL: %s" % ", ".join(criticals) + print("CRITICAL: {}".format(", ".join(criticals))) sys.exit(2) # XXX: No warnings if there are criticals? elif len(warnings) > 0: - print "WARNING: %s" % ", ".join(warnings) + print("WARNING: {}".format(", ".join(warnings))) sys.exit(1) else: - print "OK" + print("OK") sys.exit(0) diff --git a/templates/rabbitmq-env.conf b/templates/rabbitmq-env.conf index 6595f7b9..f19965e5 100644 --- a/templates/rabbitmq-env.conf +++ b/templates/rabbitmq-env.conf @@ -3,7 +3,7 @@ # Configuration file maintained by Juju. Local changes may be overwritten. ############################################################################### {% if settings -%} -{%- for key, value in settings.iteritems() %} +{%- for key, value in settings.items() %} {{key}}={{value}} {%- endfor %} {% endif %} diff --git a/tox.ini b/tox.ini index 930d5264..09378de0 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,7 @@ # This file is managed centrally by release-tools and should not be modified # within individual charm repos. [tox] -envlist = pep8,py27 +envlist = pep8,py3{5,6} skipsdist = True [testenv] @@ -20,6 +20,7 @@ passenv = HOME TERM AMULET_* CS_API_* basepython = python2.7 deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt +commands = /bin/true [testenv:py35] basepython = python3.5 diff --git a/unit_tests/__init__.py b/unit_tests/__init__.py index 184cf3d8..bbd23dfc 100644 --- a/unit_tests/__init__.py +++ b/unit_tests/__init__.py @@ -12,7 +12,17 @@ # 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__)) +_actions = os.path.abspath(os.path.join(_path, '../actions')) +_hooks = os.path.abspath(os.path.join(_path, '../hooks')) + + +def _add_path(path): + if path not in sys.path: + sys.path.insert(1, path) + +_add_path(_actions) +_add_path(_hooks) diff --git a/unit_tests/test_actions.py b/unit_tests/test_actions.py index 8a8a4baa..4c7c89c6 100644 --- a/unit_tests/test_actions.py +++ b/unit_tests/test_actions.py @@ -15,7 +15,7 @@ import mock from functools import wraps -from test_utils import CharmTestCase +from unit_tests.test_utils import CharmTestCase with mock.patch('charmhelpers.core.hookenv.cached') as cached: def passthrough(func): @@ -59,7 +59,7 @@ class ClusterStatusTestCase(CharmTestCase): actions, ["check_output", "action_set", "action_fail"]) def test_cluster_status(self): - self.check_output.return_value = 'Cluster status OK' + self.check_output.return_value = b'Cluster status OK' actions.cluster_status([]) self.check_output.assert_called_once_with(['rabbitmqctl', 'cluster_status'], @@ -78,7 +78,7 @@ class ClusterStatusTestCase(CharmTestCase): class CheckQueuesTestCase(CharmTestCase): - TEST_QUEUE_RESULT = 'Listing queues ...\ntest\t0\ntest\t0\n""' + TEST_QUEUE_RESULT = b'Listing queues ...\ntest\t0\ntest\t0\n""' def dummy_action_get(self, key): action_values = {"queue-depth": -1, "vhost": "/"} diff --git a/unit_tests/test_rabbit_utils.py b/unit_tests/test_rabbit_utils.py index ddff1cc8..8ea38f82 100644 --- a/unit_tests/test_rabbit_utils.py +++ b/unit_tests/test_rabbit_utils.py @@ -13,15 +13,14 @@ # limitations under the License. import collections +from functools import wraps import mock import os import subprocess import sys import tempfile -from functools import wraps - -from test_utils import CharmTestCase +from unit_tests.test_utils import CharmTestCase with mock.patch('charmhelpers.core.hookenv.cached') as cached: def passthrough(func): @@ -86,7 +85,7 @@ class ConfigRendererTests(CharmTestCase): self.assertTrue(log.called) -RABBITMQCTL_CLUSTERSTATUS_RUNNING = """Cluster status of node 'rabbit@juju-devel3-machine-19' ... +RABBITMQCTL_CLUSTERSTATUS_RUNNING = b"""Cluster status of node 'rabbit@juju-devel3-machine-19' ... [{nodes, [{disc, ['rabbit@juju-devel3-machine-14','rabbit@juju-devel3-machine-19']}, @@ -98,7 +97,7 @@ RABBITMQCTL_CLUSTERSTATUS_RUNNING = """Cluster status of node 'rabbit@juju-devel {partitions,[]}] """ -RABBITMQCTL_CLUSTERSTATUS_SOLO = """Cluster status of node 'rabbit@juju-devel3-machine-14' ... +RABBITMQCTL_CLUSTERSTATUS_SOLO = b"""Cluster status of node 'rabbit@juju-devel3-machine-14' ... [{nodes,[{disc,['rabbit@juju-devel3-machine-14']}]}, {running_nodes,['rabbit@juju-devel3-machine-14']}, {cluster_name,<<"rabbit@juju-devel3-machine-14.openstacklocal">>}, @@ -113,52 +112,52 @@ class UtilsTests(CharmTestCase): @mock.patch("rabbit_utils.log") def test_update_empty_hosts_file(self, mock_log): - map = {'1.2.3.4': 'my-host'} + _map = {'1.2.3.4': 'my-host'} with tempfile.NamedTemporaryFile(delete=False) as tmpfile: rabbit_utils.HOSTS_FILE = tmpfile.name rabbit_utils.HOSTS_FILE = tmpfile.name - rabbit_utils.update_hosts_file(map) + rabbit_utils.update_hosts_file(_map) with open(tmpfile.name, 'r') as fd: lines = fd.readlines() os.remove(tmpfile.name) self.assertEqual(len(lines), 1) - self.assertEqual(lines[0], "%s %s\n" % (map.items()[0])) + self.assertEqual(lines[0], "%s %s\n" % (list(_map.items())[0])) @mock.patch("rabbit_utils.log") def test_update_hosts_file_w_dup(self, mock_log): - map = {'1.2.3.4': 'my-host'} + _map = {'1.2.3.4': 'my-host'} with tempfile.NamedTemporaryFile(delete=False) as tmpfile: rabbit_utils.HOSTS_FILE = tmpfile.name with open(tmpfile.name, 'w') as fd: - fd.write("%s %s\n" % (map.items()[0])) + fd.write("%s %s\n" % (list(_map.items())[0])) - rabbit_utils.update_hosts_file(map) + rabbit_utils.update_hosts_file(_map) with open(tmpfile.name, 'r') as fd: lines = fd.readlines() os.remove(tmpfile.name) self.assertEqual(len(lines), 1) - self.assertEqual(lines[0], "%s %s\n" % (map.items()[0])) + self.assertEqual(lines[0], "%s %s\n" % (list(_map.items())[0])) @mock.patch("rabbit_utils.log") def test_update_hosts_file_entry(self, mock_log): altmap = {'1.1.1.1': 'alt-host'} - map = {'1.1.1.1': 'hostA', - '2.2.2.2': 'hostB', - '3.3.3.3': 'hostC', - '4.4.4.4': 'hostD'} + _map = {'1.1.1.1': 'hostA', + '2.2.2.2': 'hostB', + '3.3.3.3': 'hostC', + '4.4.4.4': 'hostD'} with tempfile.NamedTemporaryFile(delete=False) as tmpfile: rabbit_utils.HOSTS_FILE = tmpfile.name with open(tmpfile.name, 'w') as fd: fd.write("#somedata\n") - fd.write("%s %s\n" % (altmap.items()[0])) + fd.write("%s %s\n" % (list(altmap.items())[0])) - rabbit_utils.update_hosts_file(map) + rabbit_utils.update_hosts_file(_map) with open(rabbit_utils.HOSTS_FILE, 'r') as fd: lines = fd.readlines() @@ -166,12 +165,12 @@ class UtilsTests(CharmTestCase): os.remove(tmpfile.name) self.assertEqual(len(lines), 5) self.assertEqual(lines[0], "#somedata\n") - self.assertEqual(lines[1], "%s %s\n" % (map.items()[0])) - self.assertEqual(lines[4], "%s %s\n" % (map.items()[3])) + self.assertEqual(lines[1], "%s %s\n" % (list(_map.items())[0])) + self.assertEqual(lines[4], "%s %s\n" % (list(_map.items())[3])) @mock.patch('rabbit_utils.running_nodes') def test_not_clustered(self, mock_running_nodes): - print "test_not_clustered" + print("test_not_clustered") mock_running_nodes.return_value = [] self.assertFalse(rabbit_utils.clustered()) diff --git a/unit_tests/test_rabbitmq_server_relations.py b/unit_tests/test_rabbitmq_server_relations.py index 6b1f9ccb..37fdedb0 100644 --- a/unit_tests/test_rabbitmq_server_relations.py +++ b/unit_tests/test_rabbitmq_server_relations.py @@ -18,7 +18,7 @@ import subprocess import sys import tempfile -from test_utils import CharmTestCase +from unit_tests.test_utils import CharmTestCase from mock import patch, MagicMock, call from charmhelpers.core.unitdata import Storage diff --git a/unit_tests/test_ssl_utils.py b/unit_tests/test_ssl_utils.py index 07c1f99f..2b31b5a2 100644 --- a/unit_tests/test_ssl_utils.py +++ b/unit_tests/test_ssl_utils.py @@ -13,7 +13,7 @@ # limitations under the License. -from test_utils import CharmTestCase +from unit_tests.test_utils import CharmTestCase from mock import patch import ssl_utils diff --git a/unit_tests/test_utils.py b/unit_tests/test_utils.py index cebe7a33..af167713 100644 --- a/unit_tests/test_utils.py +++ b/unit_tests/test_utils.py @@ -53,7 +53,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: