charm-swift-storage/lib/swift_storage_context.py

89 lines
2.6 KiB
Python
Raw Normal View History

import re
from charmhelpers.core.hookenv import (
config,
log,
related_units,
relation_get,
relation_ids,
2013-08-16 13:38:32 -07:00
unit_private_ip,
)
from charmhelpers.contrib.openstack.context import (
OSContextGenerator,
)
2014-08-13 14:50:51 +08:00
from charmhelpers.contrib.network.ip import (
get_ipv6_addr,
)
2014-09-18 21:36:03 +08:00
class SwiftStorageContext(OSContextGenerator):
interfaces = ['swift-storage']
def __call__(self):
rids = relation_ids('swift-storage')
if not rids:
return {}
swift_hash = None
for rid in rids:
for unit in related_units(rid):
if not swift_hash:
swift_hash = relation_get('swift_hash', rid=rid,
unit=unit)
if not swift_hash:
log('No swift_hash passed via swift-storage relation. '
'Peer not ready?')
return {}
return {'swift_hash': swift_hash}
class RsyncContext(OSContextGenerator):
interfaces = []
def enable_rsyncd(self):
2013-07-19 13:44:37 -07:00
with open('/etc/default/rsync') as _in:
default = _in.read()
_m = re.compile('^RSYNC_ENABLE=(.*)$', re.MULTILINE)
if not re.search(_m, default):
with open('/etc/default/rsync', 'a+') as out:
out.write('RSYNC_ENABLE=true\n')
else:
with open('/etc/default/rsync', 'w') as out:
out.write(_m.sub('RSYNC_ENABLE=true', default))
def __call__(self):
2014-08-13 14:50:51 +08:00
if config('prefer-ipv6'):
2014-09-20 00:59:42 +08:00
local_ip = '%s' % get_ipv6_addr()[0]
2014-08-13 14:50:51 +08:00
else:
local_ip = unit_private_ip()
self.enable_rsyncd()
return {
'local_ip': local_ip
}
class SwiftStorageServerContext(OSContextGenerator):
interfaces = []
def __call__(self):
import psutil
multiplier = int(config('worker-multiplier')) or 1
ctxt = {
2013-08-16 13:38:32 -07:00
'local_ip': unit_private_ip(),
'account_server_port': config('account-server-port'),
'container_server_port': config('container-server-port'),
'object_server_port': config('object-server-port'),
'workers': str(psutil.NUM_CPUS * multiplier),
'object_server_threads_per_disk': config(
'object-server-threads-per-disk'),
'account_max_connections': config('account-max-connections'),
'container_max_connections': config('container-max-connections'),
'object_max_connections': config('object-max-connections'),
'object_replicator_concurrency': config(
'object-replicator-concurrency'),
}
return ctxt