Initial commit
This patch adds initial formula that allow to install Ironic api
and conductor.
Change-Id: I21fe4cd93454ed64277ba6756a591155d0052dc8
diff --git a/_modules/ironicng.py b/_modules/ironicng.py
new file mode 100644
index 0000000..9ed55ef
--- /dev/null
+++ b/_modules/ironicng.py
@@ -0,0 +1,136 @@
+# -*- coding: utf-8 -*-
+
+import logging
+from functools import wraps
+LOG = logging.getLogger(__name__)
+
+# Import third party libs
+HAS_IRONIC = False
+try:
+ from ironicclient import client
+ HAS_IRONIC = True
+except ImportError:
+ pass
+
+__opts__ = {}
+
+
+def __virtual__():
+ '''
+ Only load this module if ironic is installed on this minion.
+ '''
+ if HAS_IRONIC:
+ return 'ironicng'
+ return False
+
+
+def _autheticate(func_name):
+ '''
+ Authenticate requests with the salt keystone module and format return data
+ '''
+ @wraps(func_name)
+ def decorator_method(*args, **kwargs):
+ '''
+ Authenticate request and format return data
+ '''
+ connection_args = {'profile': kwargs.pop('profile', None)}
+ nkwargs = {}
+ for kwarg in kwargs:
+ if 'connection_' in kwarg:
+ connection_args.update({kwarg: kwargs[kwarg]})
+ elif '__' not in kwarg:
+ nkwargs.update({kwarg: kwargs[kwarg]})
+ kstone = __salt__['keystone.auth'](**connection_args)
+ token = kstone.auth_token
+
+ if kwargs.get('connection_endpoint_type') == None:
+ endpoint_type = 'internalURL'
+ else:
+ endpoint_type = kwargs.get('connection_endpoint_type')
+
+ endpoint = kstone.service_catalog.url_for(
+ service_type='baremetal',
+ endpoint_type=endpoint_type)
+ ironic_interface = client.get_client(
+ 1,
+ ironic_url=endpoint, os_auth_token=token)
+ return func_name(ironic_interface, *args, **nkwargs)
+ return decorator_method
+
+
+@_autheticate
+def list_nodes(ironic_interface, **kwargs):
+ '''
+ list all ironic nodes
+ CLI Example:
+ .. code-block:: bash
+ salt '*' ironic.list_nodes
+ '''
+ return {'nodes': [x.to_dict() for x
+ in ironic_interface.node.list(**kwargs)]}
+
+
+@_autheticate
+def create_node(ironic_interface, **kwargs):
+ '''
+ create ironic node
+ CLI Example:
+ .. code-block:: bash
+ salt '*' ironic.create_node
+ '''
+ return ironic_interface.node.create(**kwargs).to_dict()
+
+
+@_autheticate
+def delete_node(ironic_interface, node_id):
+ '''
+ delete ironic node
+
+ :param node_id: UUID or Name of the node.
+ CLI Example:
+ .. code-block:: bash
+ salt '*' ironic.delete_node
+ '''
+ ironic_interface.node.delete(node_id)
+
+
+@_autheticate
+def show_node(ironic_interface, node_id):
+ '''
+ show info about ironic node
+ :param node_id: UUID or Name of the node.
+ CLI Example:
+ .. code-block:: bash
+ salt '*' ironic.show_node
+ '''
+ return ironic_interface.node.get(node_id).to_dict()
+
+
+@_autheticate
+def create_port(ironic_interface, address, node_name=None,
+ node_uuid=None, **kwargs):
+ '''
+ create ironic port
+ CLI Example:
+ .. code-block:: bash
+ salt '*' ironic.crate_port
+ '''
+ node_uuid = node_uuid or ironic_interface.node.get(
+ node_name).to_dict()['uuid']
+ return ironic_interface.port.create(
+ address=address, node_uuid=node_uuid, **kwargs).to_dict()
+
+
+@_autheticate
+def list_ports(ironic_interface, **kwargs):
+ '''
+ list all ironic ports
+ CLI Example:
+ .. code-block:: bash
+ salt '*' ironic.list_ports
+ '''
+
+ return {'ports': [x.to_dict() for x
+ in ironic_interface.port.list(**kwargs)]}
+
+