Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

file 85 lines (73 sloc) 2.971 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
#!/usr/bin/env python
#
# This file is part of Shinken.
#
# Shinken is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Shinken is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with Shinken. If not, see <http://www.gnu.org/licenses/>.

# This program transforms a flat dependency file into a json one so it can be loaded in
# hot_dependencies_arbiter module
# The input file format is :
# host1 : vm1
# host2 : vm2
# ...
# You can now get a live update of your dependency tree in shinken for your xen/virtualbox/qemu
# All you have to do is finding a way to modify this flat file when you do a live migration
# for example, you can use a script like this in your crontab
# dsh -Mc -g mydom0group 'xm list | awk "/vm-/ { print \$1 }"' > /tmp/shinken_flat_mapping
#

import os
import sys
import optparse

# Try to load json (2.5 and higer) or simplejson if failed (python2.4)
try:
    import json
except ImportError:
    # For old Python version, load
    # simple json (it can be hard json?! It's 2 functions guy!)
    try:
        import simplejson as json
    except ImportError:
        sys.exit("Error: you need the json or simplejson module for this script")

VERSION = '0.1'


def main(input_file, output_file):
    # Check if input_file is newer than output_file
    if os.path.exists(output_file):
        if os.path.getmtime(output_file) >= os.path.getmtime(input_file):
            print "Nothing to do"
            return True
    r = []
    flatmappingfile = open(input_file, 'rb')

    for ligne in flatmappingfile:
        ligne = ligne.rstrip('\n\r')
        parts = ligne.split(':')
        host = parts[0]
        vm = parts[1]
        v = (('host', host), ('host', vm))
        r.append(v)

    flatmappingfile.close()

    jsonmappingfile = open(output_file, 'wb')
    buf = json.dumps(r)
    jsonmappingfile.write(buf)
    jsonmappingfile.close()

if __name__ == "__main__":
    # Manage the options
    parser = optparse.OptionParser(
        version="Shinken external flat mapping file to json mapping %s" % VERSION)
    parser.add_option("-o", "--output", dest='output_file', default='/tmp/external_mapping_file.json',
                      help="Path of the generated json mapping file.")
    parser.add_option("-i", "--input", dest='input_file', default='/tmp/shinken_flat_mapping',
                      help="Path oh the flat mapping file")

    opts, args = parser.parse_args()
    if args:
        parser.error("does not take any positional arguments")

    main(**opts.__dict__)
Something went wrong with that request. Please try again.