def __call__(self): ctxt = {} servers = [] try: for rid in relation_ids('memcache'): for rel in relations_for_id(rid): priv_addr = rel['private-address'] # Format it as IPv6 address if needed priv_addr = format_ipv6_addr(priv_addr) or priv_addr servers.append("%s:%s" % (priv_addr, rel['port'])) except Exception as ex: log("Could not get memcache servers: %s" % (ex), level='WARNING') servers = [] ctxt['memcached_servers'] = ','.join(servers) # Configure nova-novncproxy https if nova-api is using https. if https(): cn = resolve_address(endpoint_type=INTERNAL) if cn: cert_filename = 'cert_{}'.format(cn) key_filename = 'key_{}'.format(cn) else: cert_filename = 'cert' key_filename = 'key' ssl_dir = '/etc/apache2/ssl/nova' cert = os.path.join(ssl_dir, cert_filename) key = os.path.join(ssl_dir, key_filename) if os.path.exists(cert) and os.path.exists(key): ctxt['ssl_cert'] = cert ctxt['ssl_key'] = key return ctxt
def test_gets_relations_for_specific_id(self, relation_for_unit, related_units, relation_ids): relid = 123 units = ['foo', 'bar'] unit_data = [ { 'foo-item': 'bar-item' }, { 'foo-item2': 'bar-item2' }, ] related_units.return_value = units relation_for_unit.side_effect = unit_data result = hookenv.relations_for_id(relid) self.assertEqual(result[0]['__relid__'], relid) self.assertEqual(result[0]['foo-item'], 'bar-item') self.assertEqual(result[1]['__relid__'], relid) self.assertEqual(result[1]['foo-item2'], 'bar-item2') related_units.assert_called_with(relid) self.assertEqual(relation_for_unit.mock_calls, [ call('foo', relid), call('bar', relid), ]) self.assertFalse(relation_ids.called)
def __call__(self): ctxt = {} servers = [] try: for rid in relation_ids('memcache'): for rel in relations_for_id(rid): priv_addr = rel['private-address'] # Format it as IPv6 address if needed priv_addr = format_ipv6_addr(priv_addr) or priv_addr servers.append("%s:%s" % (priv_addr, rel['port'])) except Exception as ex: log("Could not get memcache servers: %s" % (ex), level='WARNING') servers = [] ctxt['memcached_servers'] = ','.join(servers) # Configure nova-novncproxy https if nova-api is using https. if https(): cn = resolve_address(endpoint_type=INTERNAL) if cn: cert_filename = 'cert_{}'.format(cn) key_filename = 'key_{}'.format(cn) else: cert_filename = 'cert' key_filename = 'key' ssl_dir = '/etc/apache2/ssl/nova' cert = os.path.join(ssl_dir, cert_filename) key = os.path.join(ssl_dir, key_filename) if os.path.exists(cert) and os.path.exists(key): ctxt['ssl_cert'] = cert ctxt['ssl_key'] = key return ctxt
def check_cluster_memberships(): ''' Iterate over RabbitMQ node list, compare it to charm cluster relationships, and forget about any nodes previously abruptly removed from the cluster ''' for rid in relation_ids('cluster'): for node in nodes(): if not any(rel.get('clustered', None) == node.split('@')[1] for rel in relations_for_id(relid=rid)) and \ node not in running_nodes(): log("check_cluster_memberships(): '{}' in nodes but not in " "charm relations or running_nodes, telling RabbitMQ to " "forget about it.".format(node), level=DEBUG) forget_cluster_node(node)
def notify_relation(relation, changed=False, relation_ids=None): default_host = get_hostname() default_port = 80 for rid in relation_ids or get_relation_ids(relation): service_names = set() if rid is None: rid = relation_id() for relation_data in relations_for_id(rid): if 'service_name' in relation_data: service_names.add(relation_data['service_name']) if changed: if 'is-proxy' in relation_data: remote_service = ( "%s__%d" % (relation_data['hostname'], relation_data['port'])) open( "%s/%s.is.proxy" % (default_haproxy_service_config_dir, remote_service), 'a').close() service_name = None if len(service_names) == 1: service_name = service_names.pop() elif len(service_names) > 1: log("Remote units requested more than a single service name." "Falling back to default host/port.") if service_name is not None: # If a specfic service has been asked for then return the ip:port # for that service, else pass back the default requestedservice = get_config_service(service_name) my_host = get_hostname(requestedservice['service_host']) my_port = requestedservice['service_port'] else: my_host = default_host my_port = default_port all_services = "" services_dict = create_services() if services_dict is not None: all_services = yaml.safe_dump(sorted(services_dict.itervalues())) relation_set(relation_id=rid, port=str(my_port), hostname=my_host, all_services=all_services)
def notify_relation(relation, changed=False, relation_ids=None): default_host = get_hostname() default_port = 80 for rid in relation_ids or get_relation_ids(relation): service_names = set() if rid is None: rid = relation_id() for relation_data in relations_for_id(rid): if 'service_name' in relation_data: service_names.add(relation_data['service_name']) if changed: if 'is-proxy' in relation_data: remote_service = ("%s__%d" % (relation_data['hostname'], relation_data['port'])) open("%s/%s.is.proxy" % ( default_haproxy_service_config_dir, remote_service), 'a').close() service_name = None if len(service_names) == 1: service_name = service_names.pop() elif len(service_names) > 1: log("Remote units requested more than a single service name." "Falling back to default host/port.") if service_name is not None: # If a specfic service has been asked for then return the ip:port # for that service, else pass back the default requestedservice = get_config_service(service_name) my_host = get_hostname(requestedservice['service_host']) my_port = requestedservice['service_port'] else: my_host = default_host my_port = default_port all_services = "" services_dict = create_services() if services_dict is not None: all_services = yaml.safe_dump(sorted(services_dict.itervalues())) relation_set(relation_id=rid, port=str(my_port), hostname=my_host, all_services=all_services)
def __call__(self): servers = [] try: for rid in hookenv.relation_ids(self.interfaces[0]): for rel in hookenv.relations_for_id(rid): priv_addr = rel['private-address'] # Format it as IPv6 address if needed priv_addr = (ch_network_ip.format_ipv6_addr(priv_addr) or priv_addr) servers.append("%s:%s" % (priv_addr, rel['port'])) except Exception as ex: hookenv.log("Could not get memcache servers: %s" % (ex), level='WARNING') servers = [] if servers: return {'memcached_servers': ','.join(servers)} return {}
def check_cluster_memberships(): """Check for departed nodes. Iterate over RabbitMQ node list, compare it to charm cluster relationships, and notify about any nodes previously abruptly removed from the cluster. :returns: String node name or None :rtype: Union[str, None] """ for rid in relation_ids('cluster'): for node in nodes(): if not any(rel.get('clustered', None) == node.split('@')[1] for rel in relations_for_id(relid=rid)) and \ node not in running_nodes(): log("check_cluster_memberships(): '{}' in nodes but not in " "charm relations or running_nodes." .format(node), level=DEBUG) return node
def __call__(self): servers = [] try: for rid in hookenv.relation_ids(self.interfaces[0]): for rel in hookenv.relations_for_id(rid): priv_addr = rel['private-address'] # Format it as IPv6 address if needed priv_addr = (ch_network_ip.format_ipv6_addr(priv_addr) or priv_addr) servers.append("%s:%s" % (priv_addr, rel['port'])) except Exception as ex: hookenv.log("Could not get memcache servers: %s" % (ex), level='WARNING') servers = [] if servers: return { 'memcached_servers': ','.join(servers) } return {}
def get_principal_unit(): '''Return the principal unit for this subordinate.''' for relation_id in hookenv.relation_ids('container'): for relation_data in hookenv.relations_for_id(relation_id): return relation_data['__unit__']