podterminal/pods/skel.go
Johannes Bülow 39c969ec51
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
skel still doesn't work properly,sadly
2024-01-31 13:12:43 +01:00

71 lines
1.5 KiB
Go

package pods
import (
"fmt"
"log"
"net/http"
"os"
"github.com/containers/podman/v4/pkg/bindings"
"github.com/containers/podman/v4/pkg/bindings/containers"
"github.com/spf13/viper"
)
// CopySkelToContainer copies an Archive into the containers root
func CopySkelToContainer(id string) error {
chownBool := viper.GetBool("skel_chown")
log.Println("Copying skel Archive to container")
var err error
conn, err := bindings.GetClient(Socket)
if err != nil {
return err
}
options := containers.CopyOptions{
Chown: &chownBool,
}
fileInfo, err := os.Stat(viper.GetString("skel"))
if err != nil {
log.Println("Could not access Skel archive")
return err
}
log.Println("Skel Archive is ", fileInfo.Size(), "b")
file, err := os.Open(viper.GetString("skel"))
if err != nil {
log.Println("Could not open skel archive", err)
return err
}
defer file.Close()
params, err := options.ToParams()
if err != nil {
log.Println("Could not parse skel options", err)
return err
}
params.Set("path", viper.GetString("skel_target"))
fmt.Println("Container", id, " Params: ", params.Encode())
response, err := conn.DoRequest(
Socket,
file,
http.MethodPut,
"/containers/%s/archive",
params,
nil,
id,
)
if err != nil {
return err
}
if response.StatusCode != http.StatusOK {
log.Println("Error putting archive into container: ", response.StatusCode, response.Body)
return err
}
log.Println(response.StatusCode, response.Body)
// Manually chown the Directory, because podmans chown is sometimes unreliable
return response.Process(nil)
}