mirror of
https://github.com/kemko/nomad.git
synced 2026-01-01 16:05:42 +03:00
This PR introduces API endpoints /v1/volumes/claims/ and /v1/volumes/claim/:id for listing and deleting task group host volume claims, respectively.
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package api
|
|
|
|
import "net/url"
|
|
|
|
// TaskGroupHostVolumeClaim associates a task group with a host volume ID. It's
|
|
// used for stateful deployments, i.e., volume requests with "sticky" set to
|
|
// true.
|
|
type TaskGroupHostVolumeClaim struct {
|
|
ID string `mapstructure:"id"`
|
|
Namespace string `mapstructure:"namespace"`
|
|
JobID string `mapstructure:"job_id"`
|
|
TaskGroupName string `mapstructure:"task_group_name"`
|
|
AllocID string `mapstructure:"alloc_id"`
|
|
VolumeID string `mapstructure:"volume_id"`
|
|
VolumeName string `mapstructure:"volume_name"`
|
|
|
|
CreateIndex uint64
|
|
ModifyIndex uint64
|
|
}
|
|
|
|
// TaskGroupHostVolumeClaims is used to access the API.
|
|
type TaskGroupHostVolumeClaims struct {
|
|
client *Client
|
|
}
|
|
|
|
// TaskGroupHostVolumeClaims returns a new handle on the API.
|
|
func (c *Client) TaskGroupHostVolumeClaims() *TaskGroupHostVolumeClaims {
|
|
return &TaskGroupHostVolumeClaims{client: c}
|
|
}
|
|
|
|
type TaskGroupHostVolumeClaimsListRequest struct {
|
|
JobID string
|
|
TaskGroup string
|
|
VolumeName string
|
|
}
|
|
|
|
func (tgvc *TaskGroupHostVolumeClaims) List(req *TaskGroupHostVolumeClaimsListRequest, opts *QueryOptions) ([]*TaskGroupHostVolumeClaim, *QueryMeta, error) {
|
|
|
|
qv := url.Values{}
|
|
if req != nil {
|
|
if req.JobID != "" {
|
|
qv.Set("job_id", req.JobID)
|
|
}
|
|
if req.TaskGroup != "" {
|
|
qv.Set("task_group", req.TaskGroup)
|
|
}
|
|
if req.VolumeName != "" {
|
|
qv.Set("volume_name", req.VolumeName)
|
|
}
|
|
}
|
|
|
|
var out []*TaskGroupHostVolumeClaim
|
|
qm, err := tgvc.client.query("/v1/volumes/claims?"+qv.Encode(), &out, opts)
|
|
if err != nil {
|
|
return nil, qm, err
|
|
}
|
|
return out, qm, nil
|
|
}
|
|
|
|
func (tgvc *TaskGroupHostVolumeClaims) Delete(claimID string, opts *WriteOptions) (*WriteMeta, error) {
|
|
path, err := url.JoinPath("/v1/volumes/claim", url.PathEscape(claimID))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
wm, err := tgvc.client.delete(path, nil, nil, opts)
|
|
return wm, err
|
|
}
|