Пример #1
0
#!/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]
Пример #2
0
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)