Reclass _states - node_present state
diff --git a/_modules/reclass.py b/_modules/reclass.py
index 34ea4b9..10fcdc3 100644
--- a/_modules/reclass.py
+++ b/_modules/reclass.py
@@ -38,6 +38,45 @@
return os.path.join(defaults.get('inventory_base_uri'), 'classes')
+def _get_node_meta(name, cluster="default", environment="prd", classes=None, parameters=None):
+ host_name = name.split('.')[0]
+ domain_name = '.'.join(name.split('.')[1:])
+
+ if classes == None:
+ meta_classes = []
+ else:
+ if isinstance(classes, six.string_types):
+ meta_classes = json.loads(classes)
+ else:
+ meta_classes = classes
+
+ if parameters == None:
+ meta_parameters = {}
+ else:
+ if isinstance(parameters, six.string_types):
+ meta_parameters = json.loads(parameters)
+ else:
+ # generate dict from OrderedDict
+ meta_parameters = {k: v for (k, v) in parameters.items()}
+
+ node_meta = {
+ 'classes': meta_classes,
+ 'parameters': {
+ '_param': meta_parameters,
+ 'linux': {
+ 'system': {
+ 'name': host_name,
+ 'domain': domain_name,
+ 'cluster': cluster,
+ 'environment': environment,
+ }
+ }
+ }
+ }
+
+ return node_meta
+
+
def node_create(name, path=None, cluster="default", environment="prd", classes=None, parameters=None, **kwargs):
'''
Create a reclass node
@@ -69,36 +108,7 @@
host_name = name.split('.')[0]
domain_name = '.'.join(name.split('.')[1:])
- if classes == None:
- meta_classes = []
- else:
- if isinstance(classes, six.string_types):
- meta_classes = json.loads(classes)
- else:
- meta_classes = classes
-
- if parameters == None:
- meta_parameters = {}
- else:
- if isinstance(parameters, six.string_types):
- meta_parameters = json.loads(parameters)
- else:
- meta_parameters = parameters
-
- node_meta = {
- 'classes': meta_classes,
- 'parameters': {
- '_param': meta_parameters,
- 'linux': {
- 'system': {
- 'name': host_name,
- 'domain': domain_name,
- 'cluster': cluster,
- 'environment': environment,
- }
- }
- }
- }
+ node_meta = _get_node_meta(name, cluster, environment, classes, parameters)
LOG.debug(node_meta)
if path == None:
@@ -176,23 +186,14 @@
ret = {}
for root, sub_folders, files in os.walk(_get_nodes_dir()):
- for file in files:
- file_path = os.path.join(root, file)
- file_content = open(file_path, 'r')
- file_data = yaml.load(file_content.read())
- file_content.close()
- if 'classes' in file_data:
- classes = file_data.get('classes')
- else:
- classes = []
- if 'parameters' in file_data:
- if '_param' in file_data.get('parameters'):
- parameters = file_data.get('parameters').get('_param')
- else:
- parameters = []
- else:
- parameters = []
- name = file.replace('.yml', '')
+ for fl in files:
+ file_path = os.path.join(root, fl)
+ with open(file_path, 'r') as file_handle:
+ file_read = yaml.load(file_handle.read())
+ file_data = file_read or {}
+ classes = file_data.get('classes', [])
+ parameters = file_data.get('parameters', {}).get('_param', [])
+ name = fl.replace('.yml', '')
host_name = name.split('.')[0]
domain_name = '.'.join(name.split('.')[1:])
path = root.replace(_get_nodes_dir()+'/', '')