Removed old VNFS source files
This commit is contained in:
@@ -1,63 +0,0 @@
|
||||
package vnfs
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/util"
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
)
|
||||
|
||||
func BuildContainerdir(vnfs VnfsObject, buildForce bool) {
|
||||
|
||||
if _, err := os.Stat(vnfs.Source); err != nil {
|
||||
wwlog.Printf(wwlog.INFO, "%-35s: Skipping (bad path)\n", vnfs.Source)
|
||||
return
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Checking if there have been any updates to the VNFS directory\n")
|
||||
if util.PathIsNewer(vnfs.Source, vnfs.Image) {
|
||||
if buildForce == false {
|
||||
wwlog.Printf(wwlog.INFO, "%-35s: Skipping, VNFS is current\n", vnfs.Name)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Making parent directory for: %s\n", vnfs.Image)
|
||||
err := os.MkdirAll(path.Dir(vnfs.Image), 0755)
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Making parent directory for: %s\n", vnfs.Chroot)
|
||||
err = os.MkdirAll(path.Dir(vnfs.Chroot), 0755)
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Building VNFS image: '%s' -> '%s'\n", vnfs.Source, vnfs.Image)
|
||||
err = buildVnfs(vnfs.Source, vnfs.Image)
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Setup links from OCI rootfs to chroot path
|
||||
_ = os.Remove(vnfs.Chroot + "-link")
|
||||
err = os.Symlink(vnfs.Source, vnfs.Chroot+"-link")
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not create symlink for Chroot: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
err = os.Rename(vnfs.Chroot+"-link", vnfs.Chroot)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not rename link: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.INFO, "%-35s: Done\n", vnfs.Name)
|
||||
|
||||
}
|
||||
@@ -1,102 +0,0 @@
|
||||
package vnfs
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/config"
|
||||
"github.com/hpcng/warewulf/internal/pkg/oci"
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
)
|
||||
|
||||
func BuildDocker(vnfs VnfsObject, buildForce bool) {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Building OCI Container: %s\n", vnfs.Source)
|
||||
|
||||
OciCacheDir := config.LocalStateDir + "/oci"
|
||||
VnfsHashDir := config.LocalStateDir + "/oci/container"
|
||||
|
||||
c, err := oci.NewCache(oci.OptSetCachePath(OciCacheDir))
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Downloading OCI container layers\n")
|
||||
sourcePath, err := c.Pull(context.Background(), vnfs.Source, nil)
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
hashDestination := VnfsHashDir + path.Base(sourcePath)
|
||||
|
||||
name, err := os.Readlink(vnfs.Image)
|
||||
if err == nil {
|
||||
if name == hashDestination && buildForce == false {
|
||||
wwlog.Printf(wwlog.INFO, "%-35s: Skipping, VNFS is current\n", vnfs.Name)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
err = os.MkdirAll(VnfsHashDir, 0755)
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Making parent directory for: %s\n", vnfs.Image)
|
||||
err = os.MkdirAll(path.Dir(vnfs.Image), 0755)
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Making parent directory for: %s\n", vnfs.Chroot)
|
||||
err = os.MkdirAll(path.Dir(vnfs.Chroot), 0755)
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Building bootable VNFS image\n")
|
||||
|
||||
err = buildVnfs(sourcePath, hashDestination)
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Finalizing Build\n")
|
||||
|
||||
// Setup links from OCI image to provision path
|
||||
_ = os.Remove(vnfs.Image + "-link")
|
||||
err = os.Symlink(hashDestination, vnfs.Image+"-link")
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not create symlink for Image: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
err = os.Rename(vnfs.Image+"-link", vnfs.Image)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not rename link: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Setup links from OCI rootfs to chroot path
|
||||
_ = os.Remove(vnfs.Chroot + "-link")
|
||||
err = os.Symlink(sourcePath, vnfs.Chroot+"-link")
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not create symlink for Chroot: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
err = os.Rename(vnfs.Chroot+"-link", vnfs.Chroot)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not rename link: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.INFO, "%-35s: Done\n", vnfs.Source)
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
package vnfs
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
func buildVnfs(source string, dest string) error {
|
||||
cmd := fmt.Sprintf("cd %s; find . | cpio --quiet -o -H newc | gzip -c > \"%s\"", source, dest)
|
||||
|
||||
err := exec.Command("/bin/sh", "-c", cmd).Run()
|
||||
|
||||
return err
|
||||
}
|
||||
@@ -1,174 +0,0 @@
|
||||
package vnfs
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/config"
|
||||
"github.com/hpcng/warewulf/internal/pkg/errors"
|
||||
"github.com/hpcng/warewulf/internal/pkg/util"
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
type VnfsObject struct {
|
||||
Name string
|
||||
Source string
|
||||
Chroot string
|
||||
Image string
|
||||
Config string
|
||||
}
|
||||
|
||||
func Load(name string) (VnfsObject, error) {
|
||||
var ret VnfsObject
|
||||
|
||||
if name == "" {
|
||||
wwlog.Printf(wwlog.DEBUG, "Called container.Load() without a name, returning error\n")
|
||||
return ret, errors.New("Called container.Load() without a VNFS name")
|
||||
}
|
||||
|
||||
pathFriendlyName := CleanName(name)
|
||||
|
||||
configFile := path.Join(config.VnfsImageDir(pathFriendlyName), "config.yaml")
|
||||
|
||||
if util.IsFile(configFile) == false {
|
||||
return ret, errors.New("VNFS has not been imported: " + name)
|
||||
}
|
||||
|
||||
data, err := ioutil.ReadFile(configFile)
|
||||
if err != nil {
|
||||
return ret, errors.New("Error reading VNFS configuration file: " + name)
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(data, &ret)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func CleanName(source string) string {
|
||||
var tmp string
|
||||
|
||||
if strings.HasPrefix(source, "/") == true {
|
||||
tmp = path.Base(source)
|
||||
} else {
|
||||
tmp = source
|
||||
}
|
||||
|
||||
tmp = strings.ReplaceAll(tmp, "://", ":")
|
||||
tmp = strings.ReplaceAll(tmp, "/", "-")
|
||||
tmp = strings.ReplaceAll(tmp, ":", ":")
|
||||
|
||||
return tmp
|
||||
}
|
||||
|
||||
func New(source string) (VnfsObject, error) {
|
||||
var ret VnfsObject
|
||||
|
||||
if source == "" {
|
||||
wwlog.Printf(wwlog.DEBUG, "Called container.Load() without a name, returning error\n")
|
||||
return ret, errors.New("Called container.Load() without a VNFS name")
|
||||
}
|
||||
|
||||
if util.IsFile(ret.Config) {
|
||||
return Load(source)
|
||||
}
|
||||
|
||||
pathFriendlyName := CleanName(source)
|
||||
|
||||
if strings.HasPrefix(source, "/") == true {
|
||||
ret.Source = source
|
||||
ret.Name = pathFriendlyName
|
||||
} else {
|
||||
tmp := strings.ReplaceAll(source, "://", "-")
|
||||
tmp = strings.ReplaceAll(tmp, "/", ".")
|
||||
tmp = strings.ReplaceAll(tmp, ":", ".")
|
||||
ret.Name = source
|
||||
ret.Source = source
|
||||
}
|
||||
|
||||
ret.Chroot = config.VnfsChroot(pathFriendlyName)
|
||||
ret.Image = config.VnfsImage(pathFriendlyName)
|
||||
ret.Config = path.Join(config.VnfsImageDir(pathFriendlyName), "config.yaml")
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (self *VnfsObject) SaveConfig() error {
|
||||
|
||||
out, err := yaml.Marshal(self)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
file, err := os.OpenFile(self.Config, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
|
||||
_, err = file.WriteString(string(out))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Build(name string, force bool) error {
|
||||
|
||||
vnfs, err := New(name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Building VNFS: %s\n", vnfs.Name)
|
||||
if strings.HasPrefix(vnfs.Source, "/") {
|
||||
if strings.HasSuffix(vnfs.Source, "tar.gz") {
|
||||
//wwlog.Printf(wwlog.WARN, "Building VNFS from local tarball: %s\n", uri)
|
||||
wwlog.Printf(wwlog.WARN, "Building VNFS from local tarball is not supported yet: %s\n", vnfs.Name)
|
||||
} else {
|
||||
BuildContainerdir(vnfs, force)
|
||||
}
|
||||
} else {
|
||||
BuildDocker(vnfs, force)
|
||||
}
|
||||
|
||||
err = vnfs.SaveConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *VnfsObject) Nameold() string {
|
||||
if self.Source == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
if strings.HasPrefix(self.Source, "/") {
|
||||
return path.Base(self.Source)
|
||||
}
|
||||
|
||||
return self.Source
|
||||
}
|
||||
|
||||
func NameClean1(SourcePath string) string {
|
||||
if SourcePath == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
if strings.HasPrefix(SourcePath, "/") {
|
||||
return path.Base(SourcePath)
|
||||
}
|
||||
uri := strings.Split(SourcePath, "://")
|
||||
|
||||
return strings.ReplaceAll(uri[0]+":"+uri[1], "/", "_")
|
||||
}
|
||||
Reference in New Issue
Block a user