Merge "composer.create returns CreatedResources object"

This commit is contained in:
Jenkins
2016-01-05 15:19:16 +00:00
committed by Gerrit Code Review
2 changed files with 31 additions and 3 deletions

View File

@@ -33,9 +33,9 @@ def setup_riak():
ModelMeta.remove_all() ModelMeta.remove_all()
resources = cr.create('nodes', 'templates/nodes', {'count': 3}) resources = cr.create('nodes', 'templates/nodes', {'count': 3})
nodes = [x for x in resources if x.name.startswith('node')] nodes = [x for x in resources if x.name.startswith('node')]
hosts_services = [x for x in resources if x.name.startswith('hosts_file')] nodes = resources.like('node')
hosts_services = resources.like('hosts_file')
node1, node2, node3 = nodes node1, node2, node3 = nodes
hosts_services = [x for x in resources if x.name.startswith('hosts_file')]
riak_services = [] riak_services = []
ips = '10.0.0.%d' ips = '10.0.0.%d'

View File

@@ -14,12 +14,14 @@
# under the License. # under the License.
from collections import defaultdict from collections import defaultdict
from collections import OrderedDict
from StringIO import StringIO from StringIO import StringIO
from jinja2 import Environment from jinja2 import Environment
from jinja2 import meta from jinja2 import meta
import os import os
import re
import yaml import yaml
from solar.core.log import log from solar.core.log import log
@@ -42,6 +44,32 @@ VR_ENV = Environment(block_start_string="#%",
lstrip_blocks=True) lstrip_blocks=True)
class CreatedResources(object):
def __init__(self, resources):
if isinstance(resources, (list, tuple)):
c = OrderedDict((r.name, r) for r in resources)
else:
c = resources
self.data = c
def __getitem__(self, key):
if isinstance(key, int):
key = self.data.keys()[key]
return self.data[key]
def __iter__(self):
return self.data.itervalues()
def __len__(self):
return self.data.__len__()
def like(self, regex):
keys = self.data.keys()
matched_keys = filter(lambda key: re.match(regex, key), keys)
return CreatedResources({rname: self[rname] for rname in matched_keys})
def create(name, spec, inputs=None, tags=None): def create(name, spec, inputs=None, tags=None):
inputs = inputs or {} inputs = inputs or {}
if isinstance(spec, provider.BaseProvider): if isinstance(spec, provider.BaseProvider):
@@ -70,7 +98,7 @@ def create(name, spec, inputs=None, tags=None):
r = create_resource(name, spec, inputs=inputs, tags=tags) r = create_resource(name, spec, inputs=inputs, tags=tags)
rs = [r] rs = [r]
return rs return CreatedResources(rs)
def create_resource(name, spec, inputs=None, tags=None): def create_resource(name, spec, inputs=None, tags=None):