summaryrefslogtreecommitdiffstats
path: root/src/sbin/bcfg2-remote
diff options
context:
space:
mode:
Diffstat (limited to 'src/sbin/bcfg2-remote')
-rwxr-xr-xsrc/sbin/bcfg2-remote55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/sbin/bcfg2-remote b/src/sbin/bcfg2-remote
new file mode 100755
index 000000000..4b45965c6
--- /dev/null
+++ b/src/sbin/bcfg2-remote
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+__revision__ = '$Revision$'
+
+from Bcfg2.tlslite.api import parsePEMKey, X509, X509CertChain
+from xmlrpclib import ServerProxy
+from Bcfg2.tlslite.integration.XMLRPCTransport import XMLRPCTransport
+import Bcfg2.Options, Bcfg2.Logging, logging, socket
+
+if __name__ == '__main__':
+ opts = {
+ 'agent-port': (('-p', '<agent tcp port>', 'agent TCP port'),
+ False, ('communication', 'agent-port'),
+ '6789', False),
+ 'host': (('-H', '<agent host>', 'agent host'),
+ False, False, False, False),
+ 'setup': (('-C', '<configfile>', "config file path"),
+ False, False, '/etc/bcfg2.conf', False),
+ 'key': (('-k', '<ssl key>', 'ssl key path'),
+ False, ('communication', 'key'), False, False),
+ 'debug': (('-d', '<debug level>', 'debug level (0-40)'),
+ False, False, 0, False),
+ }
+ optparser = Bcfg2.Options.OptionParser('bcfg2', opts)
+ setup = optparser.parse()
+ Bcfg2.Logging.setup_logging('bcfg2-remote',
+ to_syslog=False,
+ level=int(setup['debug']))
+ logger = logging.getLogger('bcfg2-remote')
+ if not setup['host']:
+ logger.error("-H option is required")
+ logger.error(optparser.helpmsg)
+ raise SystemExit(1)
+ s = open(setup['key']).read()
+ x509 = X509()
+ x509.parse(s)
+ certChain = X509CertChain([x509])
+ #s = open("/etc/bcfg2.key").read()
+ privateKey = parsePEMKey(s, private=True)
+
+ transport = XMLRPCTransport(certChain=certChain,
+ privateKey=privateKey)
+ host = setup['host']
+ port = setup['agent-port']
+ server = ServerProxy("https://%s:%s" % (host, port), transport)
+
+ try:
+ result = server.run()
+ except socket.error, serr:
+ if serr.args[0] == 111:
+ logger.error("Failed to connect to client %s" % host)
+ elif serr.args[0] == 32:
+ logger.error("Connection to client %s dropped; authentication failure?" % host)
+ else:
+ logger.error("Got unexpected socket error %d" % serr.args[0])
+ raise SystemExit(1)