Skip to content

Commit

Permalink
Merge pull request #27 from Xelon-AG/feat/talos-csi-integration
Browse files Browse the repository at this point in the history
feat: use new k8s based on Talos
  • Loading branch information
pavel-github authored May 28, 2024
2 parents 89e1bec + fdd4164 commit 9125fbe
Show file tree
Hide file tree
Showing 41 changed files with 2,741 additions and 3,912 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ docs/releases/secret.yml
#################################
# Golang files #
#################################
/tools/bin/
.bin/
*.exe
*.dll
Expand Down
8 changes: 5 additions & 3 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,21 @@ linters:
- gofmt
- goimports
- gosimple
- govet
- ineffassign
- misspell
- staticcheck
- unconvert
- unused
- vet

linters-settings:
goimports:
local-prefixes: github.com/Xelon-AG/xelon-csi,github.com/Xelon-AG/xelon-sdk-go

output:
format: tab
formats:
- format: tab
show-stats: true

run:
deadline: 10m
timeout: 10m
36 changes: 35 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,38 @@ EOF

COPY --chmod=755 xelon-csi /bin/xelon-csi

CMD ["/bin/xelon-csi"]
ENTRYPOINT ["/bin/xelon-csi"]

# syntax=docker/dockerfile:1
#FROM golang:1.22 AS builder
#
#ENV CGO_ENABLED=0
#
## copy manifest files only to cache layer with dependencies
#WORKDIR /src/app/
#COPY go.mod go.sum /src/app/
#RUN go mod download
## copy source code
#COPY cmd/ cmd/
#COPY internal/ internal/
#
## build
#RUN go build -o xelon-cloud-controller-manager -ldflags="-s -w" -trimpath cmd/xelon-cloud-controller-manager/main.go
#
#
#
#FROM alpine:3.19 AS production
#
#ARG VERSION
#
#LABEL org.opencontainers.image.ref.name="xelon-csi" \
# org.opencontainers.image.source="https://github.com/Xelon-AG/xelon-csi" \
# org.opencontainers.image.vendor="Xelon AG" \
# org.opencontainers.image.version="${VERSION:-local}"
#
#WORKDIR /
#USER 65532:65532
#
#COPY --from=builder --chmod=755 /src/app/xelon-cloud-controller-manager /xelon-cloud-controller-manager
#
#ENTRYPOINT ["/xelon-cloud-controller-manager"]
150 changes: 77 additions & 73 deletions cmd/xelon-csi/main.go
Original file line number Diff line number Diff line change
@@ -1,97 +1,101 @@
package main

import (
"context"
"flag"
"fmt"
"log"
"os"
"time"

"github.com/sirupsen/logrus"
"k8s.io/component-base/featuregate"
"k8s.io/component-base/logs"
logsapi "k8s.io/component-base/logs/api/v1"
"k8s.io/component-base/logs/json"
"k8s.io/klog/v2"

"github.com/Xelon-AG/xelon-csi/driver"
"github.com/Xelon-AG/xelon-csi/driver/helper"
driverv1 "github.com/Xelon-AG/xelon-csi/internal/driver"
driverv0 "github.com/Xelon-AG/xelon-csi/internal/driver/v0"
)

func main() {
var (
apiURL = flag.String("api-url", "https://vdc.xelon.ch/api/service/", "Xelon API URL")
clientID = flag.String("client-id", "", "Xelon client id for IP ranges")
endpoint = flag.String("endpoint", "unix:///var/lib/kubelet/plugins/"+driver.DefaultDriverName+"/csi.sock", "CSI endpoint")
logLevel = flag.String("log-level", "info", "The log level for the CSI driver")
metadataFile = flag.String("metadata-file", "/etc/init.d/metadata.json", "The path to the metadata file on Xelon devices")
mode = flag.String("mode", string(driver.AllMode), "The mode in which the CSI driver will be run (all, node, controller)")
rescanOnResize = flag.Bool("rescan-on-resize", true, "Rescan block device and verify its size before expanding the filesystem (node mode)")
token = flag.String("token", "", "Xelon access token")
version = flag.Bool("version", false, "Print the version and exit.")
)
flag.Parse()
// command line flags
var (
endpoint = flag.String("endpoint", "unix:///var/lib/kubelet/plugins/csi.xelon.ch/csi.sock", "CSI endpoint")
mode = flag.String("mode", string(driverv1.AllMode), "The mode in which the CSI driver will be run (all, node, controller)")
rescanOnResize = flag.Bool("rescan-on-resize", true, "Rescan block device and verify its size before expanding the filesystem (node mode)")
useLegacyDriver = flag.Bool("use-legacy-driver", false, "Run Xelon CSI driver in legacy mode")
xelonBaseURL = flag.String("xelon-base-url", "https://vdc.xelon.ch/api/service/", "Xelon API URL")
xelonClientID = flag.String("xelon-client-id", "", "Xelon client ID for IP ranges")
xelonCloudID = flag.String("xelon-cloud-id", "", "Xelon client ID for IP ranges")
xelonToken = flag.String("xelon-token", "", "Xelon access token")

if *version {
info := driver.GetVersion()
fmt.Println("Xelon Persistent Storage CSI Driver")
fmt.Printf(" Version: %s\n", info.DriverVersion)
fmt.Printf(" Built: %s\n", info.BuildDate)
fmt.Printf(" Git commit: %s\n", info.GitCommit)
fmt.Printf(" Git state: %s\n", info.GitTreeState)
fmt.Printf(" Go version: %s\n", info.GoVersion)
fmt.Printf(" OS/Arch: %s\n", info.Platform)
os.Exit(0)
}
// v0 flags for compatibility
logLevel = flag.String("log-level", "info", "The log level for the CSI driver (deprecated)")
metadataFile = flag.String("metadata-file", "/etc/init.d/metadata.json", "The path to the metadata file on Xelon devices (deprecated)")
)

logger := initializeLogging(*logLevel, *mode, *metadataFile)
d, err := driver.NewDriver(
&driver.Config{
BaseURL: *apiURL,
ClientID: *clientID,
Endpoint: *endpoint,
Mode: driver.Mode(*mode),
MetadataFile: *metadataFile,
RescanOnResize: *rescanOnResize,
Token: *token,
},
logger)
if err != nil {
logger.Fatalln(err)
func main() {
// logging configuration
fg := featuregate.NewFeatureGate()
if err := logsapi.RegisterLogFormat(logsapi.JSONLogFormat, json.Factory{}, logsapi.LoggingBetaOptions); err != nil {
klog.ErrorS(err, "Failed to register JSON log format")
}
c := logsapi.NewLoggingConfiguration()
if err := logsapi.AddFeatureGates(fg); err != nil {
klog.ErrorS(err, "Failed to add feature gates")
}
logsapi.AddGoFlags(c, flag.CommandLine)
flag.Parse()
defer logs.FlushLogs()

if err := d.Run(); err != nil {
logger.Fatalln(err)
if err := logsapi.ValidateAndApply(c, fg); err != nil {
klog.ErrorS(err, "Failed to validate and apply logging configuration")
}
}

func initializeLogging(logLevel, mode, metadataFile string) *logrus.Entry {
var logger = logrus.New()
logger.SetFormatter(&logrus.JSONFormatter{
TimestampFormat: time.RFC3339Nano,
})
// handling legacy driver mode
if *useLegacyDriver {
klog.V(0).InfoS("Starting legacy Xelon CSI driver. This mode will be deprecated soon.")
logger := driverv0.InitializeLogging(*logLevel, *mode, *metadataFile)
d, err := driverv0.NewDriverV0(
&driverv0.Config{
BaseURL: *xelonBaseURL,
ClientID: *xelonClientID,
Endpoint: *endpoint,
Mode: driverv1.Mode(*mode),
MetadataFile: *metadataFile,
RescanOnResize: *rescanOnResize,
Token: *xelonToken,
},
logger)
if err != nil {
logger.Fatalln(err)
}

switch logLevel {
case "", "info":
logger.SetLevel(logrus.InfoLevel)
case "debug":
logger.SetLevel(logrus.DebugLevel)
case "warn":
logger.SetLevel(logrus.WarnLevel)
if err := d.Run(); err != nil {
logger.Fatalln(err)
}
return
}

localVMID, err := helper.GetDeviceLocalVMID(metadataFile)
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
d, err := driverv1.NewDriver(
ctx,
&driverv1.Options{
Endpoint: *endpoint,
Mode: driverv1.Mode(*mode),
RescanOnResize: *rescanOnResize,
XelonBaseURL: *xelonBaseURL,
XelonClientID: *xelonClientID,
XelonCloudID: *xelonCloudID,
XelonToken: *xelonToken,
},
)
if err != nil {
log.Printf("Couldn't get localVMID from Xelon device, %v\n", err)
localVMID = "unknown"
klog.ErrorS(err, "Failed to initialize driver")
os.Exit(255)
}

cloudID, err := helper.GetDeviceCloudID(metadataFile)
if err != nil {
log.Printf("Couldn't get cloudID from Xelon device (use 1 as default), %v\n", err)
cloudID = "1"
if err := d.Run(); err != nil {
klog.ErrorS(err, "Could not run driver")
os.Exit(255)
}

return logger.WithFields(logrus.Fields{
"component": driver.DefaultDriverName,
"cloud_id": cloudID,
"device": localVMID,
"service": mode,
"version": driver.GetVersion().DriverVersion,
})
}
8 changes: 0 additions & 8 deletions deploy/kubernetes/releases/xelon-csi-dev/secret.yml.tmpl

This file was deleted.

Loading

0 comments on commit 9125fbe

Please sign in to comment.