Move applications_postfix to Ansible adapter
In its current incarnation, the applications_postfix configuration
parameter, along with the concept of "groups" is only relevant to
Ansible. Therefore, in the interest of simplicity, move it out of the
main code and into the Ansible adapter.
Signed-off-by: martin f. krafft <madduck@madduck.net>
diff --git a/reclass.py.in b/reclass.py.in
index 4657624..a2e036a 100644
--- a/reclass.py.in
+++ b/reclass.py.in
@@ -39,7 +39,7 @@
options.nodes_uri,
options.classes_uri)
data = get_data(options.storage_type, nodes_uri, classes_uri,
- options.applications_postfix, options.node)
+ options.node)
print output(data, options.output, options.pretty_print)
sys.exit(posix.EX_OK)
diff --git a/reclass/__init__.py b/reclass/__init__.py
index 58fa4ef..cf4184e 100644
--- a/reclass/__init__.py
+++ b/reclass/__init__.py
@@ -10,9 +10,9 @@
from output import OutputLoader
from storage import StorageBackendLoader
-def get_data(storage_type, nodes_uri, classes_uri, applications_postfix, node):
+def get_data(storage_type, nodes_uri, classes_uri, node):
storage_class = StorageBackendLoader(storage_type).load()
- storage = storage_class(nodes_uri, classes_uri, applications_postfix)
+ storage = storage_class(nodes_uri, classes_uri)
if not node:
ret = storage.inventory()
else:
diff --git a/reclass/adapters/ansible.py b/reclass/adapters/ansible.py
index 31d2f0a..0141ad1 100644
--- a/reclass/adapters/ansible.py
+++ b/reclass/adapters/ansible.py
@@ -20,7 +20,10 @@
# 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}
+ options = {'output': 'json',
+ 'pretty_print': True,
+ 'applications_postfix': '_hosts'
+ }
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(reclass.config.read_config_file(config_path))
@@ -43,9 +46,6 @@
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!
@@ -68,8 +68,7 @@
posix.EX_USAGE)
data = get_data(options['storage_type'], options['nodes_uri'],
- options['classes_uri'],
- options['applications_postfix'], options['node'])
+ options['classes_uri'], options['node'])
if options['node']:
# Massage and shift the data like Ansible wants it
@@ -79,8 +78,17 @@
data = data['parameters']
else:
- # Ansible inventory is only the list of groups
- data = data['groups']
+ # Ansible inventory is only the list of groups. Groups are the set
+ # of classes plus the set of applications with the postfix added:
+ groups = data['classes']
+ apps = data['applications']
+ if 'applications_postfix' in options:
+ postfix = options['applications_postfix']
+ groups.update([(k + postfix, v) for k,v in apps.iteritems()])
+ else:
+ groups.update(apps)
+
+ data = groups
print output(data, options['output'], options['pretty_print'])
diff --git a/reclass/config.py b/reclass/config.py
index 8deb299..498e7d1 100644
--- a/reclass/config.py
+++ b/reclass/config.py
@@ -36,9 +36,6 @@
default=defaults.get('pretty_print', False),
action="store_true",
help='try to make the output prettier [%default]')
- options_group.add_option('--applications-postfix', dest='applications_postfix',
- default=defaults.get('applications_postfix', '_hosts'),
- help="the postfix to apply to groups made from applications ['%default']")
parser.add_option_group(options_group)
run_modes = optparse.OptionGroup(parser, 'Modes',
diff --git a/reclass/storage/__init__.py b/reclass/storage/__init__.py
index 1d26874..76c2a67 100644
--- a/reclass/storage/__init__.py
+++ b/reclass/storage/__init__.py
@@ -14,10 +14,9 @@
class NodeStorageBase(object):
- def __init__(self, nodes_uri, classes_uri, applications_postfix):
+ def __init__(self, nodes_uri, classes_uri):
self._nodes_uri = nodes_uri
self._classes_uri = classes_uri
- self._applications_postfix = applications_postfix
nodes_uri = property(lambda self: self._nodes_uri)
classes_uri = property(lambda self: self._classes_uri)
@@ -40,16 +39,10 @@
def inventory(self):
entities, applications, classes = self._list_inventory()
- groups = classes.copy()
- if self._applications_postfix:
- groups.update([(k + self._applications_postfix,v) for k,v in
- applications.iteritems()])
- return {'__reclass__' : {'timestamp': _get_timestamp(),
- 'application_postfix': self._applications_postfix},
+ return {'__reclass__' : {'timestamp': _get_timestamp()},
'nodes': entities,
'classes': classes,
- 'applications': applications,
- 'groups': groups
+ 'applications': applications
}
diff --git a/reclass/storage/yaml_fs/__init__.py b/reclass/storage/yaml_fs/__init__.py
index 026c68f..45def3c 100644
--- a/reclass/storage/yaml_fs/__init__.py
+++ b/reclass/storage/yaml_fs/__init__.py
@@ -16,9 +16,8 @@
class ExternalNodeStorage(NodeStorageBase):
- def __init__(self, nodes_uri, classes_uri, applications_postfix):
- super(ExternalNodeStorage, self).__init__(nodes_uri, classes_uri,
- applications_postfix)
+ def __init__(self, nodes_uri, classes_uri):
+ super(ExternalNodeStorage, self).__init__(nodes_uri, classes_uri)
def _read_nodeinfo(self, name, base_uri, seen, nodename=None):
path = os.path.join(base_uri, name + FILE_EXTENSION)