From a8fa18520c1e366052ae01dcc58db0d133e315a0 Mon Sep 17 00:00:00 2001 From: mr Date: Thu, 26 Mar 2026 11:14:29 +0100 Subject: [PATCH] prep --- conf/conf.go | 52 +--- daemons/execute_monitor_container.go | 118 ++++++-- daemons/execute_monitor_local.go | 63 +++-- daemons/execution_manager.go | 24 +- daemons/interface.go | 4 +- daemons/schedule_manager.go | 18 +- docker-compose.yml | 2 - docker_schedulerd.json | 14 +- docs/multus-docker-network.md | 121 +++++++++ exem.yaml | 0 go.mod | 5 +- go.sum | 142 +--------- main.go | 13 +- manifests/test-log_manifest.yaml | 16 -- pod.json | 393 +++++++++++++++++++++++++++ schedulerd.json | 6 +- 16 files changed, 730 insertions(+), 261 deletions(-) create mode 100644 docs/multus-docker-network.md create mode 100644 exem.yaml delete mode 100644 manifests/test-log_manifest.yaml create mode 100644 pod.json diff --git a/conf/conf.go b/conf/conf.go index 30212f9..1ca1e50 100644 --- a/conf/conf.go +++ b/conf/conf.go @@ -2,21 +2,23 @@ package conf import ( "sync" - - "github.com/beego/beego/logs" - "github.com/goraz/onion" ) type Config struct { - MonitorPath string - Logs string - KubeHost string - KubePort string - KubeCA string - KubeCert string - KubeData string - KubeNamespace string - KubeImage string + MonitorPath string + Logs string + Mode string + KubeHost string + KubePort string + KubeCA string + KubeCert string + KubeData string + KubeNamespace string + KubeImage string + // PrepLeadSeconds is how many seconds before the scheduled start oc-monitord + // is launched so it can complete pre-pull + infra setup before the actual + // execution time. Default: 120s (2 min). + PrepLeadSeconds int } var instance *Config @@ -24,32 +26,6 @@ var once sync.Once const defaultConfigFile = "/etc/oc/schedulerd.json" -func init() { - configFile := "" - var o *onion.Onion - - l3 := onion.NewEnvLayerPrefix("_", "OCSCHEDULERD_") - l2, err := onion.NewFileLayer(defaultConfigFile, nil) - if err == nil { - logs.Info("Config file found : " + defaultConfigFile) - configFile = defaultConfigFile - } - if configFile == "" || l2 == nil { - logs.Info("No config file found, using env") - o = onion.New(l3) - } else { - o = onion.New(l2, l3) - } - GetConfig().MonitorPath = o.GetStringDefault("MONITORD_PATH", "../oc-monitord/oc-monitord") - GetConfig().KubeHost = o.GetStringDefault("KUBE_HOST", "") - GetConfig().KubePort = o.GetStringDefault("KUBE_PORT", "6443") - GetConfig().KubeCA = o.GetStringDefault("KUBE_CA", "") - GetConfig().KubeCert = o.GetStringDefault("KUBE_CERT", "") - GetConfig().KubeData = o.GetStringDefault("KUBE_DATA", "") - GetConfig().KubeNamespace = o.GetStringDefault("KUBE_NAMESPACE", "default") - GetConfig().KubeImage = o.GetStringDefault("KUBE_IMAGE", "oc-monitord") -} - func GetConfig() *Config { once.Do(func() { instance = &Config{} diff --git a/daemons/execute_monitor_container.go b/daemons/execute_monitor_container.go index 837d1f0..ee416a7 100644 --- a/daemons/execute_monitor_container.go +++ b/daemons/execute_monitor_container.go @@ -5,6 +5,7 @@ import ( "encoding/base64" "fmt" "oc-schedulerd/conf" + "time" // already used for ContainerMonitor.watchJob oclib "cloud.o-forge.io/core/oc-lib" "cloud.o-forge.io/core/oc-lib/models/common/enum" @@ -27,15 +28,16 @@ type ContainerMonitor struct { KubeImage string } -func NewContainerMonitor(UUID string, peerId string, duration int) Executor { +func NewContainerMonitor(UUID string, peerId string, duration int, scheduledTime time.Time) Executor { return &ContainerMonitor{ Monitor: LocalMonitor{ - ExecutionID: UUID, - PeerID: peerId, - Duration: duration, - LokiUrl: oclib.GetConfig().LokiUrl, - MongoUrl: oclib.GetConfig().MongoUrl, - DBName: oclib.GetConfig().MongoDatabase, + ExecutionID: UUID, + PeerID: peerId, + Duration: duration, + LokiUrl: oclib.GetConfig().LokiUrl, + MongoUrl: oclib.GetConfig().MongoUrl, + DBName: oclib.GetConfig().MongoDatabase, + ScheduledTime: scheduledTime, }, KubeCA: conf.GetConfig().KubeCA, KubeCert: conf.GetConfig().KubeCert, @@ -48,13 +50,9 @@ func NewContainerMonitor(UUID string, peerId string, duration int) Executor { } func (cm *ContainerMonitor) PrepareMonitorExec() []string { - args := []string{ "-e", cm.Monitor.ExecutionID, "-p", cm.Monitor.PeerID, - "-u", cm.Monitor.LokiUrl, - "-m", cm.Monitor.MongoUrl, - "-d", cm.Monitor.DBName, "-M", "kubernetes", "-H", cm.KubeHost, "-P", cm.KubePort, @@ -77,7 +75,7 @@ func (cm *ContainerMonitor) failExec(execID string, l zerolog.Logger, msg string }, execID) } -func (cm *ContainerMonitor) LaunchMonitor(args []string, execID string, l zerolog.Logger) { +func (cm *ContainerMonitor) LaunchMonitor(args []string, execID string, ns string, l zerolog.Logger) { ca, err := base64.StdEncoding.DecodeString(cm.KubeCA) if err != nil { @@ -104,6 +102,8 @@ func (cm *ContainerMonitor) LaunchMonitor(args []string, execID string, l zerolo }, } + fmt.Println(ca, cert, key) + clientset, err := kubernetes.NewForConfig(cfg) if err != nil { cm.failExec(execID, l, "Failed to build Kubernetes client: "+err.Error()) @@ -111,21 +111,33 @@ func (cm *ContainerMonitor) LaunchMonitor(args []string, execID string, l zerolo } backoffLimit := int32(0) + l.Info().Str("mongo_url", oclib.GetConfig().MongoUrl).Msg("Env vars for job") job := &batchv1.Job{ ObjectMeta: metav1.ObjectMeta{ Name: "oc-monitord-" + execID, - Namespace: cm.KubeNamespace, + Namespace: ns, }, Spec: batchv1.JobSpec{ BackoffLimit: &backoffLimit, Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "k8s.v1.cni.cncf.io/networks": "docker-oc-network", + }, + }, Spec: corev1.PodSpec{ RestartPolicy: corev1.RestartPolicyNever, Containers: []corev1.Container{ { - Name: "oc-monitord", - Image: cm.KubeImage, - Args: args, + Name: "oc-monitord", + Image: cm.KubeImage, + Args: args, + Env: []corev1.EnvVar{ + {Name: "OC_MONGO_URL", Value: oclib.GetConfig().MongoUrl}, + {Name: "OC_MONGO_DATABASE", Value: oclib.GetConfig().MongoDatabase}, + {Name: "OC_LOKI_URL", Value: oclib.GetConfig().LokiUrl}, + {Name: "OC_NATS_URL", Value: oclib.GetConfig().NATSUrl}, + }, }, }, }, @@ -133,11 +145,81 @@ func (cm *ContainerMonitor) LaunchMonitor(args []string, execID string, l zerolo }, } - _, err = clientset.BatchV1().Jobs(cm.KubeNamespace).Create(context.Background(), job, metav1.CreateOptions{}) + _, err = clientset.BatchV1().Jobs(ns).Create(context.Background(), job, metav1.CreateOptions{}) if err != nil { + fmt.Println("Failed to create Kubernetes Job: ", err) cm.failExec(execID, l, "Failed to create Kubernetes Job: "+err.Error()) return } - l.Info().Msg("Started Kubernetes Job oc-monitord-" + execID) + l.Info().Str("job", "oc-monitord-"+execID).Msg("Kubernetes Job created") + go cm.watchJob(clientset, execID, ns, l) +} + +func (cm *ContainerMonitor) watchJob(clientset *kubernetes.Clientset, execID string, ns string, l zerolog.Logger) { + jobName := "oc-monitord-" + execID + l = l.With().Str("job", jobName).Logger() + + // Poll until the pod spawned by the job appears (up to 60s) + podName := "" + for i := 0; i < 60; i++ { + pods, err := clientset.CoreV1().Pods(ns).List(context.Background(), metav1.ListOptions{ + LabelSelector: "job-name=" + jobName, + }) + if err != nil { + l.Error().Err(err).Msg("Failed to list pods for job") + return + } + if len(pods.Items) > 0 { + podName = pods.Items[0].Name + break + } + time.Sleep(time.Second) + } + + if podName == "" { + l.Error().Msg("No pod found for job after 60s") + return + } + + l.Info().Str("pod", podName).Msg("Pod found for job") + + // Wait for the pod to be Running or terminal (up to 120s) + for i := 0; i < 120; i++ { + pod, err := clientset.CoreV1().Pods(ns).Get(context.Background(), podName, metav1.GetOptions{}) + if err != nil { + l.Error().Err(err).Str("pod", podName).Msg("Failed to get pod status") + return + } + phase := pod.Status.Phase + if phase == corev1.PodRunning || phase == corev1.PodSucceeded || phase == corev1.PodFailed { + l.Info().Str("pod", podName).Str("phase", string(phase)).Msg("Pod phase") + break + } + time.Sleep(time.Second) + } + + // Stream pod logs + req := clientset.CoreV1().Pods(ns).GetLogs(podName, &corev1.PodLogOptions{Follow: true}) + stream, err := req.Stream(context.Background()) + if err != nil { + l.Error().Err(err).Str("pod", podName).Msg("Failed to stream pod logs") + } else { + defer stream.Close() + l.Info().Str("pod", podName).Msg("Streaming pod logs") + logExecution(stream, l) + } + + // Log final job status + job, err := clientset.BatchV1().Jobs(ns).Get(context.Background(), jobName, metav1.GetOptions{}) + if err != nil { + l.Error().Err(err).Msg("Failed to get final job status") + return + } + if job.Status.Succeeded > 0 { + l.Info().Msg("Job succeeded") + } else { + msg := fmt.Sprintf("Job failed with %d failed pod(s)", job.Status.Failed) + cm.failExec(execID, l, msg) + } } diff --git a/daemons/execute_monitor_local.go b/daemons/execute_monitor_local.go index b8b84ef..8e1a916 100644 --- a/daemons/execute_monitor_local.go +++ b/daemons/execute_monitor_local.go @@ -3,7 +3,9 @@ package daemons import ( "fmt" "oc-schedulerd/conf" + "os" "os/exec" + "time" oclib "cloud.o-forge.io/core/oc-lib" "cloud.o-forge.io/core/oc-lib/models/common/enum" @@ -11,22 +13,21 @@ import ( ) type LocalMonitor struct { - ExecutionID string - PeerID string - Duration int - LokiUrl string - MongoUrl string - DBName string + ExecutionID string + PeerID string + Duration int + LokiUrl string + MongoUrl string + DBName string + ScheduledTime time.Time } -func NewLocalMonitor(UUID string, peerId string, duration int) Executor { +func NewLocalMonitor(UUID string, peerId string, duration int, scheduledTime time.Time) Executor { return &LocalMonitor{ - ExecutionID: UUID, - PeerID: peerId, - Duration: duration, - LokiUrl: oclib.GetConfig().LokiUrl, - MongoUrl: oclib.GetConfig().MongoUrl, - DBName: oclib.GetConfig().MongoDatabase, + ExecutionID: UUID, + PeerID: peerId, + Duration: duration, + ScheduledTime: scheduledTime, } } @@ -42,11 +43,12 @@ func (lm *LocalMonitor) PrepareMonitorExec() []string { args := []string{ "-e", lm.ExecutionID, "-p", lm.PeerID, - "-u", lm.LokiUrl, - "-m", lm.MongoUrl, - "-d", lm.DBName, + "-H", conf.GetConfig().KubeHost, + "-c", conf.GetConfig().KubeCA, + "-C", conf.GetConfig().KubeCert, + "-D", conf.GetConfig().KubeData, + "-s", fmt.Sprintf("%d", lm.ScheduledTime.Unix()), } - if lm.Duration > 0 { args = append(args, "-t", fmt.Sprintf("%d", lm.Duration)) } @@ -54,13 +56,29 @@ func (lm *LocalMonitor) PrepareMonitorExec() []string { return args } -func (lm *LocalMonitor) LaunchMonitor(args []string, execID string, l zerolog.Logger) { +func (lm *LocalMonitor) LaunchMonitor(args []string, execID string, ns string, l zerolog.Logger) { cmd := exec.Command(conf.GetConfig().MonitorPath, args...) - fmt.Printf("Command : %v\n", cmd) + cmd.Env = append(os.Environ(), + "OC_MONGO_URL="+oclib.GetConfig().MongoUrl, + "OC_MONGO_DATABASE="+oclib.GetConfig().MongoDatabase, + "OC_LOKI_URL="+oclib.GetConfig().LokiUrl, + "OC_NATS_URL="+oclib.GetConfig().NATSUrl, + ) + fmt.Println("LaunchMonitor LOCAL") + l.Info().Str("binary", conf.GetConfig().MonitorPath).Strs("args", args).Msg("Starting oc-monitord") stdoutMonitord, err := cmd.StdoutPipe() if err != nil { - l.Error().Msg("Could not retrieve stdoutpipe for execution of oc-monitord" + err.Error()) + l.Error().Err(err).Msg("Could not retrieve stdout pipe for oc-monitord") + oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.WORKFLOW_EXECUTION), nil).UpdateOne(map[string]interface{}{ + "state": enum.FAILURE.EnumIndex(), + }, execID) + return + } + + stderrMonitord, err := cmd.StderrPipe() + if err != nil { + l.Error().Err(err).Msg("Could not retrieve stderr pipe for oc-monitord") oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.WORKFLOW_EXECUTION), nil).UpdateOne(map[string]interface{}{ "state": enum.FAILURE.EnumIndex(), }, execID) @@ -69,11 +87,14 @@ func (lm *LocalMonitor) LaunchMonitor(args []string, execID string, l zerolog.Lo err = cmd.Start() if err != nil { - l.Error().Msg("Could not start oc-monitor for " + lm.ExecutionID + " : " + err.Error()) + l.Error().Err(err).Str("execution", lm.ExecutionID).Msg("Could not start oc-monitord") oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.WORKFLOW_EXECUTION), nil).UpdateOne(map[string]interface{}{ "state": enum.FAILURE.EnumIndex(), }, execID) return } + + l.Info().Int("pid", cmd.Process.Pid).Msg("oc-monitord started") + go logExecution(stderrMonitord, l) logExecution(stdoutMonitord, l) } diff --git a/daemons/execution_manager.go b/daemons/execution_manager.go index e79e656..14ac5f3 100644 --- a/daemons/execution_manager.go +++ b/daemons/execution_manager.go @@ -1,8 +1,11 @@ package daemons import ( + "fmt" "time" + "oc-schedulerd/conf" + oclib "cloud.o-forge.io/core/oc-lib" "cloud.o-forge.io/core/oc-lib/dbs" "cloud.o-forge.io/core/oc-lib/models/common/enum" @@ -34,12 +37,21 @@ func (em *ExecutionManager) RetrieveNextExecutions() { continue } + lead := time.Duration(conf.GetConfig().PrepLeadSeconds) * time.Second for execId, exec := range orderedExec[i] { if i == 0 && em.isAStartingExecutionBeforeEnd(&exec) { // BEST EFFORT exception continue } - if exec.ExecDate.Before(time.Now().UTC()) { - logger.Info().Msg("Will execute " + execId + " soon") + // Fire PrepLeadSeconds before the scheduled start so oc-monitord + // has time to pre-pull images and set up infra before ExecDate. + if exec.ExecDate.Before(time.Now().UTC().Add(lead)) { + logger.Info().Msg(fmt.Sprintf("Launching prep for %s (scheduled %s, lead %s)", + execId, exec.ExecDate.Format(time.RFC3339), lead)) + // Mark as STARTED immediately (before goroutine) so the next + // SchedulePolling cycle doesn't re-pick this execution from DB. + oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.WORKFLOW_EXECUTION), nil).UpdateOne(map[string]interface{}{ + "state": enum.STARTED.EnumIndex(), + }, exec.GetID()) go em.executeExecution(&exec) delete(executions, execId) } @@ -78,7 +90,11 @@ func (em *ExecutionManager) executeExecution(execution *workflow_execution.Workf duration = int(execution.EndDate.Sub(execution.ExecDate).Seconds()) } - executor = NewContainerMonitor(execution.UUID, execution.CreatorID, duration) + if conf.GetConfig().Mode == "kubernetes" { + executor = NewContainerMonitor(execution.UUID, execution.CreatorID, duration, execution.ExecDate) + } else { + executor = NewLocalMonitor(execution.UUID, execution.CreatorID, duration, execution.ExecDate) + } if executor == nil { logger.Fatal().Msg("Could not create executor") @@ -89,5 +105,5 @@ func (em *ExecutionManager) executeExecution(execution *workflow_execution.Workf } args := executor.PrepareMonitorExec() - executor.LaunchMonitor(args, execution.GetID(), logger) + executor.LaunchMonitor(args, execution.GetID(), conf.GetConfig().KubeNamespace, logger) } diff --git a/daemons/interface.go b/daemons/interface.go index 7172002..ab25580 100644 --- a/daemons/interface.go +++ b/daemons/interface.go @@ -2,6 +2,7 @@ package daemons import ( "bufio" + "fmt" "io" "github.com/rs/zerolog" @@ -9,13 +10,14 @@ import ( type Executor interface { PrepareMonitorExec() []string - LaunchMonitor(args []string, execID string, l zerolog.Logger) + LaunchMonitor(args []string, execID string, ns string, l zerolog.Logger) } func logExecution(reader io.ReadCloser, l zerolog.Logger) { scanner := bufio.NewScanner(reader) for scanner.Scan() { output := scanner.Text() + fmt.Println(output) l.Debug().Msg(output) } } diff --git a/daemons/schedule_manager.go b/daemons/schedule_manager.go index 87a7c99..4ea62af 100644 --- a/daemons/schedule_manager.go +++ b/daemons/schedule_manager.go @@ -6,6 +6,8 @@ import ( "sync" "time" + "oc-schedulerd/conf" + oclib "cloud.o-forge.io/core/oc-lib" "cloud.o-forge.io/core/oc-lib/dbs" "cloud.o-forge.io/core/oc-lib/models/common/enum" @@ -122,14 +124,14 @@ func (s *ScheduleManager) ExecuteWorkflow(resp tools.NATSResponse) { func (s *ScheduleManager) GetNextScheduledWorkflows(_ tools.NATSResponse) { start := time.Now().UTC() - fmt.Println(s.getExecution( - start.Add(time.Second*time.Duration(-1)).UTC(), - start.Add(time.Minute*time.Duration(1)).UTC(), - )) - if next_wf_exec, err := s.getExecution( - start.Add(time.Second*time.Duration(-1)).UTC(), - start.Add(time.Minute*time.Duration(1)).UTC(), - ); err != nil { + // Fetch executions whose scheduled start falls within the next + // (PrepLeadSeconds + 60s) window, so they are loaded in time to + // trigger oc-monitord PrepLeadSeconds before the actual start. + horizon := time.Duration(conf.GetConfig().PrepLeadSeconds+60) * time.Second + from := start.Add(-time.Second) + to := start.Add(horizon) + fmt.Println(s.getExecution(from, to)) + if next_wf_exec, err := s.getExecution(from, to); err != nil { s.Logger.Error().Msg("Could not retrieve next schedules") } else { Executions.AddSchedules(next_wf_exec, s.Logger) diff --git a/docker-compose.yml b/docker-compose.yml index 265a7eb..aa6b511 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,8 +7,6 @@ services: required: false environment: - MONGO_DATABASE=DC_myDC - - KUBE_CA=${KUBE_CA:-LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJWUxWNkFPQkdrU1F3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOekl6TVRFeU1ETTJNQjRYRFRJME1EZ3dPREV3TVRNMU5sb1hEVEkxTURndwpPREV3TVRNMU5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJGQ2Q1MFdPeWdlQ2syQzcKV2FrOWY4MVAvSkJieVRIajRWOXBsTEo0ck5HeHFtSjJOb2xROFYxdUx5RjBtOTQ2Nkc0RmRDQ2dqaXFVSk92Swp3NVRPNnd5alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVFJkOFI5cXVWK2pjeUVmL0ovT1hQSzMyS09XekFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQTArbThqTDBJVldvUTZ0dnB4cFo4NVlMalF1SmpwdXM0aDdnSXRxS3NmUVVDSUI2M2ZNdzFBMm5OVWU1TgpIUGZOcEQwSEtwcVN0Wnk4djIyVzliYlJUNklZCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTWpNeE1USXdNell3SGhjTk1qUXdPREE0TVRBeE16VTJXaGNOTXpRd09EQTJNVEF4TXpVMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTWpNeE1USXdNell3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRc3hXWk9pbnIrcVp4TmFEQjVGMGsvTDF5cE01VHAxOFRaeU92ektJazQKRTFsZWVqUm9STW0zNmhPeVljbnN3d3JoNnhSUnBpMW5RdGhyMzg0S0Z6MlBvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTBYZkVmYXJsZm8zTWhIL3lmemx6Cnl0OWlqbHN3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUxJL2dNYnNMT3MvUUpJa3U2WHVpRVMwTEE2cEJHMXgKcnBlTnpGdlZOekZsQWlFQW1wdjBubjZqN3M0MVI0QzFNMEpSL0djNE53MHdldlFmZWdEVGF1R2p3cFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K} - - KUBE_TOKEN=${KUBE_TOKEN:-LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU5ZS1BFb1dhd1NKUzJlRW5oWmlYMk5VZlY1ZlhKV2krSVNnV09TNFE5VTlvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVUozblJZN0tCNEtUWUx0WnFUMS96VS84a0Z2Sk1lUGhYMm1Vc25pczBiR3FZblkyaVZEeApYVzR2SVhTYjNqcm9iZ1YwSUtDT0twUWs2OHJEbE03ckRBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=} image: 'oc-schedulerd:latest' ports: - 9001:8080 diff --git a/docker_schedulerd.json b/docker_schedulerd.json index 1e7c9d7..036e4b2 100644 --- a/docker_schedulerd.json +++ b/docker_schedulerd.json @@ -1,11 +1,15 @@ { "LOKI_URL" : "http://loki:3100", - "MONGO_URL":"mongodb://mongo:27017/", + "MONGO_URL":"mongodb://mongo:27017/", "NATS_URL":"nats://nats:4222", "MONGO_DATABASE":"DC_myDC", "MONITORD_PATH": "oc-monitord", - "MODE": "kubernetes", - "KUBE_CA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTkRNMk56UTNPRGt3SGhjTk1qVXdOREF6TVRBd05qSTVXaGNOTXpVd05EQXhNVEF3TmpJNQpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTkRNMk56UTNPRGt3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUL1NDWEMycjFTWGdza0FvTGJKSEtIem4zQXYva2t0ZElpSk42WlBsWVEKY3p0dXV5K3JBMHJ5VUlkZnIyK3VCRS9VN0NjSlhPL004QVdyODFwVklzVmdvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVFHOVBQQ0g0c1lMbFkvQk5CdnN5CklEam1PK0l3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUtJeFc4NERQTW1URXVVN0Z3ek44SFB6ZHdldWh6U20KVzNYMU9tczFSQVNRQWlFQXI4UTJZSGtNQndSOThhcWtTa2JqU1dhejg0OEY2VkZLWjFacXpNbDFZaTg9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "KUBE_CERT": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJZWFxQUp2bHhmYzh3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOelF6TmpjME56ZzVNQjRYRFRJMU1EUXdNekV3TURZeU9Wb1hEVEkyTURRdwpNekV3TURZeU9Wb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJJelpGSlJUVHJmYXlNNFoKTjlRclN4MC9wbDdoZGdvWFM5bGEydmFFRkhlYVFaalRML2NZd1dMUnhoOWVOa01SRDZjTk4reWZkSXE2aWo1SQo5RTlENGdLalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVFFzUkZXUlNweDV0RGZnZDh1UTdweUw0ZERMVEFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQStXZTlBVXJRUm5pWjVCUERELzJwWjA3TzFQWWFIc01ycTZZcVB4VlV5cGdDSUhrRE8rcVlMYUhkUEhXZgpWUGszNXJmejM0Qk4xN2VyaEVxRjF0U0c1MWFqCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTkRNMk56UTNPRGt3SGhjTk1qVXdOREF6TVRBd05qSTVXaGNOTXpVd05EQXhNVEF3TmpJNQpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTkRNMk56UTNPRGt3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUNDF1NXIzM0JyenZ3ZXZaWHM2TEg3T1k4NGhOOGRrODdnTlhaUndBdWkKdXJBaU45TFdYcmYxeFoyaXp5d0FiVGk1ZVc2Q1hIMjhDdEVSWUlrcjNoTXdvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTBMRVJWa1VxY2ViUTM0SGZMa082CmNpK0hReTB3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUpLWGZLdXBzdklONEtQVW50c1lPNXhiaGhSQmhSYlIKN3JyeWs2VHpZMU5JQWlBVktKWis3UUxzeGFyQktORnI3eTVYYlNGanI3Y1gyQmhOYy9wdnFLcWtFUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "KUBE_DATA": "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVJd01wVjdzMHc2S0VTQ2FBWDhvSVZPUHloa2U0Q3duNWZQZnhOaUYyM3JvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFak5rVWxGTk90OXJJemhrMzFDdExIVCttWHVGMkNoZEwyVnJhOW9RVWQ1cEJtTk12OXhqQgpZdEhHSDE0MlF4RVBwdzAzN0o5MGlycUtQa2owVDBQaUFnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=" + "MODE": "local", + "KUBERNETES_SERVICE_HOST": "kubernetes.default.svc.cluster.local", + "KUBERNETES_SERVICE_PORT": "6443", + "KUBERNETES_NAMESPACE": "default", + "KUBERNETES_IMAGE": "opencloudregistry/oc-monitord", + "KUBE_CA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTnpReU56STVNVEF3SGhjTk1qWXdNekl6TVRNek5URXdXaGNOTXpZd016SXdNVE16TlRFdwpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTnpReU56STVNVEF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSSGpYRDVpbnRIYWZWSk5VaDFlRnIxcXBKdFlkUmc5NStKVENEa0tadTIKYjUxRXlKaG1zanRIY3BDUndGL1VGMzlvdzY4TFBUcjBxaUorUHlhQTBLZUtvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTdWQkNzZVN3ajJ2cmczMFE5UG8vCnV6ZzAvMjR3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUlEOVY2aFlUSS83ZW1hRzU0dDdDWVU3TXFSdDdESUkKNlgvSUwrQ0RLbzlNQWlCdlFEMGJmT0tVWDc4UmRGdUplcEhEdWFUMUExaGkxcWdIUGduM1dZdDBxUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KUBE_CERT": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJUU5KbFNJQUJPMDR3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemMwTWpjeU9URXdNQjRYRFRJMk1ETXlNekV6TXpVeE1Gb1hEVEkzTURNeQpNekV6TXpVeE1Gb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJMY3Uwb2pUbVg4RFhTQkYKSHZwZDZNVEoyTHdXc1lRTmdZVURXRDhTVERIUWlCczlMZ0x5ZTdOMEFvZk85RkNZVW1HamhiaVd3WFVHR3dGTgpUdlRMU2lXalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCUlJhRW9wQzc5NGJyTHlnR0g5SVhvbDZTSmlFREFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQWhaRUlrSWV3Y1loL1NmTFVCVjE5MW1CYTNRK0J5S2J5eTVlQmpwL3kzeWtDSUIxWTJicTVOZTNLUUU4RAprNnNzeFJrbjJmN0VoWWVRQU1pUlJ2MjIweDNLCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTnpReU56STVNVEF3SGhjTk1qWXdNekl6TVRNek5URXdXaGNOTXpZd016SXdNVE16TlRFdwpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTnpReU56STVNVEF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTcTdVTC85MEc1ZmVTaE95NjI3eGFZWlM5dHhFdWFoWFQ3Vk5wZkpQSnMKaEdXd2UxOXdtbXZzdlp6dlNPUWFRSzJaMmttN0hSb1IrNlA1YjIyamczbHVvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVVXaEtLUXUvZUc2eThvQmgvU0Y2Ckpla2lZaEF3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUk3cGxHczFtV20ySDErbjRobDBNTk13RmZzd0o5ZXIKTzRGVkM0QzhwRG44QWlCN3NZMVFwd2M5VkRUeGNZaGxuZzZNUzRXai85K0lHWjJxcy94UStrMjdTQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KUBE_DATA": "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUROZDRnWXd6aVRhK1hwNnFtNVc3SHFzc1JJNkREaUJTbUV2ZHoxZzk3VGxvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFdHk3U2lOT1pmd05kSUVVZStsM294TW5ZdkJheGhBMkJoUU5ZUHhKTU1kQ0lHejB1QXZKNwpzM1FDaDg3MFVKaFNZYU9GdUpiQmRRWWJBVTFPOU10S0pRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=" } diff --git a/docs/multus-docker-network.md b/docs/multus-docker-network.md new file mode 100644 index 0000000..1781f7c --- /dev/null +++ b/docs/multus-docker-network.md @@ -0,0 +1,121 @@ +# Connecter un pod Kubernetes au réseau Docker `oc` via Multus CNI + +## Contexte + +Le schedulerd tourne dans le réseau Docker `oc` avec accès à mongo, loki, nats et consul. +Les jobs Kubernetes (`oc-monitord`) lancés par le schedulerd n'ont pas accès à ce réseau par défaut. + +Multus CNI permet d'attacher une seconde interface réseau au pod, branchée directement sur le bridge Docker `oc`. + +--- + +## Étape 1 — Récupérer les infos du réseau Docker `oc` + +```bash +# Nom du bridge sur l'hôte (les 12 premiers caractères de l'ID) +docker network inspect oc --format '{{.Id}}' | cut -c1-12 +# → ex: a1b2c3d4e5f6 → bridge = br-a1b2c3d4e5f6 + +# Subnet +docker network inspect oc --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}' +# → ex: 172.20.0.0/16 + +# Gateway +docker network inspect oc --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}' +# → ex: 172.20.0.1 +``` + +--- + +## Étape 2 — Installer Multus + +```bash +kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset.yml +``` + +Attendre que les pods soient ready : + +```bash +kubectl -n kube-system wait --for=condition=ready pod -l app=multus --timeout=60s +``` + +--- + +## Étape 3 — Créer la NetworkAttachmentDefinition + +Remplacer `br-xxxxxxxxxxxx`, le subnet et la gateway par les valeurs récupérées à l'étape 1. + +```yaml +# oc-network-attachment.yaml +apiVersion: k8s.cni.cncf.io/v1 +kind: NetworkAttachmentDefinition +metadata: + name: docker-oc-network + namespace: default +spec: + config: '{ + "cniVersion": "0.3.1", + "type": "bridge", + "bridge": "br-xxxxxxxxxxxx", + "isGateway": false, + "ipMasq": false, + "ipam": { + "type": "host-local", + "subnet": "172.20.0.0/16", + "rangeStart": "172.20.100.0", + "rangeEnd": "172.20.100.255", + "gateway": "172.20.0.1" + } + }' +``` + +> `rangeStart` / `rangeEnd` dans une plage haute pour éviter les collisions avec les IPs assignées par Docker. + +```bash +kubectl apply -f oc-network-attachment.yaml +``` + +--- + +## Étape 4 — Annoter le pod dans le code + +Dans `daemons/execute_monitor_container.go`, ajouter l'annotation sur le `PodTemplateSpec` : + +```go +Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "k8s.v1.cni.cncf.io/networks": "docker-oc-network", + }, + }, + Spec: corev1.PodSpec{ + RestartPolicy: corev1.RestartPolicyNever, + // ... + }, +}, +``` + +--- + +## Étape 5 — Vérifier + +Une fois un pod lancé : + +```bash +# Vérifier les interfaces réseau du pod +kubectl exec -- ip addr +# Doit afficher eth0 (réseau K8s) + net1 (réseau oc) + +# Tester la résolution DNS vers les services Docker +kubectl exec -- ping mongo +kubectl exec -- ping loki +kubectl exec -- ping nats +``` + +--- + +## Points d'attention + +- Le plugin CNI `bridge` doit être disponible sur le node — il l'est par défaut sur k3s. +- Le bridge Docker (`br-xxxxxxxxxxxx`) doit exister sur l'hôte au moment où le pod démarre. Si Docker redémarre, l'ID du bridge peut changer si le réseau est recréé. +- La résolution DNS des hostnames Docker (`mongo`, `loki`, etc.) depuis le pod nécessite que le pod utilise le DNS Docker (`127.0.0.11`). Si la résolution ne fonctionne pas, ajouter dans la NAD : `"dns": {"nameservers": ["127.0.0.11"]}`. diff --git a/exem.yaml b/exem.yaml new file mode 100644 index 0000000..e69de29 diff --git a/go.mod b/go.mod index fdaf733..810fbc1 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,8 @@ module oc-schedulerd go 1.25.0 require ( - cloud.o-forge.io/core/oc-lib v0.0.0-20260312104524-e28b79ac0d62 - github.com/beego/beego v1.12.12 + cloud.o-forge.io/core/oc-lib v0.0.0-20260324114937-6d0c78946e8b github.com/google/uuid v1.6.0 - github.com/goraz/onion v0.1.3 github.com/rs/zerolog v1.34.0 go.mongodb.org/mongo-driver v1.17.4 k8s.io/api v0.35.1 @@ -33,6 +31,7 @@ require ( github.com/go-playground/validator/v10 v10.27.0 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/gnostic-models v0.7.0 // indirect + github.com/goraz/onion v0.1.3 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect diff --git a/go.sum b/go.sum index 176a436..d7a5d56 100644 --- a/go.sum +++ b/go.sum @@ -1,47 +1,24 @@ -cloud.o-forge.io/core/oc-lib v0.0.0-20260212123952-403913d8cf13 h1:DNIPQ7C+7wjbj5RUx29wLxuIe/wiSOcuUMlLRIv6Fvs= -cloud.o-forge.io/core/oc-lib v0.0.0-20260212123952-403913d8cf13/go.mod h1:jmyBwmsac/4V7XPL347qawF60JsBCDmNAMfn/ySXKYo= -cloud.o-forge.io/core/oc-lib v0.0.0-20260312083310-f5e199132416 h1:QHR5pzCI/HUawu8pst5Ggio6WPCUUf8XYjNMVk8kSqo= -cloud.o-forge.io/core/oc-lib v0.0.0-20260312083310-f5e199132416/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= -cloud.o-forge.io/core/oc-lib v0.0.0-20260312104017-9645e71b540b h1:f7ATkNQhf6Mzt98aTNaRcQ+B/QMKcAtwVHsHjt7Ju5I= -cloud.o-forge.io/core/oc-lib v0.0.0-20260312104017-9645e71b540b/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= -cloud.o-forge.io/core/oc-lib v0.0.0-20260312104524-e28b79ac0d62 h1:sHzacZxPIKHyjL4EkgG/c7MI8gM1xmLdhaoUx2ZsH+M= -cloud.o-forge.io/core/oc-lib v0.0.0-20260312104524-e28b79ac0d62/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= +cloud.o-forge.io/core/oc-lib v0.0.0-20260318092831-1a37a1b4aad3 h1:bHiR0tEPRc5mN80HpC21GuXzC+CwbBp1jbMRenizrxo= +cloud.o-forge.io/core/oc-lib v0.0.0-20260318092831-1a37a1b4aad3/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= +cloud.o-forge.io/core/oc-lib v0.0.0-20260319071818-28b5b7d39ffe h1:CHiWQAX7j/bMfbytCWGL2mUgSWYoDY4+bFQbCHEfypk= +cloud.o-forge.io/core/oc-lib v0.0.0-20260319071818-28b5b7d39ffe/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= +cloud.o-forge.io/core/oc-lib v0.0.0-20260324114937-6d0c78946e8b h1:y0rppyzGIQTIyvapWwHZ8t20wMaSaMU6NoZLkMCui8w= +cloud.o-forge.io/core/oc-lib v0.0.0-20260324114937-6d0c78946e8b/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= -github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk= -github.com/beego/beego v1.12.12 h1:ARY1sNVSS23N0mEQIhSqRDTyyDlx95JY0V3GogBbZbQ= -github.com/beego/beego v1.12.12/go.mod h1:QURFL1HldOcCZAxnc1cZ7wrplsYR5dKPHFjmk6WkLAs= github.com/beego/beego/v2 v2.3.8 h1:wplhB1pF4TxR+2SS4PUej8eDoH4xGfxuHfS7wAk9VBc= github.com/beego/beego/v2 v2.3.8/go.mod h1:8vl9+RrXqvodrl9C8yivX1e6le6deCK6RWeq8R7gTTg= -github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ= -github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/biter777/countries v1.7.5 h1:MJ+n3+rSxWQdqVJU8eBy9RqcdH6ePPn4PJHocVWUa+Q= github.com/biter777/countries v1.7.5/go.mod h1:1HSpZ526mYqKJcpT5Ti1kcGQ0L0SrXWIaptUWjFfv2E= -github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= -github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/couchbase/go-couchbase v0.0.0-20201216133707-c04035124b17/go.mod h1:+/bddYDxXsf9qt0xpDUtRR47A2GjaXmGGAqQ/k3GJ8A= -github.com/couchbase/gomemcached v0.1.2-0.20201224031647-c432ccf49f32/go.mod h1:mxliKQxOv84gQ0bJWbI+w9Wxdpt9HjDvgW9MjCym5Vo= -github.com/couchbase/goutils v0.0.0-20210118111533-e33d3ffb5401/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -49,9 +26,6 @@ github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= -github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI= -github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw= github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU= @@ -62,11 +36,6 @@ github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sa github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY= github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok= -github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= @@ -85,31 +54,13 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4= github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= -github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo= github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -121,30 +72,22 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGa github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/goraz/onion v0.1.3 h1:KhyvbDA2b70gcz/d5izfwTiOH8SmrvV43AsVzpng3n0= github.com/goraz/onion v0.1.3/go.mod h1:XEmz1XoBz+wxTgWB8NwuvRm4RAu3vKxvrmYtzK+XCuQ= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg= github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -154,10 +97,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-libp2p/core v0.43.0-rc2 h1:1X1aDJNWhMfodJ/ynbaGLkgnC8f+hfBIqQDrzxFZOqI= @@ -172,8 +113,6 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -207,48 +146,27 @@ github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/n github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nats-io/nats.go v1.44.0 h1:ECKVrDLdh/kDPV1g0gAQ+2+m2KprqZK5O/eJAyAnH2M= github.com/nats-io/nats.go v1.44.0/go.mod h1:iRWIPokVIFbVijxuMQq4y9ttaBTMe0SFdlZfMDd+33g= github.com/nats-io/nkeys v0.4.11 h1:q44qGV008kYd9W1b1nEBkNzvnWxtRSQ7A8BoqRrcfa0= github.com/nats-io/nkeys v0.4.11/go.mod h1:szDimtgmfOi9n25JpfIdGw12tZFYXqhGxjhVxsatHVE= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/ogier/pflag v0.0.1/go.mod h1:zkFki7tvTa0tafRvTBIZTvzYyAu6kQhPZFnshFFPE+g= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo/v2 v2.27.2 h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns= github.com/onsi/ginkgo/v2 v2.27.2/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= -github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= -github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= @@ -256,14 +174,8 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= -github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 h1:v9ezJDHA1XGxViAUSIoO/Id7Fl63u6d0YmsAm+/p2hs= github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02/go.mod h1:RF16/A3L0xSa0oSERcnhd8Pu3IXSDZSK2gmGIMsttFE= -github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= -github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s= -github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/skarademir/naturalsort v0.0.0-20150715044055-69a5d87bef62/go.mod h1:oIdVclZaltY1Nf7OQUkg1/2jImBJ+ZfKZuDIRSwk3p0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= @@ -273,24 +185,17 @@ github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0b github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= -github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= -github.com/wendal/errors v0.0.0-20181209125328-7f31f4b264ec/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -302,7 +207,6 @@ github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gi github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU= go.mongodb.org/mongo-driver v1.17.4 h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFXVw= go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -311,10 +215,8 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= @@ -323,11 +225,8 @@ golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476/go.mod h1:3//PLf8L/X+8b4vuAf golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -335,25 +234,13 @@ golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -363,7 +250,6 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= @@ -383,33 +269,17 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/evanphx/json-patch.v4 v4.13.0 h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo= gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index 284a6e1..43307dc 100644 --- a/main.go +++ b/main.go @@ -16,12 +16,17 @@ func main() { l := oclib.GetLogger() o := oclib.GetConfLoader(appname) - conf.GetConfig().KubeHost = o.GetStringDefault("KUBERNETES_SERVICE_HOST", os.Getenv("KUBERNETES_SERVICE_HOST")) + conf.GetConfig().Mode = o.GetStringDefault("MODE", "local") + conf.GetConfig().KubeNamespace = o.GetStringDefault("KUBERNETES_NAMESPACE", "default") + conf.GetConfig().KubeImage = o.GetStringDefault("KUBERNETES_IMAGE", "opencloudregistry/oc-monitord") + conf.GetConfig().PrepLeadSeconds = o.GetIntDefault("PREP_LEAD_SECONDS", 120) + + conf.GetConfig().KubeHost = o.GetStringDefault("KUBERNETES_SERVICE_HOST", "kubernetes.default.svc.cluster.local") conf.GetConfig().KubePort = o.GetStringDefault("KUBERNETES_SERVICE_PORT", "6443") - conf.GetConfig().KubeCA = o.GetStringDefault("KUBE_CA", os.Getenv("KUBE_CA")) - conf.GetConfig().KubeCert = o.GetStringDefault("KUBE_CERT", os.Getenv("KUBE_CERT")) - conf.GetConfig().KubeData = o.GetStringDefault("KUBE_DATA", os.Getenv("KUBE_DATA")) + conf.GetConfig().KubeCA = o.GetStringDefault("KUBE_CA", "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTnpNeE1qY3dPVFl3SGhjTk1qWXdNekV3TURjeE9ERTJXaGNOTXpZd016QTNNRGN4T0RFMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTnpNeE1qY3dPVFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFReG81cXQ0MGxEekczRHJKTE1wRVBrd0ZBY1FmbC8vVE1iWjZzemMreHAKbmVzVzRTSTdXK1lWdFpRYklmV2xBMTRaazQvRFlDMHc1YlgxZU94RVVuL0pvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXBLM2pGK25IRlZSbDcwb3ZRVGZnCmZabGNQZE13Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnVnkyaUx0Y0xaYm1vTnVoVHdKbU5sWlo3RVlBYjJKNW0KSjJYbG1UbVF5a2tDSUhLbzczaDBkdEtUZTlSa0NXYTJNdStkS1FzOXRFU0tBV0x1emlnYXBHYysKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=") + conf.GetConfig().KubeCert = o.GetStringDefault("KUBE_CERT", "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrakNDQVRlZ0F3SUJBZ0lJQUkvSUg2R2Rodm93Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemN6TVRJM01EazJNQjRYRFRJMk1ETXhNREEzTVRneE5sb1hEVEkzTURNeApNREEzTVRneE5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJQTTdBVEZQSmFMMjUrdzAKUU1vZUIxV2hBRW4vWnViM0tSRERrYnowOFhwQWJ2akVpdmdnTkdpdG4wVmVsaEZHamRmNHpBT29Nd1J3M21kbgpYSGtHVDB5alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCUVZLOThaMEMxcFFyVFJSMGVLZHhIa2o0ejFJREFLQmdncWhrak9QUVFEQWdOSkFEQkcKQWlFQXZYWll6Zk9iSUtlWTRtclNsRmt4ZS80a0E4K01ieDc1UDFKRmNlRS8xdGNDSVFDNnM0ZXlZclhQYmNWSgpxZm5EamkrZ1RacGttN0tWSTZTYTlZN2FSRGFabUE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlCZURDQ0FSMmdBd0lCQWdJQkFEQUtCZ2dxaGtqT1BRUURBakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwClpXNTBMV05oUURFM056TXhNamN3T1RZd0hoY05Nall3TXpFd01EY3hPREUyV2hjTk16WXdNekEzTURjeE9ERTIKV2pBak1TRXdId1lEVlFRRERCaHJNM010WTJ4cFpXNTBMV05oUURFM056TXhNamN3T1RZd1dUQVRCZ2NxaGtqTwpQUUlCQmdncWhrak9QUU1CQndOQ0FBUzV1NGVJbStvVnV1SFI0aTZIOU1kVzlyUHdJbFVPNFhIMEJWaDRUTGNlCkNkMnRBbFVXUW5FakxMdlpDWlVaYTlzTlhKOUVtWWt5S0dtQWR2TE9FbUVrbzBJd1FEQU9CZ05WSFE4QkFmOEUKQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVGU3ZmR2RBdGFVSzAwVWRIaW5jUgo1SStNOVNBd0NnWUlLb1pJemowRUF3SURTUUF3UmdJaEFMY2xtQnR4TnpSVlBvV2hoVEVKSkM1Z3VNSGsvcFZpCjFvYXJ2UVJxTWRKcUFpRUEyR1dNTzlhZFFYTEQwbFZKdHZMVkc1M3I0M0lxMHpEUUQwbTExMVZyL1MwPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==") + conf.GetConfig().KubeData = o.GetStringDefault("KUBE_DATA", "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVkSTRZN3lRU1ZwRGNrblhsQmJEaXBWZHRMWEVsYVBkN3VBZHdBWFFya2xvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFOHpzQk1VOGxvdmJuN0RSQXloNEhWYUVBU2Y5bTV2Y3BFTU9SdlBUeGVrQnUrTVNLK0NBMAphSzJmUlY2V0VVYU4xL2pNQTZnekJIRGVaMmRjZVFaUFRBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=") // Test if oc-monitor binary is reachable // For local executions diff --git a/manifests/test-log_manifest.yaml b/manifests/test-log_manifest.yaml deleted file mode 100644 index b8054ec..0000000 --- a/manifests/test-log_manifest.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: test-monitor -spec: - containers: - - name: "oc-workflow-prous-skintris" - image: docker.io/library/oc-monitor # Currently uses the local contenaird - imagePullPolicy: IfNotPresent # This should be removed once a registry has been set up - env: - - name: "OCMONITOR_ARGOFILE" - value: "prous-skintris_29_07_2024_164008.yml" - - name: "OCMONITOR_LOKIURL" - value: "info" # !!!! In dev this must be replaced with the address of one of your interface (wifi, ethernet..) - restartPolicy: OnFailure - diff --git a/pod.json b/pod.json new file mode 100644 index 0000000..1aff630 --- /dev/null +++ b/pod.json @@ -0,0 +1,393 @@ +{ + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "annotations": { + "kubectl.kubernetes.io/default-container": "main", + "multicluster.admiralty.io/clustername": "target-b87318c9-f5f8-44bb-8d48-913f4ddd6c31-3a8fc42e-def2", + "multicluster.admiralty.io/elect": "", + "multicluster.admiralty.io/sourcepod-manifest": "apiVersion: v1\nkind: Pod\nmetadata:\n annotations:\n kubectl.kubernetes.io/default-container: main\n multicluster.admiralty.io/clustername: target-b87318c9-f5f8-44bb-8d48-913f4ddd6c31-3a8fc42e-def2\n multicluster.admiralty.io/elect: \"\"\n workflows.argoproj.io/node-id: oc-monitor-noner-unnogic-1230756611\n workflows.argoproj.io/node-name: oc-monitor-noner-unnogic.curl-7442fa17-ef9a-4654-9aff-770feed387a4\n creationTimestamp: null\n labels:\n workflows.argoproj.io/completed: \"false\"\n workflows.argoproj.io/workflow: oc-monitor-noner-unnogic\n managedFields:\n - apiVersion: v1\n fieldsType: FieldsV1\n fieldsV1:\n f:metadata:\n f:annotations:\n .: {}\n f:kubectl.kubernetes.io/default-container: {}\n f:multicluster.admiralty.io/clustername: {}\n f:multicluster.admiralty.io/elect: {}\n f:workflows.argoproj.io/node-id: {}\n f:workflows.argoproj.io/node-name: {}\n f:labels:\n .: {}\n f:workflows.argoproj.io/completed: {}\n f:workflows.argoproj.io/workflow: {}\n f:ownerReferences:\n .: {}\n k:{\"uid\":\"d732d336-1d5a-4cea-8e7f-d89fa4f66e94\"}: {}\n f:spec:\n f:activeDeadlineSeconds: {}\n f:containers:\n k:{\"name\":\"main\"}:\n .: {}\n f:args: {}\n f:command: {}\n f:env:\n .: {}\n k:{\"name\":\"ARGO_CONTAINER_NAME\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_DEADLINE\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_INCLUDE_SCRIPT_OUTPUT\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_NODE_ID\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_PROGRESS_FILE\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_PROGRESS_FILE_TICK_DURATION\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_PROGRESS_PATCH_TICK_DURATION\"}:\n .: {}\n f:name: {}\n f:value: {}\n f:image: {}\n f:imagePullPolicy: {}\n f:name: {}\n f:resources: {}\n f:terminationMessagePath: {}\n f:terminationMessagePolicy: {}\n f:volumeMounts:\n .: {}\n k:{\"mountPath\":\"/mnt/vol\"}:\n .: {}\n f:mountPath: {}\n f:name: {}\n k:{\"mountPath\":\"/var/run/argo\"}:\n .: {}\n f:mountPath: {}\n f:name: {}\n k:{\"name\":\"wait\"}:\n .: {}\n f:command: {}\n f:env:\n .: {}\n k:{\"name\":\"ARGO_CONTAINER_NAME\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_DEADLINE\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_INCLUDE_SCRIPT_OUTPUT\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_NODE_ID\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_POD_NAME\"}:\n .: {}\n f:name: {}\n f:valueFrom:\n .: {}\n f:fieldRef: {}\n k:{\"name\":\"ARGO_POD_UID\"}:\n .: {}\n f:name: {}\n f:valueFrom:\n .: {}\n f:fieldRef: {}\n k:{\"name\":\"ARGO_PROGRESS_FILE\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_PROGRESS_FILE_TICK_DURATION\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_PROGRESS_PATCH_TICK_DURATION\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_WORKFLOW_NAME\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_WORKFLOW_UID\"}:\n .: {}\n f:name: {}\n f:value: {}\n f:image: {}\n f:imagePullPolicy: {}\n f:name: {}\n f:resources: {}\n f:terminationMessagePath: {}\n f:terminationMessagePolicy: {}\n f:volumeMounts:\n .: {}\n k:{\"mountPath\":\"/mainctrfs/mnt/vol\"}:\n .: {}\n f:mountPath: {}\n f:name: {}\n k:{\"mountPath\":\"/tmp\"}:\n .: {}\n f:mountPath: {}\n f:name: {}\n f:subPath: {}\n k:{\"mountPath\":\"/var/run/argo\"}:\n .: {}\n f:mountPath: {}\n f:name: {}\n f:dnsPolicy: {}\n f:enableServiceLinks: {}\n f:initContainers:\n .: {}\n k:{\"name\":\"init\"}:\n .: {}\n f:command: {}\n f:env:\n .: {}\n k:{\"name\":\"ARGO_CONTAINER_NAME\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_DEADLINE\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_INCLUDE_SCRIPT_OUTPUT\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_NODE_ID\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_POD_NAME\"}:\n .: {}\n f:name: {}\n f:valueFrom:\n .: {}\n f:fieldRef: {}\n k:{\"name\":\"ARGO_POD_UID\"}:\n .: {}\n f:name: {}\n f:valueFrom:\n .: {}\n f:fieldRef: {}\n k:{\"name\":\"ARGO_PROGRESS_FILE\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_PROGRESS_FILE_TICK_DURATION\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_PROGRESS_PATCH_TICK_DURATION\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_TEMPLATE\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_WORKFLOW_NAME\"}:\n .: {}\n f:name: {}\n f:value: {}\n k:{\"name\":\"ARGO_WORKFLOW_UID\"}:\n .: {}\n f:name: {}\n f:value: {}\n f:image: {}\n f:imagePullPolicy: {}\n f:name: {}\n f:resources: {}\n f:terminationMessagePath: {}\n f:terminationMessagePolicy: {}\n f:volumeMounts:\n .: {}\n k:{\"mountPath\":\"/var/run/argo\"}:\n .: {}\n f:mountPath: {}\n f:name: {}\n f:restartPolicy: {}\n f:schedulerName: {}\n f:securityContext: {}\n f:serviceAccount: {}\n f:serviceAccountName: {}\n f:terminationGracePeriodSeconds: {}\n f:volumes:\n .: {}\n k:{\"name\":\"irt-local-file-storage\"}:\n .: {}\n f:name: {}\n f:persistentVolumeClaim:\n .: {}\n f:claimName: {}\n k:{\"name\":\"tmp-dir-argo\"}:\n .: {}\n f:emptyDir: {}\n f:name: {}\n k:{\"name\":\"var-run-argo\"}:\n .: {}\n f:emptyDir: {}\n f:name: {}\n manager: workflow-controller\n operation: Update\n time: \"2026-03-23T12:02:07Z\"\n name: oc-monitor-noner-unnogic-curl-7442fa17-ef9a-4654-9aff-770feed387a4-1230756611\n namespace: 3a8fc42e-def2-4e69-a36e-e9925991522f\n ownerReferences:\n - apiVersion: argoproj.io/v1alpha1\n blockOwnerDeletion: true\n controller: true\n kind: Workflow\n name: oc-monitor-noner-unnogic\n uid: d732d336-1d5a-4cea-8e7f-d89fa4f66e94\nspec:\n activeDeadlineSeconds: 368\n containers:\n - command:\n - argoexec\n - wait\n - --loglevel\n - info\n - --log-format\n - text\n - --gloglevel\n - \"0\"\n env:\n - name: ARGO_POD_NAME\n valueFrom:\n fieldRef:\n apiVersion: v1\n fieldPath: metadata.name\n - name: ARGO_POD_UID\n valueFrom:\n fieldRef:\n apiVersion: v1\n fieldPath: metadata.uid\n - name: ARGO_WORKFLOW_NAME\n value: oc-monitor-noner-unnogic\n - name: ARGO_WORKFLOW_UID\n value: d732d336-1d5a-4cea-8e7f-d89fa4f66e94\n - name: ARGO_CONTAINER_NAME\n value: wait\n - name: ARGO_NODE_ID\n value: oc-monitor-noner-unnogic-1230756611\n - name: ARGO_INCLUDE_SCRIPT_OUTPUT\n value: \"false\"\n - name: ARGO_DEADLINE\n value: \"2026-03-23T12:08:16Z\"\n - name: ARGO_PROGRESS_FILE\n value: /var/run/argo/progress\n - name: ARGO_PROGRESS_PATCH_TICK_DURATION\n value: 1m0s\n - name: ARGO_PROGRESS_FILE_TICK_DURATION\n value: 3s\n image: quay.io/argoproj/argoexec:v3.7.10\n imagePullPolicy: IfNotPresent\n name: wait\n resources: {}\n terminationMessagePath: /dev/termination-log\n terminationMessagePolicy: File\n volumeMounts:\n - mountPath: /mainctrfs/mnt/vol\n name: irt-local-file-storage\n - mountPath: /tmp\n name: tmp-dir-argo\n subPath: \"0\"\n - mountPath: /var/run/argo\n name: var-run-argo\n - mountPath: /var/run/secrets/kubernetes.io/serviceaccount\n name: kube-api-access-kfr6c\n readOnly: true\n - args:\n - curl -SL http://plates.openalpr.com/h786poj.jpg -o /mnt/vol/image.jpg\n command:\n - /var/run/argo/argoexec\n - emissary\n - --loglevel\n - info\n - --log-format\n - text\n - --gloglevel\n - \"0\"\n - --\n - sh\n - -c\n env:\n - name: ARGO_CONTAINER_NAME\n value: main\n - name: ARGO_NODE_ID\n value: oc-monitor-noner-unnogic-1230756611\n - name: ARGO_INCLUDE_SCRIPT_OUTPUT\n value: \"false\"\n - name: ARGO_DEADLINE\n value: \"2026-03-23T12:08:16Z\"\n - name: ARGO_PROGRESS_FILE\n value: /var/run/argo/progress\n - name: ARGO_PROGRESS_PATCH_TICK_DURATION\n value: 1m0s\n - name: ARGO_PROGRESS_FILE_TICK_DURATION\n value: 3s\n image: curlimages/curl:7.88.1\n imagePullPolicy: IfNotPresent\n name: main\n resources: {}\n terminationMessagePath: /dev/termination-log\n terminationMessagePolicy: File\n volumeMounts:\n - mountPath: /mnt/vol\n name: irt-local-file-storage\n - mountPath: /var/run/argo\n name: var-run-argo\n - mountPath: /var/run/secrets/kubernetes.io/serviceaccount\n name: kube-api-access-kfr6c\n readOnly: true\n dnsPolicy: ClusterFirst\n enableServiceLinks: true\n initContainers:\n - command:\n - argoexec\n - init\n - --loglevel\n - info\n - --log-format\n - text\n - --gloglevel\n - \"0\"\n env:\n - name: ARGO_POD_NAME\n valueFrom:\n fieldRef:\n apiVersion: v1\n fieldPath: metadata.name\n - name: ARGO_POD_UID\n valueFrom:\n fieldRef:\n apiVersion: v1\n fieldPath: metadata.uid\n - name: ARGO_WORKFLOW_NAME\n value: oc-monitor-noner-unnogic\n - name: ARGO_WORKFLOW_UID\n value: d732d336-1d5a-4cea-8e7f-d89fa4f66e94\n - name: ARGO_CONTAINER_NAME\n value: init\n - name: ARGO_TEMPLATE\n value: '{\"name\":\"curl-7442fa17-ef9a-4654-9aff-770feed387a4\",\"inputs\":{},\"outputs\":{},\"metadata\":{\"annotations\":{\"multicluster.admiralty.io/clustername\":\"target-b87318c9-f5f8-44bb-8d48-913f4ddd6c31-3a8fc42e-def2\",\"multicluster.admiralty.io/elect\":\"\"}},\"container\":{\"name\":\"\",\"image\":\"curlimages/curl:7.88.1\",\"command\":[\"sh\",\"-c\"],\"args\":[\"curl\n -SL http://plates.openalpr.com/h786poj.jpg -o /mnt/vol/image.jpg\"],\"resources\":{},\"volumeMounts\":[{\"name\":\"irt-local-file-storage\",\"mountPath\":\"/mnt/vol\"}]}}'\n - name: ARGO_NODE_ID\n value: oc-monitor-noner-unnogic-1230756611\n - name: ARGO_INCLUDE_SCRIPT_OUTPUT\n value: \"false\"\n - name: ARGO_DEADLINE\n value: \"2026-03-23T12:08:16Z\"\n - name: ARGO_PROGRESS_FILE\n value: /var/run/argo/progress\n - name: ARGO_PROGRESS_PATCH_TICK_DURATION\n value: 1m0s\n - name: ARGO_PROGRESS_FILE_TICK_DURATION\n value: 3s\n image: quay.io/argoproj/argoexec:v3.7.10\n imagePullPolicy: IfNotPresent\n name: init\n resources: {}\n terminationMessagePath: /dev/termination-log\n terminationMessagePolicy: File\n volumeMounts:\n - mountPath: /var/run/argo\n name: var-run-argo\n - mountPath: /var/run/secrets/kubernetes.io/serviceaccount\n name: kube-api-access-kfr6c\n readOnly: true\n preemptionPolicy: PreemptLowerPriority\n priority: 0\n restartPolicy: Never\n schedulerName: default-scheduler\n securityContext: {}\n serviceAccount: sa-3a8fc42e-def2-4e69-a36e-e9925991522f\n serviceAccountName: sa-3a8fc42e-def2-4e69-a36e-e9925991522f\n terminationGracePeriodSeconds: 30\n tolerations:\n - effect: NoExecute\n key: node.kubernetes.io/not-ready\n operator: Exists\n tolerationSeconds: 300\n - effect: NoExecute\n key: node.kubernetes.io/unreachable\n operator: Exists\n tolerationSeconds: 300\n volumes:\n - emptyDir: {}\n name: var-run-argo\n - emptyDir: {}\n name: tmp-dir-argo\n - name: irt-local-file-storage\n persistentVolumeClaim:\n claimName: irt-local-file-storage-3a8fc42e-def2-4e69-a36e-e9925991522f\n - name: kube-api-access-kfr6c\n projected:\n defaultMode: 420\n sources:\n - serviceAccountToken:\n expirationSeconds: 3607\n path: token\n - configMap:\n items:\n - key: ca.crt\n path: ca.crt\n name: kube-root-ca.crt\n - downwardAPI:\n items:\n - fieldRef:\n apiVersion: v1\n fieldPath: metadata.namespace\n path: namespace\nstatus: {}\n", + "workflows.argoproj.io/node-id": "oc-monitor-noner-unnogic-1230756611", + "workflows.argoproj.io/node-name": "oc-monitor-noner-unnogic.curl-7442fa17-ef9a-4654-9aff-770feed387a4" + }, + "creationTimestamp": "2026-03-23T12:02:07Z", + "deletionGracePeriodSeconds": 0, + "deletionTimestamp": "2026-03-23T12:08:21Z", + "finalizers": [ + + ], + "generation": 2, + "labels": { + "multicluster.admiralty.io/has-finalizer": "true", + "workflows.argoproj.io/completed": "true", + "workflows.argoproj.io/workflow": "oc-monitor-noner-unnogic" + }, + "name": "oc-monitor-noner-unnogic-curl-7442fa17-ef9a-4654-9aff-770feed387a4-1230756611", + "namespace": "3a8fc42e-def2-4e69-a36e-e9925991522f", + "ownerReferences": [ + { + "apiVersion": "argoproj.io/v1alpha1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "Workflow", + "name": "oc-monitor-noner-unnogic", + "uid": "d732d336-1d5a-4cea-8e7f-d89fa4f66e94" + } + ], + "resourceVersion": "644766", + "uid": "9066fb56-cc88-4755-b7b2-c68e00c10c4f" + }, + "spec": { + "activeDeadlineSeconds": 368, + "containers": [ + { + "command": [ + "argoexec", + "wait", + "--loglevel", + "info", + "--log-format", + "text", + "--gloglevel", + "0" + ], + "env": [ + { + "name": "ARGO_POD_NAME", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.name" + } + } + }, + { + "name": "ARGO_POD_UID", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.uid" + } + } + }, + { + "name": "ARGO_WORKFLOW_NAME", + "value": "oc-monitor-noner-unnogic" + }, + { + "name": "ARGO_WORKFLOW_UID", + "value": "d732d336-1d5a-4cea-8e7f-d89fa4f66e94" + }, + { + "name": "ARGO_CONTAINER_NAME", + "value": "wait" + }, + { + "name": "ARGO_NODE_ID", + "value": "oc-monitor-noner-unnogic-1230756611" + }, + { + "name": "ARGO_INCLUDE_SCRIPT_OUTPUT", + "value": "false" + }, + { + "name": "ARGO_DEADLINE", + "value": "2026-03-23T12:08:16Z" + }, + { + "name": "ARGO_PROGRESS_FILE", + "value": "/var/run/argo/progress" + }, + { + "name": "ARGO_PROGRESS_PATCH_TICK_DURATION", + "value": "1m0s" + }, + { + "name": "ARGO_PROGRESS_FILE_TICK_DURATION", + "value": "3s" + } + ], + "image": "quay.io/argoproj/argoexec:v3.7.10", + "imagePullPolicy": "IfNotPresent", + "name": "wait", + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/mainctrfs/mnt/vol", + "name": "irt-local-file-storage" + }, + { + "mountPath": "/tmp", + "name": "tmp-dir-argo", + "subPath": "0" + }, + { + "mountPath": "/var/run/argo", + "name": "var-run-argo" + }, + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-api-access-kfr6c", + "readOnly": true + } + ] + }, + { + "args": [ + "curl -SL http://plates.openalpr.com/h786poj.jpg -o /mnt/vol/image.jpg" + ], + "command": [ + "/var/run/argo/argoexec", + "emissary", + "--loglevel", + "info", + "--log-format", + "text", + "--gloglevel", + "0", + "--", + "sh", + "-c" + ], + "env": [ + { + "name": "ARGO_CONTAINER_NAME", + "value": "main" + }, + { + "name": "ARGO_NODE_ID", + "value": "oc-monitor-noner-unnogic-1230756611" + }, + { + "name": "ARGO_INCLUDE_SCRIPT_OUTPUT", + "value": "false" + }, + { + "name": "ARGO_DEADLINE", + "value": "2026-03-23T12:08:16Z" + }, + { + "name": "ARGO_PROGRESS_FILE", + "value": "/var/run/argo/progress" + }, + { + "name": "ARGO_PROGRESS_PATCH_TICK_DURATION", + "value": "1m0s" + }, + { + "name": "ARGO_PROGRESS_FILE_TICK_DURATION", + "value": "3s" + } + ], + "image": "curlimages/curl:7.88.1", + "imagePullPolicy": "IfNotPresent", + "name": "main", + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/mnt/vol", + "name": "irt-local-file-storage" + }, + { + "mountPath": "/var/run/argo", + "name": "var-run-argo" + }, + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-api-access-kfr6c", + "readOnly": true + } + ] + } + ], + "dnsPolicy": "ClusterFirst", + "enableServiceLinks": true, + "initContainers": [ + { + "command": [ + "argoexec", + "init", + "--loglevel", + "info", + "--log-format", + "text", + "--gloglevel", + "0" + ], + "env": [ + { + "name": "ARGO_POD_NAME", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.name" + } + } + }, + { + "name": "ARGO_POD_UID", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.uid" + } + } + }, + { + "name": "ARGO_WORKFLOW_NAME", + "value": "oc-monitor-noner-unnogic" + }, + { + "name": "ARGO_WORKFLOW_UID", + "value": "d732d336-1d5a-4cea-8e7f-d89fa4f66e94" + }, + { + "name": "ARGO_CONTAINER_NAME", + "value": "init" + }, + { + "name": "ARGO_TEMPLATE", + "value": "{\"name\":\"curl-7442fa17-ef9a-4654-9aff-770feed387a4\",\"inputs\":{},\"outputs\":{},\"metadata\":{\"annotations\":{\"multicluster.admiralty.io/clustername\":\"target-b87318c9-f5f8-44bb-8d48-913f4ddd6c31-3a8fc42e-def2\",\"multicluster.admiralty.io/elect\":\"\"}},\"container\":{\"name\":\"\",\"image\":\"curlimages/curl:7.88.1\",\"command\":[\"sh\",\"-c\"],\"args\":[\"curl -SL http://plates.openalpr.com/h786poj.jpg -o /mnt/vol/image.jpg\"],\"resources\":{},\"volumeMounts\":[{\"name\":\"irt-local-file-storage\",\"mountPath\":\"/mnt/vol\"}]}}" + }, + { + "name": "ARGO_NODE_ID", + "value": "oc-monitor-noner-unnogic-1230756611" + }, + { + "name": "ARGO_INCLUDE_SCRIPT_OUTPUT", + "value": "false" + }, + { + "name": "ARGO_DEADLINE", + "value": "2026-03-23T12:08:16Z" + }, + { + "name": "ARGO_PROGRESS_FILE", + "value": "/var/run/argo/progress" + }, + { + "name": "ARGO_PROGRESS_PATCH_TICK_DURATION", + "value": "1m0s" + }, + { + "name": "ARGO_PROGRESS_FILE_TICK_DURATION", + "value": "3s" + } + ], + "image": "quay.io/argoproj/argoexec:v3.7.10", + "imagePullPolicy": "IfNotPresent", + "name": "init", + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/var/run/argo", + "name": "var-run-argo" + }, + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-api-access-kfr6c", + "readOnly": true + } + ] + } + ], + "nodeSelector": { + "virtual-kubelet.io/provider": "admiralty" + }, + "preemptionPolicy": "PreemptLowerPriority", + "priority": 0, + "restartPolicy": "Never", + "schedulerName": "admiralty-proxy", + "securityContext": {}, + "serviceAccount": "sa-3a8fc42e-def2-4e69-a36e-e9925991522f", + "serviceAccountName": "sa-3a8fc42e-def2-4e69-a36e-e9925991522f", + "terminationGracePeriodSeconds": 0, + "tolerations": [ + { + "key": "virtual-kubelet.io/provider", + "value": "admiralty" + }, + { + "key": "node.kubernetes.io/network-unavailable", + "operator": "Exists" + }, + { + "effect": "NoExecute", + "key": "node.kubernetes.io/not-ready", + "operator": "Exists", + "tolerationSeconds": 300 + }, + { + "effect": "NoExecute", + "key": "node.kubernetes.io/unreachable", + "operator": "Exists", + "tolerationSeconds": 300 + } + ], + "volumes": [ + { + "emptyDir": {}, + "name": "var-run-argo" + }, + { + "emptyDir": {}, + "name": "tmp-dir-argo" + }, + { + "name": "irt-local-file-storage", + "persistentVolumeClaim": { + "claimName": "irt-local-file-storage-3a8fc42e-def2-4e69-a36e-e9925991522f" + } + }, + { + "name": "kube-api-access-kfr6c", + "projected": { + "defaultMode": 420, + "sources": [ + { + "serviceAccountToken": { + "expirationSeconds": 3607, + "path": "token" + } + }, + { + "configMap": { + "items": [ + { + "key": "ca.crt", + "path": "ca.crt" + } + ], + "name": "kube-root-ca.crt" + } + }, + { + "downwardAPI": { + "items": [ + { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.namespace" + }, + "path": "namespace" + } + ] + } + } + ] + } + } + ] + }, + "status": { + "observedGeneration": 2, + "phase": "Failed", + "qosClass": "BestEffort" + } +} diff --git a/schedulerd.json b/schedulerd.json index 7bec63b..ede89f3 100644 --- a/schedulerd.json +++ b/schedulerd.json @@ -4,9 +4,5 @@ "NATS_URL":"nats://172.16.0.181:4222", "MONGO_DATABASE":"DC_myDC", "MONITORD_PATH": "../oc-monitord/oc-monitord", - "KUBERNETES_SERVICE_HOST" : "172.16.0.181", - "MODE": "container", - "KUBE_CA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTkRNMk56UTNPRGt3SGhjTk1qVXdOREF6TVRBd05qSTVXaGNOTXpVd05EQXhNVEF3TmpJNQpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTkRNMk56UTNPRGt3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUL1NDWEMycjFTWGdza0FvTGJKSEtIem4zQXYva2t0ZElpSk42WlBsWVEKY3p0dXV5K3JBMHJ5VUlkZnIyK3VCRS9VN0NjSlhPL004QVdyODFwVklzVmdvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVFHOVBQQ0g0c1lMbFkvQk5CdnN5CklEam1PK0l3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUtJeFc4NERQTW1URXVVN0Z3ek44SFB6ZHdldWh6U20KVzNYMU9tczFSQVNRQWlFQXI4UTJZSGtNQndSOThhcWtTa2JqU1dhejg0OEY2VkZLWjFacXpNbDFZaTg9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "KUBE_CERT": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJZWFxQUp2bHhmYzh3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOelF6TmpjME56ZzVNQjRYRFRJMU1EUXdNekV3TURZeU9Wb1hEVEkyTURRdwpNekV3TURZeU9Wb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJJelpGSlJUVHJmYXlNNFoKTjlRclN4MC9wbDdoZGdvWFM5bGEydmFFRkhlYVFaalRML2NZd1dMUnhoOWVOa01SRDZjTk4reWZkSXE2aWo1SQo5RTlENGdLalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVFFzUkZXUlNweDV0RGZnZDh1UTdweUw0ZERMVEFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQStXZTlBVXJRUm5pWjVCUERELzJwWjA3TzFQWWFIc01ycTZZcVB4VlV5cGdDSUhrRE8rcVlMYUhkUEhXZgpWUGszNXJmejM0Qk4xN2VyaEVxRjF0U0c1MWFqCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTkRNMk56UTNPRGt3SGhjTk1qVXdOREF6TVRBd05qSTVXaGNOTXpVd05EQXhNVEF3TmpJNQpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTkRNMk56UTNPRGt3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUNDF1NXIzM0JyenZ3ZXZaWHM2TEg3T1k4NGhOOGRrODdnTlhaUndBdWkKdXJBaU45TFdYcmYxeFoyaXp5d0FiVGk1ZVc2Q1hIMjhDdEVSWUlrcjNoTXdvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTBMRVJWa1VxY2ViUTM0SGZMa082CmNpK0hReTB3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUpLWGZLdXBzdklONEtQVW50c1lPNXhiaGhSQmhSYlIKN3JyeWs2VHpZMU5JQWlBVktKWis3UUxzeGFyQktORnI3eTVYYlNGanI3Y1gyQmhOYy9wdnFLcWtFUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "KUBE_DATA": "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVJd01wVjdzMHc2S0VTQ2FBWDhvSVZPUHloa2U0Q3duNWZQZnhOaUYyM3JvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFak5rVWxGTk90OXJJemhrMzFDdExIVCttWHVGMkNoZEwyVnJhOW9RVWQ1cEJtTk12OXhqQgpZdEhHSDE0MlF4RVBwdzAzN0o5MGlycUtQa2owVDBQaUFnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=" + "MODE": "container" }