Skip to content

Commit

Permalink
Sidecar MINIO_ARGS
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 committed Feb 6, 2023
1 parent 7824287 commit 02f2b17
Show file tree
Hide file tree
Showing 25 changed files with 1,000 additions and 117 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
11 changes: 11 additions & 0 deletions cmd/operator/app_commands.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
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)
}
secretName := ctx.String("config-name")
if tenantName == "" {
log.Println("Must pass --config-name flag")
os.Exit(1)
}
sidecar.StartSideCar(tenantName, secretName)
}
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)
}
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
3 changes: 3 additions & 0 deletions pkg/apis/minio.min.io/v2/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ const MinIOCertPath = "/tmp/certs"
// TmpPath /tmp path inside the container file system
const TmpPath = "/tmp"

// CfgPath is the location of the MinIO Configuration File
const CfgPath = "/etc/minio/config.env"

// TenantLabel is applied to all components of a Tenant cluster
const TenantLabel = "v1.min.io/tenant"

Expand Down
14 changes: 14 additions & 0 deletions pkg/apis/minio.min.io/v2/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,10 @@ func (t *Tenant) EnsureDefaults() *Tenant {
}
}
}
// ServiceAccount
if t.Spec.ServiceAccountName == "" {
t.Spec.ServiceAccountName = fmt.Sprintf("%s-sa", t.Name)
}

return t
}
Expand Down Expand Up @@ -1338,3 +1342,13 @@ func GetPgImage() string {
})
return pgDefaultImage
}

// GetRoleName returns the role name we will use for the tenant
func (t *Tenant) GetRoleName() string {
return fmt.Sprintf("%s-role", t.Name)
}

// GetBindingName returns the binding name we will use for the tenant
func (t *Tenant) GetBindingName() string {
return fmt.Sprintf("%s-binding", t.Name)
}
30 changes: 30 additions & 0 deletions pkg/build-constants.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// 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 pkg

var (
// Version - the version being released (v prefix stripped)
Version = "(dev)"
// ReleaseTag - the current git tag
ReleaseTag = "(no tag)"
// ReleaseTime - current UTC date in RFC3339 format.
ReleaseTime = "(no release)"
// CommitID - latest commit id.
CommitID = "(dev)"
// ShortCommitID - first 12 characters from CommitID.
ShortCommitID = "(dev)"
)
Loading

0 comments on commit 02f2b17

Please sign in to comment.