Merge pull request #3400 from simonferquel/metadata-config-file

Metadata: add support for loading from a file
This commit is contained in:
Rolf Neugebauer 2019-12-20 17:52:29 +00:00 committed by GitHub
commit 98de655db1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 9 deletions

View File

@ -7,6 +7,7 @@ import (
"os" "os"
"path" "path"
"strconv" "strconv"
"strings"
"syscall" "syscall"
) )
@ -44,29 +45,34 @@ var netProviders []Provider
// cdromProviders is a list of Providers offering metadata/userdata data via CDROM // cdromProviders is a list of Providers offering metadata/userdata data via CDROM
var cdromProviders []Provider var cdromProviders []Provider
// fileProviders is a list of Providers offering metadata/userdata in a file on the filesystem
var fileProviders []Provider
func main() { func main() {
providers := []string{"aws", "gcp", "hetzner", "openstack", "scaleway", "vultr", "packet", "cdrom"} providers := []string{"aws", "gcp", "hetzner", "openstack", "scaleway", "vultr", "packet", "cdrom"}
if len(os.Args) > 1 { if len(os.Args) > 1 {
providers = os.Args[1:] providers = os.Args[1:]
} }
for _, p := range providers { for _, p := range providers {
switch p { switch {
case "aws": case p == "aws":
netProviders = append(netProviders, NewAWS()) netProviders = append(netProviders, NewAWS())
case "gcp": case p == "gcp":
netProviders = append(netProviders, NewGCP()) netProviders = append(netProviders, NewGCP())
case "hetzner": case p == "hetzner":
netProviders = append(netProviders, NewHetzner()) netProviders = append(netProviders, NewHetzner())
case "openstack": case p == "openstack":
netProviders = append(netProviders, NewOpenstack()) netProviders = append(netProviders, NewOpenstack())
case "packet": case p == "packet":
netProviders = append(netProviders, NewPacket()) netProviders = append(netProviders, NewPacket())
case "scaleway": case p == "scaleway":
netProviders = append(netProviders, NewScaleway()) netProviders = append(netProviders, NewScaleway())
case "vultr": case p == "vultr":
netProviders = append(netProviders, NewVultr()) netProviders = append(netProviders, NewVultr())
case "cdrom": case p == "cdrom":
cdromProviders = ListCDROMs() cdromProviders = ListCDROMs()
case strings.HasPrefix(p, "file="):
fileProviders = append(fileProviders, fileProvider(p[5:]))
default: default:
log.Fatalf("Unrecognised metadata provider: %s", p) 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 { if !found {
log.Printf("No metadata/userdata found. Bye") log.Printf("No metadata/userdata found. Bye")

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