81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/cirruslabs/orchard/pkg/resource/v1"
|
|
"net"
|
|
"net/http"
|
|
"net/url"
|
|
"strconv"
|
|
)
|
|
|
|
type WorkersService struct {
|
|
client *Client
|
|
}
|
|
|
|
func (service *WorkersService) Create(ctx context.Context, worker v1.Worker) (*v1.Worker, error) {
|
|
err := service.client.request(ctx, http.MethodPost, "workers",
|
|
worker, &worker, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &worker, nil
|
|
}
|
|
|
|
func (service *WorkersService) List(ctx context.Context) ([]v1.Worker, error) {
|
|
var workers []v1.Worker
|
|
|
|
err := service.client.request(ctx, http.MethodGet, "workers",
|
|
nil, &workers, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return workers, nil
|
|
}
|
|
|
|
func (service *WorkersService) Get(ctx context.Context, name string) (*v1.Worker, error) {
|
|
var worker v1.Worker
|
|
|
|
err := service.client.request(ctx, http.MethodGet, fmt.Sprintf("workers/%s", url.PathEscape(name)),
|
|
nil, &worker, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &worker, nil
|
|
}
|
|
|
|
func (service *WorkersService) Update(ctx context.Context, worker v1.Worker) (*v1.Worker, error) {
|
|
err := service.client.request(ctx, http.MethodPut, fmt.Sprintf("workers/%s", url.PathEscape(worker.Name)),
|
|
worker, &worker, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &worker, nil
|
|
}
|
|
|
|
func (service *WorkersService) Delete(ctx context.Context, name string) error {
|
|
err := service.client.request(ctx, http.MethodDelete, fmt.Sprintf("workers/%s", url.PathEscape(name)),
|
|
nil, nil, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (service *WorkersService) PortForward(
|
|
ctx context.Context,
|
|
name string,
|
|
port uint16,
|
|
) (net.Conn, error) {
|
|
return service.client.wsRequest(ctx, fmt.Sprintf("workers/%s/port-forward", url.PathEscape(name)),
|
|
map[string]string{
|
|
"port": strconv.FormatUint(uint64(port), 10),
|
|
})
|
|
}
|