Ability to pre-pull VM images by targeting workers with labels

This commit is contained in:
Nikolay Edigaryev
2025-12-10 20:43:34 +01:00
parent 173a34b083
commit aa36ad4cb6
29 changed files with 1463 additions and 8 deletions
+12
View File
@@ -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,
+82
View File
@@ -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
}
+101
View File
@@ -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
}