Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Kea
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
445
Issues
445
List
Boards
Labels
Service Desk
Milestones
Merge Requests
71
Merge Requests
71
Operations
Operations
Incidents
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
ISC Open Source Projects
Kea
Commits
92d6db67
Commit
92d6db67
authored
Apr 25, 2017
by
Wlodzimierz Wencel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[trac5262] kea-shell extended with target service support
parent
4d03fb18
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
66 additions
and
5 deletions
+66
-5
doc/guide/shell.xml
doc/guide/shell.xml
+13
-4
src/bin/shell/kea-shell.in
src/bin/shell/kea-shell.in
+4
-0
src/bin/shell/kea-shell.xml
src/bin/shell/kea-shell.xml
+10
-1
src/bin/shell/kea_conn.py
src/bin/shell/kea_conn.py
+6
-0
src/bin/shell/tests/shell_unittest.py.in
src/bin/shell/tests/shell_unittest.py.in
+33
-0
No files found.
doc/guide/shell.xml
View file @
92d6db67
...
...
@@ -25,7 +25,7 @@
<title>
Shell Usage
</title>
<para><command>
kea-shell
</command>
is run as follows:
<screen>
kea-shell [--host hostname] [--port number] [--timeout seconds] [command]
kea-shell [--host hostname] [--port number] [--timeout seconds] [
--service service-name] [
command]
</screen>
where:
</para>
...
...
@@ -51,6 +51,14 @@ kea-shell [--host hostname] [--port number] [--timeout seconds] [command]
</simpara>
</listitem>
<listitem>
<simpara>
<command>
--service
<replaceable>
serive-name
</replaceable></command>
specifies the
target of an command. If not given, CA will be used as target. May be used multiple times
</simpara>
</listitem>
<listitem>
<simpara>
<command>
command
</command>
specifies the command to be sent. If not specified,
...
...
@@ -89,18 +97,19 @@ kea-shell [--host hostname] [--port number] [--timeout seconds] [command]
<para>
The following shows a simple example of usage:
<screen>
$
<userinput>
kea-shell --host 192.0.2.1 --port 8001 list-commands
</userinput>
$
<userinput>
kea-shell --host 192.0.2.1 --port 8001
--service dhcp4
list-commands
</userinput>
^D
</screen>
After the command line is entered, the program waits for command parameters to be entered.
Since
<command>
list-commands
</command>
does not take any
arguments, CTRL-D (represented in the above example by "^D") is pressed to indicate end
of file (and so terminate the parameter input). The Shell will then contact
the CA and print out the list of available commands returned.
the CA and print out the list of available commands returned
for service named
<command>
dhcp4
</command>
.
</para>
<para>
It is envisaged that Kea Shell will be most frequently used in scripts. The next example
shows a simple scripted execution. It sends the command "config-write" to the CA, along
shows a simple scripted execution. It sends the command "config-write" to the CA
(
<command>
--service
</command>
parameter hasn't been used), along
with the parameters specified in param.json. The result will be stored in result.json.
<screen>
$ cat param.json
...
...
src/bin/shell/kea-shell.in
View file @
92d6db67
...
...
@@ -63,6 +63,9 @@ def shell_body():
parser.add_argument('--timeout', type=int, default='10',
help='Timeout (in seconds) when attempting to '
'connect to CA (default: 10)')
parser.add_argument('--service', nargs="?", action="append",
help='target spcified service. If not specidied,'
'control agent will receive command.')
parser.add_argument('command', type=str, nargs="?",
default='list-commands',
help='command to be executed. If not specified, '
...
...
@@ -78,6 +81,7 @@ def shell_body():
# used by the connection.
params = CARequest()
params.command = cmd_args.command
params.service = cmd_args.service
params.http_host = cmd_args.host
params.http_port = cmd_args.port
params.timeout = cmd_args.timeout
...
...
src/bin/shell/kea-shell.xml
View file @
92d6db67
...
...
@@ -40,7 +40,7 @@
<docinfo>
<copyright>
<year>
201
6
</year>
<year>
201
7
</year>
<holder>
Internet Systems Consortium, Inc. ("ISC")
</holder>
</copyright>
</docinfo>
...
...
@@ -53,6 +53,7 @@
<arg><option>
--host
</option></arg>
<arg><option>
--port
</option></arg>
<arg><option>
--timeout
</option></arg>
<arg><option>
--service
</option></arg>
<arg><option>
command
</option></arg>
</cmdsynopsis>
</refsynopsisdiv>
...
...
@@ -116,6 +117,14 @@
</para></listitem>
</varlistentry>
<varlistentry>
<term><option>
--service
</option></term>
<listitem><para>
Specifies the service that is tartget of a command. If not
specified, Cotrol Agent will be targeted. May be used multiple times.
</para></listitem>
</varlistentry>
<varlistentry>
<term><option>
command
</option></term>
<listitem><para>
...
...
src/bin/shell/kea_conn.py
View file @
92d6db67
...
...
@@ -16,6 +16,7 @@ class CARequest:
- http_host - hostname of the CA
- http-port - TCP port of the CA
- command - specifies the command to send (e.g. list-commands)
- service - specifies service that is target for the command (e.g. dhcp4)
- timeout - timeout (in ms)
- args - extra arguments my be added here
- headers - extra HTTP headers may be added here
...
...
@@ -25,6 +26,7 @@ class CARequest:
http_host
=
''
http_port
=
0
command
=
''
service
=
''
timeout
=
0
args
=
''
headers
=
{}
...
...
@@ -39,6 +41,10 @@ class CARequest:
this stores the output in self.content
"""
self
.
content
=
'{ "command": "'
+
self
.
command
+
'"'
if
self
.
service
is
not
None
:
self
.
service
=
[
x
for
x
in
self
.
service
if
x
]
if
len
(
self
.
service
)
>
0
:
self
.
content
+=
', "service": ["'
+
'","'
.
join
(
self
.
service
)
+
'"]'
if
len
(
self
.
args
)
>
1
:
self
.
content
+=
', "arguments": { '
+
self
.
args
+
' }'
self
.
content
+=
' }'
...
...
src/bin/shell/tests/shell_unittest.py.in
View file @
92d6db67
...
...
@@ -26,6 +26,39 @@ class CARequestUnitTest(unittest.TestCase):
"""
pass
def test_body_with_service(self):
"""
This test verifies if the CARequest object generates the request
content properly when there is one target service.
"""
request = CARequest()
request.command = "foo"
request.service= ["service1"]
request.generate_body()
self.assertEqual(request.content, '{ "command": "foo", "service": ["service1"] }')
def test_body_with_multiple_service(self):
"""
This test verifies if the CARequest object generates the request
content properly when there are two target service.
"""
request = CARequest()
request.command = "foo"
request.service= ["service1","service2/2"]
request.generate_body()
self.assertEqual(request.content, '{ "command": "foo", "service": ["service1","service2/2"] }')
def test_body_with_malformed_service(self):
"""
This test verifies if the CARequest object generates the request
content properly when there are two target service, one is empty
"""
request = CARequest()
request.command = "foo"
request.service= ["service1",""]
request.generate_body()
self.assertEqual(request.content, '{ "command": "foo", "service": ["service1"] }')
def test_body_without_args(self):
"""
This test verifies if the CARequest object generates the request
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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