Skip to content

Commit

Permalink
adding topology spread constraints to Grafana CR
Browse files Browse the repository at this point in the history
  • Loading branch information
celestialorb committed Oct 22, 2022
1 parent 955daa6 commit 3bf0868
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 9 deletions.
19 changes: 10 additions & 9 deletions api/integreatly/v1alpha1/grafana_types.go
Expand Up @@ -107,15 +107,16 @@ type GrafanaDeployment struct {
Annotations map[string]string `json:"annotations,omitempty"`
Labels map[string]string `json:"labels,omitempty"`
// +nullable
Replicas *int32 `json:"replicas,omitempty"`
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
Tolerations []v1.Toleration `json:"tolerations,omitempty"`
Affinity *v1.Affinity `json:"affinity,omitempty"`
SecurityContext *v1.PodSecurityContext `json:"securityContext,omitempty"`
ContainerSecurityContext *v1.SecurityContext `json:"containerSecurityContext,omitempty"`
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"`
EnvFrom []v1.EnvFromSource `json:"envFrom,omitempty"`
Env []v1.EnvVar `json:"env,omitempty"`
Replicas *int32 `json:"replicas,omitempty"`
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
Tolerations []v1.Toleration `json:"tolerations,omitempty"`
Affinity *v1.Affinity `json:"affinity,omitempty"`
TopologySpreadConstraints []v1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"`
SecurityContext *v1.PodSecurityContext `json:"securityContext,omitempty"`
ContainerSecurityContext *v1.SecurityContext `json:"containerSecurityContext,omitempty"`
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"`
EnvFrom []v1.EnvFromSource `json:"envFrom,omitempty"`
Env []v1.EnvVar `json:"env,omitempty"`
// +nullable
SkipCreateAdminAccount *bool `json:"skipCreateAdminAccount,omitempty"`
PriorityClassName string `json:"priorityClassName,omitempty"`
Expand Down
8 changes: 8 additions & 0 deletions controllers/model/grafanaDeployment.go
Expand Up @@ -195,6 +195,13 @@ func getPodPriorityClassName(cr *v1alpha1.Grafana) string {
return ""
}

func getTopologySpreadConstraints(cr *v1alpha1.Grafana) []v13.TopologySpreadConstraint {
if cr.Spec.Deployment != nil && cr.Spec.Deployment.TopologySpreadConstraints != nil {
return cr.Spec.Deployment.TopologySpreadConstraints
}
return []v13.TopologySpreadConstraint{}
}

func getTolerations(cr *v1alpha1.Grafana) []v13.Toleration {
tolerations := []v13.Toleration{}

Expand Down Expand Up @@ -700,6 +707,7 @@ func getDeploymentSpec(cr *v1alpha1.Grafana, annotations map[string]string, conf
ServiceAccountName: constants.GrafanaServiceAccountName,
TerminationGracePeriodSeconds: getTerminationGracePeriod(cr),
PriorityClassName: getPodPriorityClassName(cr),
TopologySpreadConstraints: getTopologySpreadConstraints(cr),
},
},
Strategy: getDeploymentStrategy(cr),
Expand Down
53 changes: 53 additions & 0 deletions controllers/model/grafanaDeployment_test.go
Expand Up @@ -202,3 +202,56 @@ func Test_getReadinessProbe(t *testing.T) {
assert.Equal(t, want, got)
})
}

func Test_getTopologySpreadConstraints(t *testing.T) {
t.Run("Default empty topology constraints", func(t *testing.T) {
cr := &v1alpha1.Grafana{
Spec: v1alpha1.GrafanaSpec{},
}

got := getTopologySpreadConstraints(cr)
want := []v1.TopologySpreadConstraint{}

assert.Equal(t, want, got)
})

t.Run("Specified empty constraints", func(t *testing.T) {
cr := &v1alpha1.Grafana{
Spec: v1alpha1.GrafanaSpec{
Deployment: &v1alpha1.GrafanaDeployment{
TopologySpreadConstraints: []v1.TopologySpreadConstraint{},
},
},
}

got := getTopologySpreadConstraints(cr)
want := []v1.TopologySpreadConstraint{}

assert.Equal(t, want, got)
})

t.Run("Specified non-empty constraints", func(t *testing.T) {
cr := &v1alpha1.Grafana{
Spec: v1alpha1.GrafanaSpec{
Deployment: &v1alpha1.GrafanaDeployment{
TopologySpreadConstraints: []v1.TopologySpreadConstraint{
{
MaxSkew: 1,
TopologyKey: "topology.kubernetes.io/zone",
},
},
},
},
}

got := getTopologySpreadConstraints(cr)
want := []v1.TopologySpreadConstraint{
{
MaxSkew: 1,
TopologyKey: "topology.kubernetes.io/zone",
},
}

assert.Equal(t, want, got)
})
}

0 comments on commit 3bf0868

Please sign in to comment.