From a11b6720eba16c504d173916f4ab1bbe0658c57b Mon Sep 17 00:00:00 2001 From: Karolis Rusenas Date: Thu, 20 Jul 2017 20:43:55 +0100 Subject: [PATCH] implementing tracked images --- provider/kubernetes/kubernetes.go | 65 +++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/provider/kubernetes/kubernetes.go b/provider/kubernetes/kubernetes.go index 82b485f4..d1f79d0f 100644 --- a/provider/kubernetes/kubernetes.go +++ b/provider/kubernetes/kubernetes.go @@ -6,6 +6,8 @@ import ( "strings" "time" + "github.com/rusenask/cron" + "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/pkg/apis/extensions/v1beta1" @@ -70,6 +72,69 @@ func (p *Provider) Stop() { close(p.stop) } +func (p *Provider) TrackedImages() ([]*types.TrackedImage, error) { + var trackedImages []*types.TrackedImage + + deploymentLists, err := p.deployments() + if err != nil { + return nil, err + } + + for _, deploymentList := range deploymentLists { + for _, deployment := range deploymentList.Items { + labels := deployment.GetLabels() + + // ignoring unlabelled deployments + policy := policies.GetPolicy(labels) + if policy == types.PolicyTypeNone { + continue + } + + annotations := deployment.GetAnnotations() + schedule, ok := annotations[types.KeelPollScheduleAnnotation] + if ok { + _, err := cron.Parse(schedule) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + "schedule": schedule, + "deployment": deployment.Name, + "namespace": deployment.Namespace, + }).Error("trigger.poll.manager: failed to parse poll schedule, setting default schedule") + schedule = types.KeelPollDefaultSchedule + } + } else { + schedule = types.KeelPollDefaultSchedule + } + + // trigger type, we only care for "poll" type triggers + trigger := policies.GetTriggerPolicy(labels) + + images := getImages(&deployment) + for _, img := range images { + ref, err := image.Parse(img) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + "image": img, + "namespace": deployment.Namespace, + "name": deployment.Name, + }).Error("provider.kubernetes: failed to parse image") + continue + } + trackedImages = append(trackedImages, &types.TrackedImage{ + Image: ref, + PollSchedule: schedule, + Trigger: trigger, + Provider: ProviderName, + }) + } + } + } + + return trackedImages, nil +} + func (p *Provider) startInternal() error { for { select {