* [Fuego] [PATCH] ftc: add support for update-board operation
@ 2021-04-15 1:11 Tim.Bird
0 siblings, 0 replies; only message in thread
From: Tim.Bird @ 2021-04-15 1:11 UTC (permalink / raw)
To: Tim.Bird, pavan.ad, tbird20d; +Cc: fuego
Support: 'ftc update-board bbb status=ready'
Supported attributes are: status, information, description
Support status values are: ready, offline, disabled, busy
This is used to set field attributes on the server.
The server is supposed to handle json data opaquely. Updating
individual fields is a bit too cute, IMHO, but this gets the job
done. The basic purpose of this is to allow a lab to set the
availability status of a board, on the server, so that users can
tell what's going on if the test requests are rejected or deferred.
Signed-off-by: Tim Bird <tim.bird@sony.com>
---
Pavan,
Based on my musings in my last e-mail, I decided to go ahead and implement a new
operation on the server -- a new "update_board" API. This updates one or more individual fields
in the json board file on the server. The server does not check the fields being updated, but ftc does.
I introduced a new operation with ftc, the 'update-board' sub-command. It checks for a few specific
attributes that can be updated. With the 'status' attribute, it checks for a few specific supported
values.
Please see the code below. Note that this text (after the '---' above, and before the start of the
actual diff below) is ignored by 'git am'.
I have committed this and checked it into the master branch in fuego-core. Please try it
out. You can verify that the fields for a board have been changed, by looking at the json
files on the server. (eg look at a file modified at: http://fuegotest.org/cgi-bin/fserver.py/boards)
I have not implemented the behavior described in the command help to reject or defer
test requests based on the status. This is code that would be added to ftc's do_run_request()
function. Would you like to write some code to handle this?
Let me know if you are amenable to this, and I can discuss some details about what
I think this code should do, to get you started.
Part of the reason I am posting this patch is to provide an example of email
patch contribution to the Fuego project.
-- Tim
scripts/ftc | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 89 insertions(+), 1 deletion(-)
diff --git a/scripts/ftc b/scripts/ftc
index bb592b0..6629642 100755
--- a/scripts/ftc
+++ b/scripts/ftc
@@ -294,6 +294,34 @@ host with the server, so that it is elible to receive job requests from
remote hosts. Before doing this, make sure you have a unique host_name
configured in your fuego.conf file."""),
+"update-board": ("Update board information on the server.",
+ """Usage: ftc update-board <board> <field>=<value> [<field2>=<v2>...]
+
+Update one or more fields for a board on the server. This allows
+you to set informational data for a board on the server, or set
+the status, indicating whether a board is available.
+
+Allowed fields are: status, description, information
+Values for the status field can be:
+ ready, disabled, offline, busy
+
+If a board is disabled or offline, then test requests for that board
+will be rejected. If a board is busy, then test requests for that board will
+not be processed (by 'ftc run-requests'), but will be left on the server
+for future processing.
+
+Values for the description and information are free-form text. If they
+include spaces (which is likely), they should be quoted on the command
+line so they are a single shell argument. The information field should
+be used to hold human-readable information reflecting the status of the
+board.
+
+Here are some examples:
+ $ ftc update-board status=offline information="out of service until April 12"
+ $ ftc update-board status=ready information=
+ $ ftc update-board status=busy information="processing local jobs"
+"""),
+
"put-binary-package": ("Put a test binary-package on the server.",
"""Usage: ftc put-binary-package <test_binary_package_file>
Put a test binary package on the server. The test must be an existing test
@@ -3498,6 +3526,9 @@ def do_run_request(conf, options):
# the specific version of the test requested. All of the above code just downloads a
# specific test version, but it doesn't cause do_run_test to run that version
# For that, we would have to support a '--version' flag for do_run_test.
+
+ # The selection of a specific version for a test should work, as long as the version
+ # is greater than the version of the test in /fuego-core/tests.
print("Executing test %s on board %s (using spec %s)" % (test_name, board_name, spec_name))
rcode, run_id = do_run_test(conf, ['-b', board_name, '-t', test_name, '-s', spec_name])
@@ -4054,6 +4085,59 @@ def do_put_board(conf, options):
print "Board %s:%s was accepted by the server." % (conf.host, board_name)
+def do_update_board(conf, options):
+ try:
+ board_name = options[0]
+ except:
+ error_out("Must specify a board to update")
+ del(options[0])
+
+ # check whether argument is a legal board name
+ bmap = get_fuego_boards(conf)
+ try:
+ board = bmap[board_name]
+ except:
+ error_out("Unrecognized board %s" % (board_name))
+
+ url = conf.SERVER_URL_BASE+"update_board"
+
+ # Note: you can only change the status of a board in your own lab
+ board_dict = {"host": conf.host, "board": board_name }
+
+ # each option is a field in the board dictionary
+ if not options:
+ error_out("No attributes specified.")
+
+ while options:
+ if '=' not in options[0]:
+ error_out("Illegal attribute specification: '%s' (needs an '=')")
+
+ attr, value = options[0].split("=", 1)
+ del(options[0])
+ if not value:
+ value = "None"
+
+ # should validate legal attributes and options here
+ if attr not in ["status", "description", "information"]:
+ error_out("Illegal attribute '%s' - please use 'status', 'description' or 'information'" % attr)
+
+ #if attr in ["host", "board"]:
+ # error_out("Illegal attribute - can't change '%s' for existing board"% attr)
+
+ allowed_statuses = ["ready", "busy", "offline", "disabled"]
+ if attr == "status":
+ if value not in allowed_statuses:
+ error_out("Invalid status '%s' specified, please use one of %s" % (value, str(allowed_statuses)))
+
+ board_dict[attr] = value
+
+ resp = requests.post(url, board_dict)
+ result, content = resp.text.split('\n', 1)
+ if result != "OK":
+ error_out("Can't update board attribute.\nServer returned message: %s" % content)
+
+ print "OK"
+
def put_run_fuego(conf, run_filepath):
url = conf.SERVER_URL_BASE+"put_run"
@@ -5484,7 +5568,7 @@ def do_install_test(conf, options, internal=False):
if not os.path.isfile(test_pkg):
error_out("Test package '%s' is not found" % test_pkg)
- # this assumes no test name has a dash - probably a bad assumption
+ # FIXTHIS - this assumes no test name has a dash - probably a bad assumption
test_name, rest = test_pkg.split("-", 1)
testdir = test_home + os.sep + test_name
@@ -6066,6 +6150,10 @@ def main():
do_put_board(conf, options)
sys.exit(0)
+ if command == "update-board":
+ do_update_board(conf, options)
+ sys.exit(0)
+
if command == "put-run":
do_put_run(conf, options)
sys.exit(0)
--
2.1.4
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2021-04-15 1:11 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-15 1:11 [Fuego] [PATCH] ftc: add support for update-board operation Tim.Bird
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.