/
data_source_scheduler_config.go
63 lines (52 loc) · 2.06 KB
/
data_source_scheduler_config.go
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
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package nomad
import (
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-provider-nomad/nomad/helper"
)
func dataSourceSchedulerConfig() *schema.Resource {
return &schema.Resource{
Read: dataSourceSchedulerConfigRead,
Schema: map[string]*schema.Schema{
"memory_oversubscription_enabled": {
Description: "When true, tasks may exceed their reserved memory limit.",
Type: schema.TypeBool,
Computed: true,
},
"scheduler_algorithm": {
Description: "Specifies whether scheduler binpacks or spreads allocations on available nodes.",
Type: schema.TypeString,
Computed: true,
},
"preemption_config": {
Description: "Options to enable preemption for various schedulers.",
Computed: true,
Type: schema.TypeMap,
Elem: &schema.Schema{Type: schema.TypeBool},
},
},
}
}
func dataSourceSchedulerConfigRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(ProviderConfig).client
schedCfg, _, err := client.Operator().SchedulerGetConfiguration(nil)
if err != nil {
return fmt.Errorf("failed to query scheduler config: %v", err)
}
// Set a unique ID, as we have nothing else to go on.
d.SetId(resource.UniqueId())
premptMap := map[string]bool{
"batch_scheduler_enabled": schedCfg.SchedulerConfig.PreemptionConfig.BatchSchedulerEnabled,
"service_scheduler_enabled": schedCfg.SchedulerConfig.PreemptionConfig.ServiceSchedulerEnabled,
"sysbatch_scheduler_enabled": schedCfg.SchedulerConfig.PreemptionConfig.SysBatchSchedulerEnabled,
"system_scheduler_enabled": schedCfg.SchedulerConfig.PreemptionConfig.SystemSchedulerEnabled,
}
sw := helper.NewStateWriter(d)
sw.Set("memory_oversubscription_enabled", schedCfg.SchedulerConfig.MemoryOversubscriptionEnabled)
sw.Set("scheduler_algorithm", schedCfg.SchedulerConfig.SchedulerAlgorithm)
sw.Set("preemption_config", premptMap)
return sw.Error()
}