-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.go
More file actions
81 lines (65 loc) · 1.82 KB
/
main.go
File metadata and controls
81 lines (65 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package main
import (
"flag"
"github.com/docker/libcompose/project"
"log"
"github.com/docker/libcompose/config"
"fmt"
"text/template"
"os"
)
var (
composeFile string
appName string
unitFileTemplate *template.Template
)
func init() {
flag.StringVar(&composeFile, "compose-file-path", "./", "Specify an alternate path for compose files")
flag.StringVar(&appName, "app-name", "", "Application name described by docker compose file")
var err error
unitFileTemplate = template.New("unit")
unitFileTemplate = unitFileTemplate.Delims("[[","]]")
unitFileTemplate, err = unitFileTemplate.Parse(UnitTemplate)
if err != nil {
log.Fatalf("Unabled to parse unit template: %s", err.Error())
}
}
func main() {
flag.Parse()
if appName == "" {
log.Fatal("Specify app-name on the command line")
}
dockerCompose := project.NewProject(&project.Context{
ProjectName: "kube",
ComposeFiles: []string{composeFile},
}, nil, &config.ParseOptions{})
if err := dockerCompose.Parse(); err != nil {
log.Fatalf("Failed to parse the compose project from %s: %v", composeFile, err)
}
for _, name := range dockerCompose.ServiceConfigs.Keys() {
log.Printf("Generating unit for service %s",name)
service, ok := dockerCompose.GetServiceConfig(name)
if !ok {
log.Println("WARNING: Unable to get service config for %s... skipping.")
continue
}
dependency := "docker"
if len(service.DependsOn) > 0 {
if len(service.DependsOn) > 1 {
log.Println("WARNING - multiple dependencies exist - using the first dependency only")
}
dependency = service.DependsOn[0]
}
unit := Unit {
Service:name,
Dependency:dependency,
AppName:appName,
}
fmt.Println("")
err := unitFileTemplate.Execute(os.Stdout, unit)
if err != nil {
log.Fatalf("Error executing template: %s", err.Error())
}
fmt.Println("")
}
}