89 lines
2.6 KiB
Python
89 lines
2.6 KiB
Python
import re
|
|
|
|
from charmhelpers.core.hookenv import (
|
|
config,
|
|
log,
|
|
related_units,
|
|
relation_get,
|
|
relation_ids,
|
|
unit_private_ip,
|
|
)
|
|
|
|
from charmhelpers.contrib.openstack.context import (
|
|
OSContextGenerator,
|
|
)
|
|
|
|
from charmhelpers.contrib.network.ip import (
|
|
get_ipv6_addr,
|
|
)
|
|
|
|
|
|
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):
|
|
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):
|
|
if config('prefer-ipv6'):
|
|
local_ip = '%s' % get_ipv6_addr()[0]
|
|
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 = {
|
|
'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
|