Skip to content

Commit 4dd14f6

Browse files
committed
add processMetaData. split out drive mounting and userdata into separate functions
1 parent 9e2443d commit 4dd14f6

File tree

1 file changed

+51
-4
lines changed

1 file changed

+51
-4
lines changed

main.go

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ type CloudConfigUser struct {
3636
Sudo string `yaml:"sudo"`
3737
}
3838

39+
type MetaData struct {
40+
LocalHostname string `yaml:"local-hostname"`
41+
}
42+
3943
const (
4044
ConfigDriveLabel = "cidata"
4145
UserDataFile = "user-data"
@@ -44,27 +48,70 @@ const (
4448

4549
func main() {
4650
log.Print("Starting rancher-flatcar-cloudinit")
47-
err := process()
51+
52+
log.Printf("Mounting config drive with LABEL = %s", ConfigDriveLabel)
53+
configDriveDir, err := mountConfigDrive()
54+
if err != nil {
55+
log.Printf("ERROR: %s", err)
56+
os.Exit(1)
57+
}
58+
59+
log.Print("Processing user-data")
60+
err = processMetaData(configDriveDir)
61+
if err != nil {
62+
log.Printf("ERROR: %s", err)
63+
os.Exit(1)
64+
}
65+
66+
log.Print("Processing user-data")
67+
err = processUserData(configDriveDir)
4868
if err != nil {
4969
log.Printf("ERROR: %s", err)
5070
os.Exit(1)
5171
}
5272
}
5373

54-
func process() error {
74+
func mountConfigDrive() (string, error) {
5575
// mount config drive
5676
configDriveDir, err := os.MkdirTemp("", "configdrive")
5777
if err != nil {
58-
log.Fatal(err)
78+
return "", err
5979
}
6080
defer os.RemoveAll(configDriveDir)
6181

6282
output, err := exec.Command("mount", "-L", ConfigDriveLabel, configDriveDir).CombinedOutput()
6383
if err != nil {
64-
return fmt.Errorf("could not mount config drive with label '%s': %s\n%s", ConfigDriveLabel, err, output)
84+
return "", fmt.Errorf("could not mount config drive with label '%s': %s\n%s", ConfigDriveLabel, err, output)
6585
}
6686
defer exec.Command("umount", configDriveDir)
6787

88+
return configDriveDir, nil
89+
}
90+
91+
func processMetaData(configDriveDir string) error {
92+
// parse meta data
93+
metaData, err := os.ReadFile(configDriveDir + "/" + MetaDataFile)
94+
if err != nil {
95+
return fmt.Errorf("could not read user-data file: %s", err)
96+
}
97+
98+
var md MetaData
99+
err = yaml.Unmarshal(metaData, md)
100+
if err != nil {
101+
return fmt.Errorf("could not parse meta-data file as YAML: %s", err)
102+
}
103+
104+
if md.LocalHostname != "" {
105+
output, err := exec.Command("hostnamectl", "set-hostname", md.LocalHostname).CombinedOutput()
106+
if err != nil {
107+
log.Printf("Error setting hostname '%s': %s\n%s", md.LocalHostname, err, output)
108+
}
109+
}
110+
111+
return nil
112+
}
113+
114+
func processUserData(configDriveDir string) error {
68115
// parse user data
69116
userData, err := os.ReadFile(configDriveDir + "/" + UserDataFile)
70117
if err != nil {

0 commit comments

Comments
 (0)