summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKerim Gokarslan <kgokarsl@cisco.com>2017-09-26 12:15:30 -0700
committerKerim Gokarslan <kgokarsl@cisco.com>2017-09-27 10:51:44 -0700
commitc5c27a690fe8ce01f047330327e5bff3afb048bd (patch)
treeffa4abe020fead5794a82fa006dba02640e9396e
parent666f8c435109569e9ea643d4a59cb3b4c2f09e0b (diff)
NFVBENCH-34 Pass configuration file to entrypoint script
Change-Id: If44d5d9fb2db58b3e1a3ebd1c8d94c1452f84409 Signed-off-by: Kerim Gokarslan <kgokarsl@cisco.com>
-rwxr-xr-xdocker/nfvbench-entrypoint.sh12
-rw-r--r--docs/testing/user/userguide/quickstart_docker.rst47
-rw-r--r--docs/testing/user/userguide/server.rst2
-rw-r--r--nfvbench/nfvbenchd.py17
4 files changed, 52 insertions, 26 deletions
diff --git a/docker/nfvbench-entrypoint.sh b/docker/nfvbench-entrypoint.sh
index 9d6d3ae..ed98ced 100755
--- a/docker/nfvbench-entrypoint.sh
+++ b/docker/nfvbench-entrypoint.sh
@@ -24,16 +24,10 @@ else
if [ -n "$PORT" ]; then
PARAMS+=" --port $PORT"
fi
- if [ -n "$OPENRC" ]; then
- if [ -f "$OPENRC" ]; then
- PARAMS+=" -c \"openrc_file: $OPENRC\""
- else
- echo "Aborting... Openrc config file cannot be found in the given path: $OPENRC"
- exit 1
+ if [ -n "$CONFIG_FILE" ]; then
+ if [ -f "$CONFIG_FILE" ]; then
+ PARAMS+=" -c $CONFIG_FILE"
fi
- else
- echo "Aborting... Openrc config path is absent"
- exit 1
fi
eval "nfvbench $PARAMS"
fi \ No newline at end of file
diff --git a/docs/testing/user/userguide/quickstart_docker.rst b/docs/testing/user/userguide/quickstart_docker.rst
index ccb629b..0ab657c 100644
--- a/docs/testing/user/userguide/quickstart_docker.rst
+++ b/docs/testing/user/userguide/quickstart_docker.rst
@@ -38,19 +38,54 @@ The NFVbench container requires the following Docker options to operate properly
| | /tmp/nfvbench director in the container but any |
| | other similar mapping can work as well |
+------------------------------------------------------+------------------------------------------------------+
-| --net=host | (optional) needed if you run the NFVbench ok |
+| --net=host | (optional) needed if you run the NFVbench ok |
| | server in the container (or use any appropriate |
| | docker network mode other than "host") |
+------------------------------------------------------+------------------------------------------------------+
| --privileged | (optional) required if SELinux is enabled on the host|
+------------------------------------------------------+------------------------------------------------------+
-| --e HOST="127.0.0.1" | (optional) required if REST server is enabled |
+| -e HOST="127.0.0.1" | (optional) required if REST server is enabled |
+------------------------------------------------------+------------------------------------------------------+
-| --e PORT=7556 | (optional) required if REST server is enabled |
+| -e PORT=7556 | (optional) required if REST server is enabled |
++------------------------------------------------------+------------------------------------------------------+
+| -e CONFIG_FILE="/root/nfvbenchconfig.json | (optional) required if REST server is enabled |
+------------------------------------------------------+------------------------------------------------------+
-
It can be convenient to write a shell script (or an alias) to automatically insert the necessary options.
+The minimal configuration file required must specify the openrc file to use (using in-container path), the PCI addresses of the 2 NIC ports to use
+for generating traffic and the line rate (in each direction) of each of these 2 interfaces.
+
+Here is an example of mimimal configuration where:
+the openrc file is located on the host current directory which is mapped under /tmp/nfvbench in the container (this is achieved using -v $PWD:/tmp/nfvbench)
+the 2 NIC ports to use for generating traffic have the PCI addresses "04:00.0" and "04:00.1"
+
+.. code-block:: bash
+ {
+ "openrc_file": "/tmp/nfvbench/openrc",
+ "traffic_generator": {
+ "generator_profile": [
+ {
+ "interfaces": [
+ {
+ "pci": "04:00.0",
+ "port": 0,
+ },
+ {
+ "pci": "04:00.1",
+ "port": 1,
+ }
+ ],
+ "intf_speed": "10Gbps",
+ "ip": "127.0.0.1",
+ "name": "trex-local",
+ "tool": "TRex"
+ }
+ ]
+ }
+ }
+
+The other options in the minimal configuration must be present and must have the same values as above.
+
3. Start the Docker container
-----------------------------
As for any Docker container, you can execute NFVbench measurement sessions using a temporary container ("docker run" - which exits after each NFVbench run)
@@ -67,11 +102,11 @@ To run NFVBench without server mode
docker run --detach --net=host --privileged -v $PWD:/tmp/nfvbench -v /dev:/dev -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) --name nfvbench opnfv/nfvbench
-To run NFVBench enabling REST server
+To run NFVBench enabling REST server (mount the configuration json and the path for openrc)
.. code-block:: bash
- docker run --detach --net=host --privileged -e HOST="127.0.0.1" -e PORT=7556 -v $PWD:/tmp/nfvbench -v /dev:/dev -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) --name nfvbench opnfv/nfvbench start_rest_server
+ docker run --detach --net=host --privileged -e HOST="127.0.0.1" -e PORT=7556 --e CONFIG_FILE="/tmp/nfvbench/nfvbenchconfig.json -v $PWD:/tmp/nfvbench -v /dev:/dev -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) --name nfvbench opnfv/nfvbench start_rest_server
The create an alias to make it easy to execute nfvbench commands directly from the host shell prompt:
diff --git a/docs/testing/user/userguide/server.rst b/docs/testing/user/userguide/server.rst
index e08f663..1c1e052 100644
--- a/docs/testing/user/userguide/server.rst
+++ b/docs/testing/user/userguide/server.rst
@@ -84,7 +84,7 @@ Example of return when the run completes:
<http-url>/start_run (POST)
^^^^^^^^^^^^^^^^^^^^^
-This request starts an NFVBench run with passed configurations.
+This request starts an NFVBench run with passed configurations. If no configuration is passed, a run with default configurations will be executed.
Example request: curl -XPOST 'localhost:7556/start_run' -H "Content-Type: application/json" -d @nfvbenchconfig.json
diff --git a/nfvbench/nfvbenchd.py b/nfvbench/nfvbenchd.py
index 3ab30de..4657504 100644
--- a/nfvbench/nfvbenchd.py
+++ b/nfvbench/nfvbenchd.py
@@ -137,7 +137,6 @@ def setup_flask(root_path):
app.root_path = root_path
socketio = SocketIO(app, async_mode='threading')
busy_json = result_json(STATUS_ERROR, 'there is already an NFVbench request running')
- config_is_null_json = result_json(STATUS_ERROR, 'configuration is missing')
not_busy_json = result_json(STATUS_ERROR, 'no pending NFVbench run')
not_found_msg = 'results not found'
pending_msg = 'NFVbench run still pending'
@@ -169,15 +168,13 @@ def setup_flask(root_path):
@app.route('/start_run', methods=['POST'])
def start_run():
config = load_json(request.json)
- if config:
- if Ctx.is_busy():
- return jsonify(busy_json)
- else:
- request_id = get_uuid()
- Ctx.enqueue(config, request_id)
- return jsonify(result_json(STATUS_PENDING, pending_msg, request_id))
- else:
- return jsonify(config_is_null_json)
+ if not config:
+ config = {}
+ if Ctx.is_busy():
+ return jsonify(busy_json)
+ request_id = get_uuid()
+ Ctx.enqueue(config, request_id)
+ return jsonify(result_json(STATUS_PENDING, pending_msg, request_id))
@app.route('/status', defaults={'request_id': None}, methods=['GET'])
@app.route('/status/<request_id>', methods=['GET'])