Add create vm script and foreman config
[genesis.git] / opensteak / tools / opensteak / foreman_objects / item.py
diff --git a/opensteak/tools/opensteak/foreman_objects/item.py b/opensteak/tools/opensteak/foreman_objects/item.py
new file mode 100644 (file)
index 0000000..f418f8c
--- /dev/null
@@ -0,0 +1,135 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+#
+#    Authors:
+#     David Blaisonneau <david.blaisonneau@orange.com>
+#     Arnaud Morin <arnaud1.morin@orange.com>
+
+from pprint import pprint as pp
+
+
+class ForemanItem(dict):
+    """
+    Item class
+    Represent the content of a foreman object as a dict
+    """
+
+    def __init__(self, api, key,
+                 objName, payloadObj,
+                 *args, **kwargs):
+        """ Function __init__
+        Represent the content of a foreman object as a dict
+
+        @param api: The foreman api
+        @param key: The object Key
+        @param *args, **kwargs: the dict representation
+        @return RETURN: Itself
+        """
+        self.api = api
+        self.key = key
+        if objName:
+            self.objName = objName
+        if payloadObj:
+            self.payloadObj = payloadObj
+        self.store = dict()
+        if args[0]:
+            self.update(dict(*args, **kwargs))
+        # We get the smart class parameters for the good items
+        if objName in ['hosts', 'hostgroups',
+                       'puppet_classes', 'environments']:
+            from opensteak.foreman_objects.itemSmartClassParameter\
+                import ItemSmartClassParameter
+            scp_ids = map(lambda x: x['id'],
+                          self.api.list('{}/{}/smart_class_parameters'
+                                        .format(self.objName, key)))
+            scp_items = list(map(lambda x: ItemSmartClassParameter(self.api, x,
+                                 self.api.get('smart_class_parameters', x)),
+                                 scp_ids))
+            scp = {'{}::{}'.format(x['puppetclass']['name'],
+                                   x['parameter']): x
+                   for x in scp_items}
+            self.update({'smart_class_parameters_dict': scp})
+
+    def __setitem__(self, key, attributes):
+        """ Function __setitem__
+        Set a parameter of a foreman object as a dict
+
+        @param key: The key to modify
+        @param attribute: The data
+        @return RETURN: The API result
+        """
+        if key is 'puppetclass_ids':
+            payload = {"puppetclass_id": attributes,
+                       self.payloadObj + "_class":
+                           {"puppetclass_id": attributes}}
+            return self.api.create("{}/{}/{}"
+                                   .format(self.objName,
+                                           self.key,
+                                           "puppetclass_ids"),
+                                   payload)
+        elif key is 'parameters':
+            payload = {"parameter": attributes}
+            return self.api.create("{}/{}/{}"
+                                   .format(self.objName,
+                                           self.key,
+                                           "parameters"),
+                                   payload)
+        else:
+            payload = {self.payloadObj: {key: attributes}}
+            return self.api.set(self.objName, self.key, payload)
+
+    def getParam(self, name=None):
+        """ Function getParam
+        Return a dict of parameters or a parameter value
+
+        @param key: The parameter name
+        @return RETURN: dict of parameters or a parameter value
+        """
+        if 'parameters' in self.keys():
+            l = {x['name']: x['value'] for x in self['parameters']}
+            if name:
+                if name in l.keys():
+                    return l[name]
+                else:
+                    return False
+            else:
+                return l
+
+    def checkAndCreateClasses(self, classes):
+        """ Function checkAndCreateClasses
+        Check and add puppet classe
+
+        @param key: The parameter name
+        @param classes: The classes ids list
+        @return RETURN: boolean
+        """
+        actual_classes = self['puppetclass_ids']
+        for v in classes:
+            if v not in actual_classes:
+                self['puppetclass_ids'] = v
+        return list(classes).sort() is list(self['puppetclass_ids']).sort()
+
+    def checkAndCreateParams(self, params):
+        """ Function checkAndCreateParams
+        Check and add global parameters
+
+        @param key: The parameter name
+        @param params: The params dict
+        @return RETURN: boolean
+        """
+        actual_params = self['param_ids']
+        for k, v in params.items():
+            if k not in actual_params:
+                self['parameters'] = {"name": k, "value": v}
+        return self['param_ids'].sort() == list(params.values()).sort()