If someone starts thinking of it as a filesystem, be obliging.
That means some people might want to 'dir', some people might
want to 'cat' things. Make it tend to do the right thing.
Have confetty assume that a plain nodename is a requset for console.
If a console session is started from interactive mode, return to
interactive mode on ctrl-e, c, . rather than exiting.
This allows non-privileged users to be authenticated by SO_PEERCRED.
In the case where the user is not a known confluent user, they are
given a chance to use a name/password.
The loop was sending failure back after an iteration of the loop
that fails to authenticate and then again at the beginning of the next iteration.
Remove the end iteration sending so that there is only one iteration of the
message
Properly implement authentication and switch the protocol over to the tlv
based protocol. Abandon all thought of the socket being directly accessible.
Any CLI semantics will be in confetty and an appliance wishing to expose that CLI
directly should use standard ssh stuff with a shell of confetty. The unix domain
authentication support makes this feasible (requires user creation push name into
confluent repository at the moment..)
Previously, was just keying by node. The problem of course being that
the first tenant to connect for a given node name dictates the console
object for everyone else. Correct this by keying by the tuple of tenant and node together.
Also, remove a required function from console interface. Now a plugin
is only responsible for their thread behavior and never responsible
for the consoleserver mechanism requirement for helping user session
do polling IO. This is additionally great because it means the
coordination is contained to each session object and many client connections
are not causing multiple calls to iterate the wait loop.
When data was coming in during logon, it was possible for
the handler to be called before rcpts member was initialized.
Correct by initializing rcpts prior to taking any other action.
If circumstances inside pyghmi cause it to be looping in
an event loop, confluent was getting work done, but
the code to wake up the eventlet greenthreads wouldn't get tickled.
Address this by also waking up waiters in the function that is
invited to the pyghmi event loop party.
If a plugin has a default and is also explicitly defined,
the pluginapi would call the code twice. Correct this by avoiding
calling the default if specific info not specified already
If an authorized user tries to use a session id that isn't recognized
(for example, a laptop coming out of suspend), cleanly return error
rather than traceback.
Previously, one ipmi failure would tank all consoles and commands.
Now, at least console failures are isolated.
Next stop is to isolate command failures, then fix up session recovery.
-defer to document completion (all at once) for more straightforward code
-data only gets into arrays when there is a multitude
-at least for now, 'pretty print' the dumps in http interface