podterminal/pods/manager.go

88 lines
2.0 KiB
Go
Raw Permalink Normal View History

2024-01-27 11:20:40 +01:00
package pods
import (
"context"
"log"
2024-01-30 21:24:31 +01:00
"net"
"time"
2024-01-27 11:20:40 +01:00
"github.com/containers/podman/v4/pkg/bindings"
"github.com/containers/podman/v4/pkg/bindings/containers"
"github.com/containers/podman/v4/pkg/bindings/images"
"github.com/containers/podman/v4/pkg/domain/entities"
"github.com/spf13/viper"
2024-01-27 11:20:40 +01:00
)
var Socket context.Context
2024-01-30 21:24:31 +01:00
var rawSocket net.Conn
2024-01-27 11:20:40 +01:00
func socketConnection() context.Context {
uri := "unix:///run/podman/podman.sock"
conn, err := bindings.NewConnection(context.Background(), uri)
if err != nil {
log.Fatal(err)
}
return conn
}
2024-01-30 21:24:31 +01:00
func rawConnection() net.Conn {
connection, err := net.Dial("unix", "unix:///run/podman/podman.sock")
if err != nil {
log.Println(
"Could not establish raw UNIX socket connection, certain features will not work properly",
)
}
return connection
2024-01-27 11:20:40 +01:00
}
func ConnectSocket() {
Socket = socketConnection()
2024-01-30 21:24:31 +01:00
rawSocket = rawConnection()
2024-01-27 11:20:40 +01:00
}
func PullImage() error {
log.Println("Downloading Container image ", viper.GetString("image"))
image := viper.GetString("image")
2024-01-27 11:20:40 +01:00
conn := Socket
_, err := images.Pull(conn, image, nil)
if err != nil {
log.Println(err)
return err
2024-01-27 11:20:40 +01:00
}
return nil
2024-01-27 11:20:40 +01:00
}
// Cleanup deletes Containers older than the specified maximum Age (Equal to session cookie maximum age)
func Cleanup() error {
log.Println("Starting cleanup function")
containerList := containerList()
2024-01-27 11:20:40 +01:00
for _, container := range containerList {
now := time.Now()
maxAge := time.Second * time.Duration(viper.GetInt("maxAge"))
containerAge := now.Sub(container.Created)
if containerAge > maxAge {
err := containers.Kill(Socket, container.ID, nil)
if err != nil {
log.Println(err)
return err
}
_, err = containers.Remove(Socket, container.ID, nil)
if err != nil {
log.Println(err)
return err
}
2024-01-27 11:20:40 +01:00
}
}
return nil
}
2024-01-27 11:20:40 +01:00
func containerList() []entities.ListContainer {
containerList, err := containers.List(Socket, nil)
if err != nil {
log.Println("Could not get Containers", err)
}
return containerList
2024-01-27 11:20:40 +01:00
}