From a5e5d42368c38724088247761910580d8420f9c3 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Mon, 20 Nov 2017 15:14:58 +0000 Subject: [PATCH] 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 --- src/cmd/linuxkit/run_hyperkit.go | 19 ++++--------------- src/cmd/linuxkit/run_qemu.go | 19 ++++--------------- src/cmd/linuxkit/util.go | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/cmd/linuxkit/run_hyperkit.go b/src/cmd/linuxkit/run_hyperkit.go index c684158c2..2b3657766 100644 --- a/src/cmd/linuxkit/run_hyperkit.go +++ b/src/cmd/linuxkit/run_hyperkit.go @@ -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 diff --git a/src/cmd/linuxkit/run_qemu.go b/src/cmd/linuxkit/run_qemu.go index 5510c3042..91ca75d8e 100644 --- a/src/cmd/linuxkit/run_qemu.go +++ b/src/cmd/linuxkit/run_qemu.go @@ -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 := "" diff --git a/src/cmd/linuxkit/util.go b/src/cmd/linuxkit/util.go index 33c665486..c47d7cefd 100644 --- a/src/cmd/linuxkit/util.go +++ b/src/cmd/linuxkit/util.go @@ -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 +}