e8a361310f
Upserts and deletes of node pools are forwarded to the authoritative region, just like we do for namespaces, quotas, ACL policies, etc. Replicate node pools from the authoritative region.
297 lines
6 KiB
Go
297 lines
6 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package mock
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/hashicorp/nomad/helper/uuid"
|
|
"github.com/hashicorp/nomad/nomad/structs"
|
|
)
|
|
|
|
func HCL() string {
|
|
return `job "my-job" {
|
|
datacenters = ["dc1"]
|
|
type = "service"
|
|
constraint {
|
|
attribute = "${attr.kernel.name}"
|
|
value = "linux"
|
|
}
|
|
|
|
group "web" {
|
|
count = 10
|
|
restart {
|
|
attempts = 3
|
|
interval = "10m"
|
|
delay = "1m"
|
|
mode = "delay"
|
|
}
|
|
task "web" {
|
|
driver = "exec"
|
|
config {
|
|
command = "/bin/date"
|
|
}
|
|
resources {
|
|
cpu = 500
|
|
memory = 256
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`
|
|
}
|
|
|
|
// HCLVar returns a the HCL of job that requires a HCL variables S, N,
|
|
// and B to be set. Also returns the content of a vars-file to satisfy
|
|
// those variables.
|
|
func HCLVar() (string, string) {
|
|
return `
|
|
variable "S" {
|
|
type = string
|
|
}
|
|
|
|
variable "N" {
|
|
type = number
|
|
}
|
|
|
|
variable "B" {
|
|
type = bool
|
|
}
|
|
|
|
job "var-job" {
|
|
type = "batch"
|
|
constraint {
|
|
attribute = "${attr.kernel.name}"
|
|
value = "linux"
|
|
}
|
|
group "group" {
|
|
task "task" {
|
|
driver = "raw_exec"
|
|
config {
|
|
command = "echo"
|
|
args = ["S is ${var.S}, N is ${var.N}, B is ${var.B}"]
|
|
}
|
|
resources {
|
|
cpu = 10
|
|
memory = 32
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`, `
|
|
S = "stringy"
|
|
N = 42
|
|
B = true
|
|
`
|
|
}
|
|
|
|
func Eval() *structs.Evaluation {
|
|
now := time.Now().UTC().UnixNano()
|
|
eval := &structs.Evaluation{
|
|
ID: uuid.Generate(),
|
|
Namespace: structs.DefaultNamespace,
|
|
Priority: 50,
|
|
Type: structs.JobTypeService,
|
|
JobID: uuid.Generate(),
|
|
Status: structs.EvalStatusPending,
|
|
CreateTime: now,
|
|
ModifyTime: now,
|
|
}
|
|
return eval
|
|
}
|
|
|
|
func BlockedEval() *structs.Evaluation {
|
|
e := Eval()
|
|
e.Status = structs.EvalStatusBlocked
|
|
e.FailedTGAllocs = map[string]*structs.AllocMetric{
|
|
"cache": {
|
|
DimensionExhausted: map[string]int{
|
|
"memory": 1,
|
|
},
|
|
ResourcesExhausted: map[string]*structs.Resources{
|
|
"redis": {
|
|
CPU: 100,
|
|
MemoryMB: 1024,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
return e
|
|
}
|
|
|
|
func JobSummary(jobID string) *structs.JobSummary {
|
|
return &structs.JobSummary{
|
|
JobID: jobID,
|
|
Namespace: structs.DefaultNamespace,
|
|
Summary: map[string]structs.TaskGroupSummary{
|
|
"web": {
|
|
Queued: 0,
|
|
Starting: 0,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func JobSysBatchSummary(jobID string) *structs.JobSummary {
|
|
return &structs.JobSummary{
|
|
JobID: jobID,
|
|
Namespace: structs.DefaultNamespace,
|
|
Summary: map[string]structs.TaskGroupSummary{
|
|
"pinger": {
|
|
Queued: 0,
|
|
Starting: 0,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func VaultAccessor() *structs.VaultAccessor {
|
|
return &structs.VaultAccessor{
|
|
Accessor: uuid.Generate(),
|
|
NodeID: uuid.Generate(),
|
|
AllocID: uuid.Generate(),
|
|
CreationTTL: 86400,
|
|
Task: "foo",
|
|
}
|
|
}
|
|
|
|
func SITokenAccessor() *structs.SITokenAccessor {
|
|
return &structs.SITokenAccessor{
|
|
NodeID: uuid.Generate(),
|
|
AllocID: uuid.Generate(),
|
|
AccessorID: uuid.Generate(),
|
|
TaskName: "foo",
|
|
}
|
|
}
|
|
|
|
func Deployment() *structs.Deployment {
|
|
return &structs.Deployment{
|
|
ID: uuid.Generate(),
|
|
JobID: uuid.Generate(),
|
|
Namespace: structs.DefaultNamespace,
|
|
JobVersion: 2,
|
|
JobModifyIndex: 20,
|
|
JobCreateIndex: 18,
|
|
TaskGroups: map[string]*structs.DeploymentState{
|
|
"web": {
|
|
DesiredTotal: 10,
|
|
},
|
|
},
|
|
Status: structs.DeploymentStatusRunning,
|
|
StatusDescription: structs.DeploymentStatusDescriptionRunning,
|
|
ModifyIndex: 23,
|
|
CreateIndex: 21,
|
|
}
|
|
}
|
|
|
|
func Plan() *structs.Plan {
|
|
return &structs.Plan{
|
|
Priority: 50,
|
|
}
|
|
}
|
|
|
|
func PlanResult() *structs.PlanResult {
|
|
return &structs.PlanResult{}
|
|
}
|
|
|
|
func ScalingPolicy() *structs.ScalingPolicy {
|
|
return &structs.ScalingPolicy{
|
|
ID: uuid.Generate(),
|
|
Min: 1,
|
|
Max: 100,
|
|
Type: structs.ScalingPolicyTypeHorizontal,
|
|
Target: map[string]string{
|
|
structs.ScalingTargetNamespace: structs.DefaultNamespace,
|
|
structs.ScalingTargetJob: uuid.Generate(),
|
|
structs.ScalingTargetGroup: uuid.Generate(),
|
|
structs.ScalingTargetTask: uuid.Generate(),
|
|
},
|
|
Policy: map[string]interface{}{
|
|
"a": "b",
|
|
},
|
|
Enabled: true,
|
|
}
|
|
}
|
|
|
|
func Events(index uint64) *structs.Events {
|
|
return &structs.Events{
|
|
Index: index,
|
|
Events: []structs.Event{
|
|
{
|
|
Index: index,
|
|
Topic: "Node",
|
|
Type: "update",
|
|
Key: uuid.Generate(),
|
|
Payload: Node(),
|
|
},
|
|
{
|
|
Index: index,
|
|
Topic: "Eval",
|
|
Type: "update",
|
|
Key: uuid.Generate(),
|
|
Payload: Eval(),
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func Namespace() *structs.Namespace {
|
|
id := uuid.Generate()
|
|
ns := &structs.Namespace{
|
|
Name: fmt.Sprintf("team-%s", id),
|
|
Meta: map[string]string{"team": id},
|
|
Description: "test namespace",
|
|
CreateIndex: 100,
|
|
ModifyIndex: 200,
|
|
}
|
|
ns.SetHash()
|
|
return ns
|
|
}
|
|
|
|
func NodePool() *structs.NodePool {
|
|
pool := &structs.NodePool{
|
|
Name: fmt.Sprintf("pool-%s", uuid.Short()),
|
|
Description: "test node pool",
|
|
Meta: map[string]string{"team": "test"},
|
|
SchedulerConfiguration: &structs.NodePoolSchedulerConfiguration{
|
|
SchedulerAlgorithm: structs.SchedulerAlgorithmSpread,
|
|
},
|
|
}
|
|
pool.SetHash()
|
|
return pool
|
|
}
|
|
|
|
// ServiceRegistrations generates an array containing two unique service
|
|
// registrations.
|
|
func ServiceRegistrations() []*structs.ServiceRegistration {
|
|
return []*structs.ServiceRegistration{
|
|
{
|
|
ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db",
|
|
ServiceName: "example-cache",
|
|
Namespace: "default",
|
|
NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c",
|
|
Datacenter: "dc1",
|
|
JobID: "example",
|
|
AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d",
|
|
Tags: []string{"foo"},
|
|
Address: "192.168.10.1",
|
|
Port: 23000,
|
|
},
|
|
{
|
|
ID: "_nomad-task-ca60e901-675a-0ab2-2e57-2f3b05fdc540-group-api-countdash-api-http",
|
|
ServiceName: "countdash-api",
|
|
Namespace: "platform",
|
|
NodeID: "ba991c17-7ce5-9c20-78b7-311e63578583",
|
|
Datacenter: "dc2",
|
|
JobID: "countdash-api",
|
|
AllocID: "ca60e901-675a-0ab2-2e57-2f3b05fdc540",
|
|
Tags: []string{"bar"},
|
|
Address: "192.168.200.200",
|
|
Port: 29000,
|
|
},
|
|
}
|
|
}
|