From ce2f31598b4158ace4550f18e33764d103385168 Mon Sep 17 00:00:00 2001 From: Jedrzej Nowak Date: Tue, 18 Aug 2015 19:44:04 +0200 Subject: [PATCH] Further work on riak_example --- example-riaks.py | 32 +++++++++++++++++++++++++------- resources/riak_node/meta.yaml | 9 ++++++++- solar/solar/core/signals.py | 29 +++++++++++++++++++++++------ 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/example-riaks.py b/example-riaks.py index 869e2120..7a651db3 100644 --- a/example-riaks.py +++ b/example-riaks.py @@ -33,7 +33,9 @@ def setup_riak(): ip = ips % (num + 2) # XXX: da rade inaczej ? r = vr.create('riak_service%d' % num, 'resources/riak_node', - {'riak_name': 'riak%d@%s' % (num, ip)})[0] + {'riak_self_name': 'riak%d' % num, + 'riak_hostname': 'riak_server%d.solar' % num, + 'riak_name': 'riak%d@riak_server%d.solar' % (num, num)})[0] riak_services.append(r) for i, riak in enumerate(riak_services): @@ -42,6 +44,18 @@ def setup_riak(): for i, riak in enumerate(riak_services[1:]): signals.connect(riak_services[0], riak, {'riak_name': 'join_to'}) + hosts_services = [] + for i, riak in enumerate(riak_services): + num = i + 1 + hosts_file = vr.create('hosts_file%d' % num, + 'resources/hosts_file', {})[0] + hosts_services.append(hosts_file) + signals.connect(nodes[i], hosts_file) + + for riak in riak_services: + for hosts_file in hosts_services: + signals.connect(riak, hosts_file, {'riak_hostname': 'hosts_names', 'ip': 'hosts_ips'}, events=False) + has_errors = False for r in locals().values(): @@ -60,14 +74,18 @@ def setup_riak(): sys.exit(1) events = [ - Dep('riak_service2', 'run', 'success', 'riak_service3', 'join'), - Dep('riak_service3', 'run', 'success', 'riak_service2', 'join'), + Dep('hosts_file1', 'run', 'success', 'riak_service1', 'run'), + Dep('hosts_file2', 'run', 'success', 'riak_service2', 'run'), + Dep('hosts_file3', 'run', 'success', 'riak_service3', 'run'), + + Dep('riak_service2', 'run', 'success', 'riak_service2', 'join'), + Dep('riak_service3', 'run', 'success', 'riak_service3', 'join'), React('riak_service1', 'run', 'success', 'riak_service2', 'join'), React('riak_service1', 'run', 'success', 'riak_service3', 'join'), - React('riak_service2', 'run', 'success', 'riak_service2', 'join'), - React('riak_service3', 'run', 'success', 'riak_service3', 'join'), + # React('riak_service2', 'run', 'success', 'riak_service2', 'join'), + # React('riak_service3', 'run', 'success', 'riak_service3', 'join'), React('riak_service3', 'join', 'success', 'riak_service1', 'commit'), React('riak_service2', 'join', 'success', 'riak_service1', 'commit') @@ -111,12 +129,12 @@ def setup_haproxies(): for single_hpsc in hpsc_http: for riak in riaks: - signals.connect(riak, single_hpsc, {'ip': 'servers', + signals.connect(riak, single_hpsc, {'riak_hostname': 'servers', 'riak_port_http': 'ports'}) for single_hpsc in hpsc_pb: for riak in riaks: - signals.connect(riak, single_hpsc, {'ip': 'servers', + signals.connect(riak, single_hpsc, {'riak_hostname': 'servers', 'riak_port_pb': 'ports'}) # haproxy config to haproxy service diff --git a/resources/riak_node/meta.yaml b/resources/riak_node/meta.yaml index d1b3f484..22963c96 100644 --- a/resources/riak_node/meta.yaml +++ b/resources/riak_node/meta.yaml @@ -15,9 +15,16 @@ input: ssh_user: schema: str! value: - riak_name: + riak_self_name: schema: str! value: + riak_hostname: + schema: str! + value: + riak_name: + schema: str! + # value: "{{riak_self_name}}@{{riak_hostname}}" + value: "{{riak_self_name}}@{{ip}}" riak_port_http: schema: int! value: 18098 diff --git a/solar/solar/core/signals.py b/solar/solar/core/signals.py index eea2bc67..15274f41 100644 --- a/solar/solar/core/signals.py +++ b/solar/solar/core/signals.py @@ -8,6 +8,7 @@ from solar.interfaces.db import get_db from solar.events.api import add_events from solar.events.controls import Dependency + db = get_db() @@ -135,7 +136,14 @@ def connect_single(emitter, src, receiver, dst): emitter.args[src].subscribe(receiver.args[dst]) -def connect(emitter, receiver, mapping=None): +def connect(emitter, receiver, mapping=None, events=None): + # convert if needed + # TODO: handle invalid resource + # if isinstance(emitter, basestring): + # emitter = resource.load(emitter) + # if isinstance(receiver, basestring): + # receiver = resource.load(receiver) + mapping = mapping or guess_mapping(emitter, receiver) if isinstance(mapping, set): @@ -151,15 +159,24 @@ def connect(emitter, receiver, mapping=None): connect_single(emitter, src, receiver, dst) - events = [ - Dependency(emitter.name, 'run', 'success', receiver.name, 'run'), - Dependency(emitter.name, 'update', 'success', receiver.name, 'update') + # possibility to set events, when False it will NOT add events at all + if events is not False: + events = [ + Dependency(emitter.name, 'run', 'success', receiver.name, 'run'), + Dependency(emitter.name, 'update', 'success', receiver.name, 'update') ] - add_events(emitter.name, events) - #receiver.save() + add_events(emitter.name, events) + # receiver.save() def disconnect(emitter, receiver): + # convert if needed + # TODO: handle invalid resource + # if isinstance(emitter, basestring): + # emitter = resource.load(emitter) + # if isinstance(receiver, basestring): + # receiver = resource.load(receiver) + clients = Connections.read_clients() for src, destinations in clients[emitter.name].items():