blob: 465762479a38cab0e420889da2ef5407f4e80581 [file] [log] [blame]
martin f. krafftf37f0682013-06-14 16:36:20 +02001#!/usr/bin/python
2# -*- coding: utf-8 -*-
3#
4# reclass — recursive external node classifier
5#
6# Copyright © 2007–13 martin f. krafft <madduck@madduck.net>
7# Released under the terms of the Artistic Licence 2.0
8#
martin f. krafft7c64f9c2013-06-25 13:26:23 +02009__name__ = 'reclass'
martin f. krafftf37f0682013-06-14 16:36:20 +020010__description__ = 'classify nodes based on an external data source'
11__version__ = '1.0'
12__author__ = 'martin f. krafft <madduck@madduck.net>'
13__copyright__ = 'Copyright © 2007–13 ' + __author__
14__licence__ = 'Artistic Licence 2.0'
15
martin f. krafft7c64f9c2013-06-25 13:26:23 +020016import sys, os, posix
17import reclass.config
18from reclass.output import OutputLoader
19from reclass.storage import StorageBackendLoader
20import reclass.errors
martin f. krafft1de70cc2013-06-26 16:11:58 +020021from reclass import get_data, output
martin f. krafftf37f0682013-06-14 16:36:20 +020022
martin f. krafft3434b6b2013-06-14 20:40:52 +020023def _error(msg, rc):
24 print >>sys.stderr, msg
25 sys.exit(rc)
26
martin f. krafft1de70cc2013-06-26 16:11:58 +020027config_file = None
28for d in (os.getcwd(), os.path.dirname(sys.argv[0])):
29 f = os.path.join(d, __name__ + '-config.yml')
30 if os.access(f, os.R_OK):
31 config_file = f
32 break
33try:
martin f. krafft833936f2013-06-26 17:58:30 +020034 defaults = { 'pretty_print' : True, 'output' : 'yaml' }
martin f. krafft1de70cc2013-06-26 16:11:58 +020035 options = reclass.config.get_options(__name__, __version__,
martin f. krafft833936f2013-06-26 17:58:30 +020036 __description__, config_file,
37 defaults)
martin f. krafft1de70cc2013-06-26 16:11:58 +020038 nodes_uri, classes_uri = reclass.config.path_mangler(options.inventory_base_uri,
39 options.nodes_uri,
40 options.classes_uri)
41 data = get_data(options.storage_type, nodes_uri, classes_uri,
42 options.applications_postfix, options.node)
43 print output(data, options.output, options.pretty_print)
44 sys.exit(posix.EX_OK)
martin f. krafft3434b6b2013-06-14 20:40:52 +020045
martin f. krafft1de70cc2013-06-26 16:11:58 +020046except reclass.errors.ReclassException, e:
47 _error(e.message, e.rc)