diff --git a/.changelog/25353.txt b/.changelog/25353.txt new file mode 100644 index 000000000..707732a4a --- /dev/null +++ b/.changelog/25353.txt @@ -0,0 +1,3 @@ +```release-note:improvement +ui: Updated icons to the newest design system +``` diff --git a/.changelog/25378.txt b/.changelog/25378.txt new file mode 100644 index 000000000..6de1b693e --- /dev/null +++ b/.changelog/25378.txt @@ -0,0 +1,3 @@ +```release-note:improvement +ui: Makes jobs list filtering case-insensitive +``` diff --git a/.changelog/25390.txt b/.changelog/25390.txt new file mode 100644 index 000000000..e755c2434 --- /dev/null +++ b/.changelog/25390.txt @@ -0,0 +1,3 @@ +```release-note:improvement +ui: Added a scope selector for sentinel policy page +``` diff --git a/command/volume_delete.go b/command/volume_delete.go index 427fd9c59..6098d4329 100644 --- a/command/volume_delete.go +++ b/command/volume_delete.go @@ -146,7 +146,7 @@ func (c *VolumeDeleteCommand) deleteCSIVolume(client *api.Client, volID string, Namespace: c.namespace, }) if err != nil { - c.Ui.Error(fmt.Sprintf("Could not find existing volume to delete: %s", err)) + c.Ui.Error(fmt.Sprintf(`Could not find existing CSI volume to delete: %s`, err)) return 1 } if len(possible) > 0 { @@ -179,7 +179,7 @@ func (c *VolumeDeleteCommand) deleteHostVolume(client *api.Client, volID string) if !helper.IsUUID(volID) { stub, possible, err := getHostVolumeByPrefix(client, volID, c.namespace) if err != nil { - c.Ui.Error(fmt.Sprintf("Could not find existing volume to delete: %s", err)) + c.Ui.Error(fmt.Sprintf(`Could not find existing host volume to delete: %s`, err)) return 1 } if len(possible) > 0 { diff --git a/drivers/shared/executor/executor_linux.go b/drivers/shared/executor/executor_linux.go index d5fe3e646..1e90aa8cf 100644 --- a/drivers/shared/executor/executor_linux.go +++ b/drivers/shared/executor/executor_linux.go @@ -35,9 +35,9 @@ import ( "github.com/hashicorp/nomad/plugins/drivers" "github.com/opencontainers/runc/libcontainer" "github.com/opencontainers/runc/libcontainer/cgroups" + _ "github.com/opencontainers/runc/libcontainer/cgroups/devices" runc "github.com/opencontainers/runc/libcontainer/configs" "github.com/opencontainers/runc/libcontainer/devices" - ldevices "github.com/opencontainers/runc/libcontainer/devices" "github.com/opencontainers/runc/libcontainer/specconv" lutils "github.com/opencontainers/runc/libcontainer/utils" "github.com/opencontainers/runtime-spec/specs-go" @@ -75,7 +75,7 @@ type LibcontainerExecutor struct { systemCpuStats *cpustats.Tracker processStats procstats.ProcessStats - container libcontainer.Container + container *libcontainer.Container userProc *libcontainer.Process userProcExited chan interface{} exitState *ProcessState @@ -96,7 +96,7 @@ func (l *LibcontainerExecutor) catchSignals() { } if l.container != nil { - l.container.Signal(signal, false) + l.container.Signal(signal) } } } @@ -124,19 +124,18 @@ func (l *LibcontainerExecutor) ListProcesses() set.Collection[int] { return procstats.List(l.command) } -// cleanOldProcessesInCGroup kills processes that might ended up orphans when the -// executor was unexpectedly killed and nomad can't reconnect to them. -func (l *LibcontainerExecutor) cleanOldProcessesInCGroup(nomadRelativePath string) { +// cleanOldProcessesInCGroup kills processes that might ended up orphans when +// the executor was unexpectedly killed and nomad can't reconnect to them. +func (l *LibcontainerExecutor) cleanOldProcessesInCGroup(nomadRelativePath string) error { l.logger.Debug("looking for old processes", "path", nomadRelativePath) root := cgroupslib.GetDefaultRoot() - orphansPIDs, err := cgroups.GetAllPids(filepath.Join(root, nomadRelativePath)) - if err != nil { - l.logger.Error("unable to get orphaned task PIDs", "error", err) - return + orphanedPIDs, err := cgroups.GetAllPids(filepath.Join(root, nomadRelativePath)) + if err != nil && !os.IsNotExist(err) { + return fmt.Errorf("unable to get orphaned task PIDs: %v", err) } - for _, pid := range orphansPIDs { + for _, pid := range orphanedPIDs { l.logger.Info("killing orphaned process", "pid", pid) // Avoid bringing down the whole node by mistake, very unlikely case, @@ -145,11 +144,27 @@ func (l *LibcontainerExecutor) cleanOldProcessesInCGroup(nomadRelativePath strin continue } - err := syscall.Kill(pid, syscall.SIGKILL) - if err != nil { - l.logger.Error("unable to send signal to process", "pid", pid, "error", err) + if err := syscall.Kill(pid, syscall.SIGKILL); err != nil { + return fmt.Errorf("unable to send signal to process %d: %v", pid, err) } } + + if len(orphanedPIDs) == 0 { + return nil + } + + // Make sure the PID was removed from the cgroup file, otherwise + // libcontainer will not be able to launch. Five retries every 100 ms should be + // more than enough. + for i := 100; i < 501; i += 100 { + orphanedPIDs, _ = cgroups.GetAllPids(filepath.Join(root, nomadRelativePath)) + if len(orphanedPIDs) > 0 { + time.Sleep(time.Duration(i) * time.Millisecond) + continue + } + return nil + } + return fmt.Errorf("orphaned processes %v have not been removed from cgroups pid file", orphanedPIDs) } // Launch creates a new container in libcontainer and starts a new process with it @@ -164,26 +179,17 @@ func (l *LibcontainerExecutor) Launch(command *ExecCommand) (*ProcessState, erro l.command = command - // create a new factory which will store the container state in the allocDir - factory, err := libcontainer.New( - path.Join(command.TaskDir, "../alloc/container"), - // note that os.Args[0] refers to the executor shim typically - // and first args arguments is ignored now due - // until https://github.com/opencontainers/runc/pull/1888 is merged - libcontainer.InitArgs(os.Args[0], "libcontainer-shim"), - ) - if err != nil { - return nil, fmt.Errorf("failed to create factory: %v", err) - } - // A container groups processes under the same isolation enforcement containerCfg, err := l.newLibcontainerConfig(command) if err != nil { return nil, fmt.Errorf("failed to configure container(%s): %v", l.id, err) } - l.cleanOldProcessesInCGroup(containerCfg.Cgroups.Path) - container, err := factory.Create(l.id, containerCfg) + if err := l.cleanOldProcessesInCGroup(containerCfg.Cgroups.Path); err != nil { + return nil, err + } + + container, err := libcontainer.Create(path.Join(command.TaskDir, "../alloc/container"), l.id, containerCfg) if err != nil { return nil, fmt.Errorf("failed to create container(%s): %v", l.id, err) } @@ -349,23 +355,22 @@ func (l *LibcontainerExecutor) Shutdown(signal string, grace time.Duration) erro // Signal initial container processes only during graceful // shutdown; hence `false` arg. - err = l.container.Signal(sig, false) + err = l.container.Signal(sig) if err != nil { return err } + // nosemgrep select { case <-l.userProcExited: return nil case <-time.After(grace): - // Force kill all container processes after grace period, - // hence `true` argument. - if err := l.container.Signal(os.Kill, true); err != nil { + if err := l.container.Signal(os.Kill); err != nil { return err } } } else { - err := l.container.Signal(os.Kill, true) + err := l.container.Signal(os.Kill) if err != nil { l.logger.Info("no grace fail", "error", err) return err @@ -541,7 +546,7 @@ func (l *LibcontainerExecutor) newTerminalSocket() (pty func() (*os.File, error) return nil, nil, fmt.Errorf("failed to create terminal: %v", err) } - return func() (*os.File, error) { return lutils.RecvFd(parent) }, child, err + return func() (*os.File, error) { return lutils.RecvFile(parent) }, child, err } @@ -894,7 +899,7 @@ func cmdDevices(driverDevices []*drivers.DeviceConfig) ([]*devices.Device, error r := make([]*devices.Device, len(driverDevices)) for i, d := range driverDevices { - ed, err := ldevices.DeviceFromPath(d.HostPath, d.Permissions) + ed, err := devices.DeviceFromPath(d.HostPath, d.Permissions) if err != nil { return nil, fmt.Errorf("failed to make device out for %s: %v", d.HostPath, err) } diff --git a/drivers/shared/executor/libcontainer_nsenter_linux.go b/drivers/shared/executor/libcontainer_nsenter_linux.go index 13423fe5e..27e773353 100644 --- a/drivers/shared/executor/libcontainer_nsenter_linux.go +++ b/drivers/shared/executor/libcontainer_nsenter_linux.go @@ -5,9 +5,7 @@ package executor import ( "os" - "runtime" - hclog "github.com/hashicorp/go-hclog" "github.com/opencontainers/runc/libcontainer" _ "github.com/opencontainers/runc/libcontainer/nsenter" ) @@ -19,14 +17,9 @@ import ( // This subcommand handler is implemented as an `init`, libcontainer shim is handled anywhere // this package is used (including tests) without needing to write special command handler. func init() { - if len(os.Args) > 1 && os.Args[1] == "libcontainer-shim" { - runtime.GOMAXPROCS(1) - runtime.LockOSThread() - factory, _ := libcontainer.New("") - if err := factory.StartInitialization(); err != nil { - hclog.L().Error("failed to initialize libcontainer-shim", "error", err) - os.Exit(1) - } - panic("--this line should have never been executed, congratulations--") + if len(os.Args) > 1 && os.Args[1] == "init" { + // This is the golang entry point for runc init, executed + // before main() but after libcontainer/nsenter's nsexec(). + libcontainer.Init() } } diff --git a/e2e/terraform/provision-infra/provision-nomad/etc/consul.d/servers.hcl b/e2e/terraform/provision-infra/provision-nomad/etc/consul.d/servers.hcl index 54f35892c..c41ab7150 100644 --- a/e2e/terraform/provision-infra/provision-nomad/etc/consul.d/servers.hcl +++ b/e2e/terraform/provision-infra/provision-nomad/etc/consul.d/servers.hcl @@ -15,7 +15,8 @@ ui_config { } acl { - enabled = true + enabled = true + default_policy = "deny" tokens { initial_management = "${management_token}" agent = "${token}" diff --git a/enos/enos-modules.hcl b/enos/enos-modules.hcl index 580a1bde4..6f29afd0d 100644 --- a/enos/enos-modules.hcl +++ b/enos/enos-modules.hcl @@ -28,3 +28,8 @@ module "upgrade_client" { module "get_vault_env" { source = "../e2e/terraform/hcp-vault-auth" } + +module "drain_client" { + source = "./modules/drain_nodes" + +} diff --git a/enos/enos-scenario-upgrade.hcl b/enos/enos-scenario-upgrade.hcl index 8101bb8bf..0621bc7c0 100644 --- a/enos/enos-scenario-upgrade.hcl +++ b/enos/enos-scenario-upgrade.hcl @@ -48,6 +48,7 @@ scenario "upgrade" { variables { artifactory_username = var.artifactory_username artifactory_token = var.artifactory_token + artifactory_repo = var.artifactory_repo_start arch = local.arch edition = matrix.edition product_version = var.product_version @@ -261,6 +262,7 @@ scenario "upgrade" { variables { artifactory_username = var.artifactory_username artifactory_token = var.artifactory_token + artifactory_repo = var.artifactory_repo_upgrade arch = local.arch edition = matrix.edition product_version = var.upgrade_version @@ -431,9 +433,29 @@ scenario "upgrade" { } } - step "upgrade_third_client" { + step "drain_client" { depends_on = [step.upgrade_second_client] + description = <<-EOF + Selects one client to drain, waits for all allocs to be rescheduled and + brings back the node eligibility + EOF + + module = module.drain_client + variables { + # connecting to the Nomad API + nomad_addr = step.provision_cluster.nomad_addr + ca_file = step.provision_cluster.ca_file + cert_file = step.provision_cluster.cert_file + key_file = step.provision_cluster.key_file + nomad_token = step.provision_cluster.nomad_token + nodes_to_drain = 1 + } + } + + step "upgrade_third_client" { + depends_on = [step.drain_client] + description = <<-EOF Takes a client, writes some dynamic metadata to it, updates the binary with the new one previously fetched and restarts it. diff --git a/enos/enos-vars.hcl b/enos/enos-vars.hcl index 4914515f4..4e5118552 100644 --- a/enos/enos-vars.hcl +++ b/enos/enos-vars.hcl @@ -27,12 +27,28 @@ variable "product_version" { default = null } +variable "artifactory_repo_start" { + description = "The Artifactory repository we'll download the starting binary from" + type = string + + # note: this default only works for released binaries + default = "hashicorp-crt-staging-local*" +} + variable "upgrade_version" { description = "The version of Nomad we want to upgrade the cluster to" type = string default = null } +variable "artifactory_repo_upgrade" { + description = "The Artifactory repository we'll download the upgraded binary from" + type = string + + # note: this default only works for released binaries + default = "hashicorp-crt-staging-local*" +} + variable "download_binary_path" { description = "The path to a local directory where binaries will be downloaded to provision" } diff --git a/enos/modules/drain_nodes/main.tf b/enos/modules/drain_nodes/main.tf new file mode 100644 index 000000000..aedac923b --- /dev/null +++ b/enos/modules/drain_nodes/main.tf @@ -0,0 +1,31 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: BUSL-1.1 + +terraform { + required_providers { + enos = { + source = "hashicorp-forge/enos" + } + } +} + +locals { + nomad_env = { + NOMAD_ADDR = var.nomad_addr + NOMAD_CACERT = var.ca_file + NOMAD_CLIENT_CERT = var.cert_file + NOMAD_CLIENT_KEY = var.key_file + NOMAD_TOKEN = var.nomad_token + } +} + +resource "enos_local_exec" "run_tests" { + environment = merge( + local.nomad_env, { + NODES_TO_DRAIN = var.nodes_to_drain + }) + + scripts = [ + abspath("${path.module}/scripts/drain.sh"), + ] +} diff --git a/enos/modules/drain_nodes/scripts/drain.sh b/enos/modules/drain_nodes/scripts/drain.sh new file mode 100644 index 000000000..e7e320c1a --- /dev/null +++ b/enos/modules/drain_nodes/scripts/drain.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: BUSL-1.1 + +set -euo pipefail + +error_exit() { + printf 'Error: %s' "${1}" + exit 1 +} + +DRAIN_DEADLINE="5s" + +nodes=$(nomad node status -json | jq -r "[.[] | select(.Status == \"ready\") | .ID] | sort | .[:${NODES_TO_DRAIN}] | join(\" \")" ) + +for node in $nodes; do + echo "Draining the node $node" + + nomad node drain --enable --deadline "$DRAIN_DEADLINE" "$node" \ + || error_exit "Failed to drain node $node" + + allocs=$(nomad alloc status -json | jq --arg node "$node" '[.[] | select(.NodeID == $node and .ClientStatus == "running")] | length') + if [ $? -ne 0 ]; then + error_exit "Allocs still running on $node" + fi + + nomad node drain --disable "$node" \ + || error_exit "Failed to disable drain for node $node" +done diff --git a/enos/modules/drain_nodes/variables.tf b/enos/modules/drain_nodes/variables.tf new file mode 100644 index 000000000..b2abc2d50 --- /dev/null +++ b/enos/modules/drain_nodes/variables.tf @@ -0,0 +1,36 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: BUSL-1.1 + +variable "nodes_to_drain" { + description = "Number of clients to drain" + type = number + default = 1 +} + +variable "nomad_addr" { + description = "The Nomad API HTTP address." + type = string + default = "http://localhost:4646" +} + +variable "ca_file" { + description = "A local file path to a PEM-encoded certificate authority used to verify the remote agent's certificate" + type = string +} + +variable "cert_file" { + description = "A local file path to a PEM-encoded certificate provided to the remote agent. If this is specified, key_file or key_pem is also required" + type = string +} + +variable "key_file" { + description = "A local file path to a PEM-encoded private key. This is required if cert_file or cert_pem is specified." + type = string +} + +variable "nomad_token" { + description = "The Secret ID of an ACL token to make requests with, for ACL-enabled clusters." + type = string + sensitive = true +} + diff --git a/go.mod b/go.mod index d8636b933..b1e25c8ef 100644 --- a/go.mod +++ b/go.mod @@ -36,7 +36,7 @@ require ( github.com/golang-jwt/jwt/v5 v5.2.1 github.com/golang/protobuf v1.5.4 github.com/golang/snappy v0.0.4 - github.com/google/go-cmp v0.6.0 + github.com/google/go-cmp v0.7.0 github.com/gorilla/handlers v1.5.2 github.com/gorilla/websocket v1.5.3 github.com/gosuri/uilive v0.0.4 @@ -60,9 +60,9 @@ require ( github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.10 github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.14 - github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.12 + github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 github.com/hashicorp/go-kms-wrapping/wrappers/transit/v2 v2.0.13 - github.com/hashicorp/go-memdb v1.3.4 + github.com/hashicorp/go-memdb v1.3.5 github.com/hashicorp/go-metrics v0.5.4 github.com/hashicorp/go-msgpack/v2 v2.1.3 github.com/hashicorp/go-multierror v1.1.1 @@ -110,11 +110,11 @@ require ( github.com/moby/term v0.5.2 github.com/muesli/reflow v0.3.0 github.com/opencontainers/image-spec v1.1.0 - github.com/opencontainers/runc v1.1.14 + github.com/opencontainers/runc v1.2.5 github.com/opencontainers/runtime-spec v1.2.0 github.com/posener/complete v1.2.3 github.com/prometheus/client_golang v1.21.0 - github.com/prometheus/common v0.62.0 + github.com/prometheus/common v0.63.0 github.com/rs/cors v1.11.1 github.com/ryanuber/columnize v2.1.2+incompatible github.com/ryanuber/go-glob v1.0.0 @@ -132,8 +132,8 @@ require ( golang.org/x/sync v0.12.0 golang.org/x/sys v0.31.0 golang.org/x/time v0.10.0 - google.golang.org/grpc v1.69.4 - google.golang.org/protobuf v1.36.3 + google.golang.org/grpc v1.71.0 + google.golang.org/protobuf v1.36.5 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 oss.indeed.com/go/libtime v1.6.0 ) @@ -199,9 +199,9 @@ require ( github.com/boltdb/bolt v1.3.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/checkpoint-restore/go-criu/v5 v5.3.0 // indirect + github.com/checkpoint-restore/go-criu/v6 v6.3.0 // indirect github.com/cheggaaa/pb/v3 v3.0.5 // indirect - github.com/cilium/ebpf v0.7.0 // indirect + github.com/cilium/ebpf v0.16.0 // indirect github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible // indirect github.com/circonus-labs/circonusllhist v0.1.3 // indirect github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 // indirect @@ -209,7 +209,7 @@ require ( github.com/containerd/log v0.1.0 // indirect github.com/coreos/go-oidc/v3 v3.11.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/cyphar/filepath-securejoin v0.2.5 // indirect + github.com/cyphar/filepath-securejoin v0.4.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba // indirect github.com/digitalocean/godo v1.10.0 // indirect @@ -218,8 +218,8 @@ require ( github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect - github.com/envoyproxy/go-control-plane/envoy v1.32.3 // indirect - github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-jose/go-jose/v4 v4.0.5 // indirect @@ -271,6 +271,8 @@ require ( github.com/mitchellh/cli v1.1.5 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/sys/user v0.3.0 // indirect + github.com/moby/sys/userns v0.1.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/morikuni/aec v1.0.0 // indirect diff --git a/go.sum b/go.sum index 8efc5655e..c760b3aac 100644 --- a/go.sum +++ b/go.sum @@ -803,16 +803,16 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/cespare/xxhash/v2 v2.2.0/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/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/checkpoint-restore/go-criu/v6 v6.3.0 h1:mIdrSO2cPNWQY1truPg6uHLXyKHk3Z5Odx4wjKOASzA= +github.com/checkpoint-restore/go-criu/v6 v6.3.0/go.mod h1:rrRTN/uSwY2X+BPRl/gkulo9gsKOSAeVp9/K2tv7xZI= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/cheggaaa/pb/v3 v3.0.5 h1:lmZOti7CraK9RSjzExsY53+WWfub9Qv13B5m4ptEoPE= github.com/cheggaaa/pb/v3 v3.0.5/go.mod h1:X1L61/+36nz9bjIsrDU52qHKOQukUQe2Ge+YvGuquCw= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.7.0 h1:1k/q3ATgxSXRdrmPfH8d7YK0GfqVsEKZAX9dQZvs56k= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= +github.com/cilium/ebpf v0.16.0 h1:+BiEnHL6Z7lXnlGUsXQPPAE7+kenAd4ES8MQ5min0Ok= +github.com/cilium/ebpf v0.16.0/go.mod h1:L7u2Blt2jMM/vLAVgjxluxtBKlz3/GWjB0dMOEngfwE= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= @@ -850,11 +850,12 @@ github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/ github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= -github.com/cyphar/filepath-securejoin v0.2.5 h1:6iR5tXJ/e6tJZzzdMc1km3Sa7RRIVBKAK32O2s7AYfo= -github.com/cyphar/filepath-securejoin v0.2.5/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= +github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -915,16 +916,16 @@ github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJ github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= -github.com/envoyproxy/go-control-plane/envoy v1.32.3 h1:hVEaommgvzTjTd4xCaFd+kEQ2iYBtGxP6luyLrx6uOk= -github.com/envoyproxy/go-control-plane/envoy v1.32.3/go.mod h1:F6hWupPfh75TBXGKA++MCT/CZHFq5r9/uwt/kQYkZfE= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= -github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= @@ -935,7 +936,6 @@ github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -981,6 +981,8 @@ github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nA github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= +github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= 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= @@ -1070,8 +1072,9 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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/go-querystring v0.0.0-20170111101155-53e6ce116135 h1:zLTLjkaOFEFIOxY5BWLFLwh+cL8vOBW4XJ2aqLE/Tf0= github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -1196,7 +1199,6 @@ github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39 github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix/v2 v2.1.0 h1:CUW5RYIcysz+D3B+l1mDeXrQ7fUvGGCwJfdASSzbrfo= @@ -1207,12 +1209,12 @@ github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.10 h1:YOSmJpqZt2X3K github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.10/go.mod h1:eX4b0InOUfJ3NjfNWlJruBDT3rHXxOVw+7qNFmtjNbo= github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.14 h1:oK4OQ5EPbx/66dAvitksV+OdrQ86SZEj3B6VSZrbdEY= github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.14/go.mod h1:fWxrv9YkAMqtsISde5mcutoMvuiH4kyg1AlDzzmqRh8= -github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.12 h1:PCqWzT/Hii0KL07JsBZ3lJbv/wx02IAHYlhWQq8rxRY= -github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.12/go.mod h1:HSaOaX/lv3ShCdilUYbOTPnSvmoZ9xtQhgw+8hYcZkg= +github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 h1:NGBZnF+yPRZ3gjFl69Y2m58/U0iyB2oH9HaznL9tekA= +github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13/go.mod h1:4Xb+6d8VPeDcUNuh4toPqJlDpkajeJyIQeg36TtWhKw= github.com/hashicorp/go-kms-wrapping/wrappers/transit/v2 v2.0.13 h1:UuDeq3nr0e+H9CrZM3dvpDGkWFSJYTtuTqVekn2za2k= github.com/hashicorp/go-kms-wrapping/wrappers/transit/v2 v2.0.13/go.mod h1:E2dYgXYNkvKe84PIxD9eJqqhFRA4guCTDweJR4i0gds= -github.com/hashicorp/go-memdb v1.3.4 h1:XSL3NR682X/cVk2IeV0d70N4DZ9ljI885xAEU8IoK3c= -github.com/hashicorp/go-memdb v1.3.4/go.mod h1:uBTr1oQbtuMgd1SSGoR8YV27eT3sBHbYiNm53bMpgSg= +github.com/hashicorp/go-memdb v1.3.5 h1:b3taDMxCBCBVgyRrS1AZVHO14ubMYZB++QpNhBg+Nyo= +github.com/hashicorp/go-memdb v1.3.5/go.mod h1:8IVKKBkVe+fxFgdFOYxzQQNjz+sWCyHCdIC/+5+Vy1Y= github.com/hashicorp/go-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6elejKY= github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI= github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= @@ -1320,6 +1322,7 @@ github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1: github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07 h1:rw3IAne6CDuVFlZbPOkA7bhxlqawFh7RJJ+CejfMaxE= github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da h1:FjHUJJ7oBW4G/9j1KzlHaXL09LyMVM9rupS39lncbXk= @@ -1334,11 +1337,15 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= +github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= github.com/joyent/triton-go v0.0.0-20190112182421-51ffac552869 h1:BvV6PYcRz0yGnWXNZrd5wginNT1GfFfPvvWpPbjfFL8= github.com/joyent/triton-go v0.0.0-20190112182421-51ffac552869/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jsimonetti/rtnetlink/v2 v2.0.1 h1:xda7qaHDSVOsADNouv7ukSuicKZO7GgVUCXxpaIEIlM= +github.com/jsimonetti/rtnetlink/v2 v2.0.1/go.mod h1:7MoNYNbb3UaDHtF8udiJo/RH6VsTKP1pqKLUTVCvToE= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -1412,6 +1419,10 @@ github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxm github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= +github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= +github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= +github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= @@ -1457,6 +1468,10 @@ github.com/moby/sys/mount v0.3.4 h1:yn5jq4STPztkkzSKpZkLcmjue+bZJ0u2AuQY1iNI1Ww= github.com/moby/sys/mount v0.3.4/go.mod h1:KcQJMbQdJHPlq5lcYT+/CjatWM4PuxKe+XLSVS4J6Os= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= +github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= +github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1497,8 +1512,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opencontainers/runc v1.1.14 h1:rgSuzbmgz5DUJjeSnw337TxDbRuqjs6iqQck/2weR6w= -github.com/opencontainers/runc v1.1.14/go.mod h1:E4C2z+7BxR7GHXp0hAY53mek+x49X1LjPNeMTfRGvOA= +github.com/opencontainers/runc v1.2.5 h1:8KAkq3Wrem8bApgOHyhRI/8IeLXIfmZ6Qaw6DNSLnA4= +github.com/opencontainers/runc v1.2.5/go.mod h1:dOQeFo29xZKBNeRBI0B19mJtfHv68YgCTh1X+YphA+4= github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= @@ -1557,8 +1572,8 @@ github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= -github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= +github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= +github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -1584,6 +1599,7 @@ github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -1625,6 +1641,7 @@ github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcD github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -2035,7 +2052,6 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2458,8 +2474,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A= -google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= +google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= +google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -2479,8 +2495,8 @@ google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= -google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= 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= diff --git a/nomad/host_volume_endpoint.go b/nomad/host_volume_endpoint.go index 8e3d1cbf7..6eae2e88c 100644 --- a/nomad/host_volume_endpoint.go +++ b/nomad/host_volume_endpoint.go @@ -549,10 +549,11 @@ func (v *HostVolume) placeHostVolume(snap *state.StateSnapshot, vol *structs.Hos candidate := raw.(*structs.Node) // note: this is a race if multiple users create volumes of the same - // name concurrently, but we can't solve it on the server because we - // haven't yet written to state. The client will reject requests to - // create/register a volume with the same name with a different ID. - if _, hasVol := candidate.HostVolumes[vol.Name]; hasVol { + // name concurrently, but we can't completely solve it on the server + // because we haven't yet written to state. The client single-threads + // requests by volume name, so will reject requests to create/register a + // volume with the same name but a different ID. + if snap.NodeHasHostVolume(candidate.ID, vol.Name) { filteredByExisting++ continue } diff --git a/nomad/host_volume_endpoint_test.go b/nomad/host_volume_endpoint_test.go index 8f420e05d..bb57307f9 100644 --- a/nomad/host_volume_endpoint_test.go +++ b/nomad/host_volume_endpoint_test.go @@ -697,6 +697,10 @@ func TestHostVolumeEndpoint_placeVolume(t *testing.T) { must.NoError(t, store.UpsertNode(structs.MsgTypeTestSetup, 1000, node2)) must.NoError(t, store.UpsertNode(structs.MsgTypeTestSetup, 1000, node3)) + vol := mock.HostVolume() + vol.NodeID = node3.ID + must.NoError(t, store.UpsertHostVolume(1000, vol)) + testCases := []struct { name string vol *structs.HostVolume diff --git a/nomad/state/state_store_host_volumes.go b/nomad/state/state_store_host_volumes.go index 06a5e64c5..33117540b 100644 --- a/nomad/state/state_store_host_volumes.go +++ b/nomad/state/state_store_host_volumes.go @@ -290,3 +290,21 @@ func upsertHostVolumeForNode(txn *txn, node *structs.Node, index uint64) error { return nil } + +func (s *StateStore) NodeHasHostVolume(nodeID, volName string) bool { + iter, err := s.HostVolumesByNodeID(nil, nodeID, SortDefault) + if err != nil { + return true + } + for { + raw := iter.Next() + if raw == nil { + break + } + match := raw.(*structs.HostVolume) + if match.Name == volName { + return true + } + } + return false +} diff --git a/nomad/state/state_store_host_volumes_test.go b/nomad/state/state_store_host_volumes_test.go index b390eaa60..0d0b4746c 100644 --- a/nomad/state/state_store_host_volumes_test.go +++ b/nomad/state/state_store_host_volumes_test.go @@ -234,6 +234,11 @@ func TestStateStore_UpdateHostVolumesFromFingerprint(t *testing.T) { vols[3].Name = "dhv-two" vols[3].NodeID = node.ID + must.False(t, store.NodeHasHostVolume(node.ID, "dhv-zero")) + must.False(t, store.NodeHasHostVolume(node.ID, "dhv-one")) + must.False(t, store.NodeHasHostVolume(node.ID, "dhv-two")) + must.False(t, store.NodeHasHostVolume(otherNode.ID, "dhv-one")) + index++ oldIndex := index must.NoError(t, store.UpsertHostVolume(index, vols[0])) @@ -241,6 +246,11 @@ func TestStateStore_UpdateHostVolumesFromFingerprint(t *testing.T) { must.NoError(t, store.UpsertHostVolume(index, vols[2])) must.NoError(t, store.UpsertHostVolume(index, vols[3])) + must.True(t, store.NodeHasHostVolume(node.ID, "dhv-zero")) + must.True(t, store.NodeHasHostVolume(node.ID, "dhv-one")) + must.True(t, store.NodeHasHostVolume(node.ID, "dhv-two")) + must.True(t, store.NodeHasHostVolume(otherNode.ID, "dhv-one")) + vol0, err := store.HostVolumeByID(nil, ns, vols[0].ID, false) must.NoError(t, err) must.Eq(t, structs.HostVolumeStateReady, vol0.State, diff --git a/ui/app/components/allocation-service-sidebar.hbs b/ui/app/components/allocation-service-sidebar.hbs index 62d915290..bcaad8a55 100644 --- a/ui/app/components/allocation-service-sidebar.hbs +++ b/ui/app/components/allocation-service-sidebar.hbs @@ -38,7 +38,7 @@ type="button" {{on "click" @fns.closeSidebar}} > - {{x-icon "cancel"}} + diff --git a/ui/app/components/chart-primitives/v-annotations.hbs b/ui/app/components/chart-primitives/v-annotations.hbs index 4ebab9910..07565dbff 100644 --- a/ui/app/components/chart-primitives/v-annotations.hbs +++ b/ui/app/components/chart-primitives/v-annotations.hbs @@ -11,7 +11,7 @@ title={{annotation.label}} class="indicator {{if annotation.isActive "is-active"}}" {{on "click" (fn this.selectAnnotation annotation.annotation)}}> - {{x-icon annotation.icon}} +
diff --git a/ui/app/components/chart-primitives/v-annotations.js b/ui/app/components/chart-primitives/v-annotations.js index 5452e95f7..e598dbe7a 100644 --- a/ui/app/components/chart-primitives/v-annotations.js +++ b/ui/app/components/chart-primitives/v-annotations.js @@ -9,8 +9,8 @@ import { action, get } from '@ember/object'; import styleString from 'nomad-ui/utils/properties/glimmer-style-string'; const iconFor = { - error: 'cancel-circle-fill', - info: 'info-circle-fill', + error: 'x-circle-fill', + info: 'info-fill', }; const iconClassFor = { diff --git a/ui/app/components/child-job-row.hbs b/ui/app/components/child-job-row.hbs index b97f4eae5..d87fb19f9 100644 --- a/ui/app/components/child-job-row.hbs +++ b/ui/app/components/child-job-row.hbs @@ -19,7 +19,7 @@ {{#if @job.isPack}} - {{x-icon "box" class= "test"}} + Pack {{/if}} diff --git a/ui/app/components/das/accepted.hbs b/ui/app/components/das/accepted.hbs index 3a460a292..fcabdcc65 100644 --- a/ui/app/components/das/accepted.hbs +++ b/ui/app/components/das/accepted.hbs @@ -8,5 +8,5 @@

Recommendation accepted

A new version of this job will now be deployed.

- {{x-icon "check-circle-fill"}} - \ No newline at end of file + + diff --git a/ui/app/components/das/error.hbs b/ui/app/components/das/error.hbs index 3671c8f56..48ba14e7a 100644 --- a/ui/app/components/das/error.hbs +++ b/ui/app/components/das/error.hbs @@ -14,7 +14,7 @@
{{@error}}
- {{x-icon "alert-circle-fill"}} +
- \ No newline at end of file + diff --git a/ui/app/components/das/recommendation-accordion.hbs b/ui/app/components/das/recommendation-accordion.hbs index e471e7531..5716415aa 100644 --- a/ui/app/components/das/recommendation-accordion.hbs +++ b/ui/app/components/das/recommendation-accordion.hbs @@ -24,7 +24,7 @@ {{else}}
- {{x-icon "info-circle-fill"}} + Resource Recommendation {{@summary.taskGroup.name}}
@@ -49,4 +49,4 @@
{{/if}} -{{/if}} \ No newline at end of file +{{/if}} diff --git a/ui/app/components/das/recommendation-chart.hbs b/ui/app/components/das/recommendation-chart.hbs index 63bf3b323..c50ba5271 100644 --- a/ui/app/components/das/recommendation-chart.hbs +++ b/ui/app/components/das/recommendation-chart.hbs @@ -24,7 +24,7 @@ width={{this.icon.width}} height={{this.icon.height}} > - {{x-icon this.icon.name}} + - \ No newline at end of file + diff --git a/ui/app/components/evaluation-sidebar/detail.hbs b/ui/app/components/evaluation-sidebar/detail.hbs index ad12d7bb6..1245c802e 100644 --- a/ui/app/components/evaluation-sidebar/detail.hbs +++ b/ui/app/components/evaluation-sidebar/detail.hbs @@ -33,7 +33,7 @@ type="button" {{on "click" this.closeSidebar}} > - {{x-icon "cancel"}} +
@@ -62,7 +62,7 @@ type="button" {{on "click" this.closeSidebar}} > - {{x-icon "cancel"}} +
{{! Start Evaluation Stats}} @@ -173,4 +173,4 @@ {{/if}} -{{/let}} \ No newline at end of file +{{/let}} diff --git a/ui/app/components/job-status/deployment-history.hbs b/ui/app/components/job-status/deployment-history.hbs index 16b9617d1..4b8cd5789 100644 --- a/ui/app/components/job-status/deployment-history.hbs +++ b/ui/app/components/job-status/deployment-history.hbs @@ -13,9 +13,9 @@ > {{or @title "Deployment History"}} {{#if this.isHidden}} - {{x-icon "chevron-down"}} + {{else}} - {{x-icon "chevron-up"}} + {{/if}} diff --git a/ui/app/components/keyboard-shortcuts-modal.hbs b/ui/app/components/keyboard-shortcuts-modal.hbs index 46c5c61be..8f98f7a9f 100644 --- a/ui/app/components/keyboard-shortcuts-modal.hbs +++ b/ui/app/components/keyboard-shortcuts-modal.hbs @@ -18,7 +18,7 @@ {{on "click" (toggle "keyboard.shortcutsVisible" this)}} aria-label="Dismiss" > - {{x-icon "cancel"}} +

Keyboard Shortcuts

Click a key pattern to re-bind it to a shortcut of your choosing.

diff --git a/ui/app/components/sentinel-policy-editor.hbs b/ui/app/components/sentinel-policy-editor.hbs index 723b5a52a..99931e7fd 100644 --- a/ui/app/components/sentinel-policy-editor.hbs +++ b/ui/app/components/sentinel-policy-editor.hbs @@ -77,6 +77,18 @@ +
+ + Scope + + Submit Job + + + Submit Host Volume + + +
+