blob: 9be6f74f0ac309ac0a82e1f45520c1e1b3b89e7d [file]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/virtualization/bin/guest/list.h"
#include <fuchsia/virtualization/cpp/fidl.h>
#include <zircon/status.h>
#include <iostream>
#include "src/virtualization/bin/guest/services.h"
zx_status_t handle_list(sys::ComponentContext* context) {
// Connect to the manager.
zx::status<fuchsia::virtualization::ManagerSyncPtr> manager = ConnectToManager(context);
if (manager.is_error()) {
return manager.error_value();
}
// Get list of environments.
std::vector<fuchsia::virtualization::EnvironmentInfo> env_infos;
zx_status_t status = manager->List(&env_infos);
if (status != ZX_OK) {
std::cerr << "Could not fetch list of environments: " << zx_status_get_string(status) << ".\n";
return status;
}
// Print out the environments.
if (env_infos.empty()) {
printf("no environments\n");
} else {
for (const auto& env_info : env_infos) {
printf("env:%-4u %s\n", env_info.id, env_info.label.c_str());
if (env_info.instances.empty()) {
printf(" no guest instances\n");
}
for (const auto& instance_info : env_info.instances) {
printf(" guest:%-4u %s\n", instance_info.cid, instance_info.label.c_str());
}
}
}
return ZX_OK;
}