mirror of
https://github.com/cirruslabs/orchard.git
synced 2026-10-19 16:36:52 +02:00
Ability to pre-pull VM images by targeting workers with labels
This commit is contained in:
@@ -349,6 +349,18 @@ func (client *Client) ClusterSettings() *ClusterSettingsService {
|
||||
}
|
||||
}
|
||||
|
||||
func (client *Client) ImagePulls() *ImagePullsService {
|
||||
return &ImagePullsService{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
func (client *Client) ImagePullJobs() *ImagePullJobsService {
|
||||
return &ImagePullJobsService{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
func (client *Client) RPC() *RPCService {
|
||||
return &RPCService{
|
||||
client: client,
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/cirruslabs/orchard/pkg/resource/v1"
|
||||
)
|
||||
|
||||
const imagePullJobsEndpointPrefix = "imagepulljobs"
|
||||
|
||||
type ImagePullJobsService struct {
|
||||
client *Client
|
||||
}
|
||||
|
||||
func (service *ImagePullJobsService) Create(ctx context.Context, pullJob *v1.ImagePullJob) error {
|
||||
err := service.client.request(ctx, http.MethodPost, imagePullJobsEndpointPrefix, pullJob, nil, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (service *ImagePullJobsService) List(ctx context.Context) ([]v1.ImagePullJob, error) {
|
||||
var pullJobs []v1.ImagePullJob
|
||||
|
||||
err := service.client.request(ctx, http.MethodGet, imagePullJobsEndpointPrefix, nil, &pullJobs, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return pullJobs, nil
|
||||
}
|
||||
|
||||
func (service *ImagePullJobsService) Get(ctx context.Context, name string) (*v1.ImagePullJob, error) {
|
||||
var pullJob v1.ImagePullJob
|
||||
|
||||
err := service.client.request(ctx, http.MethodGet, fmt.Sprintf("%s/%s", imagePullJobsEndpointPrefix,
|
||||
url.PathEscape(name)), nil, &pullJob, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pullJob, nil
|
||||
}
|
||||
|
||||
func (service *ImagePullJobsService) Update(ctx context.Context, pull v1.ImagePullJob) (*v1.ImagePullJob, error) {
|
||||
var updatedPullJob v1.ImagePullJob
|
||||
|
||||
err := service.client.request(ctx, http.MethodPut, fmt.Sprintf("%s/%s", imagePullJobsEndpointPrefix,
|
||||
url.PathEscape(pull.Name)), pull, &updatedPullJob, nil)
|
||||
if err != nil {
|
||||
return &updatedPullJob, err
|
||||
}
|
||||
|
||||
return &updatedPullJob, nil
|
||||
}
|
||||
|
||||
func (service *ImagePullJobsService) UpdateState(ctx context.Context, pull v1.ImagePullJob) (*v1.ImagePullJob, error) {
|
||||
var updatedPullJob v1.ImagePullJob
|
||||
|
||||
err := service.client.request(ctx, http.MethodPut, fmt.Sprintf("%s/%s/state", imagePullJobsEndpointPrefix,
|
||||
url.PathEscape(pull.Name)), pull, &updatedPullJob, nil)
|
||||
if err != nil {
|
||||
return &updatedPullJob, err
|
||||
}
|
||||
|
||||
return &updatedPullJob, nil
|
||||
}
|
||||
|
||||
func (service *ImagePullJobsService) Delete(ctx context.Context, name string) error {
|
||||
err := service.client.request(ctx, http.MethodDelete, fmt.Sprintf("%s/%s", imagePullJobsEndpointPrefix,
|
||||
url.PathEscape(name)), nil, nil, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/cirruslabs/orchard/pkg/resource/v1"
|
||||
)
|
||||
|
||||
const pullsEndpointPrefix = "imagepulls"
|
||||
|
||||
type ImagePullsService struct {
|
||||
client *Client
|
||||
}
|
||||
|
||||
func (service *ImagePullsService) Create(ctx context.Context, pull *v1.ImagePull) error {
|
||||
err := service.client.request(ctx, http.MethodPost, pullsEndpointPrefix, pull, nil, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (service *ImagePullsService) FindForWorker(ctx context.Context, worker string) ([]v1.ImagePull, error) {
|
||||
allPulls, err := service.List(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var result []v1.ImagePull
|
||||
|
||||
for _, pull := range allPulls {
|
||||
if pull.Worker != worker {
|
||||
continue
|
||||
}
|
||||
|
||||
result = append(result, pull)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (service *ImagePullsService) List(ctx context.Context) ([]v1.ImagePull, error) {
|
||||
var pulls []v1.ImagePull
|
||||
|
||||
err := service.client.request(ctx, http.MethodGet, pullsEndpointPrefix, nil, &pulls, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return pulls, nil
|
||||
}
|
||||
|
||||
func (service *ImagePullsService) Get(ctx context.Context, name string) (*v1.ImagePull, error) {
|
||||
var pull v1.ImagePull
|
||||
|
||||
err := service.client.request(ctx, http.MethodGet, fmt.Sprintf("%s/%s", pullsEndpointPrefix,
|
||||
url.PathEscape(name)), nil, &pull, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pull, nil
|
||||
}
|
||||
|
||||
func (service *ImagePullsService) Update(ctx context.Context, pull v1.ImagePull) (*v1.ImagePull, error) {
|
||||
var updatedPull v1.ImagePull
|
||||
|
||||
err := service.client.request(ctx, http.MethodPut, fmt.Sprintf("%s/%s", pullsEndpointPrefix,
|
||||
url.PathEscape(pull.Name)), pull, &updatedPull, nil)
|
||||
if err != nil {
|
||||
return &updatedPull, err
|
||||
}
|
||||
|
||||
return &updatedPull, nil
|
||||
}
|
||||
|
||||
func (service *ImagePullsService) UpdateState(ctx context.Context, pull v1.ImagePull) (*v1.ImagePull, error) {
|
||||
var updatedPull v1.ImagePull
|
||||
|
||||
err := service.client.request(ctx, http.MethodPut, fmt.Sprintf("%s/%s/state", pullsEndpointPrefix,
|
||||
url.PathEscape(pull.Name)), pull, &updatedPull, nil)
|
||||
if err != nil {
|
||||
return &updatedPull, err
|
||||
}
|
||||
|
||||
return &updatedPull, nil
|
||||
}
|
||||
|
||||
func (service *ImagePullsService) Delete(ctx context.Context, name string) error {
|
||||
err := service.client.request(ctx, http.MethodDelete, fmt.Sprintf("%s/%s", pullsEndpointPrefix,
|
||||
url.PathEscape(name)), nil, nil, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user