view kcl/kcl.py @ 0:0f44ee073173 default tip

fake salt, initial commit
author Jeff Hammel <k0scist@gmail.com>
date Mon, 06 Feb 2017 01:10:22 +0000
parents
children
line wrap: on
line source

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
fake salt
"""

# imports
import argparse
import json
import ssh
import sys

class KCl(object):
    """fake salt's interface to real salt"""

    def __init__(self, salt_master):
        self.salt_master = salt_master
        self.ssh = ssh.Ssh(self.salt_master)

    def __call__(self, target, module, *args):
        command = self.command(target, module, *args)
        code, output = self.ssh.sudo(command)

        return code, json.loads(output)

    def command(self, target, module, *args):
        retval = "salt --output=json --static '{target}' {module}".format(target=target, module=module)
        for arg in args:
            retval += " '{arg}'".format(arg=arg)
        return retval

    def ping(self, target='*'):
        return self(target, 'test.ping')

    def run(self, command, target='*'):
        return self(target, 'cmd.run', command)


def main(args=sys.argv[1:]):
    """CLI"""

    # parse command line
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('salt_master')
    options = parser.parse_args(args)

    # instantiate KCl
    kcl = KCl(options.salt_master)

    # ping, just for fun
    code, pong = kcl.ping()

    # output
    print (json.dumps(pong, indent=2, sort_keys=True))

    sys.exit(code)

if __name__ == '__main__':
    main()