From 52736c2dfeebad31d92d6da82b1cbb458785a13a Mon Sep 17 00:00:00 2001 From: Bruno Binet Date: Tue, 11 Apr 2017 17:22:55 +0200 Subject: [PATCH 1/2] Add support to ignore classes that are not found --- reclass/core.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/reclass/core.py b/reclass/core.py index 76bd0a8e..0c8543d2 100644 --- a/reclass/core.py +++ b/reclass/core.py @@ -18,9 +18,11 @@ class Core(object): - def __init__(self, storage, class_mappings, input_data=None): + def __init__(self, storage, class_mappings, input_data=None, + ignore_class_notfound=False): self._storage = storage self._class_mappings = class_mappings + self._ignore_class_notfound = ignore_class_notfound self._input_data = input_data @staticmethod @@ -93,6 +95,8 @@ def _recurse_entity(self, entity, merge_base=None, seen=None, nodename=None): try: class_entity = self._storage.get_class(klass) except ClassNotFound, e: + if self._ignore_class_notfound: + continue e.set_nodename(nodename) raise e From 66d946b0c57692d4c5561418b145185143f597c4 Mon Sep 17 00:00:00 2001 From: Bruno Binet Date: Tue, 11 Apr 2017 17:23:52 +0200 Subject: [PATCH 2/2] Update salt adapter to allow ignore_class_notfound config --- reclass/adapters/salt.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/reclass/adapters/salt.py b/reclass/adapters/salt.py index 1b458231..f4f331be 100755 --- a/reclass/adapters/salt.py +++ b/reclass/adapters/salt.py @@ -24,7 +24,8 @@ def ext_pillar(minion_id, pillar, nodes_uri=OPT_NODES_URI, classes_uri=OPT_CLASSES_URI, class_mappings=None, - propagate_pillar_data_to_reclass=False): + propagate_pillar_data_to_reclass=False, + ignore_class_notfound=False): nodes_uri, classes_uri = path_mangler(inventory_base_uri, nodes_uri, classes_uri) @@ -33,7 +34,8 @@ def ext_pillar(minion_id, pillar, input_data = None if propagate_pillar_data_to_reclass: input_data = pillar - reclass = Core(storage, class_mappings, input_data=input_data) + reclass = Core(storage, class_mappings, input_data=input_data, + ignore_class_notfound=ignore_class_notfound) data = reclass.nodeinfo(minion_id) params = data.get('parameters', {}) @@ -48,13 +50,14 @@ def ext_pillar(minion_id, pillar, def top(minion_id, storage_type=OPT_STORAGE_TYPE, inventory_base_uri=OPT_INVENTORY_BASE_URI, nodes_uri=OPT_NODES_URI, classes_uri=OPT_CLASSES_URI, - class_mappings=None): + class_mappings=None, ignore_class_notfound=False): nodes_uri, classes_uri = path_mangler(inventory_base_uri, nodes_uri, classes_uri) storage = get_storage(storage_type, nodes_uri, classes_uri, default_environment='base') - reclass = Core(storage, class_mappings, input_data=None) + reclass = Core(storage, class_mappings, input_data=None, + ignore_class_notfound=ignore_class_notfound) # if the minion_id is not None, then return just the applications for the # specific minion, otherwise return the entire top data (which we need for