-
-
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.