]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
machined: make List() varlink method return a full pidref JSON object for leader
authorLennart Poettering <lennart@poettering.net>
Wed, 9 Oct 2024 15:49:43 +0000 (17:49 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 11 Oct 2024 08:48:07 +0000 (10:48 +0200)
This new call has not been released yet, hence we can still change the
encoding of the "leader" field.

src/machine/machined-varlink.c
src/shared/varlink-idl-common.c
src/shared/varlink-idl-common.h
src/shared/varlink-io.systemd.Machine.c
test/units/TEST-13-NSPAWN.machined.sh

index 6100024174197b7916f40570cc586b667279c04f..a9e49c35e171cc265b2b76a2b6457af79eb97674 100644 (file)
@@ -403,7 +403,7 @@ static int list_machine_one(sd_varlink *link, Machine *m, bool more) {
                         JSON_BUILD_PAIR_STRING_NON_EMPTY("service", m->service),
                         JSON_BUILD_PAIR_STRING_NON_EMPTY("rootDirectory", m->root_directory),
                         JSON_BUILD_PAIR_STRING_NON_EMPTY("unit", m->unit),
-                        SD_JSON_BUILD_PAIR_CONDITION(pidref_is_set(&m->leader), "leader", SD_JSON_BUILD_UNSIGNED(m->leader.pid)),
+                        SD_JSON_BUILD_PAIR_CONDITION(pidref_is_set(&m->leader), "leader", JSON_BUILD_PIDREF(&m->leader)),
                         SD_JSON_BUILD_PAIR_CONDITION(dual_timestamp_is_set(&m->timestamp), "timestamp", JSON_BUILD_DUAL_TIMESTAMP(&m->timestamp)),
                         SD_JSON_BUILD_PAIR_CONDITION(m->vsock_cid != VMADDR_CID_ANY, "vSockCid", SD_JSON_BUILD_UNSIGNED(m->vsock_cid)),
                         JSON_BUILD_PAIR_STRING_NON_EMPTY("sshAddress", m->ssh_address),
index 9ed52308832c4cd00a73ad31250363b1338255e2..e48fd46e0f51d8d2ba6d27cbad619b300afd4687 100644 (file)
@@ -10,3 +10,12 @@ SD_VARLINK_DEFINE_STRUCT_TYPE(
                 SD_VARLINK_DEFINE_FIELD(realtime, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("Timestamp in µs in the CLOCK_MONOTONIC clock"),
                 SD_VARLINK_DEFINE_FIELD(monotonic, SD_VARLINK_INT, SD_VARLINK_NULLABLE));
+
+SD_VARLINK_DEFINE_STRUCT_TYPE(
+                ProcessId,
+                SD_VARLINK_FIELD_COMMENT("Numeric UNIX PID value"),
+                SD_VARLINK_DEFINE_FIELD(pid, SD_VARLINK_INT, 0),
+                SD_VARLINK_FIELD_COMMENT("64bit inode number of pidfd if known"),
+                SD_VARLINK_DEFINE_FIELD(pidfdId, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
+                SD_VARLINK_FIELD_COMMENT("Boot ID of the system the inode number belongs to"),
+                SD_VARLINK_DEFINE_FIELD(bootId, SD_VARLINK_INT, SD_VARLINK_NULLABLE));
index 088d19bc2fb7e25b0f07a2f909d85e6502fa8886..91b643f810060ddb58b4510e19d07b8e9d6261c9 100644 (file)
@@ -4,3 +4,4 @@
 #include "sd-varlink-idl.h"
 
 extern const sd_varlink_symbol vl_type_Timestamp;
+extern const sd_varlink_symbol vl_type_ProcessId;
index d9a0b3fbaff0835e674ba09faea6a62f507930ed..332f50e588ae15ad01c0d9fa448a73e4e975d890 100644 (file)
@@ -57,7 +57,7 @@ static SD_VARLINK_DEFINE_METHOD_FULL(
                 SD_VARLINK_FIELD_COMMENT("The class of this machine"),
                 SD_VARLINK_DEFINE_OUTPUT(class, SD_VARLINK_STRING, 0),
                 SD_VARLINK_FIELD_COMMENT("Leader process PID of this machine"),
-                SD_VARLINK_DEFINE_OUTPUT(leader, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
+                SD_VARLINK_DEFINE_OUTPUT_BY_TYPE(leader, ProcessId, SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("Root directory of this machine, if known, relative to host file system"),
                 SD_VARLINK_DEFINE_OUTPUT(rootDirectory, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("The service manager unit this machine resides in"),
@@ -77,6 +77,8 @@ static SD_VARLINK_DEFINE_ERROR(MachineExists);
 SD_VARLINK_DEFINE_INTERFACE(
                 io_systemd_Machine,
                 "io.systemd.Machine",
+                SD_VARLINK_SYMBOL_COMMENT("An object for referencing UNIX processes"),
+                &vl_type_ProcessId,
                 SD_VARLINK_SYMBOL_COMMENT("A timestamp object consisting of both CLOCK_REALTIME and CLOCK_MONOTONIC timestamps"),
                 &vl_type_Timestamp,
                 &vl_method_Register,
index b54f6e80d35a561519f9da4c760966b6a4d6360c..1ae393dd1fb4bb5e2aa5021dae7ceea717fcb6af 100755 (executable)
@@ -251,7 +251,7 @@ varlinkctl --more call /run/systemd/machine/io.systemd.Machine io.systemd.Machin
 varlinkctl --more call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List '{}' | grep '.host'
 varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List '{"name":"long-running"}'
 
-pid=$(varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List '{"name":"long-running"}' | jq '.leader')
+pid=$(varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List '{"name":"long-running"}' | jq '.leader.pid')
 varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List '{"name":"long-running"}' >/tmp/expected
 varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.List "{\"pid\":$pid}" >/tmp/got
 diff -u /tmp/expected /tmp/got