Removed old VNFS source files

This commit is contained in:
Gregory Kurtzer
2021-04-24 15:05:26 -07:00
parent 3e0d48762e
commit 1fec3c84d5
4 changed files with 0 additions and 353 deletions

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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], "/", "_")
}