27
27
get_os_codename_package,
28
28
get_os_codename_install_source,
29
configure_installation_source
29
configure_installation_source,
30
set_os_workload_status,
31
32
from charmhelpers.contrib.hahelpers.cluster import (
547
554
if config('disable-ring-balance'):
551
builder = _load_builder(ring).to_dict()
552
replicas = builder['replicas']
553
zones = [dev['zone'] for dev in builder['devs']]
554
num_zones = len(set(zones))
555
if num_zones < replicas:
556
log("Not enough zones (%d) defined to allow ring balance "
557
"(need >= %d)" % (num_zones, replicas), level=INFO)
557
return has_minimum_zones(rings)
563
560
def do_openstack_upgrade(configs):
1002
999
def is_paused(status_get=status_get):
1003
1000
"""Is the unit paused?"""
1004
status, message = status_get()
1005
return status == "maintenance" and message.startswith("Paused")
1002
if kv().get('unit-paused'):
1008
1008
def pause_aware_restart_on_change(restart_map):
1014
1014
return restart_on_change(restart_map)(f)
1018
def has_minimum_zones(rings):
1019
"""Determine if enough zones exist to satisfy minimum replicas"""
1021
builder = _load_builder(ring).to_dict()
1022
replicas = builder['replicas']
1023
zones = [dev['zone'] for dev in builder['devs']]
1024
num_zones = len(set(zones))
1025
if num_zones < replicas:
1026
log("Not enough zones (%d) defined to satisfy minimum replicas "
1027
"(need >= %d)" % (num_zones, replicas), level=INFO)
1033
def assess_status(configs):
1034
"""Assess status of current unit"""
1035
required_interfaces = {}
1038
status_set("maintenance",
1039
"Paused. Use 'resume' action to resume normal service.")
1042
# Check for required swift-storage relation
1043
if len(relation_ids('swift-storage')) < 1:
1044
status_set('blocked', 'Missing relation: storage')
1047
# Verify allowed_hosts is populated with enough unit IP addresses
1048
ctxt = SwiftRingContext()()
1049
if len(ctxt['allowed_hosts']) < config('replicas'):
1050
status_set('blocked', 'Not enough related storage nodes')
1053
# Verify there are enough storage zones to satisfy minimum replicas
1054
rings = [r for r in SWIFT_RINGS.itervalues()]
1055
if not has_minimum_zones(rings):
1056
status_set('blocked', 'Not enough storage zones for minimum replicas')
1059
if relation_ids('identity-service'):
1060
required_interfaces['identity'] = ['identity-service']
1062
if required_interfaces:
1063
set_os_workload_status(configs, required_interfaces)
1065
status_set('active', 'Unit is ready')