List input-type introduced
This commit is contained in:
@@ -21,6 +21,7 @@ class Resource(object):
|
||||
self.requires = metadata['input'].keys()
|
||||
self._validate_args(args)
|
||||
self.args = args
|
||||
self.input_types = metadata.get('input-types', {})
|
||||
self.changed = []
|
||||
self.tags = tags or []
|
||||
|
||||
@@ -42,9 +43,14 @@ class Resource(object):
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
def update(self, args):
|
||||
def update(self, args, emitter_name=None):
|
||||
for key, value in args.iteritems():
|
||||
self.args[key] = value
|
||||
if self.input_types.get(key, '') == 'list':
|
||||
if emitter_name is None:
|
||||
raise Exception('I need to know then emitter when updating input of list type')
|
||||
self.args[key][emitter_name] = value
|
||||
else:
|
||||
self.args[key] = value
|
||||
self.changed.append(key)
|
||||
signals.notify(self, key, value)
|
||||
|
||||
|
||||
@@ -2,4 +2,6 @@ id: haproxy
|
||||
handler: ansible
|
||||
version: 1.0.0
|
||||
input:
|
||||
servers:
|
||||
configs:
|
||||
input-types:
|
||||
configs: list
|
||||
|
||||
@@ -3,3 +3,5 @@ handler: ansible
|
||||
version: 1.0.0
|
||||
input:
|
||||
servers:
|
||||
input-types:
|
||||
servers: list
|
||||
|
||||
26
x/signals.py
26
x/signals.py
@@ -44,9 +44,10 @@ def connect(emitter, receiver, mapping=None):
|
||||
guessed.update(mapping)
|
||||
|
||||
for src, dst in guessed.items():
|
||||
# disconnect all receiver inputs
|
||||
# TODO: check if receiver input is of list type first
|
||||
disconnect_receiver_by_input(receiver, dst)
|
||||
# Disconnect all receiver inputs
|
||||
# Check if receiver input is of list type first
|
||||
if receiver.input_types.get(dst, '') != 'list':
|
||||
disconnect_receiver_by_input(receiver, dst)
|
||||
|
||||
CLIENTS.setdefault(emitter.name, {})
|
||||
CLIENTS[emitter.name].setdefault(src, [])
|
||||
@@ -57,11 +58,28 @@ def connect(emitter, receiver, mapping=None):
|
||||
|
||||
def disconnect(emitter, receiver):
|
||||
for src, destinations in CLIENTS[emitter.name].items():
|
||||
destinations = [
|
||||
destination for destination in destinations
|
||||
if destination[0] == receiver.name
|
||||
]
|
||||
|
||||
for destination in destinations:
|
||||
receiver_input = destination[1]
|
||||
if receiver.input_types.get(receiver_input, '') == 'list':
|
||||
print 'Removing input {} from {}'.format(receiver_input, receiver.name)
|
||||
# TODO: update here? We're deleting an input...
|
||||
receiver.args[receiver_input] = {
|
||||
k: v for k, v in receiver.args.get(receiver_input, {}).items()
|
||||
if k != emitter.name
|
||||
}
|
||||
|
||||
CLIENTS[emitter.name][src] = [
|
||||
destination for destination in destinations
|
||||
if destination[0] != receiver.name
|
||||
]
|
||||
|
||||
# Inputs might have changed
|
||||
receiver.save()
|
||||
utils.save_to_config_file(CLIENTS_CONFIG_KEY, CLIENTS)
|
||||
|
||||
|
||||
@@ -88,7 +106,7 @@ def notify(source, key, value):
|
||||
resource = db.get_resource(client)
|
||||
print 'Resource found', client
|
||||
if resource:
|
||||
resource.update({r_key: value})
|
||||
resource.update({r_key: value}, emitter_name=source.name)
|
||||
else:
|
||||
print 'Resource {} deleted?'.format(client)
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user