Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sebastian Schrader
Kea
Commits
f257028e
Commit
f257028e
authored
Mar 07, 2017
by
Tomek Mrugalski
🛰
Browse files
[5137] Added kea-shell.py
parent
82d9586d
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/bin/shell/Makefile.am
View file @
f257028e
...
...
@@ -7,7 +7,8 @@ if KEA_SHELL
# Kea-shell is enabled, here are proper rules for it.
kea_shell_PYTHON
=
kea-shell.py kea_conn.py kea_connection2.py kea_connector3.py kea_params.py
kea_shelldir
=
@localstatedir@/@PACKAGE@
#pkglibexecdir = $(libexecdir)/@PACKAGE@
bin_SCRIPTS
=
kea-shell
else
...
...
src/bin/shell/kea-shell.py
0 → 100644
View file @
f257028e
#!/usr/bin/python
# First, let's import the right kea_connector.
# We have two versions: one for python 2.x and another for python 3.x.
# Sadly, there's no unified way to handle http connections. The recommended
# way is to use Requests (http://docs.python-requests.org/en/master/), but
# that's a stand alone package that requires separate installation. One of
# the design requirements was to not require any additional packages, so
# the code uses standard libraries available in python. Hence two versions.
import
sys
import
signal
import
argparse
if
(
sys
.
version_info
[
0
]
==
2
):
# This is Python 2.x
import
kea_connector2
as
kea_connector
else
:
if
(
sys
.
version_info
[
0
]
==
3
):
# This is Python 3.x
import
kea_connector3
as
kea_connector
else
:
# This is... have no idea what it is.
raise
SystemExit
(
"Unknown python version:"
+
str
(
sys
.
version_info
[
0
]))
from
kea_conn
import
CARequest
,
CAResponse
# Second step: Need to parse command line parameters. We will use argparse for
# that purpose. It does great job with having default values, taking care of
# the help and sanity checking input parameters.
parser
=
argparse
.
ArgumentParser
(
description
=
'Connects to Kea Control Agent.'
)
parser
.
add_argument
(
'--host'
,
type
=
str
,
nargs
=
1
,
default
=
'127.0.0.1'
,
help
=
'hostname of the CA to connect to'
)
parser
.
add_argument
(
'--port'
,
type
=
int
,
nargs
=
1
,
default
=
8000
,
help
=
'TCP port of the CA to connect to'
)
parser
.
add_argument
(
'--timeout'
,
type
=
int
,
nargs
=
1
,
default
=
'10'
,
help
=
'Timeout (in seconds) when attempting to connect to CA'
)
parser
.
add_argument
(
'command'
,
type
=
str
,
nargs
=
"?"
,
default
=
'list-commands'
,
help
=
'command to be executed. If not specified, "list-commands" is used'
)
cmd_args
=
parser
.
parse_args
()
# Ok, now time to put the parameters parsed into the structure to be used by the
# connection.
params
=
CARequest
()
params
.
command
=
cmd_args
.
command
params
.
http_host
=
cmd_args
.
host
[
0
]
params
.
http_port
=
cmd_args
.
port
[
0
]
params
.
timeout
=
cmd_args
.
timeout
params
.
generateBody
()
params
.
generateHeaders
()
conn
=
kea_connector
.
KeaConnector
()
def
timeout_handler
(
signum
,
frame
):
print
(
"Connection timeout"
)
sys
.
exit
(
1
)
# Load command processor
# @todo - command specific processing will be added as part of future work
# (either #5138 or #5139, whichever is implemented first)
# Read parameters from stdin (they're optional for some commands)
for
line
in
sys
.
stdin
:
params
.
params
+=
line
# Set the timeout timer. If the connection takes too long,
# it will send a signal to us.
signal
.
signal
(
signal
.
SIGALRM
,
timeout_handler
)
signal
.
alarm
(
params
.
timeout
)
# Ok, everything is ready. Let's send the command and get a response.
try
:
resp
=
conn
.
sendCA
(
params
)
except
Exception
as
e
:
print
(
"Failed to run: "
+
str
(
e
))
sys
.
exit
(
1
)
resp
.
printResp
()
sys
.
exit
(
0
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment