Move metadata ISO creation to common code

This code was identical in the QEMU and HyperKit cases. Move it to util.go and
wrap it in a function, with minimal changes for returning an error.

Signed-off-by: Ian Campbell <ijc@docker.com>
This commit is contained in:
Ian Campbell 2017-11-20 15:14:58 +00:00
parent db9a783821
commit a5e5d42368
3 changed files with 32 additions and 30 deletions

View File

@ -141,22 +141,11 @@ func runHyperKit(args []string) {
log.Fatalf("Could not create state directory: %v", err)
}
if *data != "" {
var d []byte
if _, err := os.Stat(*data); os.IsNotExist(err) {
d = []byte(*data)
} else {
d, err = ioutil.ReadFile(*data)
if err != nil {
log.Fatalf("Cannot read user data: %v", err)
}
}
isoPath := filepath.Join(*state, "data.iso")
if err := WriteMetadataISO(isoPath, d); err != nil {
log.Fatalf("Cannot write user data ISO: %v", err)
}
isoPaths = append(isoPaths, isoPath)
metadataPaths, err := CreateMetadataISO(*state, *data)
if err != nil {
log.Fatalf("%v", err)
}
isoPaths = append(isoPaths, metadataPaths...)
// Create UUID for VPNKit or reuse an existing one from state dir. IP addresses are
// assigned to the UUID, so to get the same IP we have to store the initial UUID. If

View File

@ -223,22 +223,11 @@ func runQemu(args []string) {
isoPaths = append(isoPaths, path)
}
if *data != "" {
var d []byte
if _, err := os.Stat(*data); os.IsNotExist(err) {
d = []byte(*data)
} else {
d, err = ioutil.ReadFile(*data)
if err != nil {
log.Fatalf("Cannot read user data: %v", err)
}
}
isoPath := filepath.Join(*state, "data.iso")
if err := WriteMetadataISO(isoPath, d); err != nil {
log.Fatalf("Cannot write user data ISO: %v", err)
}
isoPaths = append(isoPaths, isoPath)
metadataPaths, err := CreateMetadataISO(*state, *data)
if err != nil {
log.Fatalf("%v", err)
}
isoPaths = append(isoPaths, metadataPaths...)
for i, d := range disks {
id := ""

View File

@ -3,7 +3,9 @@ package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strconv"
"strings"
)
@ -252,3 +254,25 @@ func NewPublishedPort(publish string) (PublishedPort, error) {
p.Protocol = protocol
return p, nil
}
// CreateMetadataISO writes the provided meta data to an iso file in the given state directory
func CreateMetadataISO(state, data string) ([]string, error) {
if data == "" {
return []string{}, nil
}
var d []byte
if _, err := os.Stat(data); os.IsNotExist(err) {
d = []byte(data)
} else {
d, err = ioutil.ReadFile(data)
if err != nil {
return nil, fmt.Errorf("Cannot read user data: %v", err)
}
}
isoPath := filepath.Join(state, "data.iso")
if err := WriteMetadataISO(isoPath, d); err != nil {
return nil, fmt.Errorf("Cannot write user data ISO: %v", err)
}
return []string{isoPath}, nil
}