[RFC,3/8] utils: Add plugin_commands parameter

Message ID 20181218041953.8960-4-sam@mendozajonas.com
State New
Headers show
Series
  • Introduce pb-plugin 'commands' & Rust PoC
Related show

Commit Message

Samuel Mendoza-Jonas Dec. 18, 2018, 4:19 a.m.
This points to an optional JSON file providing detailed command
examples. The format is an array of command objects which define a
platform name if appropriate, command name, command executable, argument
format string, and an array of arguments containing name and arguments.
At the moment three argument types are recognised: FieldString,
FieldInt, and FieldFloat (string, int64_t, and double respectively).
For example:

[
        {
                "platform":     "any",
                "name":         "Set NVRAM parameter",
                "cmd":          "nvram",
                "arg_fmt":      "-p {} --update-config {}={}",
                "args": [
                        {
                                "name":         "Partition",
                                "arg": { "FieldString": "common" }
                        },
                        {
                                "name":         "Parameter",
                                "arg": { "FieldString": "some" }
                        },
                        {
                                "name":         "Value",
                                "arg": { "FieldString": "value" }
                        }
                ],
                "help":         "Example: Set an NVRAM parameter"
        },
        {
                "platform":     "witherspoon",
                "name":         "Foo Memory Allocation",
                "cmd":          "nvram",
                "arg_fmt":      "-p {} --update-config foo_mem_amt={}",
                "args": [
                        {
                                "name":         "Partition",
                                "arg": { "FieldString": "ibm,skiboot" }
                        },
                        {
                                "name":         "Amount (MB)",
                                "arg": { "FieldInt": 0 }
                        }
                ],
                "help":         "Memory to be allocated for some feature"
        }
]

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
---
 discover/user-event.c | 2 ++
 utils/pb-plugin       | 8 +++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

Patch

diff --git a/discover/user-event.c b/discover/user-event.c
index d3d4a5e8..cbbec1a0 100644
--- a/discover/user-event.c
+++ b/discover/user-event.c
@@ -601,6 +601,8 @@  static int user_event_plugin(struct user_event *uev, struct event *event)
 	opt->date = talloc_strdup(opt, event_get_param(event, "date"));
 	opt->plugin_file = talloc_strdup(opt,
 			event_get_param(event, "source_file"));
+	opt->command_file = talloc_strdup(opt,
+			event_get_param(event, "plugin_commands"));
 
 	executables = talloc_strdup(opt, event_get_param(event, "executables"));
 	if (!executables) {
diff --git a/utils/pb-plugin b/utils/pb-plugin
index a42d0515..b162f4b9 100755
--- a/utils/pb-plugin
+++ b/utils/pb-plugin
@@ -2,7 +2,7 @@ 
 
 __dest=/
 __pb_mount_dir=/var/petitboot/mnt/dev/
-plugin_abi=1
+plugin_abi=2
 plugin_ext=pb-plugin
 plugin_meta=pb-plugin.conf
 plugin_meta_dir=etc/preboot-plugins/
@@ -235,6 +235,7 @@  do_install()
 		name=$PLUGIN_NAME id=$PLUGIN_ID version=$PLUGIN_VERSION \
 		vendor=$PLUGIN_VENDOR vendor_id=$PLUGIN_VENDOR_ID \
 		date=$PLUGIN_DATE executables="$PLUGIN_EXECUTABLES" \
+		plugin_commands="${__dest}/${PLUGIN_COMMANDS}" \
 		source_file=$url installed="yes"
 
 	echo "Plugin installed"
@@ -364,6 +365,10 @@  shell environment (eg, /usr/bin/my-raid-config).
 If multiple executables are provided, separate with a space.
 EOF
 	read executables
+cat <<EOF
+Enter a command definition JSON file (optional)
+EOF
+	read plugin_commands
 
 	date=$(date +%Y-%m-%d)
 
@@ -379,6 +384,7 @@  PLUGIN_ID='$pluginshortname'
 PLUGIN_VERSION='$version'
 PLUGIN_DATE='$date'
 PLUGIN_EXECUTABLES='$executables'
+PLUGIN_COMMANDS='${plugin_commands}'
 EOF
 
 }