Refactoring

This commit is contained in:
pprokop 2016-09-21 12:09:40 +02:00
parent e3184bf078
commit ab11828911
10 changed files with 61 additions and 57 deletions

View File

@ -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

View File

@ -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"
)

View File

@ -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}
}

View File

@ -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"
)

View File

@ -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"
)

View File

@ -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"
)

View File

@ -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
}

View File

@ -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)
}
}

View File

@ -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
}