#!/usr/bin/python from mcollective import Message from yaml import load from M2Crypto.RSA import load_pub_key, load_key from stompy.simple import Client from sys import argv, exit, stderr if len(argv) < 7: print >>stderr, '%s <stomp server> <stomp username> <stomp password> <key filename> <key name> <fact>' % argv[0] exit(-1) certificate_name = argv[5] host, port = argv[1].split(':') stomp_client = Client(host, int(port)) stomp_client.connect(argv[2], argv[3]) private_key = load_key(argv[4]) body = {':caller': 'cert=%s' % certificate_name, ':data': {':process_results': True}, ':action': 'inventory', ':agent': 'rpcutil'} m = Message(body, stomp_client) m.sign(private_key, certificate_name) results = m.send_and_await_results(debug=True) print [load(q[':body'])[':data'][':facts'][argv[6]] for q in results]
if len(argv) < 2: print >>stderr, '%s <check> [args]' % argv[0] exit(-1) certificate_name = os.path.basename(config['plugin.ssl_client_public'].replace('.pem', '')) stomp_client = Client(config.get('plugin.stomp.host', 'localhost'), port=int(config.get('plugin.stomp.port', 61613))) stomp_client.connect(config['plugin.stomp.user'], config['plugin.stomp.password']) private_key = load_key(config['plugin.ssl_client_private']) args = ' '.join(argv[2:]) body = { ':caller': 'cert=%s' % certificate_name, ':data': { ':process_results': True, ':command': argv[2], }, ':action': 'runcommand', ':agent': 'nrpe' } m = Message(body, stomp_client, target='nrpe', filter_=Filter(identity=argv[1]).dump()) m.sign(private_key, certificate_name) results = m.send_and_await_results(timeout=1) data = [load(q[':body'])[':data'] for q in results] if len(data): print data[0][':output'] exit(int(data[0][':exitcode'])) print 'No response from MCollective' exit(3)