def __init__(self, config): from M2Crypto.RSA import load_key private_key_path = config.pluginconf['ssl_client_private'] caller_id = basename( config.pluginconf['ssl_client_public']).split('.')[0] self.private_key = load_key(private_key_path) self.caller_id = 'cert=' + caller_id
#!/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]
def __init__(self, private_key_path, caller_id): self.private_key = load_key(private_key_path) self.caller_id = 'cert=' + caller_id
from math import floor config = {} for line in file('/etc/mcollective/client.cfg', 'rt').readlines(): bits = line.split('=', 1) if len(bits) == 2: config[bits[0].strip()] = bits[1].strip() 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)
#!/usr/bin/python import sys import syck as yaml import time from hashlib import sha1 from M2Crypto.RSA import load_pub_key, load_key from stompy.simple import Client # Change these. PREFIX = 'mcollective' CERTNAME = 'certificate-name' s = Client('stomp.server') s.connect('stompusername','stomppassword') rr = load_key('path-to-unencrypted-private-key.pem') target = '/topic/%s.discovery.command' % PREFIX target_reply = '/topic/%s.discovery.reply' % PREFIX s.subscribe(target_reply) rid = sha1(str(time.time())).hexdigest() # Put together message. r = {} r[':msgtime'] = int(time.time()) r[':filter'] = { 'identity': [], 'fact': [], 'agent': [], 'cf_class': [], } r[":requestid"] = rid r[":callerid"] = 'cert=%s' % CERTNAME