]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/vmspawn/vmspawn-register.c
vmspawn: support machined registration
[thirdparty/systemd.git] / src / vmspawn / vmspawn-register.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3 #include "sd-bus.h"
4 #include "sd-id128.h"
5
6 #include "bus-error.h"
7 #include "bus-locator.h"
8 #include "macro.h"
9 #include "process-util.h"
10 #include "string-util.h"
11 #include "vmspawn-register.h"
12
13 int register_machine(sd_bus *bus, const char *machine_name, sd_id128_t uuid, const char *service, const char *directory) {
14 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
15 int r;
16
17 assert(bus);
18 assert(machine_name);
19 assert(service);
20
21 r = bus_call_method(
22 bus,
23 bus_machine_mgr,
24 "RegisterMachine",
25 &error,
26 NULL,
27 "sayssus",
28 machine_name,
29 SD_BUS_MESSAGE_APPEND_ID128(uuid),
30 service,
31 "vm",
32 (uint32_t) getpid_cached(),
33 strempty(directory));
34 if (r < 0)
35 return log_error_errno(r, "Failed to register machine: %s", bus_error_message(&error, r));
36
37 return 0;
38 }
39
40 int unregister_machine(sd_bus *bus, const char *machine_name) {
41 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
42 int r;
43
44 assert(bus);
45
46 r = bus_call_method(bus, bus_machine_mgr, "UnregisterMachine", &error, NULL, "s", machine_name);
47 if (r < 0)
48 log_debug("Failed to unregister machine: %s", bus_error_message(&error, r));
49
50 return 0;
51 }