From: Lennart Poettering Date: Wed, 9 Oct 2024 15:49:43 +0000 (+0200) Subject: machined: make List() varlink method return a full pidref JSON object for leader X-Git-Tag: v257-rc1~258^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0fc530d15709a4b531412fdadf3cfb5d0433b62f;p=thirdparty%2Fsystemd.git machined: make List() varlink method return a full pidref JSON object for leader This new call has not been released yet, hence we can still change the encoding of the "leader" field. --- diff --git a/src/machine/machined-varlink.c b/src/machine/machined-varlink.c index 61000241741..a9e49c35e17 100644 --- a/src/machine/machined-varlink.c +++ b/src/machine/machined-varlink.c @@ -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), diff --git a/src/shared/varlink-idl-common.c b/src/shared/varlink-idl-common.c index 9ed52308832..e48fd46e0f5 100644 --- a/src/shared/varlink-idl-common.c +++ b/src/shared/varlink-idl-common.c @@ -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)); diff --git a/src/shared/varlink-idl-common.h b/src/shared/varlink-idl-common.h index 088d19bc2fb..91b643f8100 100644 --- a/src/shared/varlink-idl-common.h +++ b/src/shared/varlink-idl-common.h @@ -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; diff --git a/src/shared/varlink-io.systemd.Machine.c b/src/shared/varlink-io.systemd.Machine.c index d9a0b3fbaff..332f50e588a 100644 --- a/src/shared/varlink-io.systemd.Machine.c +++ b/src/shared/varlink-io.systemd.Machine.c @@ -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, diff --git a/test/units/TEST-13-NSPAWN.machined.sh b/test/units/TEST-13-NSPAWN.machined.sh index b54f6e80d35..1ae393dd1fb 100755 --- a/test/units/TEST-13-NSPAWN.machined.sh +++ b/test/units/TEST-13-NSPAWN.machined.sh @@ -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