mirror of
https://github.com/kemko/nomad.git
synced 2026-01-06 18:35:44 +03:00
quota: parse device block (#23866)
This commit is contained in:
committed by
GitHub
parent
2d7dcba4b7
commit
9265b384b3
@@ -119,6 +119,10 @@ func testQuotaSpec() *QuotaSpec {
|
||||
RegionLimit: &Resources{
|
||||
CPU: pointerOf(2000),
|
||||
MemoryMB: pointerOf(2000),
|
||||
Devices: []*RequestedDevice{{
|
||||
Name: "nvidia/gpu/1080ti",
|
||||
Count: pointerOf(uint64(2)),
|
||||
}},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -270,6 +270,7 @@ func parseQuotaResource(result *api.Resources, list *ast.ObjectList) error {
|
||||
"cpu",
|
||||
"memory",
|
||||
"memory_max",
|
||||
"devices",
|
||||
}
|
||||
if err := helper.CheckHCLKeys(listVal, valid); err != nil {
|
||||
return multierror.Prefix(err, "resources ->")
|
||||
@@ -280,9 +281,46 @@ func parseQuotaResource(result *api.Resources, list *ast.ObjectList) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Manually parse
|
||||
delete(m, "devices")
|
||||
|
||||
if err := mapstructure.WeakDecode(m, result); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Parse devices
|
||||
if o := listVal.Filter("device"); len(o.Items) > 0 {
|
||||
result.Devices = make([]*api.RequestedDevice, 0)
|
||||
if err := parseDeviceResource(&result.Devices, o); err != nil {
|
||||
return multierror.Prefix(err, "devices ->")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseDeviceResource(result *[]*api.RequestedDevice, list *ast.ObjectList) error {
|
||||
for _, o := range list.Elem().Items {
|
||||
// Check for invalid keys
|
||||
valid := []string{
|
||||
"name",
|
||||
"count",
|
||||
}
|
||||
if err := helper.CheckHCLKeys(o.Val, valid); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var m map[string]interface{}
|
||||
if err := hcl.DecodeObject(&m, o.Val); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var device api.RequestedDevice
|
||||
if err := mapstructure.WeakDecode(m, &device); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*result = append(*result, &device)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user