The interactive shell¶
It’s very easy to create an interactive command line shell from a node tree.
Suppose that you have a Node
called
MyRootNode
, then you can create a shell by making an executable file like
this:
#!/usr/bin/env python
from deployer.client import start
from deployer.node import Node
class MyRootNode(Node):
...
if __name__ == '__main__':
start(MyRootNode)
If you save this as client.py
and call it by typing python ./client.py
--help
, the following help text will be shown:
Usage:
./client.py run [-s | --single-threaded | --socket SOCKET] [--path PATH]
[--non-interactive] [--log LOGFILE] [--scp]
[--] [ACTION PARAMETER...]
./client.py listen [--log LOGFILE] [--non-interactive] [--socket SOCKET]
./client.py connect (--socket SOCKET) [--path PATH] [--scp]
[--] [ACTION PARAMETER...]
./client.py telnet-server [--port PORT] [--log LOGFILE] [--non-interactive]
./client.py list-sessions
./client.py scp
./client.py -h | --help
./client.py --version
Options:
-h, --help : Display this help text.
-s, --single-threaded : Single threaded mode.
--path PATH : Start the shell at the node with this location.
--scp : Open a secure copy shell.
--non-interactive : If possible, run script with as few interactions as
possible. This will always choose the default
options when asked for questions.
--log LOGFILE : Write logging info to this file. (For debugging.)
--socket SOCKET : The path of the unix socket.
--version : Show version information.
There are several options to start such a shell. It can be multi or single
threaded, or you can run it as a telnet-server. Assuming you made the file also
executable using chmod +x client.py
, you just type the following to get the
interactive prompt:
./client.py run
Running node actions¶
In order to execute an action of the current node, just type the name of the action and press enter. Follow the action name by a space and a value if you want to pass that value as parameter.
Sandboxed execution is possible by preceding the action name by the word
sandbox
. e.g. type: sandbox do_something param
. This will run the
action, like usual, but it won’t execute the actual commands on the hosts,
instead it will execute a syntax-checking command instead.
Special commands¶
Some special commands, starting with double dash:
Command | Meaning |
---|---|
--inspect |
Show information about the current node. This displays the file where the node has been defined, the hosts that are bound to this node and the list of actions child nodes that it contains. |
--source-code |
Display the source code of the current node. |
--connect |
Open an interactive (bash) shell on a host of this node. It will ask which host to connect if there are several hosts in this node. |
--version |
Show version information. |
--scp |
Open an SCP shell. |
--run |
Run a shell command on all hosts in the current node. |
--run-with-sudo |
Identical to --run , but using sudo |
For --inspect
, --source-code
and --connect
, it’s possible to pass
the name or path of another node as parameter. E.g.: --connect node
child_node
.
The SCP (secure copy) shell¶
Typing --scp
in the main shell will open a subshell in which you can run
SCP commands. This is useful for manually downloading and uploading files to
servers.
Where | Command | Meaning |
---|---|---|
Remote | cd <directory> |
Go to another directory at the server. |
pwd |
Print working directory at the server. | |
stat <file> |
Print information about file or directory on the server. | |
edit <file> |
Open this file in an editor (vim) on the server. | |
connect |
Open interactive (bash) shell at the at the server. | |
Local | lcd <directory> |
Go locally to another directory. |
lpwd |
Print local working directory. | |
lstat <file> |
Print information about a local file or directory. | |
ledit <file> |
Open this local file in an editor | |
lconnect |
Open local interactive (bash) shell at this directory. | |
File operations | put <file> |
Upload this local file to the server. |
get <file> |
Download remote file from the server. | |
Other | exit |
Return to the main shell. |
clear |
Clear screen. |