github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/nomad/mock/alloc.go (about) 1 package mock 2 3 import ( 4 "math/rand" 5 6 "github.com/hashicorp/nomad/helper/uuid" 7 "github.com/hashicorp/nomad/nomad/structs" 8 ) 9 10 func Alloc() *structs.Allocation { 11 job := Job() 12 alloc := &structs.Allocation{ 13 ID: uuid.Generate(), 14 EvalID: uuid.Generate(), 15 NodeID: "12345678-abcd-efab-cdef-123456789abc", 16 Namespace: structs.DefaultNamespace, 17 TaskGroup: "web", 18 19 // TODO Remove once clientv2 gets merged 20 Resources: &structs.Resources{ 21 CPU: 500, 22 MemoryMB: 256, 23 DiskMB: 150, 24 Networks: []*structs.NetworkResource{ 25 { 26 Device: "eth0", 27 IP: "192.168.0.100", 28 ReservedPorts: []structs.Port{{Label: "admin", Value: 5000}}, 29 MBits: 50, 30 DynamicPorts: []structs.Port{{Label: "http"}}, 31 }, 32 }, 33 }, 34 TaskResources: map[string]*structs.Resources{ 35 "web": { 36 CPU: 500, 37 MemoryMB: 256, 38 Networks: []*structs.NetworkResource{ 39 { 40 Device: "eth0", 41 IP: "192.168.0.100", 42 ReservedPorts: []structs.Port{{Label: "admin", Value: 5000}}, 43 MBits: 50, 44 DynamicPorts: []structs.Port{{Label: "http", Value: 9876}}, 45 }, 46 }, 47 }, 48 }, 49 SharedResources: &structs.Resources{ 50 DiskMB: 150, 51 }, 52 53 AllocatedResources: &structs.AllocatedResources{ 54 Tasks: map[string]*structs.AllocatedTaskResources{ 55 "web": { 56 Cpu: structs.AllocatedCpuResources{ 57 CpuShares: 500, 58 }, 59 Memory: structs.AllocatedMemoryResources{ 60 MemoryMB: 256, 61 }, 62 Networks: []*structs.NetworkResource{ 63 { 64 Device: "eth0", 65 IP: "192.168.0.100", 66 ReservedPorts: []structs.Port{{Label: "admin", Value: 5000}}, 67 MBits: 50, 68 DynamicPorts: []structs.Port{{Label: "http", Value: 9876}}, 69 }, 70 }, 71 }, 72 }, 73 Shared: structs.AllocatedSharedResources{ 74 DiskMB: 150, 75 }, 76 }, 77 Job: job, 78 DesiredStatus: structs.AllocDesiredStatusRun, 79 ClientStatus: structs.AllocClientStatusPending, 80 } 81 alloc.JobID = alloc.Job.ID 82 return alloc 83 } 84 85 func AllocWithoutReservedPort() *structs.Allocation { 86 alloc := Alloc() 87 alloc.Resources.Networks[0].ReservedPorts = nil 88 alloc.TaskResources["web"].Networks[0].ReservedPorts = nil 89 alloc.AllocatedResources.Tasks["web"].Networks[0].ReservedPorts = nil 90 91 return alloc 92 } 93 94 func AllocForNode(n *structs.Node) *structs.Allocation { 95 nodeIP := n.NodeResources.NodeNetworks[0].Addresses[0].Address 96 97 dynamicPortRange := structs.DefaultMaxDynamicPort - structs.DefaultMinDynamicPort 98 randomDynamicPort := rand.Intn(dynamicPortRange) + structs.DefaultMinDynamicPort 99 100 alloc := Alloc() 101 alloc.NodeID = n.ID 102 103 // Set node IP address. 104 alloc.Resources.Networks[0].IP = nodeIP 105 alloc.TaskResources["web"].Networks[0].IP = nodeIP 106 alloc.AllocatedResources.Tasks["web"].Networks[0].IP = nodeIP 107 108 // Set dynamic port to a random value. 109 alloc.TaskResources["web"].Networks[0].DynamicPorts = []structs.Port{{Label: "http", Value: randomDynamicPort}} 110 alloc.AllocatedResources.Tasks["web"].Networks[0].DynamicPorts = []structs.Port{{Label: "http", Value: randomDynamicPort}} 111 112 return alloc 113 114 } 115 116 func AllocForNodeWithoutReservedPort(n *structs.Node) *structs.Allocation { 117 nodeIP := n.NodeResources.NodeNetworks[0].Addresses[0].Address 118 119 dynamicPortRange := structs.DefaultMaxDynamicPort - structs.DefaultMinDynamicPort 120 randomDynamicPort := rand.Intn(dynamicPortRange) + structs.DefaultMinDynamicPort 121 122 alloc := AllocWithoutReservedPort() 123 alloc.NodeID = n.ID 124 125 // Set node IP address. 126 alloc.Resources.Networks[0].IP = nodeIP 127 alloc.TaskResources["web"].Networks[0].IP = nodeIP 128 alloc.AllocatedResources.Tasks["web"].Networks[0].IP = nodeIP 129 130 // Set dynamic port to a random value. 131 alloc.TaskResources["web"].Networks[0].DynamicPorts = []structs.Port{{Label: "http", Value: randomDynamicPort}} 132 alloc.AllocatedResources.Tasks["web"].Networks[0].DynamicPorts = []structs.Port{{Label: "http", Value: randomDynamicPort}} 133 134 return alloc 135 } 136 137 func SysBatchAlloc() *structs.Allocation { 138 job := SystemBatchJob() 139 return &structs.Allocation{ 140 ID: uuid.Generate(), 141 EvalID: uuid.Generate(), 142 NodeID: "12345678-abcd-efab-cdef-123456789abc", 143 Namespace: structs.DefaultNamespace, 144 TaskGroup: "pinger", 145 AllocatedResources: &structs.AllocatedResources{ 146 Tasks: map[string]*structs.AllocatedTaskResources{ 147 "ping-example": { 148 Cpu: structs.AllocatedCpuResources{CpuShares: 500}, 149 Memory: structs.AllocatedMemoryResources{MemoryMB: 256}, 150 Networks: []*structs.NetworkResource{{ 151 Device: "eth0", 152 IP: "192.168.0.100", 153 }}, 154 }, 155 }, 156 Shared: structs.AllocatedSharedResources{DiskMB: 150}, 157 }, 158 Job: job, 159 JobID: job.ID, 160 DesiredStatus: structs.AllocDesiredStatusRun, 161 ClientStatus: structs.AllocClientStatusPending, 162 } 163 } 164 165 func SystemAlloc() *structs.Allocation { 166 alloc := &structs.Allocation{ 167 ID: uuid.Generate(), 168 EvalID: uuid.Generate(), 169 NodeID: "12345678-abcd-efab-cdef-123456789abc", 170 Namespace: structs.DefaultNamespace, 171 TaskGroup: "web", 172 173 // TODO Remove once clientv2 gets merged 174 Resources: &structs.Resources{ 175 CPU: 500, 176 MemoryMB: 256, 177 DiskMB: 150, 178 Networks: []*structs.NetworkResource{ 179 { 180 Device: "eth0", 181 IP: "192.168.0.100", 182 ReservedPorts: []structs.Port{{Label: "admin", Value: 5000}}, 183 MBits: 50, 184 DynamicPorts: []structs.Port{{Label: "http"}}, 185 }, 186 }, 187 }, 188 TaskResources: map[string]*structs.Resources{ 189 "web": { 190 CPU: 500, 191 MemoryMB: 256, 192 Networks: []*structs.NetworkResource{ 193 { 194 Device: "eth0", 195 IP: "192.168.0.100", 196 ReservedPorts: []structs.Port{{Label: "admin", Value: 5000}}, 197 MBits: 50, 198 DynamicPorts: []structs.Port{{Label: "http", Value: 9876}}, 199 }, 200 }, 201 }, 202 }, 203 SharedResources: &structs.Resources{ 204 DiskMB: 150, 205 }, 206 207 AllocatedResources: &structs.AllocatedResources{ 208 Tasks: map[string]*structs.AllocatedTaskResources{ 209 "web": { 210 Cpu: structs.AllocatedCpuResources{ 211 CpuShares: 500, 212 }, 213 Memory: structs.AllocatedMemoryResources{ 214 MemoryMB: 256, 215 }, 216 Networks: []*structs.NetworkResource{ 217 { 218 Device: "eth0", 219 IP: "192.168.0.100", 220 ReservedPorts: []structs.Port{{Label: "admin", Value: 5000}}, 221 MBits: 50, 222 DynamicPorts: []structs.Port{{Label: "http", Value: 9876}}, 223 }, 224 }, 225 }, 226 }, 227 Shared: structs.AllocatedSharedResources{ 228 DiskMB: 150, 229 }, 230 }, 231 Job: SystemJob(), 232 DesiredStatus: structs.AllocDesiredStatusRun, 233 ClientStatus: structs.AllocClientStatusPending, 234 } 235 alloc.JobID = alloc.Job.ID 236 return alloc 237 }