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  }