File: builders.go

package info (click to toggle)
golang-github-mesos-mesos-go 0.0.6%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 11,724 kB
  • sloc: makefile: 163
file content (97 lines) | stat: -rw-r--r-- 2,591 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package resources

import (
	"fmt"

	"github.com/mesos/mesos-go/api/v1/lib"
)

type (
	// Builder simplifies construction of Resource objects
	Builder struct{ mesos.Resource }
	// RangeBuilder simplifies construction of Range objects
	RangeBuilder struct{ mesos.Ranges }
)

func NewCPUs(value float64) *Builder {
	return Build().Name(NameCPUs).Scalar(value)
}

func NewMemory(value float64) *Builder {
	return Build().Name(NameMem).Scalar(value)
}

func NewDisk(value float64) *Builder {
	return Build().Name(NameDisk).Scalar(value)
}

func NewGPUs(value uint) *Builder {
	return Build().Name(NameGPUs).Scalar(float64(value))
}

func BuildRanges() *RangeBuilder {
	return &RangeBuilder{Ranges: mesos.Ranges(nil)}
}

// Span is a functional option for Ranges, defines the begin and end points of a
// continuous span within a range
func (rb *RangeBuilder) Span(bp, ep uint64) *RangeBuilder {
	rb.Ranges = append(rb.Ranges, mesos.Value_Range{Begin: bp, End: ep})
	return rb
}

func Build() *Builder {
	return &Builder{}
}
func (rb *Builder) Name(name fmt.Stringer) *Builder {
	rb.Resource.Name = name.String()
	return rb
}
func (rb *Builder) Role(role string) *Builder {
	rb.Resource.Role = &role
	return rb
}
func (rb *Builder) Scalar(x float64) *Builder {
	rb.Resource.Type = mesos.SCALAR.Enum()
	rb.Resource.Scalar = &mesos.Value_Scalar{Value: x}
	return rb
}
func (rb *Builder) Set(x ...string) *Builder {
	rb.Resource.Type = mesos.SET.Enum()
	rb.Resource.Set = &mesos.Value_Set{Item: x}
	return rb
}
func (rb *Builder) Ranges(rs mesos.Ranges) *Builder {
	rb.Resource.Type = mesos.RANGES.Enum()
	rb.Resource.Ranges = rb.Resource.Ranges.Add(&mesos.Value_Ranges{Range: rs})
	return rb
}
func (rb *Builder) Disk(persistenceID, containerPath string) *Builder {
	rb.Resource.Disk = &mesos.Resource_DiskInfo{}
	if containerPath != "" {
		rb.Resource.Disk.Volume = &mesos.Volume{ContainerPath: containerPath}
	}
	if persistenceID != "" {
		rb.Resource.Disk.Persistence = &mesos.Resource_DiskInfo_Persistence{ID: persistenceID}
	}
	return rb
}

func (rb *Builder) DiskSource(root string, t mesos.Resource_DiskInfo_Source_Type) *Builder {
	if rb.Resource.Disk == nil {
		return rb
	}
	rb.Resource.Disk.Source = &mesos.Resource_DiskInfo_Source{Type: t}
	switch t {
	case mesos.PATH:
		rb.Resource.Disk.Source.Path = &mesos.Resource_DiskInfo_Source_Path{Root: &root}
	case mesos.MOUNT:
		rb.Resource.Disk.Source.Mount = &mesos.Resource_DiskInfo_Source_Mount{Root: &root}
	}
	return rb
}

func (rb *Builder) Revocable() *Builder {
	rb.Resource.Revocable = &mesos.Resource_RevocableInfo{}
	return rb
}