0
|
1 #!/usr/bin/env python
|
|
2 # -*- coding: utf-8 -*-
|
|
3
|
|
4 """
|
|
5 fake salt
|
|
6 """
|
|
7
|
|
8 # imports
|
|
9 import argparse
|
|
10 import json
|
|
11 import ssh
|
|
12 import sys
|
|
13
|
|
14 class KCl(object):
|
|
15 """fake salt's interface to real salt"""
|
|
16
|
|
17 def __init__(self, salt_master):
|
|
18 self.salt_master = salt_master
|
|
19 self.ssh = ssh.Ssh(self.salt_master)
|
|
20
|
|
21 def __call__(self, target, module, *args):
|
|
22 command = self.command(target, module, *args)
|
|
23 code, output = self.ssh.sudo(command)
|
|
24
|
|
25 return code, json.loads(output)
|
|
26
|
|
27 def command(self, target, module, *args):
|
|
28 retval = "salt --output=json --static '{target}' {module}".format(target=target, module=module)
|
|
29 for arg in args:
|
|
30 retval += " '{arg}'".format(arg=arg)
|
|
31 return retval
|
|
32
|
|
33 def ping(self, target='*'):
|
|
34 return self(target, 'test.ping')
|
|
35
|
|
36 def run(self, command, target='*'):
|
|
37 return self(target, 'cmd.run', command)
|
|
38
|
|
39
|
|
40 def main(args=sys.argv[1:]):
|
|
41 """CLI"""
|
|
42
|
|
43 # parse command line
|
|
44 parser = argparse.ArgumentParser(description=__doc__)
|
|
45 parser.add_argument('salt_master')
|
|
46 options = parser.parse_args(args)
|
|
47
|
|
48 # instantiate KCl
|
|
49 kcl = KCl(options.salt_master)
|
|
50
|
|
51 # ping, just for fun
|
|
52 code, pong = kcl.ping()
|
|
53
|
|
54 # output
|
|
55 print (json.dumps(pong, indent=2, sort_keys=True))
|
|
56
|
|
57 sys.exit(code)
|
|
58
|
|
59 if __name__ == '__main__':
|
|
60 main()
|