From cc8b48c24631eb85fe3b8ad9dc61ebf92550eec2 Mon Sep 17 00:00:00 2001 From: Frederic Branczyk Date: Fri, 10 Feb 2017 12:30:59 -0800 Subject: [PATCH] deployment: skip max unavailable if rolling update is unset This previously caused panics when objects did not have the RollingUpdate struct set. --- deployment.go | 4 ++++ deployment_test.go | 12 +++--------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/deployment.go b/deployment.go index 06759c06b7..9f5e7d3b64 100644 --- a/deployment.go +++ b/deployment.go @@ -150,6 +150,10 @@ func (dc *deploymentCollector) collectDeployment(ch chan<- prometheus.Metric, d addGauge(descDeploymentSpecReplicas, float64(*d.Spec.Replicas)) addGauge(descDeploymentMetadataGeneration, float64(d.ObjectMeta.Generation)) + if d.Spec.Strategy.RollingUpdate == nil { + return + } + maxUnavailable, err := intstr.GetValueFromIntOrPercent(d.Spec.Strategy.RollingUpdate.MaxUnavailable, int(*d.Spec.Replicas), true) if err != nil { glog.Errorf("Error converting RollingUpdate MaxUnavailable to int: %s", err) diff --git a/deployment_test.go b/deployment_test.go index 09850377c1..408a037a99 100644 --- a/deployment_test.go +++ b/deployment_test.go @@ -115,11 +115,6 @@ func TestDeploymentCollector(t *testing.T) { Spec: v1beta1.DeploymentSpec{ Paused: true, Replicas: &depl2Replicas, - Strategy: v1beta1.DeploymentStrategy{ - RollingUpdate: &v1beta1.RollingUpdateDeployment{ - MaxUnavailable: &depl2MaxUnavailable, - }, - }, }, }, }, @@ -130,6 +125,9 @@ func TestDeploymentCollector(t *testing.T) { kube_deployment_spec_paused{namespace="ns2",deployment="depl2"} 1 kube_deployment_spec_replicas{namespace="ns1",deployment="depl1"} 200 kube_deployment_spec_replicas{namespace="ns2",deployment="depl2"} 5 + kube_deployment_spec_strategy_rollingupdate_max_unavailable{deployment="depl1",namespace="ns1"} 10 + kube_deployment_status_observed_generation{namespace="ns1",deployment="depl1"} 111 + kube_deployment_status_observed_generation{namespace="ns2",deployment="depl2"} 1111 kube_deployment_status_replicas{namespace="ns1",deployment="depl1"} 15 kube_deployment_status_replicas{namespace="ns2",deployment="depl2"} 10 kube_deployment_status_replicas_available{namespace="ns1",deployment="depl1"} 10 @@ -138,10 +136,6 @@ func TestDeploymentCollector(t *testing.T) { kube_deployment_status_replicas_unavailable{namespace="ns2",deployment="depl2"} 0 kube_deployment_status_replicas_updated{namespace="ns1",deployment="depl1"} 2 kube_deployment_status_replicas_updated{namespace="ns2",deployment="depl2"} 1 - kube_deployment_status_observed_generation{namespace="ns1",deployment="depl1"} 111 - kube_deployment_status_observed_generation{namespace="ns2",deployment="depl2"} 1111 - kube_deployment_spec_strategy_rollingupdate_max_unavailable{namespace="ns1",deployment="depl1"} 10 - kube_deployment_spec_strategy_rollingupdate_max_unavailable{namespace="ns2",deployment="depl2"} 1 `, }, }