Merge pull request #201 from keel-hq/feature/ecr_registry_auth

gr fixes
feature/ecr_token_cache 0.9.0-rc2
Karolis Rusenas 2018-04-24 09:28:22 +01:00 committed by GitHub
commit 5bc49d5fc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 105 additions and 13 deletions

View File

@ -120,11 +120,11 @@ func (r *GenericResource) GetResource() interface{} {
func (r *GenericResource) GetLabels() (labels map[string]string) { func (r *GenericResource) GetLabels() (labels map[string]string) {
switch obj := r.obj.(type) { switch obj := r.obj.(type) {
case *apps_v1.Deployment: case *apps_v1.Deployment:
return obj.GetLabels() return getOrInitialise(obj.GetLabels())
case *apps_v1.StatefulSet: case *apps_v1.StatefulSet:
return obj.GetLabels() return getOrInitialise(obj.GetLabels())
case *apps_v1.DaemonSet: case *apps_v1.DaemonSet:
return obj.GetLabels() return getOrInitialise(obj.GetLabels())
} }
return return
} }
@ -152,9 +152,17 @@ func (r *GenericResource) GetSpecAnnotations() (annotations map[string]string) {
} }
return a return a
case *apps_v1.StatefulSet: case *apps_v1.StatefulSet:
return obj.Spec.Template.GetAnnotations() a := obj.Spec.Template.GetAnnotations()
if a == nil {
return make(map[string]string)
}
return a
case *apps_v1.DaemonSet: case *apps_v1.DaemonSet:
return obj.Spec.Template.GetAnnotations() a := obj.Spec.Template.GetAnnotations()
if a == nil {
return make(map[string]string)
}
return a
} }
return return
} }
@ -172,15 +180,22 @@ func (r *GenericResource) SetSpecAnnotations(annotations map[string]string) {
return return
} }
func getOrInitialise(a map[string]string) map[string]string {
if a == nil {
return make(map[string]string)
}
return a
}
// GetAnnotations - get resource annotations // GetAnnotations - get resource annotations
func (r *GenericResource) GetAnnotations() (annotations map[string]string) { func (r *GenericResource) GetAnnotations() (annotations map[string]string) {
switch obj := r.obj.(type) { switch obj := r.obj.(type) {
case *apps_v1.Deployment: case *apps_v1.Deployment:
return obj.GetAnnotations() return getOrInitialise(obj.GetAnnotations())
case *apps_v1.StatefulSet: case *apps_v1.StatefulSet:
return obj.GetAnnotations() return getOrInitialise(obj.GetAnnotations())
case *apps_v1.DaemonSet: case *apps_v1.DaemonSet:
return obj.GetAnnotations() return getOrInitialise(obj.GetAnnotations())
} }
return return
} }

View File

@ -18,6 +18,7 @@ func (t *Translator) OnAdd(obj interface{}) {
t.Errorf("OnAdd failed to add resource %T: %#v", obj, obj) t.Errorf("OnAdd failed to add resource %T: %#v", obj, obj)
return return
} }
t.Infof("added %s %s", gr.Kind(), gr.Name)
t.GenericResourceCache.Add(gr) t.GenericResourceCache.Add(gr)
} }
@ -27,6 +28,7 @@ func (t *Translator) OnUpdate(oldObj, newObj interface{}) {
t.Errorf("OnUpdate failed to update resource %T: %#v", newObj, newObj) t.Errorf("OnUpdate failed to update resource %T: %#v", newObj, newObj)
return return
} }
t.Infof("updated %s %s", gr.Kind(), gr.Name)
t.GenericResourceCache.Add(gr) t.GenericResourceCache.Add(gr)
} }
@ -36,5 +38,6 @@ func (t *Translator) OnDelete(obj interface{}) {
t.Errorf("OnDelete failed to delete resource %T: %#v", obj, obj) t.Errorf("OnDelete failed to delete resource %T: %#v", obj, obj)
return return
} }
t.Infof("deleted %s %s", gr.Kind(), gr.Name)
t.GenericResourceCache.Remove(gr.GetIdentifier()) t.GenericResourceCache.Remove(gr.GetIdentifier())
} }

View File

@ -28,7 +28,7 @@ var kubernetesVersionedUpdatesCounter = prometheus.NewCounterVec(
Name: "kubernetes_versioned_updates_total", Name: "kubernetes_versioned_updates_total",
Help: "How many versioned deployments were updated, partitioned by deployment name.", Help: "How many versioned deployments were updated, partitioned by deployment name.",
}, },
[]string{"deployment"}, []string{"kubernetes"},
) )
var kubernetesUnversionedUpdatesCounter = prometheus.NewCounterVec( var kubernetesUnversionedUpdatesCounter = prometheus.NewCounterVec(
@ -36,7 +36,7 @@ var kubernetesUnversionedUpdatesCounter = prometheus.NewCounterVec(
Name: "kubernetes_unversioned_updates_total", Name: "kubernetes_unversioned_updates_total",
Help: "How many unversioned deployments were updated, partitioned by deployment name.", Help: "How many unversioned deployments were updated, partitioned by deployment name.",
}, },
[]string{"deployment"}, []string{"kubernetes"},
) )
func init() { func init() {
@ -261,15 +261,16 @@ func (p *Provider) updateDeployments(plans []*UpdatePlan) (updated []*k8s.Generi
resource.SetAnnotations(annotations) resource.SetAnnotations(annotations)
err = p.implementer.Update(resource) err = p.implementer.Update(resource)
kubernetesVersionedUpdatesCounter.With(prometheus.Labels{resource.Kind(): fmt.Sprintf("%s/%s", resource.Namespace, resource.Name)}).Inc() kubernetesVersionedUpdatesCounter.With(prometheus.Labels{"kubernetes": fmt.Sprintf("%s/%s", resource.Namespace, resource.Name)}).Inc()
// } // }
if err != nil { if err != nil {
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"error": err, "error": err,
"namespace": resource.Namespace, "namespace": resource.Namespace,
"deployment": resource.Name, "deployment": resource.Name,
"kind": resource.Kind(),
"update": fmt.Sprintf("%s->%s", plan.CurrentVersion, plan.NewVersion), "update": fmt.Sprintf("%s->%s", plan.CurrentVersion, plan.NewVersion),
}).Error("provider.kubernetes: got error while update deployment") }).Error("provider.kubernetes: got error while updating resource")
p.sender.Send(types.EventNotification{ p.sender.Send(types.EventNotification{
Name: "update resource", Name: "update resource",
@ -294,8 +295,9 @@ func (p *Provider) updateDeployments(plans []*UpdatePlan) (updated []*k8s.Generi
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"name": resource.Name, "name": resource.Name,
"kind": resource.Kind(),
"namespace": resource.Namespace, "namespace": resource.Namespace,
}).Info("provider.kubernetes: deployment updated") }).Info("provider.kubernetes: resource updated")
updated = append(updated, resource) updated = append(updated, resource)
} }

View File

@ -491,6 +491,78 @@ func TestProvider_checkUnversionedDeployment(t *testing.T) {
wantShouldUpdateDeployment: false, wantShouldUpdateDeployment: false,
wantErr: false, wantErr: false,
}, },
{
name: "poll trigger, force-match, same tag on eu.gcr.io, daemonset",
args: args{
policy: types.PolicyTypeForce,
repo: &types.Repository{Host: "eu.gcr.io", Name: "karolisr/keel", Tag: "latest-staging"},
resource: MustParseGR(&apps_v1.DaemonSet{
meta_v1.TypeMeta{},
meta_v1.ObjectMeta{
Name: "dep-1",
Namespace: "xxxx",
Labels: map[string]string{types.KeelPolicyLabel: "force"},
Annotations: map[string]string{
types.KeelPollScheduleAnnotation: types.KeelPollDefaultSchedule,
types.KeelForceTagMatchLabel: "yup",
},
},
apps_v1.DaemonSetSpec{
Template: v1.PodTemplateSpec{
ObjectMeta: meta_v1.ObjectMeta{
Annotations: map[string]string{
"this": "that",
},
},
Spec: v1.PodSpec{
Containers: []v1.Container{
v1.Container{
Image: "eu.gcr.io/karolisr/keel:latest-staging",
},
},
},
},
},
apps_v1.DaemonSetStatus{},
}),
},
wantUpdatePlan: &UpdatePlan{
Resource: MustParseGR(&apps_v1.DaemonSet{
meta_v1.TypeMeta{},
meta_v1.ObjectMeta{
Name: "dep-1",
Namespace: "xxxx",
Annotations: map[string]string{
types.KeelPollScheduleAnnotation: types.KeelPollDefaultSchedule,
types.KeelForceTagMatchLabel: "yup",
},
Labels: map[string]string{types.KeelPolicyLabel: "force"},
},
apps_v1.DaemonSetSpec{
Template: v1.PodTemplateSpec{
ObjectMeta: meta_v1.ObjectMeta{
Annotations: map[string]string{
"this": "that",
// "time": timeutil.Now().String(),
},
},
Spec: v1.PodSpec{
Containers: []v1.Container{
v1.Container{
Image: "eu.gcr.io/karolisr/keel:latest-staging",
},
},
},
},
},
apps_v1.DaemonSetStatus{},
}),
NewVersion: "latest-staging",
CurrentVersion: "latest-staging",
},
wantShouldUpdateDeployment: true,
wantErr: false,
},
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {