machine: use AcquireMetadata in io.systemd.MachineImage.List method
This commit is contained in:
@@ -598,16 +598,18 @@ static int vl_method_terminate(sd_varlink *link, sd_json_variant *parameters, sd
|
||||
return lookup_machine_and_call_method(link, parameters, flags, userdata, vl_method_terminate_internal);
|
||||
}
|
||||
|
||||
static int list_image_one_and_maybe_read_metadata(sd_varlink *link, Image *image, bool more, bool read_metadata) {
|
||||
static int list_image_one_and_maybe_read_metadata(sd_varlink *link, Image *image, bool more, AcquireMetadata am) {
|
||||
int r;
|
||||
|
||||
assert(link);
|
||||
assert(image);
|
||||
|
||||
if (read_metadata && !image->metadata_valid) {
|
||||
if (should_acquire_metadata(am) && !image->metadata_valid) {
|
||||
r = image_read_metadata(image, &image_policy_container);
|
||||
if (r < 0)
|
||||
if (r < 0 && am != ACQUIRE_METADATA_GRACEFUL)
|
||||
return log_debug_errno(r, "Failed to read image metadata: %m");
|
||||
if (r < 0)
|
||||
log_debug_errno(r, "Failed to read image metadata (graceful mode), ignoring: %m");
|
||||
}
|
||||
|
||||
_cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
|
||||
@@ -628,7 +630,7 @@ static int list_image_one_and_maybe_read_metadata(sd_varlink *link, Image *image
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (image->metadata_valid) {
|
||||
if (should_acquire_metadata(am) && image->metadata_valid) {
|
||||
r = sd_json_variant_merge_objectbo(
|
||||
&v,
|
||||
JSON_BUILD_PAIR_STRING_NON_EMPTY("hostname", image->hostname),
|
||||
@@ -648,13 +650,13 @@ static int list_image_one_and_maybe_read_metadata(sd_varlink *link, Image *image
|
||||
static int vl_method_list_images(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
|
||||
struct params {
|
||||
const char *image_name;
|
||||
bool acquire_metadata;
|
||||
} p = {};
|
||||
AcquireMetadata acquire_metadata;
|
||||
} p = { .acquire_metadata = ACQUIRE_METADATA_NO };
|
||||
int r;
|
||||
|
||||
static const sd_json_dispatch_field dispatch_table[] = {
|
||||
{ "name", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(struct params, image_name), 0 },
|
||||
{ "acquireMetadata", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, offsetof(struct params, acquire_metadata), 0 },
|
||||
{ "name", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(struct params, image_name), 0 },
|
||||
{ "acquireMetadata", SD_JSON_VARIANT_STRING, json_dispatch_acquire_metadata, offsetof(struct params, acquire_metadata), 0 },
|
||||
VARLINK_DISPATCH_POLKIT_FIELD,
|
||||
{}
|
||||
};
|
||||
|
||||
@@ -5,13 +5,22 @@
|
||||
#include "bus-polkit.h"
|
||||
#include "varlink-io.systemd.MachineImage.h"
|
||||
|
||||
static SD_VARLINK_DEFINE_ENUM_TYPE(
|
||||
AcquireMetadata,
|
||||
SD_VARLINK_FIELD_COMMENT("Do not include metadata in the output"),
|
||||
SD_VARLINK_DEFINE_ENUM_VALUE(no),
|
||||
SD_VARLINK_FIELD_COMMENT("Include metadata in the output"),
|
||||
SD_VARLINK_DEFINE_ENUM_VALUE(yes),
|
||||
SD_VARLINK_FIELD_COMMENT("Include metadata in the output, but gracefully eat up errors"),
|
||||
SD_VARLINK_DEFINE_ENUM_VALUE(graceful));
|
||||
|
||||
static SD_VARLINK_DEFINE_METHOD_FULL(
|
||||
List,
|
||||
SD_VARLINK_SUPPORTS_MORE,
|
||||
SD_VARLINK_FIELD_COMMENT("If non-null the name of a image to report details on."),
|
||||
SD_VARLINK_DEFINE_INPUT(name, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
|
||||
SD_VARLINK_FIELD_COMMENT("If true the output will include image metadata fields such as 'machineInfo' and 'OSRelease'."),
|
||||
SD_VARLINK_DEFINE_INPUT(acquireMetadata, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
|
||||
SD_VARLINK_DEFINE_INPUT_BY_TYPE(acquireMetadata, AcquireMetadata, SD_VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_POLKIT_INPUT,
|
||||
SD_VARLINK_FIELD_COMMENT("Name of the image"),
|
||||
SD_VARLINK_DEFINE_OUTPUT(name, SD_VARLINK_STRING, 0),
|
||||
@@ -61,6 +70,8 @@ static SD_VARLINK_DEFINE_ERROR(NoSuchImage);
|
||||
SD_VARLINK_DEFINE_INTERFACE(
|
||||
io_systemd_MachineImage,
|
||||
"io.systemd.MachineImage",
|
||||
SD_VARLINK_SYMBOL_COMMENT("A enum field allowing to gracefully get metadata"),
|
||||
&vl_type_AcquireMetadata,
|
||||
SD_VARLINK_SYMBOL_COMMENT("List images"),
|
||||
&vl_method_List,
|
||||
SD_VARLINK_SYMBOL_COMMENT("Update image allowing to rename or toggle read-only flag"),
|
||||
|
||||
@@ -306,7 +306,7 @@ varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.Unreg
|
||||
varlinkctl --more call /run/systemd/machine/io.systemd.MachineImage io.systemd.MachineImage.List '{}' | grep 'long-running'
|
||||
varlinkctl --more call /run/systemd/machine/io.systemd.MachineImage io.systemd.MachineImage.List '{}' | grep '.host'
|
||||
varlinkctl call /run/systemd/machine/io.systemd.MachineImage io.systemd.MachineImage.List '{"name":"long-running"}'
|
||||
varlinkctl call /run/systemd/machine/io.systemd.MachineImage io.systemd.MachineImage.List '{"name":"long-running", "acquireMetadata": true}' | grep 'OSRelease'
|
||||
varlinkctl call /run/systemd/machine/io.systemd.MachineImage io.systemd.MachineImage.List '{"name":"long-running", "acquireMetadata": "yes"}' | grep 'OSRelease'
|
||||
|
||||
# test io.systemd.MachineImage.Update
|
||||
varlinkctl call /run/systemd/machine/io.systemd.MachineImage io.systemd.MachineImage.Update '{"name":"long-running", "newName": "long-running-renamed", "readOnly": true}'
|
||||
|
||||
Reference in New Issue
Block a user