podman
72 строки · 1.7 Кб
1// Copyright 2016 go-dockerclient authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package docker6
7import (8"context"9"encoding/json"10"errors"11"net/http"12
13"github.com/docker/docker/api/types/swarm"14)
15
16// NoSuchTask is the error returned when a given task does not exist.
17type NoSuchTask struct {18ID string19Err error20}
21
22func (err *NoSuchTask) Error() string {23if err.Err != nil {24return err.Err.Error()25}26return "No such task: " + err.ID27}
28
29// ListTasksOptions specify parameters to the ListTasks function.
30//
31// See http://goo.gl/rByLzw for more details.
32type ListTasksOptions struct {33Filters map[string][]string34Context context.Context35}
36
37// ListTasks returns a slice of tasks matching the given criteria.
38//
39// See http://goo.gl/rByLzw for more details.
40func (c *Client) ListTasks(opts ListTasksOptions) ([]swarm.Task, error) {41path := "/tasks?" + queryString(opts)42resp, err := c.do(http.MethodGet, path, doOptions{context: opts.Context})43if err != nil {44return nil, err45}46defer resp.Body.Close()47var tasks []swarm.Task48if err := json.NewDecoder(resp.Body).Decode(&tasks); err != nil {49return nil, err50}51return tasks, nil52}
53
54// InspectTask returns information about a task by its ID.
55//
56// See http://goo.gl/kyziuq for more details.
57func (c *Client) InspectTask(id string) (*swarm.Task, error) {58resp, err := c.do(http.MethodGet, "/tasks/"+id, doOptions{})59if err != nil {60var e *Error61if errors.As(err, &e) && e.Status == http.StatusNotFound {62return nil, &NoSuchTask{ID: id}63}64return nil, err65}66defer resp.Body.Close()67var task swarm.Task68if err := json.NewDecoder(resp.Body).Decode(&task); err != nil {69return nil, err70}71return &task, nil72}
73