feat(metadata): Distinguish between userdata and metadata for datasources
This commit is contained in:
		| @@ -79,7 +79,7 @@ func main() { | ||||
| 	} | ||||
|  | ||||
| 	fmt.Printf("Fetching user-data from datasource of type %q\n", ds.Type()) | ||||
| 	userdataBytes, err := ds.Fetch() | ||||
| 	userdataBytes, err := ds.FetchUserdata() | ||||
| 	if err != nil { | ||||
| 		fmt.Printf("Failed fetching user-data from datasource: %v\n", err) | ||||
| 		if ignoreFailure { | ||||
|   | ||||
| @@ -18,7 +18,11 @@ func (self *configDrive) ConfigRoot() string { | ||||
| 	return self.root | ||||
| } | ||||
|  | ||||
| func (self *configDrive) Fetch() ([]byte, error) { | ||||
| func (self *configDrive) FetchMetadata() ([]byte, error) { | ||||
| 	return self.readFile("meta_data.json") | ||||
| } | ||||
|  | ||||
| func (self *configDrive) FetchUserdata() ([]byte, error) { | ||||
| 	return self.readFile("user_data") | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package datasource | ||||
|  | ||||
| type Datasource interface { | ||||
| 	ConfigRoot() string | ||||
| 	Fetch() ([]byte, error) | ||||
| 	FetchMetadata() ([]byte, error) | ||||
| 	FetchUserdata() ([]byte, error) | ||||
| 	Type() string | ||||
| } | ||||
|   | ||||
| @@ -16,7 +16,11 @@ func (self *localFile) ConfigRoot() string { | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (self *localFile) Fetch() ([]byte, error) { | ||||
| func (self *localFile) FetchMetadata() ([]byte, error) { | ||||
| 	return []byte{}, nil | ||||
| } | ||||
|  | ||||
| func (self *localFile) FetchUserdata() ([]byte, error) { | ||||
| 	return ioutil.ReadFile(self.path) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -14,7 +14,11 @@ func (self *metadataService) ConfigRoot() string { | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (ms *metadataService) Fetch() ([]byte, error) { | ||||
| func (self *metadataService) FetchMetadata() ([]byte, error) { | ||||
| 	return []byte{}, nil | ||||
| } | ||||
|  | ||||
| func (ms *metadataService) FetchUserdata() ([]byte, error) { | ||||
| 	client := pkg.NewHttpClient() | ||||
| 	return client.Get(ms.url) | ||||
| } | ||||
|   | ||||
| @@ -26,7 +26,11 @@ func (self *procCmdline) ConfigRoot() string { | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (self *procCmdline) Fetch() ([]byte, error) { | ||||
| func (self *procCmdline) FetchMetadata() ([]byte, error) { | ||||
| 	return []byte{}, nil | ||||
| } | ||||
|  | ||||
| func (self *procCmdline) FetchUserdata() ([]byte, error) { | ||||
| 	contents, err := ioutil.ReadFile(self.Location) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
|   | ||||
| @@ -77,7 +77,7 @@ func TestProcCmdlineAndFetchConfig(t *testing.T) { | ||||
|  | ||||
| 	p := NewProcCmdline() | ||||
| 	p.Location = file.Name() | ||||
| 	cfg, err := p.Fetch() | ||||
| 	cfg, err := p.FetchUserdata() | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Test produced error: %v", err) | ||||
| 	} | ||||
|   | ||||
| @@ -34,10 +34,11 @@ type CloudConfig struct { | ||||
| 		Update UpdateConfig | ||||
| 		Units  []system.Unit | ||||
| 	} | ||||
| 	WriteFiles     []system.File `yaml:"write_files"` | ||||
| 	Hostname       string | ||||
| 	Users          []system.User | ||||
| 	ManageEtcHosts EtcHosts `yaml:"manage_etc_hosts"` | ||||
| 	WriteFiles        []system.File `yaml:"write_files"` | ||||
| 	Hostname          string | ||||
| 	Users             []system.User | ||||
| 	ManageEtcHosts    EtcHosts `yaml:"manage_etc_hosts"` | ||||
| 	NetworkConfigPath string | ||||
| } | ||||
|  | ||||
| type warner func(format string, v ...interface{}) | ||||
|   | ||||
							
								
								
									
										26
									
								
								initialize/meta_data.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								initialize/meta_data.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| package initialize | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| ) | ||||
|  | ||||
| func ParseMetaData(contents string) (cfg CloudConfig, err error) { | ||||
| 	var metadata struct { | ||||
| 		SSHAuthorizedKeyMap map[string]string `json:"public_keys"` | ||||
| 		Hostname            string            `json:"hostname"` | ||||
| 		NetworkConfig       struct { | ||||
| 			ContentPath string `json:"content_path"` | ||||
| 		} `json:"network_config"` | ||||
| 	} | ||||
| 	if err = json.Unmarshal([]byte(contents), &metadata); err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	cfg.SSHAuthorizedKeys = make([]string, 0, len(metadata.SSHAuthorizedKeyMap)) | ||||
| 	for _, key := range metadata.SSHAuthorizedKeyMap { | ||||
| 		cfg.SSHAuthorizedKeys = append(cfg.SSHAuthorizedKeys, key) | ||||
| 	} | ||||
| 	cfg.Hostname = metadata.Hostname | ||||
| 	cfg.NetworkConfigPath = metadata.NetworkConfig.ContentPath | ||||
| 	return | ||||
| } | ||||
		Reference in New Issue
	
	Block a user