Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce Sidecar Args #1437

Merged
merged 6 commits into from
Feb 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
dvaldivia marked this conversation as resolved.
Show resolved Hide resolved

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