-
-
Save vincent99/491afed2306ba448dd89 to your computer and use it in GitHub Desktop.
| /* | |
| Setup: | |
| npm install ws | |
| Usage: | |
| Create an API key in Rancher and start up with: | |
| node socket.js address.of.rancher:8080 access_key secret_key project_id | |
| */ | |
| var WebSocket = require('ws'); | |
| var host = process.argv[2]; | |
| var accessKey = process.argv[3]; | |
| var secretKey = process.argv[4]; | |
| var projectId = process.argv[5]; | |
| var url = 'ws://'+accessKey+':'+secretKey+'@'+host+'/v1/projects/'+projectId+'/subscribe?eventNames=resource.change'; | |
| var socket = new WebSocket(url); | |
| socket.on('open', function() { | |
| console.log('Socket opened'); | |
| }); | |
| socket.on('message', function(messageStr) { | |
| var message = JSON.parse(messageStr); | |
| if ( message.name === 'ping' ) | |
| { | |
| console.log('ping'); | |
| } | |
| else if ( message.name === 'resource.change' && message.data ) | |
| { | |
| var resource = message.data.resource; | |
| var info = 'name='+resource.name + ', state='+resource.state; | |
| if ( resource.transitioning !== 'no' ) | |
| { | |
| info += ', transitioning='+resource.transitioning + ', message='+resource.transitioningMessage | |
| } | |
| console.log(message.resourceType, message.resourceId, 'changed:', info); | |
| } | |
| }); | |
| socket.on('close', function() { | |
| console.log('Socket closed'); | |
| }); |
@arkka The UI does use token auth, but basic with API keys works too.. They python library probably just doesn't support parsing ws://user:pass@host/path and turning that into the Authorization header ("Authorization: Basic " + base64encode("user:pass")).
?include= is sort of a hack put in for/used by the UI and is explicitly undocumented because it will probably be removed in a future API revision.
There is one other event name (eventNames=service.kubernetes.change) and that's about it.
Exactly that's the problem @vincent99. It's seems the python library for websocket-client did not support it, and using base64 as my authorization token on header fix everything.
Thank you 👍
I am using rancher 2.11 and after I get a few pings back from rancher the websocket closes with error code 1006. Any ideas?
I accessing the websocket from a node.js server
NVM, i got it working!
It seem for python (or in my case), I'm required to login first using
requests, retrieve the authorization response, then use it on websocket call.