package pods import ( "context" "log" "net" "time" "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" ) var Socket context.Context var rawSocket net.Conn var OldContainers []string 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 } 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 } func ConnectSocket() { Socket = socketConnection() rawSocket = rawConnection() } func PullImage() error { for { log.Println("Downloading Container image ", viper.GetString("image")) image := viper.GetString("image") conn := Socket _, err := images.Pull(conn, image, nil) if err != nil { log.Println(err) return err } time.Sleep(1 * time.Hour) } } // 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() 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 } } } return nil } func containerList() []entities.ListContainer { containerList, err := containers.List(Socket, nil) if err != nil { log.Println("Could not get Containers", err) } return containerList }