diff --git a/dependencies/config/config.go b/dependencies/config/config.go index 50858f4..f080a6e 100644 --- a/dependencies/config/config.go +++ b/dependencies/config/config.go @@ -2,25 +2,26 @@ package config import ( "fmt" - "net" "os" "path/filepath" "strings" "text/template" - entry "github.com/stackanetes/kubernetes-entrypoint/dependencies" + entry "github.com/stackanetes/kubernetes-entrypoint/entrypoint" "github.com/stackanetes/kubernetes-entrypoint/logger" + "github.com/stackanetes/kubernetes-entrypoint/util" "github.com/stackanetes/kubernetes-entrypoint/util/env" ) +type configParams struct { + HOSTNAME string + IP string + IP_ERLANG string +} + type Config struct { name string - params struct { - iface string - HOSTNAME string - IP string - IP_ERLANG string - } + params configParams } func init() { @@ -33,60 +34,59 @@ func init() { } func NewConfig(name string) Config { - var config Config - config.name = name - iface := os.Getenv("INTERFACE_NAME") - if iface == "" { - logger.Error.Print("Environment variable INTERFACE_NAME not set") - os.Exit(1) - } hostname, err := os.Hostname() if err != nil { - logger.Error.Print("Environment variable HOSTNAME not set") + logger.Error.Printf("Cannot determine hostname: %v", err) + os.Exit(1) } - config.params.HOSTNAME = hostname - config.params.iface = iface - i, err := net.InterfaceByName(iface) + + ip, err := util.GetIp() if err != nil { - logger.Error.Printf("Cannot get iface: %v", err) + logger.Error.Printf("Cannot get ip address: %v", err) os.Exit(1) } - address, err := i.Addrs() - if err != nil || len(address) == 0 { - logger.Error.Printf("Cannot get ip: %v", err) - os.Exit(1) + return Config{ + name: name, + params: configParams{ + IP: ip, + IP_ERLANG: strings.Replace(ip, ".", ",", -1), + HOSTNAME: hostname}, } - config.params.IP = strings.Split(address[0].String(), "/")[0] - config.params.IP_ERLANG = strings.Replace(config.params.IP, ".", ",", -1) - - return config } func (c Config) IsResolved(entrypoint *entry.Entrypoint) (bool, error) { - logger.Info.Print(c.GetName()) - err := CreateDirectory(c.GetName()) + //Create directory to ensure it exists + err := createDirectory(c.GetName()) if err != nil { return false, fmt.Errorf("Couldn't create directory: %v", err) } - config, err := os.Create(c.GetName()) + err = createAndTemplateConfig(c.GetName(), c.params) if err != nil { - return false, fmt.Errorf("Couldn't touch file %v: %v", c.GetName(), err) - } - file := filepath.Base(c.GetName()) - temp := template.Must(template.New(file).ParseFiles(fmt.Sprintf("/configmaps/%s/%s", file, file))) - if err = temp.Execute(config, c.params); err != nil { - return false, err + return false, fmt.Errorf("Cannot template %s: %v", c.GetName(), err) } return true, nil } +func createAndTemplateConfig(name string, params configParams) (err error) { + config, err := os.Create(name) + if err != nil { + return + } + file := filepath.Base(name) + temp := template.Must(template.New(file).ParseFiles(fmt.Sprintf("/configmaps/%s/%s", file, file))) + if err = temp.Execute(config, params); err != nil { + return err + } + + return +} func (c Config) GetName() string { return c.name } -func CreateDirectory(file string) error { +func createDirectory(file string) error { err := os.MkdirAll(filepath.Dir(file), 0644) if err != nil { return err diff --git a/dependencies/container/container.go b/dependencies/container/container.go index 335b234..0f44279 100644 --- a/dependencies/container/container.go +++ b/dependencies/container/container.go @@ -2,7 +2,7 @@ package container import ( "fmt" - entry "github.com/stackanetes/kubernetes-entrypoint/dependencies" + entry "github.com/stackanetes/kubernetes-entrypoint/entrypoint" "github.com/stackanetes/kubernetes-entrypoint/util/env" "os" ) diff --git a/dependencies/daemonset/daemonset.go b/dependencies/daemonset/daemonset.go index 1b5ffc5..dc72d8b 100644 --- a/dependencies/daemonset/daemonset.go +++ b/dependencies/daemonset/daemonset.go @@ -4,7 +4,7 @@ import ( "fmt" "os" - entry "github.com/stackanetes/kubernetes-entrypoint/dependencies" + entry "github.com/stackanetes/kubernetes-entrypoint/entrypoint" "github.com/stackanetes/kubernetes-entrypoint/logger" "github.com/stackanetes/kubernetes-entrypoint/util/env" "k8s.io/kubernetes/pkg/api" @@ -19,12 +19,12 @@ func init() { daemonsetEnv := fmt.Sprintf("%sDAEMONSET", entry.DependencyPrefix) if daemonsetsDeps := env.SplitEnvToList(daemonsetEnv); daemonsetsDeps != nil { for _, dep := range daemonsetsDeps { - entry.Register(NewDaemonset(dep)) + entry.Register(NewDaemonSet(dep)) } } } -func NewDaemonset(name string) Daemonset { +func NewDaemonSet(name string) Daemonset { return Daemonset{name: name} } diff --git a/dependencies/job/job.go b/dependencies/job/job.go index e5a1f84..117e321 100644 --- a/dependencies/job/job.go +++ b/dependencies/job/job.go @@ -3,7 +3,7 @@ package job import ( "fmt" - entry "github.com/stackanetes/kubernetes-entrypoint/dependencies" + entry "github.com/stackanetes/kubernetes-entrypoint/entrypoint" "github.com/stackanetes/kubernetes-entrypoint/util/env" ) diff --git a/dependencies/service/service.go b/dependencies/service/service.go index ee666b8..33e6893 100644 --- a/dependencies/service/service.go +++ b/dependencies/service/service.go @@ -2,7 +2,7 @@ package service import ( "fmt" - entry "github.com/stackanetes/kubernetes-entrypoint/dependencies" + entry "github.com/stackanetes/kubernetes-entrypoint/entrypoint" "github.com/stackanetes/kubernetes-entrypoint/util/env" ) diff --git a/dependencies/socket/socket.go b/dependencies/socket/socket.go index 3b87cfe..03de419 100644 --- a/dependencies/socket/socket.go +++ b/dependencies/socket/socket.go @@ -2,7 +2,7 @@ package socket import ( "fmt" - entry "github.com/stackanetes/kubernetes-entrypoint/dependencies" + entry "github.com/stackanetes/kubernetes-entrypoint/entrypoint" "github.com/stackanetes/kubernetes-entrypoint/util/env" "os" ) diff --git a/dependencies/entrypoint.go b/entrypoint/entrypoint.go similarity index 94% rename from dependencies/entrypoint.go rename to entrypoint/entrypoint.go index 98d95f0..55bf64c 100644 --- a/dependencies/entrypoint.go +++ b/entrypoint/entrypoint.go @@ -23,7 +23,7 @@ type Entrypoint struct { } //Constructor for entrypoint -func NewEntrypoint(client *cl.Client) (entry *Entrypoint, err error) { +func New(client *cl.Client) (entry *Entrypoint, err error) { entry = new(Entrypoint) if entry.Client = client; client == nil { if entry.Client, err = cl.NewInCluster(); err != nil { @@ -62,7 +62,6 @@ func (e *Entrypoint) Resolve() { } type Resolver interface { - // GetType() string IsResolved(entrypoint *Entrypoint) (bool, error) GetName() string } diff --git a/dependencies/entrypoint_test.go b/entrypoint/entrypoint_test.go similarity index 100% rename from dependencies/entrypoint_test.go rename to entrypoint/entrypoint_test.go diff --git a/kubernetes-entrypoint.go b/kubernetes-entrypoint.go index a45777d..03dc26a 100644 --- a/kubernetes-entrypoint.go +++ b/kubernetes-entrypoint.go @@ -3,11 +3,12 @@ package main import ( "os" - entry "github.com/stackanetes/kubernetes-entrypoint/dependencies" + entry "github.com/stackanetes/kubernetes-entrypoint/entrypoint" "github.com/stackanetes/kubernetes-entrypoint/logger" - comm "github.com/stackanetes/kubernetes-entrypoint/util/command" + command "github.com/stackanetes/kubernetes-entrypoint/util/command" "github.com/stackanetes/kubernetes-entrypoint/util/env" + //restclient "k8s.io/kubernetes/pkg/client/restclient" cl "k8s.io/kubernetes/pkg/client/unversioned" //Register resolvers _ "github.com/stackanetes/kubernetes-entrypoint/dependencies/config" @@ -20,18 +21,22 @@ import ( func main() { var client *cl.Client - var command []string + var comm []string var entrypoint *entry.Entrypoint var err error - if entrypoint, err = entry.NewEntrypoint(client); err != nil { + if entrypoint, err = entry.New(client); err != nil { logger.Error.Printf("Creating entrypoint failed: %v", err) os.Exit(1) } entrypoint.Resolve() - if command = env.SplitEnvToList("COMMAND", " "); len(command) == 0 { + if comm = env.SplitEnvToList("COMMAND", " "); len(comm) == 0 { logger.Error.Printf("COMMAND env is empty") os.Exit(1) } - comm.ExecuteCommand(command) + err = command.Execute(comm) + if err != nil { + logger.Error.Printf("Cannot execute command: %v", err) + os.Exit(1) + } } diff --git a/util/command/command.go b/util/command/command.go index 08da0a4..1be5d0a 100644 --- a/util/command/command.go +++ b/util/command/command.go @@ -8,18 +8,18 @@ import ( "github.com/stackanetes/kubernetes-entrypoint/logger" ) -func ExecuteCommand(command []string) { +func Execute(command []string) (err error) { path, err := exec.LookPath(command[0]) if err != nil { logger.Error.Printf("Cannot find a binary %v : %v", command[0], err) - os.Exit(1) + return } env := os.Environ() err = syscall.Exec(path, command, env) if err != nil { logger.Error.Print("Executing command %v failed: %v", command, err) - os.Exit(1) + return } - + return }