mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-19 01:06:27 +00:00
Metadata: add support for loading from a file
This adds a new configuration provider that just reads a file. This is needed for Docker Desktop, where we will run a LinuxKit distro in an isolated namespace within WSL 2. In this scenario, the config will be accessible trough the WSL2 built-in 9p mount of the Windows filesystem. Signed-off-by: Simon Ferquel <simon.ferquel@docker.com>
This commit is contained in:
parent
8c1fdf8737
commit
3f56669576
@ -7,6 +7,7 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
@ -44,29 +45,34 @@ var netProviders []Provider
|
||||
// cdromProviders is a list of Providers offering metadata/userdata data via CDROM
|
||||
var cdromProviders []Provider
|
||||
|
||||
// fileProviders is a list of Providers offering metadata/userdata in a file on the filesystem
|
||||
var fileProviders []Provider
|
||||
|
||||
func main() {
|
||||
providers := []string{"aws", "gcp", "hetzner", "openstack", "scaleway", "vultr", "packet", "cdrom"}
|
||||
if len(os.Args) > 1 {
|
||||
providers = os.Args[1:]
|
||||
}
|
||||
for _, p := range providers {
|
||||
switch p {
|
||||
case "aws":
|
||||
switch {
|
||||
case p == "aws":
|
||||
netProviders = append(netProviders, NewAWS())
|
||||
case "gcp":
|
||||
case p == "gcp":
|
||||
netProviders = append(netProviders, NewGCP())
|
||||
case "hetzner":
|
||||
case p == "hetzner":
|
||||
netProviders = append(netProviders, NewHetzner())
|
||||
case "openstack":
|
||||
case p == "openstack":
|
||||
netProviders = append(netProviders, NewOpenstack())
|
||||
case "packet":
|
||||
case p == "packet":
|
||||
netProviders = append(netProviders, NewPacket())
|
||||
case "scaleway":
|
||||
case p == "scaleway":
|
||||
netProviders = append(netProviders, NewScaleway())
|
||||
case "vultr":
|
||||
case p == "vultr":
|
||||
netProviders = append(netProviders, NewVultr())
|
||||
case "cdrom":
|
||||
case p == "cdrom":
|
||||
cdromProviders = ListCDROMs()
|
||||
case strings.HasPrefix(p, "file="):
|
||||
fileProviders = append(fileProviders, fileProvider(p[5:]))
|
||||
default:
|
||||
log.Fatalf("Unrecognised metadata provider: %s", p)
|
||||
}
|
||||
@ -99,6 +105,17 @@ func main() {
|
||||
}
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
for _, p = range fileProviders {
|
||||
log.Printf("Trying file %s", p.String())
|
||||
if p.Probe() {
|
||||
log.Printf("%s: Probe succeeded", p)
|
||||
userdata, err = p.Extract()
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
log.Printf("No metadata/userdata found. Bye")
|
||||
|
21
pkg/metadata/provider_file.go
Normal file
21
pkg/metadata/provider_file.go
Normal file
@ -0,0 +1,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
|
||||
type fileProvider string
|
||||
|
||||
func (p fileProvider) String() string {
|
||||
return string(p)
|
||||
}
|
||||
|
||||
func (p fileProvider) Probe() bool {
|
||||
_, err := os.Stat(string(p))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func (p fileProvider) Extract() ([]byte, error) {
|
||||
return ioutil.ReadFile(string(p))
|
||||
}
|
Loading…
Reference in New Issue
Block a user