From 6d1771c4e9a2a14d7d5d6652c2e4d3ac00a658d5 Mon Sep 17 00:00:00 2001 From: Robert Loveless Date: Mon, 1 Jul 2024 10:41:37 +0100 Subject: [PATCH 1/2] Added common file name "meta-data" to userDataFiles string list in provider_cdrom Signed-off-by: Robert Loveless --- providers/provider_cdrom.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/providers/provider_cdrom.go b/providers/provider_cdrom.go index 4a61a6ab39..795b1a9a61 100644 --- a/providers/provider_cdrom.go +++ b/providers/provider_cdrom.go @@ -28,7 +28,7 @@ import ( // ListCDROMs lists all the cdroms in the system func ListCDROMs() []Provider { // UserdataFiles is where to find the user data - var userdataFiles = []string{"user-data", "config"} + var userdataFiles = []string{"user-data", "meta-data", "config"} cdroms, err := filepath.Glob(cdromDevs) if err != nil { // Glob can only error on invalid pattern From 44390a96ee21fa95460ec3da8a4fc22b4e179270 Mon Sep 17 00:00:00 2001 From: Robert Loveless Date: Mon, 1 Jul 2024 21:39:44 +0100 Subject: [PATCH 2/2] factored in separate processing of userdata and metadata files, including for openstack config drive provider. Signed-off-by: Robert Loveless --- providers/cdrom_shared.go | 30 +++++++++++++------- providers/provider_cdrom.go | 5 ++-- providers/provider_openstack_config_drive.go | 3 +- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/providers/cdrom_shared.go b/providers/cdrom_shared.go index 0a1452deba..22c84ac536 100644 --- a/providers/cdrom_shared.go +++ b/providers/cdrom_shared.go @@ -2,13 +2,14 @@ package providers import ( "fmt" - "github.com/diskfs/go-diskfs" - log "github.com/sirupsen/logrus" "os" "path" "path/filepath" "strings" "syscall" + + "github.com/diskfs/go-diskfs" + log "github.com/sirupsen/logrus" ) const ( @@ -18,11 +19,11 @@ const ( // ProviderCDROM is the type implementing the Provider interface for CDROMs (nocloud/config-drive) type ProviderCDROM struct { - providerType string - device string - mountPoint string - err error - userdata []byte + providerType string + device string + mountPoint string + err error + userdata, metadata []byte } func (p *ProviderCDROM) String() string { @@ -77,15 +78,15 @@ func uniqueString(input []string) []string { return u } -func NewProviderCDROM(device string, datafiles []string, providerType string) *ProviderCDROM { +func NewProviderCDROM(device string, userdataFiles []string, metadataFile string, providerType string) *ProviderCDROM { mountPoint, err := os.MkdirTemp("", "cd") - p := ProviderCDROM{providerType, device, mountPoint, err, []byte{}} + p := ProviderCDROM{providerType, device, mountPoint, err, []byte{}, []byte{}} if err == nil { if p.err = p.mount(); p.err == nil { defer p.unmount() // read the userdata - we read the spec file and the fallback, but eventually // will remove the fallback - for _, f := range datafiles { + for _, f := range userdataFiles { userdata, err := os.ReadFile(path.Join(p.mountPoint, f)) // did we find a file? if err == nil && userdata != nil { @@ -94,8 +95,15 @@ func NewProviderCDROM(device string, datafiles []string, providerType string) *P } } if p.userdata == nil { - log.Debugf("no userdata file found at any of %v", datafiles) + log.Debugf("no userdata file found at any of %v", userdataFiles) + } + // read the metadata + metadata, err := os.ReadFile(path.Join(p.mountPoint, metadataFile)) + // did we find a file? + if err == nil && metadata != nil { + p.metadata = metadata } + p.unmount() } } return &p diff --git a/providers/provider_cdrom.go b/providers/provider_cdrom.go index 795b1a9a61..620838b6dc 100644 --- a/providers/provider_cdrom.go +++ b/providers/provider_cdrom.go @@ -28,7 +28,8 @@ import ( // ListCDROMs lists all the cdroms in the system func ListCDROMs() []Provider { // UserdataFiles is where to find the user data - var userdataFiles = []string{"user-data", "meta-data", "config"} + var userdataFiles = []string{"user-data", "config"} + var metadataFile = "meta-data" cdroms, err := filepath.Glob(cdromDevs) if err != nil { // Glob can only error on invalid pattern @@ -44,7 +45,7 @@ func ListCDROMs() []Provider { log.Debugf("unique devices to be checked: %v", cdroms) var providers []Provider for _, device := range cdroms { - providers = append(providers, NewProviderCDROM(device, userdataFiles, "CDROM")) + providers = append(providers, NewProviderCDROM(device, userdataFiles, metadataFile, "CDROM")) } return providers } diff --git a/providers/provider_openstack_config_drive.go b/providers/provider_openstack_config_drive.go index b715decac1..cfaa2cd028 100644 --- a/providers/provider_openstack_config_drive.go +++ b/providers/provider_openstack_config_drive.go @@ -29,6 +29,7 @@ import ( func ListConfigDrives() []Provider { // UserdataFiles is where to find the user data var userdataFiles = []string{"/openstack/latest/user_data"} + var metadataFile = "/openstack/latest/meta_data.json" cdroms, err := filepath.Glob(cdromDevs) if err != nil { // Glob can only error on invalid pattern @@ -44,7 +45,7 @@ func ListConfigDrives() []Provider { log.Debugf("unique devices to be checked: %v", cdroms) var providers []Provider for _, device := range cdroms { - providers = append(providers, NewProviderCDROM(device, userdataFiles, "CONFIG_DRIVE")) + providers = append(providers, NewProviderCDROM(device, userdataFiles, metadataFile, "CONFIG_DRIVE")) } return providers }