59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/hashicorp/nomad/nomad/structs/config"
|
|
)
|
|
|
|
// DrainConfig describes a Node's drain behavior on graceful shutdown.
|
|
type DrainConfig struct {
|
|
// Deadline is the duration after the drain starts when client will stop
|
|
// waiting for allocations to stop.
|
|
Deadline time.Duration
|
|
|
|
// IgnoreSystemJobs allows systems jobs to remain on the node even though it
|
|
// has been marked for draining.
|
|
IgnoreSystemJobs bool
|
|
|
|
// Force causes the drain to stop all the allocations immediately, ignoring
|
|
// their jobs' migrate blocks.
|
|
Force bool
|
|
}
|
|
|
|
// DrainConfigFromAgent creates the internal read-only copy of the client
|
|
// agent's DrainConfig.
|
|
func DrainConfigFromAgent(c *config.DrainConfig) (*DrainConfig, error) {
|
|
if c == nil {
|
|
return nil, nil
|
|
}
|
|
|
|
deadline := time.Hour
|
|
ignoreSystemJobs := false
|
|
force := false
|
|
|
|
if c.Deadline != nil {
|
|
var err error
|
|
deadline, err = time.ParseDuration(*c.Deadline)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error parsing Deadline: %w", err)
|
|
}
|
|
}
|
|
if c.IgnoreSystemJobs != nil {
|
|
ignoreSystemJobs = *c.IgnoreSystemJobs
|
|
}
|
|
if c.Force != nil {
|
|
force = *c.Force
|
|
}
|
|
|
|
return &DrainConfig{
|
|
Deadline: deadline,
|
|
IgnoreSystemJobs: ignoreSystemJobs,
|
|
Force: force,
|
|
}, nil
|
|
}
|