From ed105948976396f2c435d50d53eadcc513297aec Mon Sep 17 00:00:00 2001 From: "yolanda.robla@canonical.com" <> Date: Mon, 27 Jan 2014 13:04:33 +0100 Subject: [PATCH] refreshed charmhelpers --- lib/charmhelpers/contrib/charmsupport/IMPORT | 14 -- .../contrib/charmsupport/__init__.pyc | Bin 180 -> 0 bytes .../contrib/charmsupport/nrpe.pyc | Bin 6417 -> 0 bytes .../contrib/openstack/__init__.pyc | Bin 177 -> 0 bytes .../contrib/openstack/alternatives.pyc | Bin 918 -> 0 bytes .../contrib/openstack/context.pyc | Bin 20272 -> 0 bytes .../contrib/openstack/neutron.pyc | Bin 4477 -> 0 bytes .../contrib/openstack/templates/ceph.conf | 11 - .../contrib/openstack/templates/haproxy.cfg | 37 --- .../templates/openstack_https_frontend | 23 -- .../templates/openstack_https_frontend.conf | 1 - .../contrib/openstack/templating.pyc | Bin 11825 -> 0 bytes lib/charmhelpers/contrib/openstack/utils.pyc | Bin 14605 -> 0 bytes lib/charmhelpers/contrib/unison/__init__.py | 3 - lib/charmhelpers/contrib/unison/utils.py | 230 ------------------ lib/charmhelpers/core/hookenv.py | 2 + 16 files changed, 2 insertions(+), 319 deletions(-) delete mode 100644 lib/charmhelpers/contrib/charmsupport/IMPORT delete mode 100644 lib/charmhelpers/contrib/charmsupport/__init__.pyc delete mode 100644 lib/charmhelpers/contrib/charmsupport/nrpe.pyc delete mode 100644 lib/charmhelpers/contrib/openstack/__init__.pyc delete mode 100644 lib/charmhelpers/contrib/openstack/alternatives.pyc delete mode 100644 lib/charmhelpers/contrib/openstack/context.pyc delete mode 100644 lib/charmhelpers/contrib/openstack/neutron.pyc delete mode 100644 lib/charmhelpers/contrib/openstack/templates/ceph.conf delete mode 100644 lib/charmhelpers/contrib/openstack/templates/haproxy.cfg delete mode 100644 lib/charmhelpers/contrib/openstack/templates/openstack_https_frontend delete mode 120000 lib/charmhelpers/contrib/openstack/templates/openstack_https_frontend.conf delete mode 100644 lib/charmhelpers/contrib/openstack/templating.pyc delete mode 100644 lib/charmhelpers/contrib/openstack/utils.pyc delete mode 100644 lib/charmhelpers/contrib/unison/utils.py diff --git a/lib/charmhelpers/contrib/charmsupport/IMPORT b/lib/charmhelpers/contrib/charmsupport/IMPORT deleted file mode 100644 index 554fddda..00000000 --- a/lib/charmhelpers/contrib/charmsupport/IMPORT +++ /dev/null @@ -1,14 +0,0 @@ -Source: lp:charmsupport/trunk - -charmsupport/charmsupport/execd.py -> charm-helpers/charmhelpers/contrib/charmsupport/execd.py -charmsupport/charmsupport/hookenv.py -> charm-helpers/charmhelpers/contrib/charmsupport/hookenv.py -charmsupport/charmsupport/host.py -> charm-helpers/charmhelpers/contrib/charmsupport/host.py -charmsupport/charmsupport/nrpe.py -> charm-helpers/charmhelpers/contrib/charmsupport/nrpe.py -charmsupport/charmsupport/volumes.py -> charm-helpers/charmhelpers/contrib/charmsupport/volumes.py - -charmsupport/tests/test_execd.py -> charm-helpers/tests/contrib/charmsupport/test_execd.py -charmsupport/tests/test_hookenv.py -> charm-helpers/tests/contrib/charmsupport/test_hookenv.py -charmsupport/tests/test_host.py -> charm-helpers/tests/contrib/charmsupport/test_host.py -charmsupport/tests/test_nrpe.py -> charm-helpers/tests/contrib/charmsupport/test_nrpe.py - -charmsupport/bin/charmsupport -> charm-helpers/bin/contrib/charmsupport/charmsupport diff --git a/lib/charmhelpers/contrib/charmsupport/__init__.pyc b/lib/charmhelpers/contrib/charmsupport/__init__.pyc deleted file mode 100644 index 060c4f94e6a4088e2f75bb1f7c6f39e2f47af816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 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 diff --git a/lib/charmhelpers/contrib/openstack/__init__.pyc b/lib/charmhelpers/contrib/openstack/__init__.pyc deleted file mode 100644 index f74ed6b9b5a7e23d4d6806e87055f29ccc444d57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmZSn%*%C4_F+&m0~9aPO2Tq5ye2v005aAEzJM` diff --git a/lib/charmhelpers/contrib/openstack/alternatives.pyc b/lib/charmhelpers/contrib/openstack/alternatives.pyc deleted file mode 100644 index 9aab493de72c375721b3db7aae5fddb49ec1c370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 918 zcmcgq&5qMB5T5+BOIM3HaNz(_B!tvUHWEjK_z@Sl?4jIxAaWhIaqHNTXHrqoJuOek zjc4EiVC;0EPk<9oX2#>s^L*3{(XFnGbP9x>-JD&K8O#`rGn?RF-Nnpv&=%=tu z@BIvx88rOn@SSV&Q2cp52^eqL6d#r8l`q!L7oD(TqwS^;hLpF0^j=|HS!<&T>FnBQ zNrhMF%s|@NLjUG*qhB(T%-ICo8P5+q5!n#HHi2yl#{}*Y@bB+4*(q}sQaNlVA?E(K z)6>FT3W;TU%p`Wt%SV7?3UmR-EP!n;;5G+(0NWWH^N>lJ36q<)b+NR{Ub;05Q)k`O!su!=+U}x@Ez4$NW#{%P<`}mVL>X^F@)QtpSoPlVX&6J72eR%D>rbC34T{Gt#M1x=0t6JBo>fns9ji?&6SH|_7vQ+h6NsX$K zt?*sh#-9Vn=x^XGdA+J!uYwG6SDmYM-5)3jd6K9;TMLb0;0Ni8^l3Uvo}?q8AaGqb pPS*7z6fJ_33!boe#O7b~|BXTD;&tbm!KgP0`xp|_^eW*e`vZ^1=cNDu diff --git a/lib/charmhelpers/contrib/openstack/context.pyc b/lib/charmhelpers/contrib/openstack/context.pyc deleted file mode 100644 index f54fd8cd956b0d582d86a2b537c9435aa9098637..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20272 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 - ServerName {{ private_address }} - SSLEngine on - SSLCertificateFile /etc/apache2/ssl/{{ namespace }}/cert - SSLCertificateKeyFile /etc/apache2/ssl/{{ namespace }}/key - ProxyPass / http://localhost:{{ int }}/ - ProxyPassReverse / http://localhost:{{ int }}/ - ProxyPreserveHost on - - - Order deny,allow - Allow from all - - - Order allow,deny - Allow from all - -{% endfor -%} -{% endif -%} diff --git a/lib/charmhelpers/contrib/openstack/templates/openstack_https_frontend.conf b/lib/charmhelpers/contrib/openstack/templates/openstack_https_frontend.conf deleted file mode 120000 index 9a2f6f2b..00000000 --- a/lib/charmhelpers/contrib/openstack/templates/openstack_https_frontend.conf +++ /dev/null @@ -1 +0,0 @@ -openstack_https_frontend \ No newline at end of file diff --git a/lib/charmhelpers/contrib/openstack/templating.pyc b/lib/charmhelpers/contrib/openstack/templating.pyc deleted file mode 100644 index bc517bb15996695c64025e80460db91e98a44099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11825 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 diff --git a/lib/charmhelpers/contrib/unison/__init__.py b/lib/charmhelpers/contrib/unison/__init__.py index 452cb29c..c9cd0b10 100644 --- a/lib/charmhelpers/contrib/unison/__init__.py +++ b/lib/charmhelpers/contrib/unison/__init__.py @@ -1,5 +1,3 @@ -#!/usr/bin/python -# # Easy file synchronization among peer units using ssh + unison. # # From *both* peer relation -joined and -changed, add a call to @@ -41,7 +39,6 @@ # paths=[files], verbose=False) import os -import grp import pwd from copy import copy diff --git a/lib/charmhelpers/contrib/unison/utils.py b/lib/charmhelpers/contrib/unison/utils.py deleted file mode 100644 index 3aec1e1c..00000000 --- a/lib/charmhelpers/contrib/unison/utils.py +++ /dev/null @@ -1,230 +0,0 @@ -#!/usr/bin/python - -# -# Easy file synchronization among peer units using ssh + unison. -# -# From *both* peer relation -joined and -changed, add a call to -# ssh_authorized_peers() describing the peer relation and the desired -# user + group. After all peer relations have settled, all hosts should -# be able to connect to on another via key auth'd ssh as the specified user. -# -# Other hooks are then free to synchronize files and directories using -# sync_to_peers(). -# -# For a peer relation named 'cluster', for example: -# -# cluster-relation-joined: -# ... -# ssh_authorized_peers(peer_interface='cluster', -# user='juju_ssh', group='juju_ssh', -# ensure_user=True) -# ... -# -# cluster-relation-changed: -# ... -# ssh_authorized_peers(peer_interface='cluster', -# user='juju_ssh', group='juju_ssh', -# ensure_user=True) -# ... -# -# Hooks are now free to sync files as easily as: -# -# files = ['/etc/fstab', '/etc/apt.conf.d/'] -# sync_to_peers(peer_interface='cluster', -# user='juju_ssh', paths=[files], verbose=False) -# -# It is assumed the charm itself has setup permissions on each unit -# such that 'juju_ssh' has read + write permissions. Also assumed -# that the calling charm takes care of leader delegation. -# -# Additionally files can be synchronized only to an specific unit: -# sync_to_peer(slave_address, user='juju_ssh', -# paths=[files], verbose=False) -import grp -import os -import pwd -import subprocess -import sys - -from charmhelpers.core.hookenv import ( - log, - ERROR, - INFO, - relation_get, - relation_set, - relation_ids, - related_units as relation_list, - unit_get -) - - -def get_homedir(user): - try: - user = pwd.getpwnam(user) - return user.pw_dir - except KeyError: - log('INFO', 'Could not get homedir for user %s: user exists?') - sys.exit(1) - - -def get_keypair(user): - home_dir = get_homedir(user) - ssh_dir = os.path.join(home_dir, '.ssh') - if not os.path.isdir(ssh_dir): - os.mkdir(ssh_dir) - - priv_key = os.path.join(ssh_dir, 'id_rsa') - if not os.path.isfile(priv_key): - log('INFO', 'Generating new ssh key for user %s.' % user) - cmd = ['ssh-keygen', '-q', '-N', '', '-t', 'rsa', '-b', '2048', - '-f', priv_key] - subprocess.check_call(cmd) - - pub_key = '%s.pub' % priv_key - if not os.path.isfile(pub_key): - log('INFO', 'Generatring missing ssh public key @ %s.' % pub_key) - cmd = ['ssh-keygen', '-y', '-f', priv_key] - p = subprocess.check_output(cmd).strip() - with open(pub_key, 'wb') as out: - out.write(p) - subprocess.check_call(['chown', '-R', user, ssh_dir]) - return open(priv_key, 'r').read().strip(), \ - open(pub_key, 'r').read().strip() - - -def write_authorized_keys(user, keys): - home_dir = get_homedir(user) - ssh_dir = os.path.join(home_dir, '.ssh') - auth_keys = os.path.join(ssh_dir, 'authorized_keys') - log('INFO', 'Syncing authorized_keys @ %s.' % auth_keys) - with open(auth_keys, 'wb') as out: - for k in keys: - out.write('%s\n' % k) - - -def write_known_hosts(user, hosts): - home_dir = get_homedir(user) - ssh_dir = os.path.join(home_dir, '.ssh') - known_hosts = os.path.join(ssh_dir, 'known_hosts') - khosts = [] - for host in hosts: - cmd = ['ssh-keyscan', '-H', '-t', 'rsa', host] - remote_key = subprocess.check_output(cmd).strip() - khosts.append(remote_key) - log('INFO', 'Syncing known_hosts @ %s.' % known_hosts) - with open(known_hosts, 'wb') as out: - for host in khosts: - out.write('%s\n' % host) - - -def ensure_user(user, group=None): - # need to ensure a bash shell'd user exists. - try: - pwd.getpwnam(user) - except KeyError: - log('INFO', 'Creating new user %s.%s.' % (user, group)) - cmd = ['adduser', '--system', '--shell', '/bin/bash', user] - if group: - try: - grp.getgrnam(group) - except KeyError: - subprocess.check_call(['addgroup', group]) - cmd += ['--ingroup', group] - subprocess.check_call(cmd) - - -def ssh_authorized_peers(peer_interface, user, group=None, - ensure_local_user=False): - """ - Main setup function, should be called from both peer -changed and -joined - hooks with the same parameters. - """ - if ensure_local_user: - ensure_user(user, group) - priv_key, pub_key = get_keypair(user) - hook = os.path.basename(sys.argv[0]) - if hook == '%s-relation-joined' % peer_interface: - relation_set(ssh_pub_key=pub_key) - elif hook == '%s-relation-changed' % peer_interface: - hosts = [] - keys = [] - for r_id in relation_ids(peer_interface): - for unit in relation_list(r_id): - settings = relation_get(rid=r_id, unit=unit) - if 'ssh_pub_key' in settings: - keys.append(settings['ssh_pub_key']) - hosts.append(settings['private-address']) - else: - log('INFO', 'ssh_authorized_peers(): ssh_pub_key ' - 'missing for unit %s, skipping.' % unit) - write_authorized_keys(user, keys) - write_known_hosts(user, hosts) - authed_hosts = ':'.join(hosts) - relation_set(ssh_authorized_hosts=authed_hosts) - - -def _run_as_user(user): - try: - user = pwd.getpwnam(user) - except KeyError: - log('INFO', 'Invalid user: %s' % user) - sys.exit(1) - uid, gid = user.pw_uid, user.pw_gid - os.environ['HOME'] = user.pw_dir - - def _inner(): - os.setgid(gid) - os.setuid(uid) - return _inner - - -def run_as_user(user, cmd): - return subprocess.check_output(cmd, preexec_fn=_run_as_user(user), cwd='/') - - -def sync_to_peer(host, user, paths=[], verbose=False): - base_cmd = ['unison', '-auto', '-batch=true', '-confirmbigdel=false', - '-fastcheck=true', '-group=false', '-owner=false', - '-prefer=newer', '-times=true'] - if not verbose: - base_cmd.append('-silent') - - for path in paths: - # removing trailing slash from directory paths, unison - # doesn't like these. - if path.endswith('/'): - path = path[:(len(path) - 1)] - try: - cmd = base_cmd + [path, 'ssh://%s@%s/%s' % (user, host, path)] - log('INFO', 'Syncing local path %s to %s@%s:%s' % - (path, user, host, path)) - run_as_user(user, cmd) - except: - # it may fail for permissions on some files - log('INFO', 'Error syncing rabbit passwd files') - - -def sync_to_peers(peer_interface, user, paths=[], verbose=False): - for r_id in (relation_ids(peer_interface) or []): - for unit in relation_list(r_id): - settings = relation_get(rid=r_id, unit=unit) - try: - authed_hosts = settings['ssh_authorized_hosts'].split(':') - except KeyError: - log('INFO', - 'unison sync_to_peers: peer has not authorized ' - '*any* hosts yet.') - return - - unit_hostname = unit_get('private-address') - add_host = None - for authed_host in authed_hosts: - if unit_hostname == authed_host: - add_host = settings['private-address'] - if add_host: - # sync to this peer - sync_to_peer(settings['private-address'], user, paths, verbose) - else: - log('INFO', 'unison sync_to_peers: peer (%s) ' - 'has not authorized *this* host yet, skipping.' % - settings['private-address']) diff --git a/lib/charmhelpers/core/hookenv.py b/lib/charmhelpers/core/hookenv.py index 13729244..505c202d 100644 --- a/lib/charmhelpers/core/hookenv.py +++ b/lib/charmhelpers/core/hookenv.py @@ -8,6 +8,7 @@ import os import json import yaml import subprocess +import sys import UserDict from subprocess import CalledProcessError @@ -148,6 +149,7 @@ def service_name(): """The name service group this unit belongs to""" return local_unit().split('/')[0] + def hook_name(): """The name of the currently executing hook""" return os.path.basename(sys.argv[0])