Skip to content

Commit

Permalink
Introduce Sidecar Args (#1437)
Browse files Browse the repository at this point in the history
Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
  • Loading branch information
dvaldivia authored Feb 16, 2023
1 parent 265eaa7 commit 299b00d
Show file tree
Hide file tree
Showing 39 changed files with 1,357 additions and 308 deletions.
1 change: 1 addition & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ builds:
- s390x
env:
- CGO_ENABLED=0
main: ./cmd/operator/
ldflags:
- -s -w -X main.version={{.Tag}}
flags:
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ RUN \
COPY minio-operator /minio-operator
COPY logsearchapi-bin /logsearchapi

CMD ["/minio-operator"]
ENTRYPOINT ["/minio-operator"]
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ getdeps:
verify: getdeps govet gotest lint

operator: verify
@CGO_ENABLED=0 GOOS=linux go build -trimpath --ldflags $(LDFLAGS) -o minio-operator
@CGO_ENABLED=0 GOOS=linux go build -trimpath --ldflags $(LDFLAGS) -o minio-operator ./cmd/operator

docker: operator logsearchapi
@docker build --no-cache -t $(TAG) .
Expand Down
25 changes: 25 additions & 0 deletions cmd/operator/app_commands.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (C) 2023, MinIO, Inc.
//
// This code is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License, version 3,
// as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License, version 3,
// along with this program. If not, see <http://www.gnu.org/licenses/>

package main

import (
"github.com/minio/cli"
)

var appCmds = []cli.Command{
controllerCmd,
sidecarCmd,
validateCmd,
}
32 changes: 32 additions & 0 deletions cmd/operator/controller.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// Copyright (C) 2023, MinIO, Inc.
//
// This code is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License, version 3,
// as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License, version 3,
// along with this program. If not, see <http://www.gnu.org/licenses/>

package main

import (
"github.com/minio/cli"
"github.com/minio/operator/pkg/controller"
)

// starts the controller
var controllerCmd = cli.Command{
Name: "controller",
Aliases: []string{"ctl"},
Usage: "Start MinIO Operator Controller",
Action: startController,
}

func startController(ctx *cli.Context) {
controller.StartOperator()
}
130 changes: 130 additions & 0 deletions cmd/operator/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
// Copyright (C) 2023, MinIO, Inc.
//
// This code is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License, version 3,
// as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License, version 3,
// along with this program. If not, see <http://www.gnu.org/licenses/>

package main

import (
"os"
"path/filepath"
"sort"
"time"

"github.com/minio/operator/pkg"

"github.com/minio/cli"
"github.com/minio/pkg/console"
"github.com/minio/pkg/trie"
"github.com/minio/pkg/words"
)

// Help template for Operator.
var operatorHelpTemplate = `NAME:
{{.Name}} - {{.Usage}}
DESCRIPTION:
{{.Description}}
USAGE:
{{.HelpName}} {{if .VisibleFlags}}[FLAGS] {{end}}COMMAND{{if .VisibleFlags}}{{end}} [ARGS...]
COMMANDS:
{{range .VisibleCommands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}}
{{end}}{{if .VisibleFlags}}
FLAGS:
{{range .VisibleFlags}}{{.}}
{{end}}{{end}}
VERSION:
{{.Version}}
`

func newApp(name string) *cli.App {
// Collection of console commands currently supported are.
var commands []cli.Command

// Collection of console commands currently supported in a trie tree.
commandsTree := trie.NewTrie()

// registerCommand registers a cli command.
registerCommand := func(command cli.Command) {
commands = append(commands, command)
commandsTree.Insert(command.Name)
}

// register commands
for _, cmd := range appCmds {
registerCommand(cmd)
}

findClosestCommands := func(command string) []string {
var closestCommands []string
closestCommands = append(closestCommands, commandsTree.PrefixMatch(command)...)

sort.Strings(closestCommands)
// Suggest other close commands - allow missed, wrongly added and
// even transposed characters
for _, value := range commandsTree.Walk(commandsTree.Root()) {
if sort.SearchStrings(closestCommands, value) < len(closestCommands) {
continue
}
// 2 is arbitrary and represents the max
// allowed number of typed errors
if words.DamerauLevenshteinDistance(command, value) < 2 {
closestCommands = append(closestCommands, value)
}
}

return closestCommands
}

cli.HelpFlag = cli.BoolFlag{
Name: "help, h",
Usage: "show help",
}

app := cli.NewApp()
app.Name = name
app.Version = pkg.Version + " - " + pkg.ShortCommitID
app.Author = "MinIO, Inc."
app.Usage = "MinIO Operator"
app.Description = `MinIO Operator automates the orchestration of MinIO Tenants on Kubernetes.`
app.Copyright = "(c) 2023 MinIO, Inc."
app.Compiled, _ = time.Parse(time.RFC3339, pkg.ReleaseTime)
app.Commands = commands
app.HideHelpCommand = true // Hide `help, h` command, we already have `minio --help`.
app.CustomAppHelpTemplate = operatorHelpTemplate
app.CommandNotFound = func(ctx *cli.Context, command string) {
console.Printf("‘%s’ is not a console sub-command. See ‘console --help’.\n", command)
closestCommands := findClosestCommands(command)
if len(closestCommands) > 0 {
console.Println()
console.Println("Did you mean one of these?")
for _, cmd := range closestCommands {
console.Printf("\t‘%s’\n", cmd)
}
}
os.Exit(1)
}

return app
}

func main() {
args := os.Args
// Set the orchestrator app name.
appName := filepath.Base(args[0])
// Run the app - exit on error.
if err := newApp(appName).Run(args); err != nil {
os.Exit(1)
}
}
57 changes: 57 additions & 0 deletions cmd/operator/sidecar.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Copyright (C) 2023, MinIO, Inc.
//
// This code is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License, version 3,
// as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License, version 3,
// along with this program. If not, see <http://www.gnu.org/licenses/>

package main

import (
"log"
"os"

"github.com/minio/cli"
"github.com/minio/operator/pkg/sidecar"
)

// starts the controller
var sidecarCmd = cli.Command{
Name: "sidecar",
Aliases: []string{"s"},
Usage: "Start MinIO Operator Sidecar",
Action: startSideCar,
Flags: []cli.Flag{
cli.StringFlag{
Name: "tenant",
Value: "",
Usage: "name of tenant being validated",
},
cli.StringFlag{
Name: "config-name",
Value: "",
Usage: "secret being watched",
},
},
}

func startSideCar(ctx *cli.Context) {
tenantName := ctx.String("tenant")
if tenantName == "" {
log.Println("Must pass --tenant flag")
os.Exit(1)
}
configName := ctx.String("config-name")
if configName == "" {
log.Println("Must pass --config-name flag")
os.Exit(1)
}
sidecar.StartSideCar(tenantName, configName)
}
42 changes: 42 additions & 0 deletions cmd/operator/validate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// This file is part of MinIO Operator
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

package main

import (
"github.com/minio/cli"
"github.com/minio/operator/pkg/validator"
)

// starts the controller
var validateCmd = cli.Command{
Name: "validate",
Aliases: []string{"v"},
Usage: "Start MinIO Operator Config Validator",
Action: startValidator,
Flags: []cli.Flag{
cli.StringFlag{
Name: "tenant",
Value: "",
Usage: "name of tenant being validated",
},
},
}

func startValidator(ctx *cli.Context) {
tenantName := ctx.String("tenant")
validator.Validate(tenantName)
}
42 changes: 21 additions & 21 deletions examples/kustomization/base/tenant.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -203,27 +203,27 @@ spec:
## https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster
requestAutoCert: true
## Prometheus setup for MinIO Tenant.
prometheus:
image: "" # defaults to quay.io/prometheus/prometheus:latest
env: [ ]
sidecarimage: "" # defaults to alpine
initimage: "" # defaults to busybox:1.33.1
diskCapacityGB: 1
storageClassName: standard
annotations: { }
labels: { }
nodeSelector: { }
affinity:
nodeAffinity: { }
podAffinity: { }
podAntiAffinity: { }
resources: { }
serviceAccountName: ""
securityContext:
runAsUser: 1000
runAsGroup: 1000
runAsNonRoot: true
fsGroup: 1000
# prometheus:
# image: "" # defaults to quay.io/prometheus/prometheus:latest
# env: [ ]
# sidecarimage: "" # defaults to alpine
# initimage: "" # defaults to busybox:1.33.1
# diskCapacityGB: 1
# storageClassName: standard
# annotations: { }
# labels: { }
# nodeSelector: { }
# affinity:
# nodeAffinity: { }
# podAffinity: { }
# podAntiAffinity: { }
# resources: { }
# serviceAccountName: ""
# securityContext:
# runAsUser: 1000
# runAsGroup: 1000
# runAsNonRoot: true
# fsGroup: 1000
## Prometheus Operator's Service Monitor for MinIO Tenant Pods.
# prometheusOperator:
# labels:
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,11 @@ require (
golang.org/x/time v0.3.0
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.25.4
k8s.io/apiextensions-apiserver v0.25.4
k8s.io/apimachinery v0.25.4
k8s.io/client-go v0.25.4
k8s.io/code-generator v0.25.4
k8s.io/klog/v2 v2.80.1
k8s.io/kubectl v0.25.4
sigs.k8s.io/controller-runtime v0.13.1
)

require (
Expand Down Expand Up @@ -169,9 +167,11 @@ require (
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiextensions-apiserver v0.25.4 // indirect
k8s.io/gengo v0.0.0-20220902162205-c0856e24416d // indirect
k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect
k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect
sigs.k8s.io/controller-runtime v0.13.1 // indirect
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
Expand Down
Loading

0 comments on commit 299b00d

Please sign in to comment.