1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-22 06:50:18 +03:00

tree-wide: implement generic io.systemd.service Varlink interface in all long-running services

Given we have the generic interface, let's hook it up everywhere.

This doesnt bother with the Reload() call usually, since that's more
involved, but hooks up the other relevant functions where applicable.
This commit is contained in:
Lennart Poettering 2025-01-07 15:21:53 +01:00
parent fef9eb4e6a
commit c8127075ae
10 changed files with 97 additions and 30 deletions

View File

@ -10,6 +10,7 @@
#include "varlink-internal.h"
#include "varlink-io.systemd.UserDatabase.h"
#include "varlink-io.systemd.ManagedOOM.h"
#include "varlink-io.systemd.service.h"
#include "varlink-util.h"
typedef struct LookupParameters {
@ -589,7 +590,8 @@ int manager_setup_varlink_server(Manager *m) {
r = sd_varlink_server_add_interface_many(
s,
&vl_interface_io_systemd_UserDatabase,
&vl_interface_io_systemd_ManagedOOM);
&vl_interface_io_systemd_ManagedOOM,
&vl_interface_io_systemd_service);
if (r < 0)
return log_debug_errno(r, "Failed to add interfaces to varlink server: %m");
@ -598,7 +600,9 @@ int manager_setup_varlink_server(Manager *m) {
"io.systemd.UserDatabase.GetUserRecord", vl_method_get_user_record,
"io.systemd.UserDatabase.GetGroupRecord", vl_method_get_group_record,
"io.systemd.UserDatabase.GetMemberships", vl_method_get_memberships,
"io.systemd.ManagedOOM.SubscribeManagedOOMCGroups", vl_method_subscribe_managed_oom_cgroups);
"io.systemd.ManagedOOM.SubscribeManagedOOMCGroups", vl_method_subscribe_managed_oom_cgroups,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return log_debug_errno(r, "Failed to register varlink methods: %m");

View File

@ -54,6 +54,7 @@
#include "user-record-util.h"
#include "user-record.h"
#include "user-util.h"
#include "varlink-io.systemd.service.h"
#include "varlink-io.systemd.UserDatabase.h"
#include "varlink-util.h"
@ -1012,7 +1013,10 @@ static int manager_bind_varlink(Manager *m) {
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server: %m");
r = sd_varlink_server_add_interface(m->varlink_server, &vl_interface_io_systemd_UserDatabase);
r = sd_varlink_server_add_interface_many(
m->varlink_server,
&vl_interface_io_systemd_UserDatabase,
&vl_interface_io_systemd_service);
if (r < 0)
return log_error_errno(r, "Failed to add UserDatabase interface to varlink server: %m");
@ -1020,7 +1024,10 @@ static int manager_bind_varlink(Manager *m) {
m->varlink_server,
"io.systemd.UserDatabase.GetUserRecord", vl_method_get_user_record,
"io.systemd.UserDatabase.GetGroupRecord", vl_method_get_group_record,
"io.systemd.UserDatabase.GetMemberships", vl_method_get_memberships);
"io.systemd.UserDatabase.GetMemberships", vl_method_get_memberships,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return log_error_errno(r, "Failed to register varlink methods: %m");

View File

@ -42,6 +42,7 @@
#include "user-util.h"
#include "utf8.h"
#include "varlink-io.systemd.Hostname.h"
#include "varlink-io.systemd.service.h"
#include "varlink-util.h"
#include "virt.h"
@ -1771,13 +1772,19 @@ static int connect_varlink(Context *c) {
if (r < 0)
return log_error_errno(r, "Failed to allocate Varlink server: %m");
r = sd_varlink_server_add_interface(c->varlink_server, &vl_interface_io_systemd_Hostname);
r = sd_varlink_server_add_interface_many(
c->varlink_server,
&vl_interface_io_systemd_Hostname,
&vl_interface_io_systemd_service);
if (r < 0)
return log_error_errno(r, "Failed to add Hostname interface to Varlink server: %m");
r = sd_varlink_server_bind_method_many(
c->varlink_server,
"io.systemd.Hostname.Describe", vl_method_describe);
"io.systemd.Hostname.Describe", vl_method_describe,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return log_error_errno(r, "Failed to bind Varlink method calls: %m");

View File

@ -42,6 +42,7 @@
#include "syslog-util.h"
#include "user-util.h"
#include "varlink-io.systemd.Import.h"
#include "varlink-io.systemd.service.h"
#include "varlink-util.h"
#include "web-util.h"
@ -1979,14 +1980,20 @@ static int manager_connect_varlink(Manager *m) {
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
r = sd_varlink_server_add_interface(m->varlink_server, &vl_interface_io_systemd_Import);
r = sd_varlink_server_add_interface_many(
m->varlink_server,
&vl_interface_io_systemd_Import,
&vl_interface_io_systemd_service);
if (r < 0)
return log_error_errno(r, "Failed to add Import interface to varlink server: %m");
r = sd_varlink_server_bind_method_many(
m->varlink_server,
"io.systemd.Import.ListTransfers", vl_method_list_transfers,
"io.systemd.Import.Pull", vl_method_pull);
"io.systemd.Import.ListTransfers", vl_method_list_transfers,
"io.systemd.Import.Pull", vl_method_pull,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return log_error_errno(r, "Failed to bind Varlink method calls: %m");

View File

@ -64,6 +64,7 @@
#include "uid-classification.h"
#include "user-util.h"
#include "varlink-io.systemd.Journal.h"
#include "varlink-io.systemd.service.h"
#include "varlink-util.h"
#define USER_JOURNALS_MAX 1024
@ -2334,16 +2335,22 @@ static int server_open_varlink(Server *s, const char *socket, int fd) {
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
r = sd_varlink_server_add_interface(s->varlink_server, &vl_interface_io_systemd_Journal);
r = sd_varlink_server_add_interface_many(
s->varlink_server,
&vl_interface_io_systemd_Journal,
&vl_interface_io_systemd_service);
if (r < 0)
return log_error_errno(r, "Failed to add Journal interface to varlink server: %m");
r = sd_varlink_server_bind_method_many(
s->varlink_server,
"io.systemd.Journal.Synchronize", vl_method_synchronize,
"io.systemd.Journal.Rotate", vl_method_rotate,
"io.systemd.Journal.FlushToVar", vl_method_flush_to_var,
"io.systemd.Journal.RelinquishVar", vl_method_relinquish_var);
"io.systemd.Journal.Synchronize", vl_method_synchronize,
"io.systemd.Journal.Rotate", vl_method_rotate,
"io.systemd.Journal.FlushToVar", vl_method_flush_to_var,
"io.systemd.Journal.RelinquishVar", vl_method_relinquish_var,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return r;

View File

@ -10,6 +10,7 @@
#include "terminal-util.h"
#include "user-util.h"
#include "varlink-io.systemd.Login.h"
#include "varlink-io.systemd.service.h"
#include "varlink-util.h"
static int manager_varlink_get_session_by_peer(
@ -355,14 +356,20 @@ int manager_varlink_init(Manager *m) {
sd_varlink_server_set_userdata(s, m);
r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_Login);
r = sd_varlink_server_add_interface_many(
s,
&vl_interface_io_systemd_Login,
&vl_interface_io_systemd_service);
if (r < 0)
return log_error_errno(r, "Failed to add Login interface to varlink server: %m");
r = sd_varlink_server_bind_method_many(
s,
"io.systemd.Login.CreateSession", vl_method_create_session,
"io.systemd.Login.ReleaseSession", vl_method_release_session);
"io.systemd.Login.CreateSession", vl_method_create_session,
"io.systemd.Login.ReleaseSession", vl_method_release_session,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return log_error_errno(r, "Failed to register varlink methods: %m");

View File

@ -17,6 +17,7 @@
#include "varlink-io.systemd.Machine.h"
#include "varlink-io.systemd.MachineImage.h"
#include "varlink-io.systemd.UserDatabase.h"
#include "varlink-io.systemd.service.h"
#include "varlink-util.h"
typedef struct LookupParameters {
@ -776,7 +777,8 @@ static int manager_varlink_init_machine(Manager *m) {
r = sd_varlink_server_add_interface_many(
s,
&vl_interface_io_systemd_Machine,
&vl_interface_io_systemd_MachineImage);
&vl_interface_io_systemd_MachineImage,
&vl_interface_io_systemd_service);
if (r < 0)
return log_error_errno(r, "Failed to add Machine and MachineImage interfaces to varlink server: %m");
@ -798,7 +800,10 @@ static int manager_varlink_init_machine(Manager *m) {
"io.systemd.MachineImage.Update", vl_method_update_image,
"io.systemd.MachineImage.Clone", vl_method_clone_image,
"io.systemd.MachineImage.Remove", vl_method_remove_image,
"io.systemd.MachineImage.SetPoolLimit", vl_method_set_pool_limit);
"io.systemd.MachineImage.SetPoolLimit", vl_method_set_pool_limit,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return log_error_errno(r, "Failed to register varlink methods: %m");

View File

@ -12,6 +12,7 @@
#include "networkd-manager-varlink.h"
#include "stat-util.h"
#include "varlink-io.systemd.Network.h"
#include "varlink-io.systemd.service.h"
#include "varlink-util.h"
static int vl_method_get_states(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
@ -269,16 +270,22 @@ int manager_connect_varlink(Manager *m) {
(void) sd_varlink_server_set_description(s, "varlink-api-network");
r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_Network);
r = sd_varlink_server_add_interface_many(
s,
&vl_interface_io_systemd_Network,
&vl_interface_io_systemd_service);
if (r < 0)
return log_error_errno(r, "Failed to add Network interface to varlink server: %m");
r = sd_varlink_server_bind_method_many(
s,
"io.systemd.Network.GetStates", vl_method_get_states,
"io.systemd.Network.GetNamespaceId", vl_method_get_namespace_id,
"io.systemd.Network.GetLLDPNeighbors", vl_method_get_lldp_neighbors,
"io.systemd.Network.SetPersistentStorage", vl_method_set_persistent_storage);
"io.systemd.Network.GetStates", vl_method_get_states,
"io.systemd.Network.GetNamespaceId", vl_method_get_namespace_id,
"io.systemd.Network.GetLLDPNeighbors", vl_method_get_lldp_neighbors,
"io.systemd.Network.SetPersistentStorage", vl_method_set_persistent_storage,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return log_error_errno(r, "Failed to register varlink methods: %m");

View File

@ -20,6 +20,7 @@
#include "path-util.h"
#include "percent-util.h"
#include "varlink-io.systemd.oom.h"
#include "varlink-io.systemd.service.h"
#include "varlink-util.h"
typedef struct ManagedOOMMessage {
@ -746,13 +747,21 @@ static int manager_varlink_init(Manager *m, int fd) {
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_oom);
r = sd_varlink_server_add_interface_many(
s,
&vl_interface_io_systemd_oom,
&vl_interface_io_systemd_service);
if (r < 0)
return log_error_errno(r, "Failed to add oom interface to varlink server: %m");
return log_error_errno(r, "Failed to add Varlink interfaces to varlink server: %m");
r = sd_varlink_server_bind_method(s, "io.systemd.oom.ReportManagedOOMCGroups", process_managed_oom_request);
r = sd_varlink_server_bind_method_many(
s,
"io.systemd.oom.ReportManagedOOMCGroups", process_managed_oom_request,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return log_error_errno(r, "Failed to register varlink method: %m");
return log_error_errno(r, "Failed to register varlink methods: %m");
if (fd < 0)
r = sd_varlink_server_listen_address(s, VARLINK_ADDR_PATH_MANAGED_OOM_USER, 0666);

View File

@ -9,6 +9,7 @@
#include "socket-netlink.h"
#include "varlink-io.systemd.Resolve.h"
#include "varlink-io.systemd.Resolve.Monitor.h"
#include "varlink-io.systemd.service.h"
#include "varlink-util.h"
typedef struct LookupParameters {
@ -1410,7 +1411,10 @@ static int varlink_main_server_init(Manager *m) {
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_Resolve);
r = sd_varlink_server_add_interface_many(
s,
&vl_interface_io_systemd_Resolve,
&vl_interface_io_systemd_service);
if (r < 0)
return log_error_errno(r, "Failed to add Resolve interface to varlink server: %m");
@ -1419,7 +1423,10 @@ static int varlink_main_server_init(Manager *m) {
"io.systemd.Resolve.ResolveHostname", vl_method_resolve_hostname,
"io.systemd.Resolve.ResolveAddress", vl_method_resolve_address,
"io.systemd.Resolve.ResolveService", vl_method_resolve_service,
"io.systemd.Resolve.ResolveRecord", vl_method_resolve_record);
"io.systemd.Resolve.ResolveRecord", vl_method_resolve_record,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
if (r < 0)
return log_error_errno(r, "Failed to register varlink methods: %m");