Skip to content

Commit

Permalink
fix: Charts download
Browse files Browse the repository at this point in the history
  • Loading branch information
jsbroks committed Aug 18, 2023
1 parent 5b8c015 commit 57355ce
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 31 deletions.
3 changes: 2 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ bin/
testbin/
git/
node_modules
.github
.github
charts/
56 changes: 49 additions & 7 deletions controllers/weightsandbiases_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,12 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/tools/record"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/builder"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/event"
ctrllog "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/predicate"

corev1 "k8s.io/api/core/v1"

Expand Down Expand Up @@ -181,9 +183,9 @@ func (r *WeightsAndBiasesReconciler) Reconcile(ctx context.Context, req ctrl.Req
log.Info("Deprovisioning", "release", reflect.TypeOf(desiredSpec.Release))
if err := desiredSpec.Prune(ctx, r.Client, wandb, r.Scheme); err != nil {
log.Error(err, "Failed to cleanup deployment.")
return ctrlqueue.DoNotRequeue()
} else {
log.Info("Successfully cleaned up resources")
}
log.Info("Successfully cleaned up resources")
}

controllerutil.RemoveFinalizer(wandb, resFinalizer)
Expand All @@ -200,11 +202,51 @@ func (r *WeightsAndBiasesReconciler) Delete(e event.DeleteEvent) bool {
// SetupWithManager sets up the controller with the Manager.
func (r *WeightsAndBiasesReconciler) SetupWithManager(mgr ctrl.Manager) error {
builder := ctrl.NewControllerManagedBy(mgr).
For(
&apiv1.WeightsAndBiases{},
// builder.WithPredicates(annotationChangedPredicate{}),
).
Owns(&corev1.Secret{}).
For(&apiv1.WeightsAndBiases{}, builder.WithPredicates(filterWBEvents{})).
Owns(&corev1.Secret{}, builder.WithPredicates(filterSecretEvents{})).
Owns(&corev1.ConfigMap{})
return builder.Complete(r)
}

type filterWBEvents struct {
predicate.Funcs
}

func (filterWBEvents) Update(e event.UpdateEvent) bool {
// Checking whether the Object's Generation has changed. If it has not
// (indicating a non-spec change), it returns false - thus ignoring the
// event.
return e.ObjectOld.GetGeneration() != e.ObjectNew.GetGeneration()
}

func (filterWBEvents) Create(e event.CreateEvent) bool {
return true
}

func (filterWBEvents) Delete(e event.DeleteEvent) bool {
return true
}

func (filterWBEvents) Generic(e event.GenericEvent) bool {
return false
}

type filterSecretEvents struct {
predicate.Funcs
}

func (filterSecretEvents) Update(e event.UpdateEvent) bool {
return true
}

func (filterSecretEvents) Create(e event.CreateEvent) bool {
return false
}

func (filterSecretEvents) Delete(e event.DeleteEvent) bool {
return true
}

func (filterSecretEvents) Generic(e event.GenericEvent) bool {
return false
}
7 changes: 3 additions & 4 deletions pkg/helm/chart.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,16 @@ var (

// GetConfig returns a helm action configuration. Namespace is used to determine
// where to store the versions
func InitConfig(namespace string) (*action.Configuration, error) {
func InitConfig(namespace string) (*cli.EnvSettings, *action.Configuration, error) {
settings := cli.New()
settings.SetNamespace(namespace)
config := new(action.Configuration)
err := config.Init(
settings.RESTClientGetter(),
settings.Namespace(),
secretsStorageDriver,
noopLogger,
)
return config, err
return settings, config, err
}

func DownloadChart(repoURL string, name string) (string, error) {
Expand Down Expand Up @@ -76,7 +75,7 @@ func NewActionableChart(releaseName string, namespace string) (*ActionableChart,
return nil, fmt.Errorf("release name %q", releaseName)
}

config, err := InitConfig(namespace)
_, config, err := InitConfig(namespace)
if err != nil {
return nil, err
}
Expand Down
46 changes: 37 additions & 9 deletions pkg/wandb/spec/release/helm/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ package helm

import (
"context"
"fmt"
"os"

"github.com/go-playground/validator/v10"
v1 "github.com/wandb/operator/api/v1"
"github.com/wandb/operator/pkg/helm"
"github.com/wandb/operator/pkg/wandb/spec"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/chart"
"helm.sh/helm/v3/pkg/cli"
"helm.sh/helm/v3/pkg/downloader"
"helm.sh/helm/v3/pkg/getter"
"helm.sh/helm/v3/pkg/repo"
"k8s.io/apimachinery/pkg/runtime"
Expand Down Expand Up @@ -39,7 +42,10 @@ func (c RepoRelease) Validate() error {
}

func (r RepoRelease) ToLocalRelease() (*LocalRelease, error) {
fmt.Println("===================================")
chartPath, err := r.downloadChart()
fmt.Println("ran")
fmt.Println(err)
if err != nil {
return nil, err
}
Expand All @@ -56,6 +62,9 @@ func (r RepoRelease) Apply(
scheme *runtime.Scheme,
config spec.Config,
) error {
fmt.Println("=====================================")
// fmt.Println(chartPath)
// fmt.Println(err)
local, err := r.ToLocalRelease()
if err != nil {
return err
Expand Down Expand Up @@ -93,12 +102,10 @@ func (r RepoRelease) downloadChart() (string, error) {
if err != nil {
return "", err
}

_, err = chartRepo.DownloadIndexFile()
if err != nil {
return "", err
}

chartURL, err := repo.FindChartInRepoURL(
entry.URL, entry.Name, r.Version,
"", "", "",
Expand All @@ -108,11 +115,32 @@ func (r RepoRelease) downloadChart() (string, error) {
return "", err
}

client := action.NewPull()
client.Username = entry.Username
client.Password = entry.Password
client.Version = r.Version
client.Settings = settings
_, cfg, err := helm.InitConfig("")
if err != nil {
return "", err
}

client := downloader.ChartDownloader{
Verify: downloader.VerifyNever,
Getters: getter.All(settings),
Options: []getter.Option{
getter.WithBasicAuth(r.Username, r.Password),
// TODO: Add support for other auth methods
// getter.WithPassCredentialsAll(r.PassCredentialsAll),
// getter.WithTLSClientConfig(r.CertFile, r.KeyFile, r.CaFile),
// getter.WithInsecureSkipVerifyTLS(r.InsecureSkipTLSverify),
},
RegistryClient: cfg.RegistryClient,
RepositoryConfig: settings.RepositoryConfig,
RepositoryCache: settings.RepositoryCache,
}

dest := "./charts"
os.MkdirAll(dest, 0755)
saved, _, err := client.DownloadTo(chartURL, r.Version, dest)
if err != nil {
return "", err
}

return client.Run(chartURL)
return saved, err
}
16 changes: 7 additions & 9 deletions pkg/wandb/spec/release/release.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@ import (
)

func Is(v spec.Validatable, data interface{}) error {
specBytes, _ := json.Marshal(data)
specBytes, err := json.Marshal(data)
if err != nil {
return err
}

if err := json.Unmarshal(specBytes, v); err != nil {
fmt.Println("unmarshal error", err)
return err
}

Expand All @@ -30,22 +34,16 @@ type ValidatableRelease interface {
// Get returns tries to match the spec of a given type to a release.
func Get(maybeRelease interface{}) spec.HelmRelease {
releases := []ValidatableRelease{
helm.LocalRelease{},
helm.RepoRelease{},
new(helm.LocalRelease),
new(helm.RepoRelease),
}

var errs []error
for _, release := range releases {
if err := Is(release, maybeRelease); err != nil {
errs = append(errs, err)
continue
}
return release
}

for _, err := range errs {
fmt.Println(err)
}

return nil
}
3 changes: 3 additions & 0 deletions pkg/wandb/spec/utils/license.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import "github.com/wandb/operator/pkg/wandb/spec"

func GetLicense(specs ...*spec.Spec) string {
for _, s := range specs {
if s == nil {
continue
}
if s.Config == nil {
continue
}
Expand Down
3 changes: 2 additions & 1 deletion wandb-repo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ metadata:
name: wandb
spec:
release:
url: https://charts.wandb.io
url: https://charts.wandb.ai
name: operator-wandb
version: 0.1.0
config: {}

0 comments on commit 57355ce

Please sign in to comment.