Skip to content

Commit 4ca3b1b

Browse files
committed
add test
1 parent a836b62 commit 4ca3b1b

File tree

6 files changed

+128
-4
lines changed

6 files changed

+128
-4
lines changed

api/status/redis-cluster_status.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ const (
1414
RedisClusterInitializing RedisClusterState = "Initializing"
1515
RedisClusterBootstrap RedisClusterState = "Bootstrap"
1616
// RedisClusterReady means the RedisCluster is ready for use, we use redis-cli --cluster check 127.0.0.1:6379 to check the cluster status
17-
RedisClusterReady RedisClusterState = "Ready"
18-
// RedisClusterFailed RedisClusterState = "Failed"
17+
RedisClusterReady RedisClusterState = "Ready"
18+
RedisClusterFailed RedisClusterState = "Failed"
1919
)

pkg/controllers/rediscluster/rediscluster_controller.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ type RedisClusterReconciler struct {
4747

4848
func (r *RedisClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
4949
reqLogger := r.Log.WithValues("Request.Namespace", req.Namespace, "Request.Name", req.Name)
50-
reqLogger.Info("Reconciling opstree redis Cluster controller")
50+
reqLogger.V(1).Info("Reconciling opstree redis Cluster controller")
5151
instance := &redisv1beta2.RedisCluster{}
5252

5353
err := r.Client.Get(context.TODO(), req.NamespacedName, instance)
@@ -188,12 +188,18 @@ func (r *RedisClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request
188188
return intctrlutil.RequeueAfter(reqLogger, time.Second*60, "Redis cluster count is not desired", "Current.Count", nc, "Desired.Count", totalReplicas)
189189
}
190190

191-
reqLogger.Info("Number of Redis nodes match desired")
191+
reqLogger.V(1).Info("Number of Redis nodes match desired")
192192
unhealthyNodeCount, err := k8sutils.UnhealthyNodesInCluster(ctx, r.K8sClient, r.Log, instance)
193193
if err != nil {
194194
reqLogger.Error(err, "failed to determine unhealthy node count in cluster")
195195
}
196196
if int(totalReplicas) > 1 && unhealthyNodeCount >= int(totalReplicas)-1 {
197+
198+
err = k8sutils.UpdateRedisClusterStatus(instance, status.RedisClusterFailed, "RedisCluster has too many unhealthy nodes", leaderReplicas, followerReplicas, r.Dk8sClient)
199+
if err != nil {
200+
return intctrlutil.RequeueWithError(err, reqLogger, "")
201+
}
202+
197203
reqLogger.Info("healthy leader count does not match desired; attempting to repair disconnected masters")
198204
if err = k8sutils.RepairDisconnectedMasters(ctx, r.K8sClient, r.Log, instance); err != nil {
199205
reqLogger.Error(err, "failed to repair disconnected masters")
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
# yaml-language-server: $schema=https://raw.githubusercontent.com/kyverno/chainsaw/main/.schemas/json/test-chainsaw-v1alpha1.json
3+
apiVersion: chainsaw.kyverno.io/v1alpha1
4+
kind: Test
5+
metadata:
6+
name: redis-cluster
7+
spec:
8+
steps:
9+
- try:
10+
- apply:
11+
file: cluster.yaml
12+
- assert:
13+
file: ready-cluster.yaml
14+
15+
- name: Try saving a key With Password
16+
try:
17+
- script:
18+
timeout: 30s
19+
content: >
20+
kubectl exec --namespace ${NAMESPACE} --container redis-cluster-v1beta2-leader redis-cluster-v1beta2-leader-0 --
21+
redis-cli -c set foo-0 bar-0
22+
check:
23+
(contains($stdout, 'OK')): true
24+
25+
- name: Restart pods at same time
26+
try:
27+
- script:
28+
timeout: 30s
29+
content: >
30+
kubectl delete pod --namespace ${NAMESPACE} -l app=redis-cluster-v1beta2-leader
31+
32+
- name: Wait cluster to be failed
33+
try:
34+
- assert:
35+
file: failed-cluster.yaml
36+
37+
- name: Wait cluster to be ready
38+
try:
39+
- assert:
40+
file: ready-cluster.yaml
41+
42+
- name: Get key
43+
try:
44+
- script:
45+
timeout: 30s
46+
content: >
47+
kubectl exec --namespace ${NAMESPACE} --container redis-cluster-v1beta2-leader redis-cluster-v1beta2-leader-0 --
48+
redis-cli -c get foo-0
49+
check:
50+
(contains($stdout, 'bar-0')): true
51+
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
apiVersion: redis.redis.opstreelabs.in/v1beta2
3+
kind: RedisCluster
4+
metadata:
5+
name: redis-cluster-v1beta2
6+
spec:
7+
clusterSize: 3
8+
clusterVersion: v7
9+
persistenceEnabled: true
10+
podSecurityContext:
11+
runAsUser: 1000
12+
fsGroup: 1000
13+
redisLeader:
14+
replicas: 3
15+
redisFollower:
16+
replicas: 0
17+
kubernetesConfig:
18+
image: quay.io/opstree/redis:latest
19+
imagePullPolicy: Always
20+
resources:
21+
requests:
22+
cpu: 101m
23+
memory: 128Mi
24+
limits:
25+
cpu: 101m
26+
memory: 128Mi
27+
redisExporter:
28+
enabled: true
29+
image: quay.io/opstree/redis-exporter:v1.44.0
30+
imagePullPolicy: Always
31+
resources:
32+
requests:
33+
cpu: 100m
34+
memory: 128Mi
35+
limits:
36+
cpu: 100m
37+
memory: 128Mi
38+
storage:
39+
volumeClaimTemplate:
40+
spec:
41+
# storageClassName: standard
42+
accessModes: [ReadWriteOnce]
43+
resources:
44+
requests:
45+
storage: 1Gi
46+
nodeConfVolume: true
47+
nodeConfVolumeClaimTemplate:
48+
spec:
49+
accessModes: [ReadWriteOnce]
50+
resources:
51+
requests:
52+
storage: 1Gi
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
apiVersion: redis.redis.opstreelabs.in/v1beta2
3+
kind: RedisCluster
4+
metadata:
5+
name: redis-cluster-v1beta2
6+
status:
7+
state: Failed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
apiVersion: redis.redis.opstreelabs.in/v1beta2
3+
kind: RedisCluster
4+
metadata:
5+
name: redis-cluster-v1beta2
6+
status:
7+
state: Ready
8+
reason: RedisCluster is ready

0 commit comments

Comments
 (0)