This is as far as I got, but I am not properly authenticated. The program is below.
The error I get is: File "/home/frans/lxd/websock.py", line 42, in <module> ws.connect(wsurl) File "/usr/local/lib/python2.7/dist-packages/websocket/_core.py", line 211, in connect options.pop('socket', None)) File "/usr/local/lib/python2.7/dist-packages/websocket/_http.py", line 77, in connect sock = _ssl_socket(sock, options.sslopt, hostname) File "/usr/local/lib/python2.7/dist-packages/websocket/_http.py", line 179, in _ssl_socket sock = _wrap_sni_socket(sock, sslopt, hostname, check_hostname) File "/usr/local/lib/python2.7/dist-packages/websocket/_http.py", line 160, in _wrap_sni_socket server_hostname=hostname, File "/usr/lib/python2.7/ssl.py", line 353, in wrap_socket _context=self) File "/usr/lib/python2.7/ssl.py", line 601, in __init__ self.do_handshake() File "/usr/lib/python2.7/ssl.py", line 830, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590) Obviously something wrong with certificates, but what ? Anyone a clue? Thanks, Frans #!/usr/bin/python2 import json import requests import sys import websocket import urllib URL = '127.0.0.1:8443' if len(sys.argv) < 2: print('usage: exec <container> cmd') sys.exit(1) u='https://%s/1.0/containers/%s/exec' % (URL, sys.argv[1]) cert = ('client.crt', 'client.key') command = { "command": sys.argv[2:], "wait-for-websocket": True, } params = json.dumps(command) print(u) print(params) r = requests.post(u, data=params, verify=False, cert=cert) content = json.loads(r.text) op = content['operation'] fds = content['metadata']['metadata']['fds'] sockets = {} stdout = '1' stdin = '0' stderr = '2' ssl_options = { "certfile": "client.crt", "keyfile": "client.key", }; for fd in [stdin, stdout, stderr]: secret = urllib.urlencode({'secret': fds[fd]}) wsurl = 'wss://%s%s/websocket?%s' %(URL, op, secret) ws = websocket.WebSocket(sslopt=ssl_options) ws.connect(wsurl) sockets[fd] = ws # stdout = 1, stderr = 2 output = sockets[stdout].recv() error = sockets[stderr].recv() print(output) 2017-02-15 16:28 GMT+01:00 Frans Meulenbroeks <fransmeulenbro...@gmail.com>: > Hi, > > I was wondering if someone could help me a bit with exec over the REST API > (in python in my case). > > I found this example: https://github.com/lxc/lxd/issues/231 but > unfortunately this did not work for me (after changing 8080 to 8443). > > I suspect this is caused by missing authentication, but as I am a > websocket n00b, I was wondering if someone could help me out by providing > some more info, a link or a code snippet. > > Also: should I use ws:// or wss:// ? > > Thanks for any help! > Frans >
_______________________________________________ lxc-users mailing list lxc-users@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-users