feat(hostname): Set hostname from cloud-config

This commit is contained in:
Brian Waldon 2014-03-12 22:30:24 -07:00
parent d9a8946c21
commit 5ed7817aa7
3 changed files with 21 additions and 0 deletions

View File

@ -17,6 +17,7 @@ type CloudConfig struct {
Units []Unit Units []Unit
} }
Write_Files []WriteFile Write_Files []WriteFile
Hostname string
} }
func NewCloudConfig(contents []byte) (*CloudConfig, error) { func NewCloudConfig(contents []byte) (*CloudConfig, error) {
@ -38,6 +39,13 @@ func (cc CloudConfig) String() string {
} }
func ApplyCloudConfig(cfg CloudConfig, sshKeyName string) error { func ApplyCloudConfig(cfg CloudConfig, sshKeyName string) error {
if cfg.Hostname != "" {
if err := SetHostname(cfg.Hostname); err != nil {
return err
}
log.Printf("Set hostname to %s", cfg.Hostname)
}
if len(cfg.SSH_Authorized_Keys) > 0 { if len(cfg.SSH_Authorized_Keys) > 0 {
err := AuthorizeSSHKeys(sshKeyName, cfg.SSH_Authorized_Keys) err := AuthorizeSSHKeys(sshKeyName, cfg.SSH_Authorized_Keys)
if err == nil { if err == nil {

View File

@ -28,6 +28,10 @@ func TestCloudConfigEmpty(t *testing.T) {
if len(cfg.Write_Files) != 0 { if len(cfg.Write_Files) != 0 {
t.Error("Expected zero Write_Files") t.Error("Expected zero Write_Files")
} }
if cfg.Hostname != "" {
t.Errorf("Expected hostname to be empty, got '%s'", cfg.Hostname)
}
} }
// Assert that the parsing of a cloud config file "generally works" // Assert that the parsing of a cloud config file "generally works"
@ -61,6 +65,7 @@ write_files:
path: /etc/dogepack.conf path: /etc/dogepack.conf
permissions: '0644' permissions: '0644'
owner: root:dogepack owner: root:dogepack
hostname: trontastic
`) `)
cfg, err := NewCloudConfig(contents) cfg, err := NewCloudConfig(contents)
if err != nil { if err != nil {
@ -129,6 +134,9 @@ Address=10.209.171.177/19
} }
} }
if cfg.Hostname != "trontastic" {
t.Errorf("Failed to parse hostname")
}
} }
// Assert that our interface conversion doesn't panic // Assert that our interface conversion doesn't panic

View File

@ -5,6 +5,7 @@ import (
"io/ioutil" "io/ioutil"
"log" "log"
"os" "os"
"os/exec"
"path" "path"
"path/filepath" "path/filepath"
"strings" "strings"
@ -150,3 +151,7 @@ func ExecuteScript(scriptPath string) (string, error) {
_, err = conn.StartTransientUnit(name, "replace", props...) _, err = conn.StartTransientUnit(name, "replace", props...)
return name, err return name, err
} }
func SetHostname(hostname string) error {
return exec.Command("hostnamectl", "set-hostname", hostname).Run()
}