Skip to content

Commit 7073fc1

Browse files
committed
Single ac binary
Cobra library is used to create one binary with subcommands. Updated Dockerfile to build just one binary Updated examples to use wrap command from single binary
1 parent d71ad42 commit 7073fc1

File tree

17 files changed

+167
-73
lines changed

17 files changed

+167
-73
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ COPY . /go/src/github.com/Mirantis/k8s-AppController
66
WORKDIR /go/src/github.com/Mirantis/k8s-AppController
77

88
RUN apk --no-cache add git
9-
RUN go get ./... && go build -o kubeac cmd/kubeac/main.go && go build -o wrap cmd/wrap/main.go && go build -o bootstrap cmd/bootstrap/main.go && mv kubeac /usr/bin/kubeac && mv wrap /usr/bin/wrap && mv bootstrap /usr/bin/bootstrap && mkdir -p /opt/kubeac && mv /go/src/github.com/Mirantis/k8s-AppController/manifests /opt/kubeac/manifests && rm -fr /go
9+
RUN go get ./... && go build -o kubeac && mv kubeac /usr/bin/kubeac && mkdir -p /opt/kubeac && mv /go/src/github.com/Mirantis/k8s-AppController/manifests /opt/kubeac/manifests && rm -fr /go
1010

1111
RUN echo "@community http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
1212
RUN apk --no-cache add runit@community

ac_service.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ exec 2>&1
44

55
source /tmp/envvars
66

7-
exec /usr/bin/kubeac
7+
exec /usr/bin/kubeac run

cmd/bootstrap/main.go renamed to cmd/bootstrap.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package main
15+
package cmd
1616

1717
import (
1818
"bufio"
1919
"encoding/json"
2020
"log"
2121
"os"
2222

23+
"github.com/spf13/cobra"
2324
"k8s.io/kubernetes/pkg/api/errors"
2425
"k8s.io/kubernetes/pkg/apis/extensions"
2526
"k8s.io/kubernetes/pkg/client/unversioned"
@@ -65,8 +66,8 @@ func getDependencyFromPath(path string) extensions.ThirdPartyResource {
6566
return tpr
6667
}
6768

68-
func main() {
69-
thirdPartyResourcesPath := os.Args[1]
69+
func bootstrap(cmd *cobra.Command, args []string) {
70+
thirdPartyResourcesPath := os.Args[2]
7071

7172
dependencyTPR := getDependencyFromPath(thirdPartyResourcesPath + "/dependencies.json")
7273
definitionTPR := getDependencyFromPath(thirdPartyResourcesPath + "/resdefs.json")
@@ -82,3 +83,10 @@ func main() {
8283
createTPRIfNotExists(dependencyTPR, c)
8384
createTPRIfNotExists(definitionTPR, c)
8485
}
86+
87+
var Bootstrap = &cobra.Command{
88+
Use: "bootstrap",
89+
Short: "Bootstrap AppController",
90+
Long: "Create ThirdPartyResources required for AppController pod to function properly",
91+
Run: bootstrap,
92+
}

cmd/cmd.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright 2016 Mirantis
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package cmd
16+
17+
import (
18+
"log"
19+
"os"
20+
"strconv"
21+
22+
"github.com/spf13/cobra"
23+
)
24+
25+
var RootCmd *cobra.Command
26+
27+
func Init() {
28+
var err error
29+
var labelSelector string
30+
Run.Flags().StringVarP(&labelSelector, "label", "l", "", "label selector")
31+
32+
concurrencyString := os.Getenv("KUBERNETES_AC_CONCURRENCY")
33+
34+
var concurrencyDefault int
35+
if len(concurrencyString) > 0 {
36+
concurrencyDefault, err = strconv.Atoi(concurrencyString)
37+
if err != nil {
38+
log.Printf("KUBERNETES_AC_CONCURRENCY is set to '%s' but it does not look like an integer: %v",
39+
concurrencyString, err)
40+
concurrencyDefault = 0
41+
}
42+
}
43+
var concurrency int
44+
Run.Flags().IntVarP(&concurrency, "concurrency", "c", concurrencyDefault, "concurrency")
45+
46+
var format string
47+
Wrap.Flags().StringVarP(&format, "format", "f", "yaml", "file format")
48+
49+
RootCmd = &cobra.Command{Use: "ac"}
50+
RootCmd.AddCommand(Bootstrap, Run, Wrap)
51+
}

cmd/kubeac/main.go renamed to cmd/deploy.go

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,49 +12,39 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package main
15+
package cmd
1616

1717
import (
18-
"flag"
1918
"fmt"
2019
"log"
2120
"os"
22-
"strconv"
2321
"strings"
2422

23+
"github.com/spf13/cobra"
24+
"k8s.io/kubernetes/pkg/labels"
25+
2526
"github.com/Mirantis/k8s-AppController/client"
2627
"github.com/Mirantis/k8s-AppController/scheduler"
27-
"k8s.io/kubernetes/pkg/labels"
2828
)
2929

30-
func main() {
30+
func deploy(cmd *cobra.Command, args []string) {
3131
var err error
3232

33-
concurrencyString := os.Getenv("KUBERNETES_AC_CONCURRENCY")
34-
35-
var concurrencyDefault int
36-
if len(concurrencyString) > 0 {
37-
concurrencyDefault, err = strconv.Atoi(concurrencyString)
38-
if err != nil {
39-
log.Printf("KUBERNETES_AC_CONCURRENCY is set to '%s' but it does not look like an integer: %v",
40-
concurrencyString, err)
41-
concurrencyDefault = 0
42-
}
33+
concurrency, err := cmd.Flags().GetInt("concurrency")
34+
if err != nil {
35+
log.Fatal(err)
4336
}
4437

45-
var concurrency int
46-
flag.IntVar(&concurrency, "c", concurrencyDefault, "concurrency")
47-
48-
var labelSelector string
49-
flag.StringVar(&labelSelector, "l", "", "label selector")
50-
51-
flag.Parse()
38+
labelSelector, err := cmd.Flags().GetString("label")
39+
if err != nil {
40+
log.Fatal(err)
41+
}
5242

5343
log.Println("Using concurrency:", concurrency)
5444

5545
var url string
56-
if len(flag.Args()) > 0 {
57-
url = flag.Args()[0]
46+
if len(args) > 0 {
47+
url = args[0]
5848
}
5949
if url == "" {
6050
url = os.Getenv("KUBERNETES_CLUSTER_URL")
@@ -99,3 +89,11 @@ func main() {
9989
log.Println("Done")
10090

10191
}
92+
93+
// Run is cobra command for performing AppController graph deployment
94+
var Run = &cobra.Command{
95+
Use: "run",
96+
Short: "Start deployment of AppController graph",
97+
Long: "Start deployment of AppController graph",
98+
Run: deploy,
99+
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

cmd/wrap/main.go renamed to cmd/wrap.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,18 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package main
15+
package cmd
1616

1717
import (
1818
"bufio"
19-
"flag"
2019
"fmt"
2120
"log"
2221
"os"
2322
"strings"
2423

25-
"github.com/Mirantis/k8s-AppController/cmd/wrap/format"
24+
"github.com/spf13/cobra"
25+
26+
"github.com/Mirantis/k8s-AppController/cmd/format"
2627
)
2728

2829
func getInput(stream *os.File, indent int) string {
@@ -37,11 +38,11 @@ func getInput(stream *os.File, indent int) string {
3738
return result
3839
}
3940

40-
func main() {
41-
var fileFormat string
42-
flag.StringVar(&fileFormat, "f", "yaml", "file format")
43-
44-
flag.Parse()
41+
func wrap(cmd *cobra.Command, args []string) {
42+
fileFormat, err := cmd.Flags().GetString("format")
43+
if err != nil {
44+
log.Fatal(err)
45+
}
4546

4647
var f format.Format
4748
switch fileFormat {
@@ -61,3 +62,10 @@ func main() {
6162
}
6263
fmt.Print(out)
6364
}
65+
66+
var Wrap = &cobra.Command{
67+
Use: "wrap",
68+
Short: "Echo wrapped k8s object to stdout",
69+
Long: "Echo wrapped k8s object to stdout",
70+
Run: wrap,
71+
}

cmd/wrap/main_test.go renamed to cmd/wrap_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package main
15+
package cmd
1616

1717
import (
1818
"io"

examples/extended/create.sh

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,28 @@ sleep 20
1010

1111
kubectl.sh create -f deps.yaml
1212

13-
cat job.yaml | kubectl.sh exec -i k8s-appcontroller wrap job1 | kubectl.sh create -f -
14-
cat job2.yaml | kubectl.sh exec -i k8s-appcontroller wrap job2 | kubectl.sh create -f -
15-
cat job3.yaml | kubectl.sh exec -i k8s-appcontroller wrap job3 | kubectl.sh create -f -
16-
cat job4.yaml | kubectl.sh exec -i k8s-appcontroller wrap job4 | kubectl.sh create -f -
13+
cat job.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
14+
cat job2.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
15+
cat job3.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
16+
cat job4.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
1717

18-
cat pod.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod1 | kubectl.sh create -f -
19-
cat pod2.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod2 | kubectl.sh create -f -
20-
cat pod3.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod3 | kubectl.sh create -f -
21-
cat pod4.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod4 | kubectl.sh create -f -
22-
cat pod5.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod5 | kubectl.sh create -f -
23-
cat pod6.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod6 | kubectl.sh create -f -
24-
cat pod7.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod7 | kubectl.sh create -f -
25-
cat pod8.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod8 | kubectl.sh create -f -
26-
cat pod9.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod9 | kubectl.sh create -f -
18+
cat pod.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
19+
cat pod2.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
20+
cat pod3.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
21+
cat pod4.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
22+
cat pod5.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
23+
cat pod6.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
24+
cat pod7.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
25+
cat pod8.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
26+
cat pod9.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
2727

28-
cat replicaset.yaml | kubectl.sh exec -i k8s-appcontroller wrap frontend | kubectl.sh create -f -
28+
cat replicaset.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
2929

30-
cat service.yaml | kubectl.sh exec -i k8s-appcontroller wrap service | kubectl.sh create -f -
30+
cat service.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
3131

32-
cat petset.yaml | kubectl.sh exec -i k8s-appcontroller wrap petset | kubectl.sh create -f -
32+
cat petset.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
3333

34-
cat daemonset.yaml | kubectl.sh exec -i k8s-appcontroller wrap daemonset | kubectl.sh create -f -
34+
cat daemonset.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
3535

3636
kubectl.sh exec k8s-appcontroller ac-run
3737
kubectl.sh logs -f k8s-appcontroller

examples/services/create.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ sleep 15
77

88
kubectl.sh create -f deps.yaml
99

10-
cat job.yaml | kubectl.sh exec -i k8s-appcontroller wrap job | kubectl.sh create -f -
10+
cat job.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
1111

12-
cat service.yaml | kubectl.sh exec -i k8s-appcontroller wrap service | kubectl.sh create -f -
13-
cat pod.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod1 | kubectl.sh create -f -
14-
cat pod2.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod2 | kubectl.sh create -f -
15-
cat pod3.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod3 | kubectl.sh create -f -
16-
cat pod4.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod4 | kubectl.sh create -f -
12+
cat service.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
13+
cat pod.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
14+
cat pod2.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
15+
cat pod3.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
16+
cat pod4.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
1717

1818
kubectl.sh exec k8s-appcontroller ac-run
1919

examples/simple/create.sh

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ echo "kubectl.sh create -f deps.yaml"
1818
kubectl.sh create -f deps.yaml
1919

2020
echo "Let's create resource definitions. We are wrapping existing job and pod definitions in ResourceDefinitions. We are not creating the pods and jobs themselves - yet!"
21-
echo "cat job.yaml | kubectl.sh exec -i k8s-appcontroller wrap job1 | kubectl.sh create -f -"
22-
cat job.yaml | kubectl.sh exec -i k8s-appcontroller wrap job1 | kubectl.sh create -f -
23-
echo "cat job2.yaml | kubectl.sh exec -i k8s-appcontroller wrap job2 | kubectl.sh create -f -"
24-
cat job2.yaml | kubectl.sh exec -i k8s-appcontroller wrap job2 | kubectl.sh create -f -
25-
26-
echo "cat pod.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod1 | kubectl.sh create -f -"
27-
cat pod.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod1 | kubectl.sh create -f -
28-
echo "cat pod2.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod2 | kubectl.sh create -f -"
29-
cat pod2.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod2 | kubectl.sh create -f -
30-
echo "cat pod3.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod3 | kubectl.sh create -f -"
31-
cat pod3.yaml | kubectl.sh exec -i k8s-appcontroller wrap pod3 | kubectl.sh create -f -
21+
echo "cat job.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap job1 | kubectl.sh create -f -"
22+
cat job.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
23+
echo "cat job2.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap job2 | kubectl.sh create -f -"
24+
cat job2.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
25+
26+
echo "cat pod.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap pod1 | kubectl.sh create -f -"
27+
cat pod.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
28+
echo "cat pod2.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap pod2 | kubectl.sh create -f -"
29+
cat pod2.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
30+
echo "cat pod3.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap pod3 | kubectl.sh create -f -"
31+
cat pod3.yaml | kubectl.sh exec -i k8s-appcontroller kubeac wrap | kubectl.sh create -f -
3232

3333
echo "Here we are running appcontroller binary itself. As the log will say, it retrieves dependencies and resource definitions from the k8s cluster and creates underlying objects accordingly."
3434
echo "kubectl.sh exec k8s-appcontroller ac-run"

main.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2016 Mirantis
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package main
16+
17+
import (
18+
"log"
19+
20+
"github.com/Mirantis/k8s-AppController/cmd"
21+
)
22+
23+
func main() {
24+
cmd.Init()
25+
26+
if err := cmd.RootCmd.Execute(); err != nil {
27+
log.Fatal(err)
28+
}
29+
}

manifests/appcontroller.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ kind: Pod
33
metadata:
44
name: k8s-appcontroller
55
annotations:
6-
pod.alpha.kubernetes.io/init-containers: '[{"name": "kubeac-bootstrap", "image": "mirantis/k8s-appcontroller", "command": ["bootstrap", "/opt/kubeac/manifests"]}]'
6+
pod.alpha.kubernetes.io/init-containers: '[{"name": "kubeac-bootstrap", "image": "mirantis/k8s-appcontroller", "command": ["kubeac", "bootstrap", "/opt/kubeac/manifests"]}]'
77
spec:
88
restartPolicy: Always
99
containers:

0 commit comments

Comments
 (0)