charm-swift-storage/hooks/swift_storage_hooks.py

174 lines
4.9 KiB
Python
Raw Normal View History

2013-07-16 21:27:06 -07:00
#!/usr/bin/python
import os
import sys
from lib.swift_storage_utils import (
2013-07-16 21:27:06 -07:00
PACKAGES,
RESTART_MAP,
2015-01-09 10:07:27 +00:00
SWIFT_SVCS,
2013-07-16 21:27:06 -07:00
determine_block_devices,
do_openstack_upgrade,
ensure_swift_directories,
fetch_swift_rings,
register_configs,
save_script_rc,
2013-07-16 21:27:06 -07:00
setup_storage,
assert_charm_supports_ipv6,
setup_rsync,
REQUIRED_INTERFACES,
2013-07-16 21:27:06 -07:00
)
2015-08-28 11:21:17 +01:00
from lib.misc_utils import pause_aware_restart_on_change
2013-07-16 21:27:06 -07:00
from charmhelpers.core.hookenv import (
2013-07-19 13:44:37 -07:00
Hooks, UnregisteredHookError,
2013-07-16 21:27:06 -07:00
config,
log,
relation_get,
relation_set,
relations_of_type,
2015-10-08 02:15:44 +00:00
status_set,
2013-07-16 21:27:06 -07:00
)
from charmhelpers.fetch import (
apt_install,
apt_update,
filter_installed_packages
)
2015-08-28 11:21:17 +01:00
from charmhelpers.core.host import rsync
from charmhelpers.payload.execd import execd_preinstall
2013-07-16 21:27:06 -07:00
from charmhelpers.contrib.openstack.utils import (
configure_installation_source,
openstack_upgrade_available,
set_os_workload_status,
2013-07-16 21:27:06 -07:00
)
2014-08-13 14:50:51 +08:00
from charmhelpers.contrib.network.ip import (
2014-09-18 21:36:03 +08:00
get_ipv6_addr
2014-08-13 14:50:51 +08:00
)
2015-01-12 12:04:01 +00:00
from charmhelpers.contrib.charmsupport import nrpe
2013-07-16 21:27:06 -07:00
from distutils.dir_util import mkpath
2013-07-16 21:27:06 -07:00
hooks = Hooks()
CONFIGS = register_configs()
NAGIOS_PLUGINS = '/usr/local/lib/nagios/plugins'
SUDOERS_D = '/etc/sudoers.d'
2013-07-16 21:27:06 -07:00
@hooks.hook('install.real')
2013-07-16 21:27:06 -07:00
def install():
2015-10-08 02:15:44 +00:00
status_set('maintenance', 'Executing pre-install')
execd_preinstall()
configure_installation_source(config('openstack-origin'))
2015-10-08 02:15:44 +00:00
status_set('maintenance', 'Installing apt packages')
2013-07-16 21:27:06 -07:00
apt_update()
apt_install(PACKAGES, fatal=True)
2015-10-08 02:15:44 +00:00
status_set('maintenance', 'Setting up storage')
2013-07-16 21:27:06 -07:00
setup_storage()
ensure_swift_directories()
@hooks.hook('config-changed')
2015-08-27 09:22:33 +01:00
@pause_aware_restart_on_change(RESTART_MAP)
2013-07-16 21:27:06 -07:00
def config_changed():
2014-09-18 21:36:03 +08:00
if config('prefer-ipv6'):
2015-10-08 02:15:44 +00:00
status_set('maintenance', 'Configuring ipv6')
2014-09-26 19:20:43 +01:00
assert_charm_supports_ipv6()
2014-09-18 21:36:03 +08:00
ensure_swift_directories()
setup_rsync()
2015-09-22 15:58:18 -07:00
if not config('action-managed-upgrade') and \
openstack_upgrade_available('swift'):
2015-10-08 02:15:44 +00:00
status_set('maintenance', 'Running openstack upgrade')
2013-07-16 21:27:06 -07:00
do_openstack_upgrade(configs=CONFIGS)
CONFIGS.write_all()
save_script_rc()
if relations_of_type('nrpe-external-master'):
2015-01-09 10:07:27 +00:00
update_nrpe_config()
2013-07-16 21:27:06 -07:00
@hooks.hook('upgrade-charm')
def upgrade_charm():
apt_install(filter_installed_packages(PACKAGES), fatal=True)
update_nrpe_config()
2013-07-16 21:27:06 -07:00
@hooks.hook()
def swift_storage_relation_joined():
devs = [os.path.basename(dev) for dev in determine_block_devices()]
rel_settings = {
'zone': config('zone'),
'object_port': config('object-server-port'),
'container_port': config('container-server-port'),
'account_port': config('account-server-port'),
'device': ':'.join(devs),
}
2014-08-13 14:50:51 +08:00
if config('prefer-ipv6'):
2014-09-20 00:59:42 +08:00
rel_settings['private-address'] = get_ipv6_addr()[0]
2014-08-13 14:50:51 +08:00
2013-07-16 21:27:06 -07:00
relation_set(**rel_settings)
@hooks.hook('swift-storage-relation-changed')
2015-08-27 09:22:33 +01:00
@pause_aware_restart_on_change(RESTART_MAP)
2013-07-16 21:27:06 -07:00
def swift_storage_relation_changed():
rings_url = relation_get('rings_url')
swift_hash = relation_get('swift_hash')
if '' in [rings_url, swift_hash] or None in [rings_url, swift_hash]:
2013-07-16 21:27:06 -07:00
log('swift_storage_relation_changed: Peer not ready?')
sys.exit(0)
CONFIGS.write('/etc/swift/swift.conf')
fetch_swift_rings(rings_url)
2013-07-19 13:44:37 -07:00
@hooks.hook('nrpe-external-master-relation-joined')
@hooks.hook('nrpe-external-master-relation-changed')
def update_nrpe_config():
2015-01-12 12:04:01 +00:00
# python-dbus is used by check_upstart_job
apt_install('python-dbus')
log('Refreshing nrpe checks')
if not os.path.exists(NAGIOS_PLUGINS):
mkpath(NAGIOS_PLUGINS)
2015-01-12 13:24:00 +00:00
rsync(os.path.join(os.getenv('CHARM_DIR'), 'files', 'nrpe-external-master',
'check_swift_storage.py'),
os.path.join(NAGIOS_PLUGINS, 'check_swift_storage.py'))
rsync(os.path.join(os.getenv('CHARM_DIR'), 'files', 'nrpe-external-master',
'check_swift_service'),
os.path.join(NAGIOS_PLUGINS, 'check_swift_service'))
rsync(os.path.join(os.getenv('CHARM_DIR'), 'files', 'sudo',
'swift-storage'),
os.path.join(SUDOERS_D, 'swift-storage'))
2015-01-12 12:04:01 +00:00
# Find out if nrpe set nagios_hostname
2015-01-12 12:04:01 +00:00
hostname = nrpe.get_nagios_hostname()
current_unit = nrpe.get_nagios_unit_name()
nrpe_setup = nrpe.NRPE(hostname=hostname)
# check the rings and replication
2015-01-12 12:04:01 +00:00
nrpe_setup.add_check(
shortname='swift_storage',
2015-01-09 10:07:27 +00:00
description='Check swift storage ring hashes and replication'
' {%s}' % current_unit,
check_cmd='check_swift_storage.py {}'.format(
config('nagios-check-params'))
)
2015-01-12 12:04:01 +00:00
nrpe.add_init_service_checks(nrpe_setup, SWIFT_SVCS, current_unit)
nrpe_setup.write()
2013-07-19 13:44:37 -07:00
def main():
try:
hooks.execute(sys.argv)
except UnregisteredHookError as e:
log('Unknown hook {} - skipping.'.format(e))
set_os_workload_status(CONFIGS, REQUIRED_INTERFACES)
2013-07-19 13:44:37 -07:00
if __name__ == '__main__':
main()