another package restructuring

Signed-off-by: aiordache <anca.iordache@docker.com>
This commit is contained in:
aiordache 2020-04-06 20:28:18 +02:00
parent 814d4ca832
commit facb86fab2
5 changed files with 116 additions and 151 deletions

View File

@ -3,46 +3,56 @@ package compose
import ( import (
"os" "os"
"github.com/compose-spec/compose-go/types"
internal "github.com/docker/helm-prototype/pkg/compose/internal" internal "github.com/docker/helm-prototype/pkg/compose/internal"
"github.com/docker/helm-prototype/pkg/compose/internal/helm"
"github.com/docker/helm-prototype/pkg/compose/internal/kube"
) )
type ProjectOptions struct {
ConfigPaths []string
Name string
}
var Settings = internal.GetDefault() var Settings = internal.GetDefault()
type ComposeAPI struct { type ComposeProject struct {
project *internal.Project config *types.Config
helm *helm.HelmActions
ProjectDir string
Name string `yaml:"-" json:"-"`
} }
// projectFromOptions load a compose project based on command line options type ComposeResult struct {
func ProjectFromOptions(options *ProjectOptions) (*ComposeAPI, error) { Info string
if options == nil { Status string
options = &ProjectOptions{ Descriptin string
ConfigPaths: []string{}, }
Name: "docker-compose",
}
}
if options.Name == "" { func Load(name string, configpaths []string) (*ComposeProject, error) {
options.Name = "docker-compose" if name == "" {
name = "docker-compose"
} }
model, workingDir, err := internal.GetConfig(name, configpaths)
project, err := internal.GetProject(options.Name, options.ConfigPaths)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &ComposeProject{
return &ComposeAPI{project: project}, nil config: model,
helm: helm.NewHelmActions(nil),
ProjectDir: workingDir,
Name: name,
}, nil
} }
func (c *ComposeAPI) GenerateChart(dirname string) error { func (cp *ComposeProject) GenerateChart(dirname string) error {
return c.project.ExportToCharts(dirname) objects, err := kube.MapToKubernetesObjects(cp.config, cp.Name)
if err != nil {
return err
}
err = helm.Write(cp.Name, objects, dirname)
if err != nil {
return err
}
return nil
} }
func (c *ComposeAPI) Install(name, path string) error { func (cp *ComposeProject) Install(name, path string) error {
if path == "" { if path == "" {
cwd, err := os.Getwd() cwd, err := os.Getwd()
if err != nil { if err != nil {
@ -50,9 +60,9 @@ func (c *ComposeAPI) Install(name, path string) error {
} }
path = cwd path = cwd
} }
return c.project.Install(name, path) return cp.helm.Install(name, path)
} }
func (c *ComposeAPI) Uninstall(name string) error { func (cp *ComposeProject) Uninstall(name string) error {
return c.project.Uninstall(name) return cp.helm.Uninstall(name)
} }

70
compose/internal/env.go Normal file
View File

@ -0,0 +1,70 @@
package env
import (
"os"
"strings"
"github.com/compose-spec/compose-go/loader"
"github.com/compose-spec/compose-go/types"
"github.com/docker/helm-prototype/pkg/compose/internal/utils"
)
// Kind is "kubernetes" or "docker"
type Kind string
const (
// Kubernetes specifies to use a kubernetes cluster.
Kubernetes Kind = "kubernetes"
// Docker specifies to use Docker engine.
DockerEngine Kind = "docker"
)
type Engine struct {
Namespace string
Kind Kind
Config string
// Context is the name of the kubeconfig/docker context.
Context string
// Token used for authentication (kubernetes)
Token string
// Kubernetes API Server Endpoint for authentication
APIServer string
}
func GetDefault() *Engine {
return &Engine{Kind: Kubernetes}
}
func Environment() map[string]string {
vars := make(map[string]string)
env := os.Environ()
for _, v := range env {
k := strings.SplitN(v, "=", 2)
vars[k[0]] = k[1]
}
return vars
}
func GetConfig(name string, configPaths []string) (*types.Config, string, error) {
if name == "" {
name = "docker-compose"
}
workingDir, configs, err := utils.GetConfigs(
name,
configPaths,
)
if err != nil {
return nil, "", err
}
config, err := loader.Load(types.ConfigDetails{
WorkingDir: workingDir,
ConfigFiles: configs,
Environment: Environment(),
})
if err != nil {
return nil, "", err
}
return config, workingDir, nil
}

View File

@ -69,10 +69,9 @@ func (hc *HelmActions) Install(name, chartpath string) error {
if err != nil { if err != nil {
return err return err
} }
log.Println("Release status: ", release.Info.Status)
println("Release status: ", release.Info.Status) log.Println(release.Info.Description)
println("Release description: ", release.Info.Description) return nil
return hc.Config.Releases.Update(release)
} }
func (hc *HelmActions) Uninstall(name string) error { func (hc *HelmActions) Uninstall(name string) error {
@ -85,8 +84,12 @@ func (hc *HelmActions) Uninstall(name string) error {
return errors.New("No release found with the name provided.") return errors.New("No release found with the name provided.")
} }
actUninstall := action.NewUninstall(hc.Config) actUninstall := action.NewUninstall(hc.Config)
_, err = actUninstall.Run(name) response, err := actUninstall.Run(name)
return err if err != nil {
return err
}
log.Println(response.Release.Info.Description)
return nil
} }
func (hc *HelmActions) Get(name string) (*release.Release, error) { func (hc *HelmActions) Get(name string) (*release.Release, error) {

View File

@ -1,102 +0,0 @@
package project
import (
"github.com/compose-spec/compose-go/loader"
"github.com/compose-spec/compose-go/types"
"github.com/docker/helm-prototype/pkg/compose/internal/helm"
"github.com/docker/helm-prototype/pkg/compose/internal/utils"
"github.com/docker/helm-prototype/pkg/compose/internal/kube"
)
// Kind is "kubernetes" or "docker"
type Kind string
const (
// Kubernetes specifies to use a kubernetes cluster.
Kubernetes Kind = "kubernetes"
// Docker specifies to use Docker engine.
DockerEngine Kind = "docker"
)
type Engine struct {
Namespace string
Kind Kind
Config string
// Context is the name of the kubeconfig/docker context.
Context string
// Token used for authentication (kubernetes)
Token string
// Kubernetes API Server Endpoint for authentication
APIServer string
}
func GetDefault() *Engine {
return &Engine{Kind: Kubernetes}
}
type Project struct {
Config *types.Config
Helm *helm.HelmActions
ProjectDir string
Name string `yaml:"-" json:"-"`
}
func NewProject(config types.ConfigDetails, name string) (*Project, error) {
model, err := loader.Load(config)
if err != nil {
return nil, err
}
p := Project{
Config: model,
Helm: helm.NewHelmActions(nil),
ProjectDir: config.WorkingDir,
Name: name,
}
return &p, nil
}
func GetProject(name string, configPaths []string) (*Project, error) {
if name == "" {
name = "docker-compose"
}
workingDir, configs, err := utils.GetConfigs(
name,
configPaths,
)
if err != nil {
return nil, err
}
return NewProject(types.ConfigDetails{
WorkingDir: workingDir,
ConfigFiles: configs,
Environment: utils.Environment(),
}, name)
}
func (p *Project) ExportToCharts(path string) error {
objects, err := kube.MapToKubernetesObjects(p.Config, p.Name)
if err != nil {
return err
}
err = helm.Write(p.Name, objects, path)
if err != nil {
return err
}
return nil
}
func (p *Project) Install(name, path string) error {
return p.Helm.Install(name, path)
}
func (p *Project) Uninstall(name string) error {
return p.Helm.Uninstall(name)
}

View File

@ -1,16 +0,0 @@
package utils
import (
"os"
"strings"
)
func Environment() map[string]string {
vars := make(map[string]string)
env := os.Environ()
for _, v := range env {
k := strings.SplitN(v, "=", 2)
vars[k[0]] = k[1]
}
return vars
}