jobspec: parse network resources

This commit is contained in:
Mitchell Hashimoto
2015-09-14 18:27:37 -07:00
parent 47499db3bb
commit 2a6ebd4aaa
4 changed files with 52 additions and 10 deletions

View File

@@ -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
}

View File

@@ -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{

View File

@@ -34,6 +34,12 @@ job "binstore-storagelocker" {
resources {
cpu = 500
memory = 128
network {
mbits = "100"
reserved_ports = [1,2,3]
dynamic_ports = 3
}
}
}

View File

@@ -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.