mirror of
https://github.com/containers/podman.git
synced 2025-05-25 02:57:21 +08:00

* Add second go routine for when a Timer is not needed. * goimports updated some project files Fixes #5531 Signed-off-by: Jhon Honce <jhonce@redhat.com>
129 lines
3.9 KiB
Go
129 lines
3.9 KiB
Go
// +build varlink
|
|
|
|
package varlinkapi
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
goruntime "runtime"
|
|
"time"
|
|
|
|
"github.com/containers/image/v5/pkg/sysregistriesv2"
|
|
iopodman "github.com/containers/libpod/cmd/podman/varlink"
|
|
"github.com/containers/libpod/libpod/define"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// GetVersion ...
|
|
func (i *LibpodAPI) GetVersion(call iopodman.VarlinkCall) error {
|
|
versionInfo, err := define.GetVersion()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return call.ReplyGetVersion(
|
|
versionInfo.Version,
|
|
versionInfo.GoVersion,
|
|
versionInfo.GitCommit,
|
|
time.Unix(versionInfo.Built, 0).Format(time.RFC3339),
|
|
versionInfo.OsArch,
|
|
versionInfo.RemoteAPIVersion,
|
|
)
|
|
}
|
|
|
|
// GetInfo returns details about the podman host and its stores
|
|
func (i *LibpodAPI) GetInfo(call iopodman.VarlinkCall) error {
|
|
versionInfo, err := define.GetVersion()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
podmanInfo := iopodman.PodmanInfo{}
|
|
info, err := i.Runtime.Info()
|
|
if err != nil {
|
|
return call.ReplyErrorOccurred(err.Error())
|
|
}
|
|
|
|
host := info[0].Data
|
|
distribution := iopodman.InfoDistribution{
|
|
Distribution: host["Distribution"].(map[string]interface{})["distribution"].(string),
|
|
Version: host["Distribution"].(map[string]interface{})["version"].(string),
|
|
}
|
|
infoHost := iopodman.InfoHost{
|
|
Buildah_version: host["BuildahVersion"].(string),
|
|
Distribution: distribution,
|
|
Mem_free: host["MemFree"].(int64),
|
|
Mem_total: host["MemTotal"].(int64),
|
|
Swap_free: host["SwapFree"].(int64),
|
|
Swap_total: host["SwapTotal"].(int64),
|
|
Arch: host["arch"].(string),
|
|
Cpus: int64(host["cpus"].(int)),
|
|
Hostname: host["hostname"].(string),
|
|
Kernel: host["kernel"].(string),
|
|
Os: host["os"].(string),
|
|
Uptime: host["uptime"].(string),
|
|
Eventlogger: host["eventlogger"].(string),
|
|
}
|
|
podmanInfo.Host = infoHost
|
|
store := info[1].Data
|
|
pmaninfo := iopodman.InfoPodmanBinary{
|
|
Compiler: goruntime.Compiler,
|
|
Go_version: goruntime.Version(),
|
|
Podman_version: versionInfo.Version,
|
|
Git_commit: versionInfo.GitCommit,
|
|
}
|
|
|
|
graphStatus := iopodman.InfoGraphStatus{
|
|
Backing_filesystem: store["GraphStatus"].(map[string]string)["Backing Filesystem"],
|
|
Native_overlay_diff: store["GraphStatus"].(map[string]string)["Native Overlay Diff"],
|
|
Supports_d_type: store["GraphStatus"].(map[string]string)["Supports d_type"],
|
|
}
|
|
infoStore := iopodman.InfoStore{
|
|
Graph_driver_name: store["GraphDriverName"].(string),
|
|
Containers: int64(store["ContainerStore"].(map[string]interface{})["number"].(int)),
|
|
Images: int64(store["ImageStore"].(map[string]interface{})["number"].(int)),
|
|
Run_root: store["RunRoot"].(string),
|
|
Graph_root: store["GraphRoot"].(string),
|
|
Graph_driver_options: fmt.Sprintf("%v", store["GraphOptions"]),
|
|
Graph_status: graphStatus,
|
|
}
|
|
|
|
// Registry information if any is stored as the second list item
|
|
if len(info) > 2 {
|
|
for key, val := range info[2].Data {
|
|
if key == "search" {
|
|
podmanInfo.Registries.Search = val.([]string)
|
|
continue
|
|
}
|
|
regData := val.(sysregistriesv2.Registry)
|
|
if regData.Insecure {
|
|
podmanInfo.Registries.Insecure = append(podmanInfo.Registries.Insecure, key)
|
|
}
|
|
if regData.Blocked {
|
|
podmanInfo.Registries.Blocked = append(podmanInfo.Registries.Blocked, key)
|
|
}
|
|
}
|
|
|
|
}
|
|
podmanInfo.Store = infoStore
|
|
podmanInfo.Podman = pmaninfo
|
|
return call.ReplyGetInfo(podmanInfo)
|
|
}
|
|
|
|
// GetVersion ...
|
|
func (i *LibpodAPI) Reset(call iopodman.VarlinkCall) error {
|
|
if err := i.Runtime.Reset(context.TODO()); err != nil {
|
|
logrus.Errorf("Reset Failed: %v", err)
|
|
if err := call.ReplyErrorOccurred(err.Error()); err != nil {
|
|
logrus.Errorf("Failed to send ReplyErrorOccurred: %v", err)
|
|
}
|
|
os.Exit(define.ExecErrorCodeGeneric)
|
|
}
|
|
if err := call.ReplyReset(); err != nil {
|
|
logrus.Errorf("Failed to send ReplyReset: %v", err)
|
|
os.Exit(define.ExecErrorCodeGeneric)
|
|
}
|
|
os.Exit(0)
|
|
return nil
|
|
}
|