mirror of
https://github.com/kemko/nomad.git
synced 2026-01-05 01:45:44 +03:00
jobspec: parse network resources
This commit is contained in:
@@ -305,14 +305,8 @@ func parseTasks(result *[]*structs.Task, obj *hclobj.Object) error {
|
||||
// If we have resources, then parse that
|
||||
if o := o.Get("resources", false); o != nil {
|
||||
var r structs.Resources
|
||||
for _, o := range o.Elem(false) {
|
||||
var m map[string]interface{}
|
||||
if err := hcl.DecodeObject(&m, o); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := mapstructure.WeakDecode(m, &r); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := parseResources(&r, o); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
t.Resources = &r
|
||||
@@ -323,3 +317,34 @@ func parseTasks(result *[]*structs.Task, obj *hclobj.Object) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseResources(result *structs.Resources, obj *hclobj.Object) error {
|
||||
for _, o := range obj.Elem(false) {
|
||||
var m map[string]interface{}
|
||||
if err := hcl.DecodeObject(&m, o); err != nil {
|
||||
return err
|
||||
}
|
||||
delete(m, "network")
|
||||
|
||||
if err := mapstructure.WeakDecode(m, result); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Parse the network resources
|
||||
if o := o.Get("network", false); o != nil {
|
||||
var r structs.NetworkResource
|
||||
var m map[string]interface{}
|
||||
if err := hcl.DecodeObject(&m, o); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := mapstructure.WeakDecode(m, &r); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
result.Networks = []*structs.NetworkResource{&r}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -79,6 +79,13 @@ func TestParse(t *testing.T) {
|
||||
Resources: &structs.Resources{
|
||||
CPU: 500,
|
||||
MemoryMB: 128,
|
||||
Networks: []*structs.NetworkResource{
|
||||
&structs.NetworkResource{
|
||||
MBits: 100,
|
||||
ReservedPorts: []int{1, 2, 3},
|
||||
DynamicPorts: 3,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&structs.Task{
|
||||
|
||||
@@ -34,6 +34,12 @@ job "binstore-storagelocker" {
|
||||
resources {
|
||||
cpu = 500
|
||||
memory = 128
|
||||
|
||||
network {
|
||||
mbits = "100"
|
||||
reserved_ports = [1,2,3]
|
||||
dynamic_ports = 3
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -612,9 +612,9 @@ type NetworkResource struct {
|
||||
Device string // Name of the device
|
||||
CIDR string // CIDR block of addresses
|
||||
IP string // IP address
|
||||
ReservedPorts []int // Reserved ports
|
||||
MBits int // Throughput
|
||||
DynamicPorts int // Dynamically assigned ports
|
||||
ReservedPorts []int `mapstructure:"reserved_ports"` // Reserved ports
|
||||
DynamicPorts int `mapstructure:"dynamic_ports"` // Dynamically assigned ports
|
||||
}
|
||||
|
||||
// Copy returns a deep copy of the network resource
|
||||
@@ -638,6 +638,10 @@ func (n *NetworkResource) Add(delta *NetworkResource) {
|
||||
n.DynamicPorts += delta.DynamicPorts
|
||||
}
|
||||
|
||||
func (n *NetworkResource) GoString() string {
|
||||
return fmt.Sprintf("*%#v", *n)
|
||||
}
|
||||
|
||||
const (
|
||||
// JobTypeNomad is reserved for internal system tasks and is
|
||||
// always handled by the CoreScheduler.
|
||||
|
||||
Reference in New Issue
Block a user