Restructure reclass into a Python module
By moving all code into ./reclass/, reclass can now be used as a Python
module. The Ansible adapter and the CLI have been updated accordingly.
Signed-off-by: martin f. krafft <madduck@madduck.net>
diff --git a/adapters/ansible.in b/adapters/ansible.in
index 53b8f52..d225c9e 100644
--- a/adapters/ansible.in
+++ b/adapters/ansible.in
@@ -6,86 +6,5 @@
# Copyright © 2007–13 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
-import os, sys, posix, stat
-
-def exit_error(msg, rc):
- print >>sys.stderr, msg
- sys.exit(rc)
-
-if len(sys.argv) == 1:
- exit_error('Need to specify --list or --host.', posix.EX_USAGE)
-
-ansible_dir = os.path.dirname(sys.argv[0])
-
-# In order to be able to use reclass as modules, manipulate the search path,
-# starting from the location of the adapter. Realpath will make sure that
-# symlinks are resolved.
-realpath = os.path.realpath(sys.argv[0] + '/../../')
-sys.path.insert(0, realpath)
-import reclass, config, errors
-
-# The adapter resides in the Ansible directory, so let's look there for an
-# optional configuration file called reclass-config.yml.
-options = {'output':'json', 'pretty_print':True}
-config_path = os.path.join(ansible_dir, 'reclass-config.yml')
-if os.path.exists(config_path) and os.access(config_path, os.R_OK):
- options.update(config.read_config_file(config_path))
-
-# Massage options into shape
-if 'storage_type' not in options:
- options['storage_type'] = 'yaml_fs'
-
-if 'nodes_uri' not in options:
- nodes_uri = os.path.join(ansible_dir, 'nodes')
- if stat.S_ISDIR(os.stat(nodes_uri).st_mode):
- options['nodes_uri'] = nodes_uri
- else:
- exit_error('nodes_uri not specified', posix.EX_USAGE)
-
-if 'classes_uri' not in options:
- classes_uri = os.path.join(ansible_dir, 'classes')
- if not stat.S_ISDIR(os.stat(classes_uri).st_mode):
- classes_uri = options['nodes_uri']
- options['classes_uri'] = classes_uri
-
-if 'applications_postfix' not in options:
- options['applications_postfix'] = '_hosts'
-
-# Invoke reclass according to what Ansible wants.
-# If the 'node' option is set, we want node information. If the option is
-# False instead, we print the inventory. Yeah for option abuse!
-if sys.argv[1] == '--list':
- if len(sys.argv) > 2:
- exit_error('Unknown arguments: ' + ' '.join(sys.argv[2:]),
- posix.EX_USAGE)
- options['node'] = False
-
-elif sys.argv[1] == '--host':
- if len(sys.argv) < 3:
- exit_error('Missing hostname.', posix.EX_USAGE)
- elif len(sys.argv) > 3:
- exit_error('Unknown arguments: ' + ' '.join(sys.argv[3:]),
- posix.EX_USAGE)
- options['node'] = sys.argv[2]
-
-else:
- exit_error('Unknown mode (--list or --host required).', posix.EX_USAGE)
-
-try:
- data = reclass.get_data(options['storage_type'], options['nodes_uri'],
- options['classes_uri'],
- options['applications_postfix'], options['node'])
-
- if options['node']:
- # Massage and shift the data like Ansible wants it
- data['parameters']['RECLASS'] = data['RECLASS']
- for i in ('classes', 'applications'):
- data['parameters']['RECLASS'][i] = data[i]
- data = data['parameters']
-
- print reclass.output(data, options['output'], options['pretty_print'])
-
- sys.exit(posix.EX_OK)
-
-except errors.ReclassException, e:
- exit_error(e.message, e.rc)
+from reclass.adapters.ansible import ansible_adapter
+ansible_adapter()