From ae8467237a0af994dd3abe714159886c4205186d Mon Sep 17 00:00:00 2001 From: neelanjan00 Date: Mon, 5 Jun 2023 13:15:56 +0530 Subject: [PATCH 01/16] refactors directory and file structure Signed-off-by: neelanjan00 --- ...s-ssm-chaos-by-id.chartserviceversion.yaml | 43 - .../aws-ssm/aws-ssm-chaos-by-id/engine.yaml | 62 - .../aws-ssm-chaos-by-id/experiment.yaml | 124 - charts/aws-ssm/aws-ssm-chaos-by-id/rbac.yaml | 62 - ...-ssm-chaos-by-tag.chartserviceversion.yaml | 43 - .../aws-ssm/aws-ssm-chaos-by-tag/engine.yaml | 62 - .../aws-ssm-chaos-by-tag/experiment.yaml | 128 - charts/aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml | 62 - .../aws-ssm/aws-ssm.chartserviceversion.yaml | 36 - charts/aws-ssm/aws-ssm.package.yaml | 8 - charts/aws-ssm/experiments.yaml | 256 -- charts/aws-ssm/icons/aws-ssm-chaos-by-id.png | Bin 3152 -> 0 bytes charts/aws-ssm/icons/aws-ssm-chaos-by-tag.png | Bin 3152 -> 0 bytes charts/aws-ssm/icons/aws-ssm.png | Bin 3152 -> 0 bytes .../azure-disk-loss.chartserviceversion.yaml | 42 - charts/azure/azure-disk-loss/engine.yaml | 32 - charts/azure/azure-disk-loss/experiment.yaml | 92 - charts/azure/azure-disk-loss/rbac.yaml | 64 - ...ure-instance-stop.chartserviceversion.yaml | 44 - .../azure/azure-instance-stop/experiment.yaml | 91 - charts/azure/azure-instance-stop/rbac.yaml | 62 - charts/azure/azure.chartserviceversion.yaml | 40 - charts/azure/experiments.yaml | 187 - charts/azure/icons/azure.png | Bin 22398 -> 0 bytes charts/gcp/experiments.yaml | 366 -- .../gcp-vm-disk-loss-by-label/experiment.yaml | 83 - ...isk-loss-by-label.chartserviceversion.yaml | 33 - .../gcp/gcp-vm-disk-loss-by-label/rbac.yaml | 62 - charts/gcp/gcp-vm-disk-loss/experiment.yaml | 86 - .../gcp-vm-disk-loss.chartserviceversion.yaml | 33 - charts/gcp/gcp-vm-disk-loss/rbac.yaml | 62 - .../experiment.yaml | 95 - ...nce-stop-by-label.chartserviceversion.yaml | 33 - .../gcp-vm-instance-stop-by-label/rbac.yaml | 66 - .../gcp/gcp-vm-instance-stop/experiment.yaml | 94 - ...-vm-instance-stop.chartserviceversion.yaml | 33 - charts/gcp/gcp-vm-instance-stop/rbac.yaml | 66 - charts/gcp/gcp.chartserviceversion.yaml | 38 - charts/gcp/icons/gcp.png | Bin 30752 -> 0 bytes .../container-kill.chartserviceversion.yaml | 48 - charts/generic/container-kill/engine.yaml | 42 - .../engine_nginx_getstarted.yaml | 46 - charts/generic/container-kill/experiment.yaml | 121 - charts/generic/container-kill/rbac-psp.yaml | 86 - charts/generic/container-kill/rbac.yaml | 81 - .../container-kill/rbac_nginx_getstarted.yaml | 78 - .../disk-fill.chartserviceversion.yaml | 48 - charts/generic/disk-fill/engine.yaml | 37 - charts/generic/disk-fill/experiment.yaml | 123 - charts/generic/disk-fill/rbac-psp.yaml | 85 - charts/generic/disk-fill/rbac.yaml | 80 - ...cker-service-kill.chartserviceversion.yaml | 47 - .../generic/docker-service-kill/rbac-psp.yaml | 71 - charts/generic/docker-service-kill/rbac.yaml | 66 - charts/generic/experiments.yaml | 3398 ----------------- .../generic/generic.chartserviceversion.yaml | 80 - charts/generic/generic.package.yaml | 89 - charts/generic/icons/byoc-pod-delete.png | Bin 959 -> 0 bytes .../kubelet-service-kill/experiment.yaml | 81 - ...elet-service-kill.chartserviceversion.yaml | 50 - .../kubelet-service-kill/rbac-psp.yaml | 71 - charts/generic/kubelet-service-kill/rbac.yaml | 66 - charts/generic/node-cpu-hog/experiment.yaml | 99 - .../node-cpu-hog.chartserviceversion.yaml | 50 - charts/generic/node-cpu-hog/rbac-psp.yaml | 71 - charts/generic/node-cpu-hog/rbac.yaml | 66 - charts/generic/node-drain/engine.yaml | 26 - .../node-drain.chartserviceversion.yaml | 49 - charts/generic/node-drain/rbac-psp.yaml | 75 - charts/generic/node-drain/rbac.yaml | 70 - charts/generic/node-io-stress/experiment.yaml | 111 - .../node-io-stress.chartserviceversion.yaml | 49 - charts/generic/node-io-stress/rbac-psp.yaml | 71 - charts/generic/node-io-stress/rbac.yaml | 66 - .../generic/node-memory-hog/experiment.yaml | 102 - .../node-memory-hog.chartserviceversion.yaml | 50 - charts/generic/node-memory-hog/rbac-psp.yaml | 71 - charts/generic/node-memory-hog/rbac.yaml | 66 - charts/generic/node-poweroff/engine.yaml | 33 - .../node-poweroff.chartserviceversion.yaml | 39 - charts/generic/node-poweroff/rbac-psp.yaml | 71 - charts/generic/node-poweroff/rbac.yaml | 66 - charts/generic/node-restart/engine.yaml | 33 - .../node-restart.chartserviceversion.yaml | 39 - charts/generic/node-restart/rbac-psp.yaml | 71 - charts/generic/node-restart/rbac.yaml | 66 - charts/generic/node-taint/experiment.yaml | 85 - .../node-taint.chartserviceversion.yaml | 49 - charts/generic/node-taint/rbac-psp.yaml | 75 - charts/generic/node-taint/rbac.yaml | 70 - charts/generic/pod-autoscaler/experiment.yaml | 73 - .../pod-autoscaler.chartserviceversion.yaml | 47 - charts/generic/pod-autoscaler/rbac-psp.yaml | 71 - charts/generic/pod-autoscaler/rbac.yaml | 66 - charts/generic/pod-cpu-hog-exec/engine.yaml | 30 - .../generic/pod-cpu-hog-exec/experiment.yaml | 100 - .../pod-cpu-hog-exec.chartserviceversion.yaml | 51 - charts/generic/pod-cpu-hog-exec/rbac-psp.yaml | 85 - charts/generic/pod-cpu-hog-exec/rbac.yaml | 80 - charts/generic/pod-cpu-hog/engine.yaml | 36 - charts/generic/pod-cpu-hog/experiment.yaml | 122 - .../pod-cpu-hog.chartserviceversion.yaml | 53 - charts/generic/pod-cpu-hog/rbac-psp.yaml | 85 - charts/generic/pod-cpu-hog/rbac.yaml | 80 - charts/generic/pod-delete/ansible/engine.yaml | 31 - .../pod-delete/ansible/experiment.yaml | 84 - .../pod-delete/ansible/powerfulseal_rbac.yaml | 38 - charts/generic/pod-delete/ansible/rbac.yaml | 40 - charts/generic/pod-delete/engine.yaml | 33 - .../pod-delete/engine_nginx_getstarted.yaml | 37 - charts/generic/pod-delete/experiment.yaml | 103 - .../pod-delete.chartserviceversion.yaml | 52 - .../generic/pod-delete/python/experiment.yaml | 90 - charts/generic/pod-delete/python/rbac.yaml | 58 - charts/generic/pod-delete/rbac-psp.yaml | 86 - charts/generic/pod-delete/rbac.yaml | 81 - .../pod-delete/rbac_nginx_getstarted.yaml | 77 - .../pod-dns-error.chartserviceversion.yaml | 37 - charts/generic/pod-dns-error/rbac-psp.yaml | 85 - charts/generic/pod-dns-error/rbac.yaml | 80 - .../pod-dns-spoof.chartserviceversion.yaml | 37 - charts/generic/pod-dns-spoof/rbac-psp.yaml | 85 - charts/generic/pod-dns-spoof/rbac.yaml | 80 - charts/generic/pod-http-latency/engine.yaml | 43 - .../generic/pod-http-latency/experiment.yaml | 131 - .../pod-http-latency.chartserviceversion.yaml | 45 - charts/generic/pod-http-latency/rbac-psp.yaml | 85 - charts/generic/pod-http-latency/rbac.yaml | 80 - .../generic/pod-http-modify-body/engine.yaml | 42 - .../pod-http-modify-body/experiment.yaml | 131 - ...-http-modify-body.chartserviceversion.yaml | 39 - .../pod-http-modify-body/rbac-psp.yaml | 84 - charts/generic/pod-http-modify-body/rbac.yaml | 79 - .../pod-http-modify-header/engine.yaml | 47 - .../pod-http-modify-header/experiment.yaml | 136 - ...ttp-modify-header.chartserviceversion.yaml | 45 - .../pod-http-modify-header/rbac-psp.yaml | 85 - .../generic/pod-http-modify-header/rbac.yaml | 80 - .../pod-http-reset-peer/experiment.yaml | 130 - ...d-http-reset-peer.chartserviceversion.yaml | 39 - .../generic/pod-http-reset-peer/rbac-psp.yaml | 84 - charts/generic/pod-http-reset-peer/rbac.yaml | 79 - .../pod-http-status-code/experiment.yaml | 137 - ...-http-status-code.chartserviceversion.yaml | 40 - .../pod-http-status-code/rbac-psp.yaml | 85 - charts/generic/pod-http-status-code/rbac.yaml | 79 - .../pod-io-stress.chartserviceversion.yaml | 50 - charts/generic/pod-io-stress/rbac-psp.yaml | 85 - charts/generic/pod-io-stress/rbac.yaml | 80 - .../generic/pod-memory-hog-exec/engine.yaml | 29 - ...d-memory-hog-exec.chartserviceversion.yaml | 51 - .../generic/pod-memory-hog-exec/rbac-psp.yaml | 85 - charts/generic/pod-memory-hog-exec/rbac.yaml | 80 - charts/generic/pod-memory-hog/engine.yaml | 36 - .../pod-memory-hog.chartserviceversion.yaml | 51 - charts/generic/pod-memory-hog/rbac-psp.yaml | 85 - charts/generic/pod-memory-hog/rbac.yaml | 80 - .../pod-network-corruption/experiment.yaml | 134 - ...etwork-corruption.chartserviceversion.yaml | 49 - .../pod-network-corruption/rbac-psp.yaml | 85 - .../generic/pod-network-corruption/rbac.yaml | 80 - .../pod-network-duplication/experiment.yaml | 131 - ...twork-duplication.chartserviceversion.yaml | 49 - .../pod-network-duplication/rbac-psp.yaml | 84 - .../generic/pod-network-duplication/rbac.yaml | 79 - .../generic/pod-network-latency/engine.yaml | 41 - .../pod-network-latency/experiment.yaml | 137 - ...d-network-latency.chartserviceversion.yaml | 49 - .../generic/pod-network-latency/rbac-psp.yaml | 85 - charts/generic/pod-network-latency/rbac.yaml | 80 - .../generic/pod-network-loss/experiment.yaml | 134 - .../pod-network-loss.chartserviceversion.yaml | 48 - charts/generic/pod-network-loss/rbac-psp.yaml | 84 - charts/generic/pod-network-loss/rbac.yaml | 79 - .../pod-network-partition/experiment.yaml | 96 - ...network-partition.chartserviceversion.yaml | 43 - .../pod-network-partition/rbac-psp.yaml | 72 - .../generic/pod-network-partition/rbac.yaml | 67 - .../aws-az-chaos.chartserviceversion.yaml | 35 - charts/kube-aws/aws-az-chaos/rbac.yaml | 60 - .../ebs-loss-by-id.chartserviceversion.yaml | 43 - .../kube-aws/ebs-loss-by-id/experiment.yaml | 83 - charts/kube-aws/ebs-loss-by-id/rbac.yaml | 62 - .../ebs-loss-by-tag.chartserviceversion.yaml | 43 - .../kube-aws/ebs-loss-by-tag/experiment.yaml | 85 - charts/kube-aws/ebs-loss-by-tag/rbac.yaml | 62 - ...2-terminate-by-id.chartserviceversion.yaml | 42 - .../kube-aws/ec2-terminate-by-id/engine.yaml | 33 - .../ec2-terminate-by-id/experiment.yaml | 93 - charts/kube-aws/ec2-terminate-by-id/rbac.yaml | 66 - ...-terminate-by-tag.chartserviceversion.yaml | 42 - .../ec2-terminate-by-tag/experiment.yaml | 95 - .../kube-aws/ec2-terminate-by-tag/rbac.yaml | 66 - charts/kube-aws/experiments.yaml | 442 --- charts/kube-aws/icons/aws-az-chaos.png | Bin 3152 -> 0 bytes charts/kube-aws/icons/ebs-loss-by-id.png | Bin 3152 -> 0 bytes charts/kube-aws/icons/ebs-loss-by-tag.png | Bin 3152 -> 0 bytes charts/kube-aws/icons/ec2-terminate-by-id.png | Bin 3152 -> 0 bytes .../kube-aws/icons/ec2-terminate-by-tag.png | Bin 3152 -> 0 bytes .../kube-aws/icons/k8-aws-ec2-terminate.png | Bin 2289 -> 0 bytes charts/kube-aws/icons/kube-aws.png | Bin 3152 -> 0 bytes .../kube-aws.chartserviceversion.yaml | 42 - charts/kube-aws/kube-aws.package.yaml | 17 - charts/kube-aws/rbac-admin.yaml | 35 - charts/mongodb/experiments.yaml | 0 charts/mongodb/icons/mongodb.png | Bin 23291 -> 0 bytes .../mongodb/mongodb.chartserviceversion.yaml | 30 - charts/mongodb/mongodb.package.yaml | 2 - charts/spring-boot/experiments.yaml | 605 --- charts/spring-boot/icons/spring-boot.png | Bin 2047 -> 0 bytes .../spring-boot-app-kill/experiment.yaml | 84 - .../spring-boot-app-kill/rbac.yaml | 61 - ...ing-boot-app-kill.chartserviceversion.yaml | 49 - .../spring-boot-cpu-stress/experiment.yaml | 93 - .../spring-boot-cpu-stress/rbac.yaml | 61 - ...g-boot-cpu-stress.chartserviceversion.yaml | 49 - .../spring-boot-exceptions/experiment.yaml | 96 - .../spring-boot-exceptions/rbac.yaml | 61 - ...g-boot-exceptions.chartserviceversion.yaml | 49 - .../spring-boot-faults/experiment.yaml | 135 - .../spring-boot/spring-boot-faults/rbac.yaml | 61 - ...pring-boot-faults.chartserviceversion.yaml | 49 - .../spring-boot-latency/experiment.yaml | 92 - .../spring-boot/spring-boot-latency/rbac.yaml | 61 - ...ring-boot-latency.chartserviceversion.yaml | 49 - .../spring-boot-memory-stress/experiment.yaml | 93 - .../spring-boot-memory-stress/rbac.yaml | 61 - ...oot-memory-stress.chartserviceversion.yaml | 49 - .../spring-boot.chartserviceversion.yaml | 40 - charts/vmware/experiments.yaml | 96 - charts/vmware/icons/vmware.png | Bin 74909 -> 0 bytes charts/vmware/vm-poweroff/engine.yaml | 27 - charts/vmware/vm-poweroff/experiment.yaml | 94 - charts/vmware/vm-poweroff/rbac.yaml | 63 - .../vm-poweroff.chartserviceversion.yaml | 42 - charts/vmware/vmware.chartserviceversion.yaml | 34 - ...s-ssm-chaos-by-id.chartserviceversion.yaml | 43 - .../aws-ssm/aws-ssm-chaos-by-id/engine.yaml | 62 - .../aws-ssm-chaos-by-id/experiment.yaml | 129 - .../aws-ssm/aws-ssm-chaos-by-id/rbac.yaml | 62 - ...-ssm-chaos-by-tag.chartserviceversion.yaml | 43 - .../aws-ssm/aws-ssm-chaos-by-tag/engine.yaml | 62 - .../aws-ssm-chaos-by-tag/experiment.yaml | 133 - .../aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml | 62 - .../aws-ssm/aws-ssm.chartserviceversion.yaml | 38 - experiments/aws-ssm/aws-ssm.package.yaml | 8 - experiments/aws-ssm/experiments.yaml | 266 -- .../aws-ssm/icons/aws-ssm-chaos-by-id.png | Bin 3152 -> 0 bytes .../aws-ssm/icons/aws-ssm-chaos-by-tag.png | Bin 3152 -> 0 bytes experiments/aws-ssm/icons/aws-ssm.png | Bin 3152 -> 0 bytes .../azure-disk-loss.chartserviceversion.yaml | 42 - .../azure/azure-disk-loss/experiment.yaml | 95 - experiments/azure/azure-disk-loss/rbac.yaml | 64 - ...ure-instance-stop.chartserviceversion.yaml | 44 - .../azure/azure-instance-stop/engine.yaml | 33 - .../azure/azure-instance-stop/experiment.yaml | 96 - .../azure/azure-instance-stop/rbac.yaml | 62 - .../azure/azure.chartserviceversion.yaml | 41 - experiments/azure/azure.package.yaml | 10 - experiments/azure/experiments.yaml | 195 - experiments/azure/icons/azure-disk-loss.png | Bin 22398 -> 0 bytes .../azure/icons/azure-instance-stop.png | Bin 22398 -> 0 bytes experiments/azure/icons/azure.png | Bin 22398 -> 0 bytes .../bank-of-anthos.chartserviceversion.yaml | 27 + .../bank-of-anthos/experiment.yaml | 0 .../bank-of-anthos/experiment_cron.yaml | 0 ...oredns-pod-delete.chartserviceversion.yaml | 43 - .../coredns/coredns-pod-delete/engine.yaml | 30 - .../coredns-pod-delete/experiment.yaml | 72 - .../coredns/coredns-pod-delete/rbac.yaml | 36 - .../coredns/coredns.chartserviceversion.yaml | 42 - experiments/coredns/coredns.package.yaml | 5 - experiments/coredns/experiments.yaml | 74 - .../coredns/icons/coredns-pod-delete.png | Bin 20309 -> 0 bytes experiments/coredns/icons/coredns.png | Bin 20309 -> 0 bytes experiments/gcp/experiments.yaml | 374 -- .../gcp/gcp-vm-disk-loss-by-label/engine.yaml | 41 - .../gcp-vm-disk-loss-by-label/experiment.yaml | 83 - ...isk-loss-by-label.chartserviceversion.yaml | 33 - .../gcp/gcp-vm-disk-loss-by-label/rbac.yaml | 62 - experiments/gcp/gcp-vm-disk-loss/engine.yaml | 40 - .../gcp/gcp-vm-disk-loss/experiment.yaml | 89 - .../gcp-vm-disk-loss.chartserviceversion.yaml | 33 - experiments/gcp/gcp-vm-disk-loss/rbac.yaml | 62 - .../gcp-vm-instance-stop-by-label/engine.yaml | 46 - .../experiment.yaml | 95 - ...nce-stop-by-label.chartserviceversion.yaml | 33 - .../gcp-vm-instance-stop-by-label/rbac.yaml | 66 - .../gcp/gcp-vm-instance-stop/engine.yaml | 42 - .../gcp/gcp-vm-instance-stop/experiment.yaml | 99 - ...-vm-instance-stop.chartserviceversion.yaml | 33 - .../gcp/gcp-vm-instance-stop/rbac.yaml | 66 - experiments/gcp/gcp.chartserviceversion.yaml | 42 - experiments/gcp/gcp.package.yaml | 14 - .../gcp/icons/gcp-vm-disk-loss-by-label.png | Bin 40149 -> 0 bytes experiments/gcp/icons/gcp-vm-disk-loss.png | Bin 40149 -> 0 bytes .../icons/gcp-vm-instance-stop-by-label.png | Bin 68699 -> 0 bytes .../gcp/icons/gcp-vm-instance-stop.png | Bin 68699 -> 0 bytes experiments/gcp/icons/gcp.png | Bin 30752 -> 0 bytes .../container-kill.chartserviceversion.yaml | 48 - .../engine_nginx_getstarted.yaml | 46 - .../generic/container-kill/experiment.yaml | 125 - .../generic/container-kill/rbac-psp.yaml | 86 - experiments/generic/container-kill/rbac.yaml | 81 - .../container-kill/rbac_nginx_getstarted.yaml | 78 - .../disk-fill.chartserviceversion.yaml | 48 - experiments/generic/disk-fill/experiment.yaml | 128 - experiments/generic/disk-fill/rbac-psp.yaml | 85 - experiments/generic/disk-fill/rbac.yaml | 80 - ...cker-service-kill.chartserviceversion.yaml | 47 - .../generic/docker-service-kill/engine.yaml | 23 - .../docker-service-kill/experiment.yaml | 85 - .../generic/docker-service-kill/rbac-psp.yaml | 71 - .../generic/docker-service-kill/rbac.yaml | 66 - experiments/generic/experiments.yaml | 3040 --------------- .../generic/generic.chartserviceversion.yaml | 109 - experiments/generic/icons/byoc-pod-delete.png | Bin 959 -> 0 bytes experiments/generic/icons/container-kill.png | Bin 2281 -> 0 bytes experiments/generic/icons/disk-fill.png | Bin 1703 -> 0 bytes .../generic/icons/docker-service-kill.png | Bin 12130 -> 0 bytes experiments/generic/icons/generic.png | Bin 12130 -> 0 bytes .../generic/icons/kubelet-service-kill.png | Bin 2647 -> 0 bytes experiments/generic/icons/node-cpu-hog.png | Bin 2453 -> 0 bytes experiments/generic/icons/node-drain.png | Bin 1898 -> 0 bytes experiments/generic/icons/node-io-stress.png | Bin 12130 -> 0 bytes experiments/generic/icons/node-memory-hog.png | Bin 1571 -> 0 bytes experiments/generic/icons/node-restart.png | Bin 12130 -> 0 bytes experiments/generic/icons/node-taint.png | Bin 12130 -> 0 bytes experiments/generic/icons/pod-autoscaler.png | Bin 12130 -> 0 bytes .../generic/icons/pod-cpu-hog-exec.png | Bin 2078 -> 0 bytes experiments/generic/icons/pod-cpu-hog.png | Bin 2078 -> 0 bytes experiments/generic/icons/pod-delete.png | Bin 959 -> 0 bytes experiments/generic/icons/pod-dns-error.png | Bin 12130 -> 0 bytes experiments/generic/icons/pod-dns-spoof.png | Bin 12130 -> 0 bytes .../generic/icons/pod-http-latency.png | Bin 12130 -> 0 bytes .../generic/icons/pod-http-modify-body.png | Bin 12130 -> 0 bytes .../generic/icons/pod-http-modify-header.png | Bin 12130 -> 0 bytes .../generic/icons/pod-http-reset-peer.png | Bin 12130 -> 0 bytes .../generic/icons/pod-http-status-code.png | Bin 12130 -> 0 bytes experiments/generic/icons/pod-io-stress.png | Bin 12130 -> 0 bytes .../generic/icons/pod-memory-hog-exec.png | Bin 1516 -> 0 bytes experiments/generic/icons/pod-memory-hog.png | Bin 1516 -> 0 bytes .../generic/icons/pod-network-corruption.png | Bin 2650 -> 0 bytes .../generic/icons/pod-network-duplication.png | Bin 12130 -> 0 bytes .../generic/icons/pod-network-latency.png | Bin 2450 -> 0 bytes .../generic/icons/pod-network-loss.png | Bin 2715 -> 0 bytes .../generic/icons/pod-network-partition.png | Bin 12130 -> 0 bytes .../generic/kubelet-service-kill/engine.yaml | 25 - ...elet-service-kill.chartserviceversion.yaml | 50 - .../kubelet-service-kill/rbac-psp.yaml | 71 - .../generic/kubelet-service-kill/rbac.yaml | 66 - experiments/generic/node-cpu-hog/engine.yaml | 37 - .../generic/node-cpu-hog/experiment.yaml | 104 - .../node-cpu-hog.chartserviceversion.yaml | 50 - .../generic/node-cpu-hog/rbac-psp.yaml | 71 - experiments/generic/node-cpu-hog/rbac.yaml | 66 - .../generic/node-drain/experiment.yaml | 85 - .../node-drain.chartserviceversion.yaml | 49 - experiments/generic/node-drain/rbac-psp.yaml | 75 - experiments/generic/node-drain/rbac.yaml | 70 - .../generic/node-io-stress/engine.yaml | 39 - .../generic/node-io-stress/experiment.yaml | 116 - .../node-io-stress.chartserviceversion.yaml | 49 - .../generic/node-io-stress/rbac-psp.yaml | 71 - experiments/generic/node-io-stress/rbac.yaml | 66 - .../generic/node-memory-hog/engine.yaml | 37 - .../generic/node-memory-hog/experiment.yaml | 107 - .../node-memory-hog.chartserviceversion.yaml | 50 - .../generic/node-memory-hog/rbac-psp.yaml | 71 - experiments/generic/node-memory-hog/rbac.yaml | 66 - .../generic/node-poweroff/experiment.yaml | 97 - .../node-poweroff.chartserviceversion.yaml | 39 - .../generic/node-poweroff/rbac-psp.yaml | 71 - experiments/generic/node-poweroff/rbac.yaml | 66 - .../generic/node-restart/experiment.yaml | 94 - .../node-restart.chartserviceversion.yaml | 39 - .../generic/node-restart/rbac-psp.yaml | 71 - experiments/generic/node-restart/rbac.yaml | 66 - experiments/generic/node-taint/engine.yaml | 31 - .../node-taint.chartserviceversion.yaml | 49 - experiments/generic/node-taint/rbac-psp.yaml | 75 - experiments/generic/node-taint/rbac.yaml | 70 - .../generic/pod-autoscaler/engine.yaml | 28 - .../pod-autoscaler.chartserviceversion.yaml | 47 - .../generic/pod-autoscaler/rbac-psp.yaml | 71 - experiments/generic/pod-autoscaler/rbac.yaml | 66 - .../generic/pod-cpu-hog-exec/experiment.yaml | 105 - .../pod-cpu-hog-exec.chartserviceversion.yaml | 51 - .../generic/pod-cpu-hog-exec/rbac-psp.yaml | 85 - .../generic/pod-cpu-hog-exec/rbac.yaml | 80 - .../generic/pod-cpu-hog/experiment.yaml | 127 - .../pod-cpu-hog.chartserviceversion.yaml | 53 - experiments/generic/pod-cpu-hog/rbac-psp.yaml | 85 - experiments/generic/pod-cpu-hog/rbac.yaml | 80 - .../generic/pod-delete/ansible/engine.yaml | 31 - .../pod-delete/ansible/experiment.yaml | 84 - .../pod-delete/ansible/powerfulseal_rbac.yaml | 38 - .../generic/pod-delete/ansible/rbac.yaml | 40 - experiments/generic/pod-delete/engine.yaml | 33 - .../pod-delete/engine_nginx_getstarted.yaml | 37 - .../pod-delete.chartserviceversion.yaml | 52 - .../generic/pod-delete/python/engine.yaml | 33 - .../generic/pod-delete/python/experiment.yaml | 90 - .../generic/pod-delete/python/rbac.yaml | 58 - experiments/generic/pod-delete/rbac-psp.yaml | 86 - experiments/generic/pod-delete/rbac.yaml | 81 - .../pod-delete/rbac_nginx_getstarted.yaml | 77 - experiments/generic/pod-dns-error/engine.yaml | 41 - .../pod-dns-error.chartserviceversion.yaml | 37 - .../generic/pod-dns-error/rbac-psp.yaml | 85 - experiments/generic/pod-dns-error/rbac.yaml | 80 - experiments/generic/pod-dns-spoof/engine.yaml | 37 - .../pod-dns-spoof.chartserviceversion.yaml | 37 - .../generic/pod-dns-spoof/rbac-psp.yaml | 85 - experiments/generic/pod-dns-spoof/rbac.yaml | 80 - .../generic/pod-http-latency/experiment.yaml | 140 - .../pod-http-latency.chartserviceversion.yaml | 45 - .../generic/pod-http-latency/rbac-psp.yaml | 85 - .../generic/pod-http-latency/rbac.yaml | 80 - .../pod-http-modify-body/experiment.yaml | 151 - ...-http-modify-body.chartserviceversion.yaml | 41 - .../pod-http-modify-body/rbac-psp.yaml | 84 - .../generic/pod-http-modify-body/rbac.yaml | 79 - .../pod-http-modify-header/experiment.yaml | 146 - ...ttp-modify-header.chartserviceversion.yaml | 45 - .../pod-http-modify-header/rbac-psp.yaml | 85 - .../generic/pod-http-modify-header/rbac.yaml | 80 - .../generic/pod-http-reset-peer/engine.yaml | 48 - .../pod-http-reset-peer/experiment.yaml | 140 - ...d-http-reset-peer.chartserviceversion.yaml | 41 - .../generic/pod-http-reset-peer/rbac-psp.yaml | 84 - .../generic/pod-http-reset-peer/rbac.yaml | 79 - .../generic/pod-http-status-code/engine.yaml | 56 - .../pod-http-status-code/experiment.yaml | 162 - ...-http-status-code.chartserviceversion.yaml | 42 - .../pod-http-status-code/rbac-psp.yaml | 85 - .../generic/pod-http-status-code/rbac.yaml | 79 - experiments/generic/pod-io-stress/engine.yaml | 37 - .../pod-io-stress.chartserviceversion.yaml | 50 - .../generic/pod-io-stress/rbac-psp.yaml | 85 - experiments/generic/pod-io-stress/rbac.yaml | 80 - ...d-memory-hog-exec.chartserviceversion.yaml | 51 - .../generic/pod-memory-hog-exec/rbac-psp.yaml | 85 - .../generic/pod-memory-hog-exec/rbac.yaml | 80 - .../pod-memory-hog.chartserviceversion.yaml | 51 - .../generic/pod-memory-hog/rbac-psp.yaml | 85 - experiments/generic/pod-memory-hog/rbac.yaml | 80 - .../pod-network-corruption/engine.yaml | 38 - .../pod-network-corruption/experiment.yaml | 148 - ...etwork-corruption.chartserviceversion.yaml | 49 - .../pod-network-corruption/rbac-psp.yaml | 85 - .../generic/pod-network-corruption/rbac.yaml | 80 - .../pod-network-duplication/engine.yaml | 39 - .../pod-network-duplication/experiment.yaml | 145 - ...twork-duplication.chartserviceversion.yaml | 49 - .../pod-network-duplication/rbac-psp.yaml | 84 - .../generic/pod-network-duplication/rbac.yaml | 79 - .../pod-network-latency/experiment.yaml | 151 - ...d-network-latency.chartserviceversion.yaml | 49 - .../generic/pod-network-latency/rbac-psp.yaml | 85 - .../generic/pod-network-latency/rbac.yaml | 80 - .../generic/pod-network-loss/engine.yaml | 40 - .../generic/pod-network-loss/experiment.yaml | 148 - .../pod-network-loss.chartserviceversion.yaml | 48 - .../generic/pod-network-loss/rbac-psp.yaml | 84 - .../generic/pod-network-loss/rbac.yaml | 79 - .../generic/pod-network-partition/engine.yaml | 21 - .../pod-network-partition/experiment.yaml | 100 - ...network-partition.chartserviceversion.yaml | 43 - .../pod-network-partition/rbac-psp.yaml | 72 - .../generic/pod-network-partition/rbac.yaml | 67 - .../icons/bank-of-anthos.png | Bin .../icons/podtato-head.png | Bin .../icons/sock-shop-promProbe.png | Bin .../icons/sock-shop.png | Bin .../aws-az-chaos.chartserviceversion.yaml | 35 - experiments/kube-aws/aws-az-chaos/engine.yaml | 27 - .../kube-aws/aws-az-chaos/experiment.yaml | 76 - experiments/kube-aws/aws-az-chaos/rbac.yaml | 60 - .../ebs-loss-by-id.chartserviceversion.yaml | 43 - .../kube-aws/ebs-loss-by-id/engine.yaml | 28 - .../kube-aws/ebs-loss-by-id/experiment.yaml | 88 - experiments/kube-aws/ebs-loss-by-id/rbac.yaml | 62 - .../ebs-loss-by-tag.chartserviceversion.yaml | 43 - .../kube-aws/ebs-loss-by-tag/engine.yaml | 32 - .../kube-aws/ebs-loss-by-tag/experiment.yaml | 90 - .../kube-aws/ebs-loss-by-tag/rbac.yaml | 62 - ...2-terminate-by-id.chartserviceversion.yaml | 42 - .../ec2-terminate-by-id/experiment.yaml | 98 - .../kube-aws/ec2-terminate-by-id/rbac.yaml | 66 - ...-terminate-by-tag.chartserviceversion.yaml | 42 - .../kube-aws/ec2-terminate-by-tag/engine.yaml | 37 - .../ec2-terminate-by-tag/experiment.yaml | 100 - .../kube-aws/ec2-terminate-by-tag/rbac.yaml | 66 - experiments/kube-aws/experiments.yaml | 462 --- experiments/kube-aws/icons/aws-az-chaos.png | Bin 3152 -> 0 bytes experiments/kube-aws/icons/ebs-loss-by-id.png | Bin 3152 -> 0 bytes .../kube-aws/icons/ebs-loss-by-tag.png | Bin 3152 -> 0 bytes .../kube-aws/icons/ec2-terminate-by-id.png | Bin 3152 -> 0 bytes .../kube-aws/icons/ec2-terminate-by-tag.png | Bin 3152 -> 0 bytes .../kube-aws/icons/k8-aws-ec2-terminate.png | Bin 2289 -> 0 bytes experiments/kube-aws/icons/kube-aws.png | Bin 3152 -> 0 bytes .../kube-aws.chartserviceversion.yaml | 47 - experiments/kube-aws/kube-aws.package.yaml | 17 - experiments/kube-aws/rbac-admin.yaml | 35 - experiments/longhorn/experiments.yaml | 0 experiments/longhorn/icons/longhorn.png | Bin 2263 -> 0 bytes .../longhorn.chartserviceversion.yaml | 32 - experiments/longhorn/longhorn.package.yaml | 2 - experiments/mongodb/experiments.yaml | 0 experiments/mongodb/icons/mongodb.png | Bin 23291 -> 0 bytes .../mongodb/mongodb.chartserviceversion.yaml | 30 - experiments/mongodb/mongodb.package.yaml | 2 - experiments/mysql/experiments.yaml | 0 experiments/mysql/icons/mysql.png | Bin 41430 -> 0 bytes .../mysql/mysql.chartserviceversion.yaml | 30 - experiments/mysql/mysql.package.yaml | 2 - .../namespaced-scope-chaos/experiment.yaml | 0 .../experiment_cron.yaml | 0 ...paced-scope-chaos.chartserviceversion.yaml | 27 + .../node-cpu-hog/experiment.yaml | 0 .../node-cpu-hog/experiment_cron.yaml | 0 .../node-cpu-hog.chartserviceversion.yaml | 30 + .../node-memory-hog/experiment.yaml | 0 .../node-memory-hog/experiment_cron.yaml | 0 .../node-memory-hog.chartserviceversion.yaml | 30 + experiments/openebs/experiments.yaml | 1097 ------ .../icons/openebs-control-plane-chaos.png | Bin 12575 -> 0 bytes .../icons/openebs-nfs-provisioner-kill.png | Bin 12575 -> 0 bytes .../icons/openebs-pool-container-failure.png | Bin 12575 -> 0 bytes .../openebs/icons/openebs-pool-disk-loss.png | Bin 12575 -> 0 bytes .../icons/openebs-pool-network-delay.png | Bin 12575 -> 0 bytes .../icons/openebs-pool-network-loss.png | Bin 12575 -> 0 bytes .../icons/openebs-pool-pod-failure.png | Bin 1421 -> 0 bytes .../openebs-target-container-failure.png | Bin 3152 -> 0 bytes .../icons/openebs-target-network-delay.png | Bin 1256 -> 0 bytes .../icons/openebs-target-network-loss.png | Bin 2715 -> 0 bytes .../icons/openebs-target-pod-failure.png | Bin 2661 -> 0 bytes experiments/openebs/icons/openebs.png | Bin 12575 -> 0 bytes .../openebs-control-plane-chaos/engine.yaml | 20 - .../experiment.yaml | 79 - ...ntrol-plane-chaos.chartserviceversion.yaml | 42 - .../openebs-control-plane-chaos/rbac.yaml | 42 - .../openebs-nfs-provisioner-kill/engine.yaml | 40 - .../experiment.yaml | 100 - ...-provisioner-kill.chartserviceversion.yaml | 42 - .../openebs-nfs-provisioner-kill/rbac.yaml | 37 - .../engine.yaml | 29 - .../experiment.yaml | 97 - ...container-failure.chartserviceversion.yaml | 45 - .../openebs-pool-container-failure/rbac.yaml | 38 - .../openebs-pool-disk-loss/engine.yaml | 51 - .../openebs-pool-disk-loss/experiment.yaml | 111 - ...bs-pool-disk-loss.chartserviceversion.yaml | 45 - .../openebs/openebs-pool-disk-loss/rbac.yaml | 38 - .../openebs-pool-network-delay/engine.yaml | 25 - .../experiment.yaml | 93 - ...ool-network-delay.chartserviceversion.yaml | 44 - .../openebs-pool-network-delay/rbac.yaml | 34 - .../openebs-pool-network-loss/engine.yaml | 27 - .../openebs-pool-network-loss/experiment.yaml | 92 - ...pool-network-loss.chartserviceversion.yaml | 44 - .../openebs-pool-network-loss/rbac.yaml | 35 - .../openebs-pool-pod-failure/engine.yaml | 28 - .../openebs-pool-pod-failure/experiment.yaml | 97 - ...-pool-pod-failure.chartserviceversion.yaml | 45 - .../openebs-pool-pod-failure/rbac.yaml | 38 - .../engine.yaml | 32 - .../experiment.yaml | 113 - ...container-failure.chartserviceversion.yaml | 45 - .../rbac.yaml | 38 - .../openebs-target-network-delay/engine.yaml | 35 - .../experiment.yaml | 94 - ...get-network-delay.chartserviceversion.yaml | 45 - .../openebs-target-network-delay/rbac.yaml | 38 - .../openebs-target-network-loss/engine.yaml | 31 - .../experiment.yaml | 94 - ...rget-network-loss.chartserviceversion.yaml | 45 - .../openebs-target-network-loss/rbac.yaml | 38 - .../openebs-target-pod-failure/engine.yaml | 31 - .../experiment.yaml | 105 - ...arget-pod-failure.chartserviceversion.yaml | 46 - .../openebs-target-pod-failure/rbac.yaml | 42 - .../openebs/openebs.chartserviceversion.yaml | 63 - experiments/openebs/openebs.package.yaml | 35 - ..._engine_with_data_persistency_enabled.yaml | 30 - .../pod-cpu-hog/experiment.yaml | 0 .../pod-cpu-hog/experiment_cron.yaml | 0 .../pod-cpu-hog.chartserviceversion.yaml | 31 + .../pod-delete/experiment.yaml | 0 .../pod-delete/experiment_cron.yaml | 0 .../pod-delete.chartserviceversion.yaml | 33 + .../pod-memory-hog/experiment.yaml | 0 .../pod-memory-hog/experiment_cron.yaml | 0 .../pod-memory-hog.chartserviceversion.yaml | 31 + .../podtato-head/experiment.yaml | 0 .../podtato-head/experiment_cron.yaml | 0 .../podtato-head.chartserviceversion.yaml | 28 + .../sock-shop-promProbe/experiment.yaml | 40 +- .../sock-shop-promProbe/experiment_cron.yaml | 0 ...ck-shop-promProbe.chartserviceversion.yaml | 28 + .../sock-shop/experiment.yaml | 0 .../sock-shop/experiment_cron.yaml | 0 .../sock-shop.chartserviceversion.yaml | 28 + experiments/vmware/experiments.yaml | 99 - experiments/vmware/icons/vm-poweroff.png | Bin 74909 -> 0 bytes experiments/vmware/icons/vmware.png | Bin 74909 -> 0 bytes .../vmware/vm-poweroff/experiment.yaml | 97 - experiments/vmware/vm-poweroff/rbac.yaml | 63 - .../vm-poweroff.chartserviceversion.yaml | 42 - .../vmware/vmware.chartserviceversion.yaml | 35 - experiments/vmware/vmware.package.yaml | 5 - .../aws-az-chaos.chartserviceversion.yaml | 32 + .../aws}/aws-az-chaos/engine.yaml | 7 +- .../aws/aws-az-chaos/fault.yaml | 51 +- ...s-ssm-chaos-by-id.chartserviceversion.yaml | 30 + faults/aws/aws-ssm-chaos-by-id/engine.yaml | 39 + faults/aws/aws-ssm-chaos-by-id/fault.yaml | 128 + ...-ssm-chaos-by-tag.chartserviceversion.yaml | 30 + faults/aws/aws-ssm-chaos-by-tag/engine.yaml | 39 + faults/aws/aws-ssm-chaos-by-tag/fault.yaml | 132 + faults/aws/aws.chartserviceversion.yaml | 51 + faults/aws/aws.package.yaml | 24 + .../ebs-loss-by-id.chartserviceversion.yaml | 30 + .../aws}/ebs-loss-by-id/engine.yaml | 11 +- faults/aws/ebs-loss-by-id/fault.yaml | 87 + .../ebs-loss-by-tag.chartserviceversion.yaml | 30 + .../aws}/ebs-loss-by-tag/engine.yaml | 14 +- faults/aws/ebs-loss-by-tag/fault.yaml | 89 + .../ec2-stop-by-tag.chartserviceversion.yaml | 30 + .../aws/ec2-stop-by-tag}/engine.yaml | 19 +- faults/aws/ec2-stop-by-tag/fault.yaml | 103 + ...2-terminate-by-id.chartserviceversion.yaml | 30 + .../aws}/ec2-terminate-by-id/engine.yaml | 13 +- faults/aws/ec2-terminate-by-id/fault.yaml | 97 + faults/aws/icons/alb-az-down.png | Bin 0 -> 62023 bytes faults/aws/icons/aws-ssm-chaos-by-id.png | Bin 0 -> 62023 bytes faults/aws/icons/aws-ssm-chaos-by-tag.png | Bin 0 -> 62023 bytes faults/aws/icons/ebs-loss-by-id.png | Bin 0 -> 62023 bytes faults/aws/icons/ebs-loss-by-tag.png | Bin 0 -> 62023 bytes faults/aws/icons/ec2-terminate-by-id.png | Bin 0 -> 62023 bytes faults/aws/icons/ec2-terminate-by-tag.png | Bin 0 -> 62023 bytes .../azure-disk-loss.chartserviceversion.yaml | 24 + .../azure/azure-disk-loss/engine.yaml | 13 +- faults/azure/azure-disk-loss/fault.yaml | 94 + ...ure-instance-stop.chartserviceversion.yaml | 26 + .../azure/azure-instance-stop/engine.yaml | 10 +- faults/azure/azure-instance-stop/fault.yaml | 93 + faults/azure/azure.chartserviceversion.yaml | 27 + {charts => faults}/azure/azure.package.yaml | 13 +- .../azure/icons/azure-disk-loss.png | Bin .../azure/icons/azure-instance-stop.png | Bin .../gcp/gcp-vm-disk-loss-by-label/engine.yaml | 11 +- .../gcp/gcp-vm-disk-loss-by-label/fault.yaml | 89 + ...isk-loss-by-label.chartserviceversion.yaml | 28 + .../gcp/gcp-vm-disk-loss/engine.yaml | 13 +- faults/gcp/gcp-vm-disk-loss/fault.yaml | 93 + .../gcp-vm-disk-loss.chartserviceversion.yaml | 27 + .../gcp-vm-instance-stop-by-label/engine.yaml | 17 +- .../gcp-vm-instance-stop-by-label/fault.yaml | 97 + ...nce-stop-by-label.chartserviceversion.yaml | 27 + .../gcp/gcp-vm-instance-stop/engine.yaml | 13 +- faults/gcp/gcp-vm-instance-stop/fault.yaml | 101 + ...-vm-instance-stop.chartserviceversion.yaml | 26 + faults/gcp/gcp.chartserviceversion.yaml | 42 + {charts => faults}/gcp/gcp.package.yaml | 9 +- .../gcp/icons/gcp-vm-disk-loss-by-label.png | Bin .../gcp/icons/gcp-vm-disk-loss.png | Bin .../icons/gcp-vm-instance-stop-by-label.png | Bin .../gcp/icons/gcp-vm-instance-stop.png | Bin .../container-kill.chartserviceversion.yaml | 33 + .../kubernetes}/container-kill/engine.yaml | 11 +- .../kubernetes/container-kill/fault.yaml | 110 +- .../disk-fill.chartserviceversion.yaml | 37 + .../kubernetes}/disk-fill/engine.yaml | 17 +- faults/kubernetes/disk-fill/fault.yaml | 123 + ...cker-service-kill.chartserviceversion.yaml | 30 + .../docker-service-kill/engine.yaml | 10 +- .../kubernetes/docker-service-kill/fault.yaml | 70 +- .../kubernetes}/icons/container-kill.png | Bin .../kubernetes}/icons/disk-fill.png | Bin .../kubernetes}/icons/docker-service-kill.png | Bin .../icons/kubelet-service-kill.png | Bin .../kubernetes}/icons/node-cpu-hog.png | Bin .../kubernetes}/icons/node-drain.png | Bin .../kubernetes}/icons/node-io-stress.png | Bin .../kubernetes}/icons/node-memory-hog.png | Bin .../kubernetes/icons/node-poweroff.png | Bin .../kubernetes}/icons/node-restart.png | Bin .../kubernetes}/icons/node-taint.png | Bin .../kubernetes}/icons/pod-autoscaler.png | Bin .../kubernetes}/icons/pod-cpu-hog-exec.png | Bin .../kubernetes}/icons/pod-cpu-hog.png | Bin .../kubernetes}/icons/pod-delete.png | Bin .../kubernetes}/icons/pod-dns-error.png | Bin .../kubernetes}/icons/pod-dns-spoof.png | Bin .../kubernetes}/icons/pod-http-latency.png | Bin .../icons/pod-http-modify-body.png | Bin .../icons/pod-http-modify-header.png | Bin .../kubernetes}/icons/pod-http-reset-peer.png | Bin .../icons/pod-http-status-code.png | Bin .../kubernetes}/icons/pod-io-stress.png | Bin .../kubernetes}/icons/pod-memory-hog-exec.png | Bin .../kubernetes}/icons/pod-memory-hog.png | Bin .../icons/pod-network-corruption.png | Bin .../icons/pod-network-duplication.png | Bin .../kubernetes}/icons/pod-network-latency.png | Bin .../kubernetes}/icons/pod-network-loss.png | Bin .../icons/pod-network-partition.png | Bin .../kubelet-service-kill/engine.yaml | 9 +- .../kubelet-service-kill/fault.yaml | 70 +- ...elet-service-kill.chartserviceversion.yaml | 33 + .../kubernetes.chartserviceversion.yaml | 120 + .../kubernetes/kubernetes.package.yaml | 37 +- .../kubernetes}/node-cpu-hog/engine.yaml | 11 +- faults/kubernetes/node-cpu-hog/fault.yaml | 102 + .../node-cpu-hog.chartserviceversion.yaml | 37 + .../kubernetes}/node-drain/engine.yaml | 10 +- .../kubernetes/node-drain/fault.yaml | 62 +- .../node-drain.chartserviceversion.yaml | 33 + .../kubernetes}/node-io-stress/engine.yaml | 7 +- faults/kubernetes/node-io-stress/fault.yaml | 114 + .../node-io-stress.chartserviceversion.yaml | 32 + .../kubernetes}/node-memory-hog/engine.yaml | 7 +- faults/kubernetes/node-memory-hog/fault.yaml | 105 + .../node-memory-hog.chartserviceversion.yaml | 37 + .../kubernetes}/node-poweroff/engine.yaml | 6 +- .../kubernetes/node-poweroff/fault.yaml | 7 +- .../node-poweroff.chartserviceversion.yaml | 29 + .../kubernetes}/node-restart/engine.yaml | 12 +- .../kubernetes/node-restart/fault.yaml | 78 +- .../node-restart.chartserviceversion.yaml | 25 + .../kubernetes}/node-taint/engine.yaml | 14 +- .../kubernetes/node-taint/fault.yaml | 71 +- .../node-taint.chartserviceversion.yaml | 33 + .../kubernetes}/pod-autoscaler/engine.yaml | 11 +- .../kubernetes/pod-autoscaler/fault.yaml | 60 +- .../pod-autoscaler.chartserviceversion.yaml | 32 + .../kubernetes}/pod-cpu-hog-exec/engine.yaml | 13 +- .../kubernetes/pod-cpu-hog-exec/fault.yaml | 83 +- .../pod-cpu-hog-exec.chartserviceversion.yaml | 34 + .../kubernetes}/pod-cpu-hog/engine.yaml | 16 +- .../kubernetes/pod-cpu-hog/fault.yaml | 104 +- .../pod-cpu-hog.chartserviceversion.yaml | 39 + .../kubernetes/pod-delete}/engine.yaml | 10 +- faults/kubernetes/pod-delete/fault.yaml | 109 + .../pod-delete.chartserviceversion.yaml | 42 + .../kubernetes}/pod-dns-error/engine.yaml | 10 +- .../kubernetes/pod-dns-error/fault.yaml | 50 +- .../pod-dns-error.chartserviceversion.yaml | 24 + .../kubernetes}/pod-dns-spoof/engine.yaml | 8 +- .../kubernetes/pod-dns-spoof/fault.yaml | 48 +- .../pod-dns-spoof.chartserviceversion.yaml | 24 + .../kubernetes}/pod-http-latency/engine.yaml | 14 +- faults/kubernetes/pod-http-latency/fault.yaml | 139 + .../pod-http-latency.chartserviceversion.yaml | 31 + .../pod-http-modify-body/engine.yaml | 8 +- .../pod-http-modify-body/fault.yaml | 150 + ...-http-modify-body.chartserviceversion.yaml | 28 + .../pod-http-modify-header/engine.yaml | 16 +- .../pod-http-modify-header/fault.yaml | 145 + ...ttp-modify-header.chartserviceversion.yaml | 31 + .../pod-http-reset-peer/engine.yaml | 11 +- .../kubernetes/pod-http-reset-peer/fault.yaml | 139 + ...d-http-reset-peer.chartserviceversion.yaml | 28 + .../pod-http-status-code/engine.yaml | 14 +- .../pod-http-status-code/fault.yaml | 160 + ...-http-status-code.chartserviceversion.yaml | 28 + .../kubernetes}/pod-io-stress/engine.yaml | 12 +- .../kubernetes/pod-io-stress/fault.yaml | 64 +- .../pod-io-stress.chartserviceversion.yaml | 33 + .../pod-memory-hog-exec/engine.yaml | 9 +- .../kubernetes/pod-memory-hog-exec/fault.yaml | 56 +- ...d-memory-hog-exec.chartserviceversion.yaml | 34 + .../kubernetes}/pod-memory-hog/engine.yaml | 14 +- .../kubernetes/pod-memory-hog/fault.yaml | 70 +- .../pod-memory-hog.chartserviceversion.yaml | 39 + .../pod-network-corruption/engine.yaml | 10 +- .../pod-network-corruption/fault.yaml | 104 +- ...etwork-corruption.chartserviceversion.yaml | 35 + .../pod-network-duplication/engine.yaml | 16 +- .../pod-network-duplication/fault.yaml | 135 + ...twork-duplication.chartserviceversion.yaml | 33 + .../pod-network-latency/engine.yaml | 14 +- .../kubernetes/pod-network-latency/fault.yaml | 140 + ...d-network-latency.chartserviceversion.yaml | 33 + .../kubernetes}/pod-network-loss/engine.yaml | 18 +- .../kubernetes/pod-network-loss/fault.yaml | 125 +- .../pod-network-loss.chartserviceversion.yaml | 36 + .../pod-network-partition/engine.yaml | 12 +- .../pod-network-partition/fault.yaml | 99 + ...network-partition.chartserviceversion.yaml | 29 + .../icons/spring-boot-app-kill.png | Bin .../icons/spring-boot-cpu-stress.png | Bin .../icons/spring-boot-exceptions.png | Bin .../spring-boot/icons/spring-boot-faults.png | Bin .../spring-boot/icons/spring-boot-latency.png | Bin .../icons/spring-boot-memory-stress.png | Bin .../spring-boot-app-kill/engine.yaml | 8 +- .../spring-boot-app-kill/fault.yaml | 85 + ...ing-boot-app-kill.chartserviceversion.yaml | 27 + .../spring-boot-cpu-stress/engine.yaml | 8 +- .../spring-boot-cpu-stress/fault.yaml | 93 + ...g-boot-cpu-stress.chartserviceversion.yaml | 27 + .../spring-boot-exceptions/engine.yaml | 8 +- .../spring-boot-exceptions/fault.yaml | 96 + ...g-boot-exceptions.chartserviceversion.yaml | 27 + .../spring-boot-faults/engine.yaml | 8 +- .../spring-boot/spring-boot-faults/fault.yaml | 135 + ...pring-boot-faults.chartserviceversion.yaml | 27 + .../spring-boot-latency/engine.yaml | 8 +- .../spring-boot-latency/fault.yaml | 92 + ...ring-boot-latency.chartserviceversion.yaml | 27 + .../spring-boot-memory-stress/engine.yaml | 8 +- .../spring-boot-memory-stress/fault.yaml | 93 + ...oot-memory-stress.chartserviceversion.yaml | 27 + .../spring-boot.chartserviceversion.yaml | 44 + .../spring-boot/spring-boot.package.yaml | 3 +- .../vmware/icons/vm-poweroff.png | Bin .../vmware/vm-poweroff/engine.yaml | 15 +- .../vmware/vm-poweroff/fault.yaml | 104 +- .../vm-poweroff.chartserviceversion.yaml | 29 + faults/vmware/vmware.chartserviceversion.yaml | 24 + {charts => faults}/vmware/vmware.package.yaml | 3 +- scenarios/icons/pod-delete.png | Bin 959 -> 0 bytes scenarios/icons/pod-memory-hog.png | Bin 1516 -> 0 bytes .../pod-delete.chartserviceversion.yaml | 39 - scenarios/pod-delete/workflow.yaml | 157 - .../pod-memory-hog.chartserviceversion.yaml | 40 - scenarios/pod-memory-hog/workflow_cron.yaml | 158 - .../podtato-head.chartserviceversion.yaml | 40 - workflows/icons/bank-of-anthos.png | Bin 7870 -> 0 bytes workflows/icons/podtato-head.png | Bin 162950 -> 0 bytes workflows/icons/sock-shop-promProbe.png | Bin 246052 -> 0 bytes workflows/icons/sock-shop.png | Bin 246052 -> 0 bytes workflows/pod-delete/workflow_cron.yaml | 161 - workflows/pod-memory-hog/workflow.yaml | 154 - .../podtato-head.chartserviceversion.yaml | 40 - workflows/podtato-head/workflow.yaml | 114 - workflows/podtato-head/workflow_cron.yaml | 118 - 840 files changed, 6786 insertions(+), 43441 deletions(-) delete mode 100644 charts/aws-ssm/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml delete mode 100644 charts/aws-ssm/aws-ssm-chaos-by-id/engine.yaml delete mode 100644 charts/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml delete mode 100644 charts/aws-ssm/aws-ssm-chaos-by-id/rbac.yaml delete mode 100644 charts/aws-ssm/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml delete mode 100644 charts/aws-ssm/aws-ssm-chaos-by-tag/engine.yaml delete mode 100644 charts/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml delete mode 100644 charts/aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml delete mode 100644 charts/aws-ssm/aws-ssm.chartserviceversion.yaml delete mode 100644 charts/aws-ssm/aws-ssm.package.yaml delete mode 100644 charts/aws-ssm/experiments.yaml delete mode 100644 charts/aws-ssm/icons/aws-ssm-chaos-by-id.png delete mode 100644 charts/aws-ssm/icons/aws-ssm-chaos-by-tag.png delete mode 100644 charts/aws-ssm/icons/aws-ssm.png delete mode 100644 charts/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml delete mode 100644 charts/azure/azure-disk-loss/engine.yaml delete mode 100644 charts/azure/azure-disk-loss/experiment.yaml delete mode 100644 charts/azure/azure-disk-loss/rbac.yaml delete mode 100644 charts/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml delete mode 100644 charts/azure/azure-instance-stop/experiment.yaml delete mode 100644 charts/azure/azure-instance-stop/rbac.yaml delete mode 100644 charts/azure/azure.chartserviceversion.yaml delete mode 100644 charts/azure/experiments.yaml delete mode 100644 charts/azure/icons/azure.png delete mode 100644 charts/gcp/experiments.yaml delete mode 100644 charts/gcp/gcp-vm-disk-loss-by-label/experiment.yaml delete mode 100644 charts/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml delete mode 100644 charts/gcp/gcp-vm-disk-loss-by-label/rbac.yaml delete mode 100644 charts/gcp/gcp-vm-disk-loss/experiment.yaml delete mode 100644 charts/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml delete mode 100644 charts/gcp/gcp-vm-disk-loss/rbac.yaml delete mode 100644 charts/gcp/gcp-vm-instance-stop-by-label/experiment.yaml delete mode 100644 charts/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml delete mode 100644 charts/gcp/gcp-vm-instance-stop-by-label/rbac.yaml delete mode 100644 charts/gcp/gcp-vm-instance-stop/experiment.yaml delete mode 100644 charts/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml delete mode 100644 charts/gcp/gcp-vm-instance-stop/rbac.yaml delete mode 100644 charts/gcp/gcp.chartserviceversion.yaml delete mode 100644 charts/gcp/icons/gcp.png delete mode 100644 charts/generic/container-kill/container-kill.chartserviceversion.yaml delete mode 100644 charts/generic/container-kill/engine.yaml delete mode 100644 charts/generic/container-kill/engine_nginx_getstarted.yaml delete mode 100644 charts/generic/container-kill/experiment.yaml delete mode 100644 charts/generic/container-kill/rbac-psp.yaml delete mode 100644 charts/generic/container-kill/rbac.yaml delete mode 100644 charts/generic/container-kill/rbac_nginx_getstarted.yaml delete mode 100644 charts/generic/disk-fill/disk-fill.chartserviceversion.yaml delete mode 100644 charts/generic/disk-fill/engine.yaml delete mode 100644 charts/generic/disk-fill/experiment.yaml delete mode 100644 charts/generic/disk-fill/rbac-psp.yaml delete mode 100644 charts/generic/disk-fill/rbac.yaml delete mode 100644 charts/generic/docker-service-kill/docker-service-kill.chartserviceversion.yaml delete mode 100644 charts/generic/docker-service-kill/rbac-psp.yaml delete mode 100644 charts/generic/docker-service-kill/rbac.yaml delete mode 100644 charts/generic/experiments.yaml delete mode 100644 charts/generic/generic.chartserviceversion.yaml delete mode 100644 charts/generic/generic.package.yaml delete mode 100644 charts/generic/icons/byoc-pod-delete.png delete mode 100644 charts/generic/kubelet-service-kill/experiment.yaml delete mode 100644 charts/generic/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml delete mode 100644 charts/generic/kubelet-service-kill/rbac-psp.yaml delete mode 100644 charts/generic/kubelet-service-kill/rbac.yaml delete mode 100644 charts/generic/node-cpu-hog/experiment.yaml delete mode 100644 charts/generic/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml delete mode 100644 charts/generic/node-cpu-hog/rbac-psp.yaml delete mode 100644 charts/generic/node-cpu-hog/rbac.yaml delete mode 100644 charts/generic/node-drain/engine.yaml delete mode 100644 charts/generic/node-drain/node-drain.chartserviceversion.yaml delete mode 100644 charts/generic/node-drain/rbac-psp.yaml delete mode 100644 charts/generic/node-drain/rbac.yaml delete mode 100644 charts/generic/node-io-stress/experiment.yaml delete mode 100644 charts/generic/node-io-stress/node-io-stress.chartserviceversion.yaml delete mode 100644 charts/generic/node-io-stress/rbac-psp.yaml delete mode 100644 charts/generic/node-io-stress/rbac.yaml delete mode 100644 charts/generic/node-memory-hog/experiment.yaml delete mode 100644 charts/generic/node-memory-hog/node-memory-hog.chartserviceversion.yaml delete mode 100644 charts/generic/node-memory-hog/rbac-psp.yaml delete mode 100644 charts/generic/node-memory-hog/rbac.yaml delete mode 100644 charts/generic/node-poweroff/engine.yaml delete mode 100644 charts/generic/node-poweroff/node-poweroff.chartserviceversion.yaml delete mode 100644 charts/generic/node-poweroff/rbac-psp.yaml delete mode 100644 charts/generic/node-poweroff/rbac.yaml delete mode 100644 charts/generic/node-restart/engine.yaml delete mode 100644 charts/generic/node-restart/node-restart.chartserviceversion.yaml delete mode 100644 charts/generic/node-restart/rbac-psp.yaml delete mode 100644 charts/generic/node-restart/rbac.yaml delete mode 100644 charts/generic/node-taint/experiment.yaml delete mode 100644 charts/generic/node-taint/node-taint.chartserviceversion.yaml delete mode 100644 charts/generic/node-taint/rbac-psp.yaml delete mode 100644 charts/generic/node-taint/rbac.yaml delete mode 100644 charts/generic/pod-autoscaler/experiment.yaml delete mode 100644 charts/generic/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml delete mode 100644 charts/generic/pod-autoscaler/rbac-psp.yaml delete mode 100644 charts/generic/pod-autoscaler/rbac.yaml delete mode 100644 charts/generic/pod-cpu-hog-exec/engine.yaml delete mode 100644 charts/generic/pod-cpu-hog-exec/experiment.yaml delete mode 100644 charts/generic/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml delete mode 100644 charts/generic/pod-cpu-hog-exec/rbac-psp.yaml delete mode 100644 charts/generic/pod-cpu-hog-exec/rbac.yaml delete mode 100644 charts/generic/pod-cpu-hog/engine.yaml delete mode 100644 charts/generic/pod-cpu-hog/experiment.yaml delete mode 100644 charts/generic/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml delete mode 100644 charts/generic/pod-cpu-hog/rbac-psp.yaml delete mode 100644 charts/generic/pod-cpu-hog/rbac.yaml delete mode 100644 charts/generic/pod-delete/ansible/engine.yaml delete mode 100644 charts/generic/pod-delete/ansible/experiment.yaml delete mode 100644 charts/generic/pod-delete/ansible/powerfulseal_rbac.yaml delete mode 100644 charts/generic/pod-delete/ansible/rbac.yaml delete mode 100644 charts/generic/pod-delete/engine.yaml delete mode 100644 charts/generic/pod-delete/engine_nginx_getstarted.yaml delete mode 100644 charts/generic/pod-delete/experiment.yaml delete mode 100644 charts/generic/pod-delete/pod-delete.chartserviceversion.yaml delete mode 100644 charts/generic/pod-delete/python/experiment.yaml delete mode 100644 charts/generic/pod-delete/python/rbac.yaml delete mode 100644 charts/generic/pod-delete/rbac-psp.yaml delete mode 100644 charts/generic/pod-delete/rbac.yaml delete mode 100644 charts/generic/pod-delete/rbac_nginx_getstarted.yaml delete mode 100644 charts/generic/pod-dns-error/pod-dns-error.chartserviceversion.yaml delete mode 100644 charts/generic/pod-dns-error/rbac-psp.yaml delete mode 100644 charts/generic/pod-dns-error/rbac.yaml delete mode 100644 charts/generic/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml delete mode 100644 charts/generic/pod-dns-spoof/rbac-psp.yaml delete mode 100644 charts/generic/pod-dns-spoof/rbac.yaml delete mode 100644 charts/generic/pod-http-latency/engine.yaml delete mode 100644 charts/generic/pod-http-latency/experiment.yaml delete mode 100644 charts/generic/pod-http-latency/pod-http-latency.chartserviceversion.yaml delete mode 100644 charts/generic/pod-http-latency/rbac-psp.yaml delete mode 100644 charts/generic/pod-http-latency/rbac.yaml delete mode 100644 charts/generic/pod-http-modify-body/engine.yaml delete mode 100644 charts/generic/pod-http-modify-body/experiment.yaml delete mode 100644 charts/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml delete mode 100644 charts/generic/pod-http-modify-body/rbac-psp.yaml delete mode 100644 charts/generic/pod-http-modify-body/rbac.yaml delete mode 100644 charts/generic/pod-http-modify-header/engine.yaml delete mode 100644 charts/generic/pod-http-modify-header/experiment.yaml delete mode 100644 charts/generic/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml delete mode 100644 charts/generic/pod-http-modify-header/rbac-psp.yaml delete mode 100644 charts/generic/pod-http-modify-header/rbac.yaml delete mode 100644 charts/generic/pod-http-reset-peer/experiment.yaml delete mode 100644 charts/generic/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml delete mode 100644 charts/generic/pod-http-reset-peer/rbac-psp.yaml delete mode 100644 charts/generic/pod-http-reset-peer/rbac.yaml delete mode 100644 charts/generic/pod-http-status-code/experiment.yaml delete mode 100644 charts/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml delete mode 100644 charts/generic/pod-http-status-code/rbac-psp.yaml delete mode 100644 charts/generic/pod-http-status-code/rbac.yaml delete mode 100644 charts/generic/pod-io-stress/pod-io-stress.chartserviceversion.yaml delete mode 100644 charts/generic/pod-io-stress/rbac-psp.yaml delete mode 100644 charts/generic/pod-io-stress/rbac.yaml delete mode 100644 charts/generic/pod-memory-hog-exec/engine.yaml delete mode 100644 charts/generic/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml delete mode 100644 charts/generic/pod-memory-hog-exec/rbac-psp.yaml delete mode 100644 charts/generic/pod-memory-hog-exec/rbac.yaml delete mode 100644 charts/generic/pod-memory-hog/engine.yaml delete mode 100644 charts/generic/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml delete mode 100644 charts/generic/pod-memory-hog/rbac-psp.yaml delete mode 100644 charts/generic/pod-memory-hog/rbac.yaml delete mode 100644 charts/generic/pod-network-corruption/experiment.yaml delete mode 100644 charts/generic/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml delete mode 100644 charts/generic/pod-network-corruption/rbac-psp.yaml delete mode 100644 charts/generic/pod-network-corruption/rbac.yaml delete mode 100644 charts/generic/pod-network-duplication/experiment.yaml delete mode 100644 charts/generic/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml delete mode 100644 charts/generic/pod-network-duplication/rbac-psp.yaml delete mode 100644 charts/generic/pod-network-duplication/rbac.yaml delete mode 100644 charts/generic/pod-network-latency/engine.yaml delete mode 100644 charts/generic/pod-network-latency/experiment.yaml delete mode 100644 charts/generic/pod-network-latency/pod-network-latency.chartserviceversion.yaml delete mode 100644 charts/generic/pod-network-latency/rbac-psp.yaml delete mode 100644 charts/generic/pod-network-latency/rbac.yaml delete mode 100644 charts/generic/pod-network-loss/experiment.yaml delete mode 100644 charts/generic/pod-network-loss/pod-network-loss.chartserviceversion.yaml delete mode 100644 charts/generic/pod-network-loss/rbac-psp.yaml delete mode 100644 charts/generic/pod-network-loss/rbac.yaml delete mode 100644 charts/generic/pod-network-partition/experiment.yaml delete mode 100644 charts/generic/pod-network-partition/pod-network-partition.chartserviceversion.yaml delete mode 100644 charts/generic/pod-network-partition/rbac-psp.yaml delete mode 100644 charts/generic/pod-network-partition/rbac.yaml delete mode 100755 charts/kube-aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml delete mode 100755 charts/kube-aws/aws-az-chaos/rbac.yaml delete mode 100644 charts/kube-aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml delete mode 100644 charts/kube-aws/ebs-loss-by-id/experiment.yaml delete mode 100644 charts/kube-aws/ebs-loss-by-id/rbac.yaml delete mode 100644 charts/kube-aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml delete mode 100644 charts/kube-aws/ebs-loss-by-tag/experiment.yaml delete mode 100644 charts/kube-aws/ebs-loss-by-tag/rbac.yaml delete mode 100644 charts/kube-aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml delete mode 100644 charts/kube-aws/ec2-terminate-by-id/engine.yaml delete mode 100644 charts/kube-aws/ec2-terminate-by-id/experiment.yaml delete mode 100644 charts/kube-aws/ec2-terminate-by-id/rbac.yaml delete mode 100644 charts/kube-aws/ec2-terminate-by-tag/ec2-terminate-by-tag.chartserviceversion.yaml delete mode 100644 charts/kube-aws/ec2-terminate-by-tag/experiment.yaml delete mode 100644 charts/kube-aws/ec2-terminate-by-tag/rbac.yaml delete mode 100644 charts/kube-aws/experiments.yaml delete mode 100644 charts/kube-aws/icons/aws-az-chaos.png delete mode 100644 charts/kube-aws/icons/ebs-loss-by-id.png delete mode 100644 charts/kube-aws/icons/ebs-loss-by-tag.png delete mode 100644 charts/kube-aws/icons/ec2-terminate-by-id.png delete mode 100644 charts/kube-aws/icons/ec2-terminate-by-tag.png delete mode 100644 charts/kube-aws/icons/k8-aws-ec2-terminate.png delete mode 100644 charts/kube-aws/icons/kube-aws.png delete mode 100644 charts/kube-aws/kube-aws.chartserviceversion.yaml delete mode 100644 charts/kube-aws/kube-aws.package.yaml delete mode 100644 charts/kube-aws/rbac-admin.yaml delete mode 100644 charts/mongodb/experiments.yaml delete mode 100644 charts/mongodb/icons/mongodb.png delete mode 100644 charts/mongodb/mongodb.chartserviceversion.yaml delete mode 100644 charts/mongodb/mongodb.package.yaml delete mode 100644 charts/spring-boot/experiments.yaml delete mode 100644 charts/spring-boot/icons/spring-boot.png delete mode 100644 charts/spring-boot/spring-boot-app-kill/experiment.yaml delete mode 100644 charts/spring-boot/spring-boot-app-kill/rbac.yaml delete mode 100644 charts/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml delete mode 100644 charts/spring-boot/spring-boot-cpu-stress/experiment.yaml delete mode 100644 charts/spring-boot/spring-boot-cpu-stress/rbac.yaml delete mode 100644 charts/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml delete mode 100644 charts/spring-boot/spring-boot-exceptions/experiment.yaml delete mode 100644 charts/spring-boot/spring-boot-exceptions/rbac.yaml delete mode 100644 charts/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml delete mode 100644 charts/spring-boot/spring-boot-faults/experiment.yaml delete mode 100644 charts/spring-boot/spring-boot-faults/rbac.yaml delete mode 100644 charts/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml delete mode 100644 charts/spring-boot/spring-boot-latency/experiment.yaml delete mode 100644 charts/spring-boot/spring-boot-latency/rbac.yaml delete mode 100644 charts/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml delete mode 100644 charts/spring-boot/spring-boot-memory-stress/experiment.yaml delete mode 100644 charts/spring-boot/spring-boot-memory-stress/rbac.yaml delete mode 100644 charts/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml delete mode 100644 charts/spring-boot/spring-boot.chartserviceversion.yaml delete mode 100644 charts/vmware/experiments.yaml delete mode 100644 charts/vmware/icons/vmware.png delete mode 100644 charts/vmware/vm-poweroff/engine.yaml delete mode 100644 charts/vmware/vm-poweroff/experiment.yaml delete mode 100644 charts/vmware/vm-poweroff/rbac.yaml delete mode 100644 charts/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml delete mode 100644 charts/vmware/vmware.chartserviceversion.yaml delete mode 100644 experiments/aws-ssm/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml delete mode 100644 experiments/aws-ssm/aws-ssm-chaos-by-id/engine.yaml delete mode 100644 experiments/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml delete mode 100644 experiments/aws-ssm/aws-ssm-chaos-by-id/rbac.yaml delete mode 100644 experiments/aws-ssm/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml delete mode 100644 experiments/aws-ssm/aws-ssm-chaos-by-tag/engine.yaml delete mode 100644 experiments/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml delete mode 100644 experiments/aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml delete mode 100644 experiments/aws-ssm/aws-ssm.chartserviceversion.yaml delete mode 100644 experiments/aws-ssm/aws-ssm.package.yaml delete mode 100644 experiments/aws-ssm/experiments.yaml delete mode 100644 experiments/aws-ssm/icons/aws-ssm-chaos-by-id.png delete mode 100644 experiments/aws-ssm/icons/aws-ssm-chaos-by-tag.png delete mode 100644 experiments/aws-ssm/icons/aws-ssm.png delete mode 100644 experiments/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml delete mode 100644 experiments/azure/azure-disk-loss/experiment.yaml delete mode 100644 experiments/azure/azure-disk-loss/rbac.yaml delete mode 100644 experiments/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml delete mode 100644 experiments/azure/azure-instance-stop/engine.yaml delete mode 100644 experiments/azure/azure-instance-stop/experiment.yaml delete mode 100644 experiments/azure/azure-instance-stop/rbac.yaml delete mode 100644 experiments/azure/azure.chartserviceversion.yaml delete mode 100644 experiments/azure/azure.package.yaml delete mode 100644 experiments/azure/experiments.yaml delete mode 100644 experiments/azure/icons/azure-disk-loss.png delete mode 100644 experiments/azure/icons/azure-instance-stop.png delete mode 100644 experiments/azure/icons/azure.png create mode 100644 experiments/bank-of-anthos/bank-of-anthos.chartserviceversion.yaml rename workflows/bank-of-anthos/workflow.yaml => experiments/bank-of-anthos/experiment.yaml (100%) rename workflows/bank-of-anthos/workflow_cron.yaml => experiments/bank-of-anthos/experiment_cron.yaml (100%) delete mode 100644 experiments/coredns/coredns-pod-delete/coredns-pod-delete.chartserviceversion.yaml delete mode 100644 experiments/coredns/coredns-pod-delete/engine.yaml delete mode 100644 experiments/coredns/coredns-pod-delete/experiment.yaml delete mode 100644 experiments/coredns/coredns-pod-delete/rbac.yaml delete mode 100644 experiments/coredns/coredns.chartserviceversion.yaml delete mode 100644 experiments/coredns/coredns.package.yaml delete mode 100644 experiments/coredns/experiments.yaml delete mode 100644 experiments/coredns/icons/coredns-pod-delete.png delete mode 100644 experiments/coredns/icons/coredns.png delete mode 100644 experiments/gcp/experiments.yaml delete mode 100644 experiments/gcp/gcp-vm-disk-loss-by-label/engine.yaml delete mode 100644 experiments/gcp/gcp-vm-disk-loss-by-label/experiment.yaml delete mode 100644 experiments/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml delete mode 100644 experiments/gcp/gcp-vm-disk-loss-by-label/rbac.yaml delete mode 100644 experiments/gcp/gcp-vm-disk-loss/engine.yaml delete mode 100644 experiments/gcp/gcp-vm-disk-loss/experiment.yaml delete mode 100644 experiments/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml delete mode 100644 experiments/gcp/gcp-vm-disk-loss/rbac.yaml delete mode 100644 experiments/gcp/gcp-vm-instance-stop-by-label/engine.yaml delete mode 100644 experiments/gcp/gcp-vm-instance-stop-by-label/experiment.yaml delete mode 100644 experiments/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml delete mode 100644 experiments/gcp/gcp-vm-instance-stop-by-label/rbac.yaml delete mode 100644 experiments/gcp/gcp-vm-instance-stop/engine.yaml delete mode 100644 experiments/gcp/gcp-vm-instance-stop/experiment.yaml delete mode 100644 experiments/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml delete mode 100644 experiments/gcp/gcp-vm-instance-stop/rbac.yaml delete mode 100644 experiments/gcp/gcp.chartserviceversion.yaml delete mode 100644 experiments/gcp/gcp.package.yaml delete mode 100644 experiments/gcp/icons/gcp-vm-disk-loss-by-label.png delete mode 100644 experiments/gcp/icons/gcp-vm-disk-loss.png delete mode 100644 experiments/gcp/icons/gcp-vm-instance-stop-by-label.png delete mode 100644 experiments/gcp/icons/gcp-vm-instance-stop.png delete mode 100644 experiments/gcp/icons/gcp.png delete mode 100644 experiments/generic/container-kill/container-kill.chartserviceversion.yaml delete mode 100644 experiments/generic/container-kill/engine_nginx_getstarted.yaml delete mode 100644 experiments/generic/container-kill/experiment.yaml delete mode 100644 experiments/generic/container-kill/rbac-psp.yaml delete mode 100644 experiments/generic/container-kill/rbac.yaml delete mode 100644 experiments/generic/container-kill/rbac_nginx_getstarted.yaml delete mode 100644 experiments/generic/disk-fill/disk-fill.chartserviceversion.yaml delete mode 100644 experiments/generic/disk-fill/experiment.yaml delete mode 100644 experiments/generic/disk-fill/rbac-psp.yaml delete mode 100644 experiments/generic/disk-fill/rbac.yaml delete mode 100644 experiments/generic/docker-service-kill/docker-service-kill.chartserviceversion.yaml delete mode 100644 experiments/generic/docker-service-kill/engine.yaml delete mode 100644 experiments/generic/docker-service-kill/experiment.yaml delete mode 100644 experiments/generic/docker-service-kill/rbac-psp.yaml delete mode 100644 experiments/generic/docker-service-kill/rbac.yaml delete mode 100644 experiments/generic/experiments.yaml delete mode 100644 experiments/generic/generic.chartserviceversion.yaml delete mode 100644 experiments/generic/icons/byoc-pod-delete.png delete mode 100644 experiments/generic/icons/container-kill.png delete mode 100644 experiments/generic/icons/disk-fill.png delete mode 100644 experiments/generic/icons/docker-service-kill.png delete mode 100644 experiments/generic/icons/generic.png delete mode 100644 experiments/generic/icons/kubelet-service-kill.png delete mode 100644 experiments/generic/icons/node-cpu-hog.png delete mode 100644 experiments/generic/icons/node-drain.png delete mode 100644 experiments/generic/icons/node-io-stress.png delete mode 100644 experiments/generic/icons/node-memory-hog.png delete mode 100644 experiments/generic/icons/node-restart.png delete mode 100644 experiments/generic/icons/node-taint.png delete mode 100644 experiments/generic/icons/pod-autoscaler.png delete mode 100644 experiments/generic/icons/pod-cpu-hog-exec.png delete mode 100644 experiments/generic/icons/pod-cpu-hog.png delete mode 100644 experiments/generic/icons/pod-delete.png delete mode 100644 experiments/generic/icons/pod-dns-error.png delete mode 100644 experiments/generic/icons/pod-dns-spoof.png delete mode 100644 experiments/generic/icons/pod-http-latency.png delete mode 100644 experiments/generic/icons/pod-http-modify-body.png delete mode 100644 experiments/generic/icons/pod-http-modify-header.png delete mode 100644 experiments/generic/icons/pod-http-reset-peer.png delete mode 100644 experiments/generic/icons/pod-http-status-code.png delete mode 100644 experiments/generic/icons/pod-io-stress.png delete mode 100644 experiments/generic/icons/pod-memory-hog-exec.png delete mode 100644 experiments/generic/icons/pod-memory-hog.png delete mode 100644 experiments/generic/icons/pod-network-corruption.png delete mode 100644 experiments/generic/icons/pod-network-duplication.png delete mode 100644 experiments/generic/icons/pod-network-latency.png delete mode 100644 experiments/generic/icons/pod-network-loss.png delete mode 100644 experiments/generic/icons/pod-network-partition.png delete mode 100644 experiments/generic/kubelet-service-kill/engine.yaml delete mode 100644 experiments/generic/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml delete mode 100644 experiments/generic/kubelet-service-kill/rbac-psp.yaml delete mode 100644 experiments/generic/kubelet-service-kill/rbac.yaml delete mode 100644 experiments/generic/node-cpu-hog/engine.yaml delete mode 100644 experiments/generic/node-cpu-hog/experiment.yaml delete mode 100644 experiments/generic/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml delete mode 100644 experiments/generic/node-cpu-hog/rbac-psp.yaml delete mode 100644 experiments/generic/node-cpu-hog/rbac.yaml delete mode 100644 experiments/generic/node-drain/experiment.yaml delete mode 100644 experiments/generic/node-drain/node-drain.chartserviceversion.yaml delete mode 100644 experiments/generic/node-drain/rbac-psp.yaml delete mode 100644 experiments/generic/node-drain/rbac.yaml delete mode 100644 experiments/generic/node-io-stress/engine.yaml delete mode 100644 experiments/generic/node-io-stress/experiment.yaml delete mode 100644 experiments/generic/node-io-stress/node-io-stress.chartserviceversion.yaml delete mode 100644 experiments/generic/node-io-stress/rbac-psp.yaml delete mode 100644 experiments/generic/node-io-stress/rbac.yaml delete mode 100644 experiments/generic/node-memory-hog/engine.yaml delete mode 100644 experiments/generic/node-memory-hog/experiment.yaml delete mode 100644 experiments/generic/node-memory-hog/node-memory-hog.chartserviceversion.yaml delete mode 100644 experiments/generic/node-memory-hog/rbac-psp.yaml delete mode 100644 experiments/generic/node-memory-hog/rbac.yaml delete mode 100644 experiments/generic/node-poweroff/experiment.yaml delete mode 100644 experiments/generic/node-poweroff/node-poweroff.chartserviceversion.yaml delete mode 100644 experiments/generic/node-poweroff/rbac-psp.yaml delete mode 100644 experiments/generic/node-poweroff/rbac.yaml delete mode 100644 experiments/generic/node-restart/experiment.yaml delete mode 100644 experiments/generic/node-restart/node-restart.chartserviceversion.yaml delete mode 100644 experiments/generic/node-restart/rbac-psp.yaml delete mode 100644 experiments/generic/node-restart/rbac.yaml delete mode 100644 experiments/generic/node-taint/engine.yaml delete mode 100644 experiments/generic/node-taint/node-taint.chartserviceversion.yaml delete mode 100644 experiments/generic/node-taint/rbac-psp.yaml delete mode 100644 experiments/generic/node-taint/rbac.yaml delete mode 100644 experiments/generic/pod-autoscaler/engine.yaml delete mode 100644 experiments/generic/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-autoscaler/rbac-psp.yaml delete mode 100644 experiments/generic/pod-autoscaler/rbac.yaml delete mode 100644 experiments/generic/pod-cpu-hog-exec/experiment.yaml delete mode 100644 experiments/generic/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-cpu-hog-exec/rbac-psp.yaml delete mode 100644 experiments/generic/pod-cpu-hog-exec/rbac.yaml delete mode 100644 experiments/generic/pod-cpu-hog/experiment.yaml delete mode 100644 experiments/generic/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-cpu-hog/rbac-psp.yaml delete mode 100644 experiments/generic/pod-cpu-hog/rbac.yaml delete mode 100644 experiments/generic/pod-delete/ansible/engine.yaml delete mode 100644 experiments/generic/pod-delete/ansible/experiment.yaml delete mode 100644 experiments/generic/pod-delete/ansible/powerfulseal_rbac.yaml delete mode 100644 experiments/generic/pod-delete/ansible/rbac.yaml delete mode 100644 experiments/generic/pod-delete/engine.yaml delete mode 100644 experiments/generic/pod-delete/engine_nginx_getstarted.yaml delete mode 100644 experiments/generic/pod-delete/pod-delete.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-delete/python/engine.yaml delete mode 100644 experiments/generic/pod-delete/python/experiment.yaml delete mode 100644 experiments/generic/pod-delete/python/rbac.yaml delete mode 100644 experiments/generic/pod-delete/rbac-psp.yaml delete mode 100644 experiments/generic/pod-delete/rbac.yaml delete mode 100644 experiments/generic/pod-delete/rbac_nginx_getstarted.yaml delete mode 100644 experiments/generic/pod-dns-error/engine.yaml delete mode 100644 experiments/generic/pod-dns-error/pod-dns-error.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-dns-error/rbac-psp.yaml delete mode 100644 experiments/generic/pod-dns-error/rbac.yaml delete mode 100644 experiments/generic/pod-dns-spoof/engine.yaml delete mode 100644 experiments/generic/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-dns-spoof/rbac-psp.yaml delete mode 100644 experiments/generic/pod-dns-spoof/rbac.yaml delete mode 100644 experiments/generic/pod-http-latency/experiment.yaml delete mode 100644 experiments/generic/pod-http-latency/pod-http-latency.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-http-latency/rbac-psp.yaml delete mode 100644 experiments/generic/pod-http-latency/rbac.yaml delete mode 100644 experiments/generic/pod-http-modify-body/experiment.yaml delete mode 100644 experiments/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-http-modify-body/rbac-psp.yaml delete mode 100644 experiments/generic/pod-http-modify-body/rbac.yaml delete mode 100644 experiments/generic/pod-http-modify-header/experiment.yaml delete mode 100644 experiments/generic/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-http-modify-header/rbac-psp.yaml delete mode 100644 experiments/generic/pod-http-modify-header/rbac.yaml delete mode 100644 experiments/generic/pod-http-reset-peer/engine.yaml delete mode 100644 experiments/generic/pod-http-reset-peer/experiment.yaml delete mode 100644 experiments/generic/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-http-reset-peer/rbac-psp.yaml delete mode 100644 experiments/generic/pod-http-reset-peer/rbac.yaml delete mode 100644 experiments/generic/pod-http-status-code/engine.yaml delete mode 100644 experiments/generic/pod-http-status-code/experiment.yaml delete mode 100644 experiments/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-http-status-code/rbac-psp.yaml delete mode 100644 experiments/generic/pod-http-status-code/rbac.yaml delete mode 100644 experiments/generic/pod-io-stress/engine.yaml delete mode 100644 experiments/generic/pod-io-stress/pod-io-stress.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-io-stress/rbac-psp.yaml delete mode 100644 experiments/generic/pod-io-stress/rbac.yaml delete mode 100644 experiments/generic/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-memory-hog-exec/rbac-psp.yaml delete mode 100644 experiments/generic/pod-memory-hog-exec/rbac.yaml delete mode 100644 experiments/generic/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-memory-hog/rbac-psp.yaml delete mode 100644 experiments/generic/pod-memory-hog/rbac.yaml delete mode 100644 experiments/generic/pod-network-corruption/engine.yaml delete mode 100644 experiments/generic/pod-network-corruption/experiment.yaml delete mode 100644 experiments/generic/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-network-corruption/rbac-psp.yaml delete mode 100644 experiments/generic/pod-network-corruption/rbac.yaml delete mode 100644 experiments/generic/pod-network-duplication/engine.yaml delete mode 100644 experiments/generic/pod-network-duplication/experiment.yaml delete mode 100644 experiments/generic/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-network-duplication/rbac-psp.yaml delete mode 100644 experiments/generic/pod-network-duplication/rbac.yaml delete mode 100644 experiments/generic/pod-network-latency/experiment.yaml delete mode 100644 experiments/generic/pod-network-latency/pod-network-latency.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-network-latency/rbac-psp.yaml delete mode 100644 experiments/generic/pod-network-latency/rbac.yaml delete mode 100644 experiments/generic/pod-network-loss/engine.yaml delete mode 100644 experiments/generic/pod-network-loss/experiment.yaml delete mode 100644 experiments/generic/pod-network-loss/pod-network-loss.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-network-loss/rbac-psp.yaml delete mode 100644 experiments/generic/pod-network-loss/rbac.yaml delete mode 100644 experiments/generic/pod-network-partition/engine.yaml delete mode 100644 experiments/generic/pod-network-partition/experiment.yaml delete mode 100644 experiments/generic/pod-network-partition/pod-network-partition.chartserviceversion.yaml delete mode 100644 experiments/generic/pod-network-partition/rbac-psp.yaml delete mode 100644 experiments/generic/pod-network-partition/rbac.yaml rename {scenarios => experiments}/icons/bank-of-anthos.png (100%) rename {scenarios => experiments}/icons/podtato-head.png (100%) rename {scenarios => experiments}/icons/sock-shop-promProbe.png (100%) rename {scenarios => experiments}/icons/sock-shop.png (100%) delete mode 100755 experiments/kube-aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml delete mode 100755 experiments/kube-aws/aws-az-chaos/engine.yaml delete mode 100755 experiments/kube-aws/aws-az-chaos/experiment.yaml delete mode 100755 experiments/kube-aws/aws-az-chaos/rbac.yaml delete mode 100644 experiments/kube-aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml delete mode 100644 experiments/kube-aws/ebs-loss-by-id/engine.yaml delete mode 100644 experiments/kube-aws/ebs-loss-by-id/experiment.yaml delete mode 100644 experiments/kube-aws/ebs-loss-by-id/rbac.yaml delete mode 100644 experiments/kube-aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml delete mode 100644 experiments/kube-aws/ebs-loss-by-tag/engine.yaml delete mode 100644 experiments/kube-aws/ebs-loss-by-tag/experiment.yaml delete mode 100644 experiments/kube-aws/ebs-loss-by-tag/rbac.yaml delete mode 100644 experiments/kube-aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml delete mode 100644 experiments/kube-aws/ec2-terminate-by-id/experiment.yaml delete mode 100644 experiments/kube-aws/ec2-terminate-by-id/rbac.yaml delete mode 100644 experiments/kube-aws/ec2-terminate-by-tag/ec2-terminate-by-tag.chartserviceversion.yaml delete mode 100644 experiments/kube-aws/ec2-terminate-by-tag/engine.yaml delete mode 100644 experiments/kube-aws/ec2-terminate-by-tag/experiment.yaml delete mode 100644 experiments/kube-aws/ec2-terminate-by-tag/rbac.yaml delete mode 100644 experiments/kube-aws/experiments.yaml delete mode 100644 experiments/kube-aws/icons/aws-az-chaos.png delete mode 100644 experiments/kube-aws/icons/ebs-loss-by-id.png delete mode 100644 experiments/kube-aws/icons/ebs-loss-by-tag.png delete mode 100644 experiments/kube-aws/icons/ec2-terminate-by-id.png delete mode 100644 experiments/kube-aws/icons/ec2-terminate-by-tag.png delete mode 100644 experiments/kube-aws/icons/k8-aws-ec2-terminate.png delete mode 100644 experiments/kube-aws/icons/kube-aws.png delete mode 100644 experiments/kube-aws/kube-aws.chartserviceversion.yaml delete mode 100644 experiments/kube-aws/kube-aws.package.yaml delete mode 100644 experiments/kube-aws/rbac-admin.yaml delete mode 100644 experiments/longhorn/experiments.yaml delete mode 100644 experiments/longhorn/icons/longhorn.png delete mode 100644 experiments/longhorn/longhorn.chartserviceversion.yaml delete mode 100644 experiments/longhorn/longhorn.package.yaml delete mode 100644 experiments/mongodb/experiments.yaml delete mode 100644 experiments/mongodb/icons/mongodb.png delete mode 100644 experiments/mongodb/mongodb.chartserviceversion.yaml delete mode 100644 experiments/mongodb/mongodb.package.yaml delete mode 100644 experiments/mysql/experiments.yaml delete mode 100644 experiments/mysql/icons/mysql.png delete mode 100644 experiments/mysql/mysql.chartserviceversion.yaml delete mode 100644 experiments/mysql/mysql.package.yaml rename workflows/namespaced-scope-chaos/workflow.yaml => experiments/namespaced-scope-chaos/experiment.yaml (100%) rename workflows/namespaced-scope-chaos/workflow_cron.yaml => experiments/namespaced-scope-chaos/experiment_cron.yaml (100%) create mode 100644 experiments/namespaced-scope-chaos/namespaced-scope-chaos.chartserviceversion.yaml rename workflows/node-cpu-hog/workflow.yaml => experiments/node-cpu-hog/experiment.yaml (100%) rename workflows/node-cpu-hog/workflow_cron.yaml => experiments/node-cpu-hog/experiment_cron.yaml (100%) create mode 100644 experiments/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml rename workflows/node-memory-hog/workflow.yaml => experiments/node-memory-hog/experiment.yaml (100%) rename workflows/node-memory-hog/workflow_cron.yaml => experiments/node-memory-hog/experiment_cron.yaml (100%) create mode 100644 experiments/node-memory-hog/node-memory-hog.chartserviceversion.yaml delete mode 100644 experiments/openebs/experiments.yaml delete mode 100644 experiments/openebs/icons/openebs-control-plane-chaos.png delete mode 100644 experiments/openebs/icons/openebs-nfs-provisioner-kill.png delete mode 100644 experiments/openebs/icons/openebs-pool-container-failure.png delete mode 100644 experiments/openebs/icons/openebs-pool-disk-loss.png delete mode 100644 experiments/openebs/icons/openebs-pool-network-delay.png delete mode 100644 experiments/openebs/icons/openebs-pool-network-loss.png delete mode 100644 experiments/openebs/icons/openebs-pool-pod-failure.png delete mode 100644 experiments/openebs/icons/openebs-target-container-failure.png delete mode 100644 experiments/openebs/icons/openebs-target-network-delay.png delete mode 100644 experiments/openebs/icons/openebs-target-network-loss.png delete mode 100644 experiments/openebs/icons/openebs-target-pod-failure.png delete mode 100644 experiments/openebs/icons/openebs.png delete mode 100644 experiments/openebs/openebs-control-plane-chaos/engine.yaml delete mode 100644 experiments/openebs/openebs-control-plane-chaos/experiment.yaml delete mode 100644 experiments/openebs/openebs-control-plane-chaos/openebs-control-plane-chaos.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-control-plane-chaos/rbac.yaml delete mode 100644 experiments/openebs/openebs-nfs-provisioner-kill/engine.yaml delete mode 100644 experiments/openebs/openebs-nfs-provisioner-kill/experiment.yaml delete mode 100644 experiments/openebs/openebs-nfs-provisioner-kill/openebs-nfs-provisioner-kill.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-nfs-provisioner-kill/rbac.yaml delete mode 100644 experiments/openebs/openebs-pool-container-failure/engine.yaml delete mode 100644 experiments/openebs/openebs-pool-container-failure/experiment.yaml delete mode 100644 experiments/openebs/openebs-pool-container-failure/openebs-pool-container-failure.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-pool-container-failure/rbac.yaml delete mode 100644 experiments/openebs/openebs-pool-disk-loss/engine.yaml delete mode 100644 experiments/openebs/openebs-pool-disk-loss/experiment.yaml delete mode 100644 experiments/openebs/openebs-pool-disk-loss/openebs-pool-disk-loss.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-pool-disk-loss/rbac.yaml delete mode 100644 experiments/openebs/openebs-pool-network-delay/engine.yaml delete mode 100644 experiments/openebs/openebs-pool-network-delay/experiment.yaml delete mode 100644 experiments/openebs/openebs-pool-network-delay/openebs-pool-network-delay.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-pool-network-delay/rbac.yaml delete mode 100644 experiments/openebs/openebs-pool-network-loss/engine.yaml delete mode 100644 experiments/openebs/openebs-pool-network-loss/experiment.yaml delete mode 100644 experiments/openebs/openebs-pool-network-loss/openebs-pool-network-loss.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-pool-network-loss/rbac.yaml delete mode 100644 experiments/openebs/openebs-pool-pod-failure/engine.yaml delete mode 100644 experiments/openebs/openebs-pool-pod-failure/experiment.yaml delete mode 100644 experiments/openebs/openebs-pool-pod-failure/openebs-pool-pod-failure.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-pool-pod-failure/rbac.yaml delete mode 100644 experiments/openebs/openebs-target-container-failure/engine.yaml delete mode 100644 experiments/openebs/openebs-target-container-failure/experiment.yaml delete mode 100644 experiments/openebs/openebs-target-container-failure/openebs-target-container-failure.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-target-container-failure/rbac.yaml delete mode 100644 experiments/openebs/openebs-target-network-delay/engine.yaml delete mode 100644 experiments/openebs/openebs-target-network-delay/experiment.yaml delete mode 100644 experiments/openebs/openebs-target-network-delay/openebs-target-network-delay.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-target-network-delay/rbac.yaml delete mode 100644 experiments/openebs/openebs-target-network-loss/engine.yaml delete mode 100644 experiments/openebs/openebs-target-network-loss/experiment.yaml delete mode 100644 experiments/openebs/openebs-target-network-loss/openebs-target-network-loss.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-target-network-loss/rbac.yaml delete mode 100644 experiments/openebs/openebs-target-pod-failure/engine.yaml delete mode 100644 experiments/openebs/openebs-target-pod-failure/experiment.yaml delete mode 100644 experiments/openebs/openebs-target-pod-failure/openebs-target-pod-failure.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs-target-pod-failure/rbac.yaml delete mode 100644 experiments/openebs/openebs.chartserviceversion.yaml delete mode 100644 experiments/openebs/openebs.package.yaml delete mode 100644 experiments/openebs/sample_openebs_engine_with_data_persistency_enabled.yaml rename workflows/pod-cpu-hog/workflow.yaml => experiments/pod-cpu-hog/experiment.yaml (100%) rename workflows/pod-cpu-hog/workflow_cron.yaml => experiments/pod-cpu-hog/experiment_cron.yaml (100%) create mode 100644 experiments/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml rename workflows/pod-delete/workflow.yaml => experiments/pod-delete/experiment.yaml (100%) rename scenarios/pod-delete/workflow_cron.yaml => experiments/pod-delete/experiment_cron.yaml (100%) create mode 100644 experiments/pod-delete/pod-delete.chartserviceversion.yaml rename scenarios/pod-memory-hog/workflow.yaml => experiments/pod-memory-hog/experiment.yaml (100%) rename workflows/pod-memory-hog/workflow_cron.yaml => experiments/pod-memory-hog/experiment_cron.yaml (100%) create mode 100644 experiments/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml rename scenarios/podtato-head/workflow.yaml => experiments/podtato-head/experiment.yaml (100%) rename scenarios/podtato-head/workflow_cron.yaml => experiments/podtato-head/experiment_cron.yaml (100%) create mode 100644 experiments/podtato-head/podtato-head.chartserviceversion.yaml rename workflows/sock-shop-promProbe/workflow.yaml => experiments/sock-shop-promProbe/experiment.yaml (97%) rename workflows/sock-shop-promProbe/workflow_cron.yaml => experiments/sock-shop-promProbe/experiment_cron.yaml (100%) create mode 100644 experiments/sock-shop-promProbe/sock-shop-promProbe.chartserviceversion.yaml rename workflows/sock-shop/workflow.yaml => experiments/sock-shop/experiment.yaml (100%) rename workflows/sock-shop/workflow_cron.yaml => experiments/sock-shop/experiment_cron.yaml (100%) create mode 100644 experiments/sock-shop/sock-shop.chartserviceversion.yaml delete mode 100644 experiments/vmware/experiments.yaml delete mode 100644 experiments/vmware/icons/vm-poweroff.png delete mode 100644 experiments/vmware/icons/vmware.png delete mode 100644 experiments/vmware/vm-poweroff/experiment.yaml delete mode 100644 experiments/vmware/vm-poweroff/rbac.yaml delete mode 100644 experiments/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml delete mode 100644 experiments/vmware/vmware.chartserviceversion.yaml delete mode 100644 experiments/vmware/vmware.package.yaml create mode 100644 faults/aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml rename {charts/kube-aws => faults/aws}/aws-az-chaos/engine.yaml (89%) mode change 100755 => 100644 rename charts/kube-aws/aws-az-chaos/experiment.yaml => faults/aws/aws-az-chaos/fault.yaml (73%) mode change 100755 => 100644 create mode 100644 faults/aws/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml create mode 100644 faults/aws/aws-ssm-chaos-by-id/engine.yaml create mode 100644 faults/aws/aws-ssm-chaos-by-id/fault.yaml create mode 100644 faults/aws/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml create mode 100644 faults/aws/aws-ssm-chaos-by-tag/engine.yaml create mode 100644 faults/aws/aws-ssm-chaos-by-tag/fault.yaml create mode 100644 faults/aws/aws.chartserviceversion.yaml create mode 100644 faults/aws/aws.package.yaml create mode 100644 faults/aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml rename {charts/kube-aws => faults/aws}/ebs-loss-by-id/engine.yaml (78%) create mode 100644 faults/aws/ebs-loss-by-id/fault.yaml create mode 100644 faults/aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml rename {charts/kube-aws => faults/aws}/ebs-loss-by-tag/engine.yaml (79%) create mode 100644 faults/aws/ebs-loss-by-tag/fault.yaml create mode 100644 faults/aws/ec2-stop-by-tag/ec2-stop-by-tag.chartserviceversion.yaml rename {charts/kube-aws/ec2-terminate-by-tag => faults/aws/ec2-stop-by-tag}/engine.yaml (75%) create mode 100644 faults/aws/ec2-stop-by-tag/fault.yaml create mode 100644 faults/aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml rename {experiments/kube-aws => faults/aws}/ec2-terminate-by-id/engine.yaml (80%) create mode 100644 faults/aws/ec2-terminate-by-id/fault.yaml create mode 100644 faults/aws/icons/alb-az-down.png create mode 100644 faults/aws/icons/aws-ssm-chaos-by-id.png create mode 100644 faults/aws/icons/aws-ssm-chaos-by-tag.png create mode 100644 faults/aws/icons/ebs-loss-by-id.png create mode 100644 faults/aws/icons/ebs-loss-by-tag.png create mode 100644 faults/aws/icons/ec2-terminate-by-id.png create mode 100644 faults/aws/icons/ec2-terminate-by-tag.png create mode 100644 faults/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml rename {experiments => faults}/azure/azure-disk-loss/engine.yaml (86%) create mode 100644 faults/azure/azure-disk-loss/fault.yaml create mode 100644 faults/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml rename {charts => faults}/azure/azure-instance-stop/engine.yaml (87%) create mode 100644 faults/azure/azure-instance-stop/fault.yaml create mode 100644 faults/azure/azure.chartserviceversion.yaml rename {charts => faults}/azure/azure.package.yaml (60%) rename {charts => faults}/azure/icons/azure-disk-loss.png (100%) rename {charts => faults}/azure/icons/azure-instance-stop.png (100%) rename {charts => faults}/gcp/gcp-vm-disk-loss-by-label/engine.yaml (87%) create mode 100644 faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml create mode 100644 faults/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml rename {charts => faults}/gcp/gcp-vm-disk-loss/engine.yaml (87%) create mode 100644 faults/gcp/gcp-vm-disk-loss/fault.yaml create mode 100644 faults/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml rename {charts => faults}/gcp/gcp-vm-instance-stop-by-label/engine.yaml (78%) create mode 100644 faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml create mode 100644 faults/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml rename {charts => faults}/gcp/gcp-vm-instance-stop/engine.yaml (83%) create mode 100644 faults/gcp/gcp-vm-instance-stop/fault.yaml create mode 100644 faults/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml create mode 100644 faults/gcp/gcp.chartserviceversion.yaml rename {charts => faults}/gcp/gcp.package.yaml (97%) rename {charts => faults}/gcp/icons/gcp-vm-disk-loss-by-label.png (100%) rename {charts => faults}/gcp/icons/gcp-vm-disk-loss.png (100%) rename {charts => faults}/gcp/icons/gcp-vm-instance-stop-by-label.png (100%) rename {charts => faults}/gcp/icons/gcp-vm-instance-stop.png (100%) create mode 100644 faults/kubernetes/container-kill/container-kill.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/container-kill/engine.yaml (81%) rename experiments/generic/pod-dns-spoof/experiment.yaml => faults/kubernetes/container-kill/fault.yaml (57%) create mode 100644 faults/kubernetes/disk-fill/disk-fill.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/disk-fill/engine.yaml (63%) create mode 100644 faults/kubernetes/disk-fill/fault.yaml create mode 100644 faults/kubernetes/docker-service-kill/docker-service-kill.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/docker-service-kill/engine.yaml (82%) rename charts/generic/docker-service-kill/experiment.yaml => faults/kubernetes/docker-service-kill/fault.yaml (54%) rename {charts/generic => faults/kubernetes}/icons/container-kill.png (100%) rename {charts/generic => faults/kubernetes}/icons/disk-fill.png (100%) rename {charts/generic => faults/kubernetes}/icons/docker-service-kill.png (100%) rename {charts/generic => faults/kubernetes}/icons/kubelet-service-kill.png (100%) rename {charts/generic => faults/kubernetes}/icons/node-cpu-hog.png (100%) rename {charts/generic => faults/kubernetes}/icons/node-drain.png (100%) rename {charts/generic => faults/kubernetes}/icons/node-io-stress.png (100%) rename {charts/generic => faults/kubernetes}/icons/node-memory-hog.png (100%) rename charts/generic/icons/generic.png => faults/kubernetes/icons/node-poweroff.png (100%) rename {charts/generic => faults/kubernetes}/icons/node-restart.png (100%) rename {charts/generic => faults/kubernetes}/icons/node-taint.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-autoscaler.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-cpu-hog-exec.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-cpu-hog.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-delete.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-dns-error.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-dns-spoof.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-http-latency.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-http-modify-body.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-http-modify-header.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-http-reset-peer.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-http-status-code.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-io-stress.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-memory-hog-exec.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-memory-hog.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-network-corruption.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-network-duplication.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-network-latency.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-network-loss.png (100%) rename {charts/generic => faults/kubernetes}/icons/pod-network-partition.png (100%) rename {charts/generic => faults/kubernetes}/kubelet-service-kill/engine.yaml (79%) rename experiments/generic/kubelet-service-kill/experiment.yaml => faults/kubernetes/kubelet-service-kill/fault.yaml (54%) create mode 100644 faults/kubernetes/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml create mode 100644 faults/kubernetes/kubernetes.chartserviceversion.yaml rename experiments/generic/generic.package.yaml => faults/kubernetes/kubernetes.package.yaml (86%) rename {charts/generic => faults/kubernetes}/node-cpu-hog/engine.yaml (90%) create mode 100644 faults/kubernetes/node-cpu-hog/fault.yaml create mode 100644 faults/kubernetes/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/node-drain/engine.yaml (76%) rename charts/generic/node-drain/experiment.yaml => faults/kubernetes/node-drain/fault.yaml (57%) create mode 100644 faults/kubernetes/node-drain/node-drain.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/node-io-stress/engine.yaml (89%) create mode 100644 faults/kubernetes/node-io-stress/fault.yaml create mode 100644 faults/kubernetes/node-io-stress/node-io-stress.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/node-memory-hog/engine.yaml (93%) create mode 100644 faults/kubernetes/node-memory-hog/fault.yaml create mode 100644 faults/kubernetes/node-memory-hog/node-memory-hog.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/node-poweroff/engine.yaml (85%) rename charts/generic/node-poweroff/experiment.yaml => faults/kubernetes/node-poweroff/fault.yaml (97%) create mode 100644 faults/kubernetes/node-poweroff/node-poweroff.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/node-restart/engine.yaml (73%) rename charts/generic/node-restart/experiment.yaml => faults/kubernetes/node-restart/fault.yaml (50%) create mode 100644 faults/kubernetes/node-restart/node-restart.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/node-taint/engine.yaml (72%) rename experiments/generic/node-taint/experiment.yaml => faults/kubernetes/node-taint/fault.yaml (54%) create mode 100644 faults/kubernetes/node-taint/node-taint.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-autoscaler/engine.yaml (80%) rename experiments/generic/pod-autoscaler/experiment.yaml => faults/kubernetes/pod-autoscaler/fault.yaml (56%) create mode 100644 faults/kubernetes/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/pod-cpu-hog-exec/engine.yaml (77%) rename experiments/generic/pod-memory-hog-exec/experiment.yaml => faults/kubernetes/pod-cpu-hog-exec/fault.yaml (59%) create mode 100644 faults/kubernetes/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/pod-cpu-hog/engine.yaml (73%) rename experiments/generic/pod-memory-hog/experiment.yaml => faults/kubernetes/pod-cpu-hog/fault.yaml (58%) create mode 100644 faults/kubernetes/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml rename {charts/generic/pod-delete/python => faults/kubernetes/pod-delete}/engine.yaml (89%) create mode 100644 faults/kubernetes/pod-delete/fault.yaml create mode 100644 faults/kubernetes/pod-delete/pod-delete.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-dns-error/engine.yaml (89%) rename charts/generic/pod-dns-error/experiment.yaml => faults/kubernetes/pod-dns-error/fault.yaml (72%) create mode 100644 faults/kubernetes/pod-dns-error/pod-dns-error.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-dns-spoof/engine.yaml (93%) rename charts/generic/pod-dns-spoof/experiment.yaml => faults/kubernetes/pod-dns-spoof/fault.yaml (73%) create mode 100644 faults/kubernetes/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/pod-http-latency/engine.yaml (90%) create mode 100644 faults/kubernetes/pod-http-latency/fault.yaml create mode 100644 faults/kubernetes/pod-http-latency/pod-http-latency.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/pod-http-modify-body/engine.yaml (93%) create mode 100644 faults/kubernetes/pod-http-modify-body/fault.yaml create mode 100644 faults/kubernetes/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/pod-http-modify-header/engine.yaml (92%) create mode 100644 faults/kubernetes/pod-http-modify-header/fault.yaml create mode 100644 faults/kubernetes/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-http-reset-peer/engine.yaml (92%) create mode 100644 faults/kubernetes/pod-http-reset-peer/fault.yaml create mode 100644 faults/kubernetes/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-http-status-code/engine.yaml (90%) create mode 100644 faults/kubernetes/pod-http-status-code/fault.yaml create mode 100644 faults/kubernetes/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-io-stress/engine.yaml (83%) rename charts/generic/pod-io-stress/experiment.yaml => faults/kubernetes/pod-io-stress/fault.yaml (72%) create mode 100644 faults/kubernetes/pod-io-stress/pod-io-stress.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/pod-memory-hog-exec/engine.yaml (87%) rename charts/generic/pod-memory-hog-exec/experiment.yaml => faults/kubernetes/pod-memory-hog-exec/fault.yaml (72%) create mode 100644 faults/kubernetes/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/pod-memory-hog/engine.yaml (79%) rename charts/generic/pod-memory-hog/experiment.yaml => faults/kubernetes/pod-memory-hog/fault.yaml (68%) create mode 100644 faults/kubernetes/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-network-corruption/engine.yaml (92%) rename experiments/generic/pod-dns-error/experiment.yaml => faults/kubernetes/pod-network-corruption/fault.yaml (53%) create mode 100644 faults/kubernetes/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-network-duplication/engine.yaml (86%) create mode 100644 faults/kubernetes/pod-network-duplication/fault.yaml create mode 100644 faults/kubernetes/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml rename {experiments/generic => faults/kubernetes}/pod-network-latency/engine.yaml (88%) create mode 100644 faults/kubernetes/pod-network-latency/fault.yaml create mode 100644 faults/kubernetes/pod-network-latency/pod-network-latency.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-network-loss/engine.yaml (84%) rename experiments/generic/pod-io-stress/experiment.yaml => faults/kubernetes/pod-network-loss/fault.yaml (52%) create mode 100644 faults/kubernetes/pod-network-loss/pod-network-loss.chartserviceversion.yaml rename {charts/generic => faults/kubernetes}/pod-network-partition/engine.yaml (75%) create mode 100644 faults/kubernetes/pod-network-partition/fault.yaml create mode 100644 faults/kubernetes/pod-network-partition/pod-network-partition.chartserviceversion.yaml rename {charts => faults}/spring-boot/icons/spring-boot-app-kill.png (100%) rename {charts => faults}/spring-boot/icons/spring-boot-cpu-stress.png (100%) rename {charts => faults}/spring-boot/icons/spring-boot-exceptions.png (100%) rename {charts => faults}/spring-boot/icons/spring-boot-faults.png (100%) rename {charts => faults}/spring-boot/icons/spring-boot-latency.png (100%) rename {charts => faults}/spring-boot/icons/spring-boot-memory-stress.png (100%) rename {charts => faults}/spring-boot/spring-boot-app-kill/engine.yaml (85%) create mode 100644 faults/spring-boot/spring-boot-app-kill/fault.yaml create mode 100644 faults/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml rename {charts => faults}/spring-boot/spring-boot-cpu-stress/engine.yaml (90%) create mode 100644 faults/spring-boot/spring-boot-cpu-stress/fault.yaml create mode 100644 faults/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml rename {charts => faults}/spring-boot/spring-boot-exceptions/engine.yaml (91%) create mode 100644 faults/spring-boot/spring-boot-exceptions/fault.yaml create mode 100644 faults/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml rename {charts => faults}/spring-boot/spring-boot-faults/engine.yaml (96%) create mode 100644 faults/spring-boot/spring-boot-faults/fault.yaml create mode 100644 faults/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml rename {charts => faults}/spring-boot/spring-boot-latency/engine.yaml (88%) create mode 100644 faults/spring-boot/spring-boot-latency/fault.yaml create mode 100644 faults/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml rename {charts => faults}/spring-boot/spring-boot-memory-stress/engine.yaml (90%) create mode 100644 faults/spring-boot/spring-boot-memory-stress/fault.yaml create mode 100644 faults/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml create mode 100644 faults/spring-boot/spring-boot.chartserviceversion.yaml rename {charts => faults}/spring-boot/spring-boot.package.yaml (95%) rename {charts => faults}/vmware/icons/vm-poweroff.png (100%) rename {experiments => faults}/vmware/vm-poweroff/engine.yaml (66%) rename experiments/generic/pod-delete/experiment.yaml => faults/vmware/vm-poweroff/fault.yaml (50%) create mode 100644 faults/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml create mode 100644 faults/vmware/vmware.chartserviceversion.yaml rename {charts => faults}/vmware/vmware.package.yaml (89%) delete mode 100644 scenarios/icons/pod-delete.png delete mode 100644 scenarios/icons/pod-memory-hog.png delete mode 100644 scenarios/pod-delete/pod-delete.chartserviceversion.yaml delete mode 100644 scenarios/pod-delete/workflow.yaml delete mode 100644 scenarios/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml delete mode 100644 scenarios/pod-memory-hog/workflow_cron.yaml delete mode 100644 scenarios/podtato-head/podtato-head.chartserviceversion.yaml delete mode 100644 workflows/icons/bank-of-anthos.png delete mode 100644 workflows/icons/podtato-head.png delete mode 100644 workflows/icons/sock-shop-promProbe.png delete mode 100644 workflows/icons/sock-shop.png delete mode 100644 workflows/pod-delete/workflow_cron.yaml delete mode 100644 workflows/pod-memory-hog/workflow.yaml delete mode 100644 workflows/podtato-head/podtato-head.chartserviceversion.yaml delete mode 100644 workflows/podtato-head/workflow.yaml delete mode 100644 workflows/podtato-head/workflow_cron.yaml diff --git a/charts/aws-ssm/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml b/charts/aws-ssm/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml deleted file mode 100644 index bc0191672..000000000 --- a/charts/aws-ssm/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-10T10:28:08Z - name: aws-ssm-chaos-by-id - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: aws-ssm-chaos-by-id - categoryDescription: | - AWS SSM Chaos By ID contains chaos to disrupt the state of infra resources. The experiment can induce chaos on AWS resources using Amazon SSM Run Command This is carried out by using SSM Docs that defines the actions performed by Systems Manager on your managed instances (having SSM agent installed) which let us perform chaos experiments on resources. - - Causes chaos on AWS ec2 instances with given instance ID(s) using SSM docs for total chaos duration with the specified chaos interval. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the target application pod(if provided). - keywords: - - SSM - - AWS - - EC2 - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit@chaosnative.com - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/aws-ssm/aws-ssm-chaos-by-id - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws-ssm/aws-ssm-chaos-by-id/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml diff --git a/charts/aws-ssm/aws-ssm-chaos-by-id/engine.yaml b/charts/aws-ssm/aws-ssm-chaos-by-id/engine.yaml deleted file mode 100644 index 1133a5a7e..000000000 --- a/charts/aws-ssm/aws-ssm-chaos-by-id/engine.yaml +++ /dev/null @@ -1,62 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - engineState: 'active' - chaosServiceAccount: aws-ssm-chaos-by-id-sa - experiments: - - name: aws-ssm-chaos-by-id - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '60' - - # set chaos duration (in sec) as desired - - name: CHAOS_INTERVAL - value: '60' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - # provide the region name of the target instances - - name: REGION - value: '' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to be comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' diff --git a/charts/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml b/charts/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml deleted file mode 100644 index ce4b10057..000000000 --- a/charts/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml +++ /dev/null @@ -1,124 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute AWS SSM Chaos on given ec2 instance IDs -kind: ChaosExperiment -metadata: - name: aws-ssm-chaos-by-id - labels: - name: aws-ssm-chaos-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name aws-ssm-chaos-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: CHAOS_INTERVAL - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - - name: REGION - value: '' - - # it defines the sequence of chaos execution for multiple target instances - # supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' - - # provide the number of workers for memory stress - - name: NUMBER_OF_WORKERS - value: '1' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to be comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - labels: - name: aws-ssm-chaos-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/charts/aws-ssm/aws-ssm-chaos-by-id/rbac.yaml b/charts/aws-ssm/aws-ssm-chaos-by-id/rbac.yaml deleted file mode 100644 index 72db75e44..000000000 --- a/charts/aws-ssm/aws-ssm-chaos-by-id/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: aws-ssm-chaos-by-id-sa - namespace: default - labels: - name: aws-ssm-chaos-by-id-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: aws-ssm-chaos-by-id-sa - labels: - name: aws-ssm-chaos-by-id-sa - app.kubernetes.io/part-of: litmus -rules: -# Create and monitor the experiment & helper pods -- apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] -# Performs CRUD operations on the events inside chaosengine and chaosresult -- apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] -# Fetch configmaps & secrets details and mount it to the experiment pod (if specified) -- apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] -# Track and get the runner, experiment, and helper pods log -- apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] -# for creating and managing to execute comands inside target container -- apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] -# for configuring and monitor the experiment job by the chaos-runner pod -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] -# for creation, status polling and deletion of litmus chaos resources used within a chaos workflow -- apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: aws-ssm-chaos-by-id-sa - labels: - name: aws-ssm-chaos-by-id-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: aws-ssm-chaos-by-id-sa -subjects: -- kind: ServiceAccount - name: aws-ssm-chaos-by-id-sa - namespace: default diff --git a/charts/aws-ssm/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml b/charts/aws-ssm/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml deleted file mode 100644 index fea5b08f8..000000000 --- a/charts/aws-ssm/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-10T10:28:08Z - name: aws-ssm-chaos-by-tag - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: aws-ssm-chaos-by-tag - categoryDescription: | - AWS SSM Chaos By ID contains chaos to disrupt the state of infra resources. The experiment can induce chaos on AWS resources using Amazon SSM Run Command This is carried out by using SSM Docs that defines the actions performed by Systems Manager on your managed instances (having SSM agent installed) which let us perform chaos experiments on resources. - - Causes chaos on AWS ec2 instances with given instance tag using SSM docs for total chaos duration with the specified chaos interval. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the target application pod(if provided). - keywords: - - SSM - - AWS - - EC2 - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit@chaosnative.com - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/aws-ssm/aws-ssm-chaos-by-tag - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws-ssm/aws-ssm-chaos-by-tag/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml diff --git a/charts/aws-ssm/aws-ssm-chaos-by-tag/engine.yaml b/charts/aws-ssm/aws-ssm-chaos-by-tag/engine.yaml deleted file mode 100644 index 19d294b60..000000000 --- a/charts/aws-ssm/aws-ssm-chaos-by-tag/engine.yaml +++ /dev/null @@ -1,62 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - engineState: 'active' - chaosServiceAccount: aws-ssm-chaos-by-tag-sa - experiments: - - name: aws-ssm-chaos-by-tag - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '60' - - # set chaos duration (in sec) as desired - - name: CHAOS_INTERVAL - value: '60' - - # provide tag of the target ec2 instances - # ex: team:devops (key:value) - - name: EC2_INSTANCE_TAG - value: '' - - # provide the region name of the target instances - - name: REGION - value: '' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' diff --git a/charts/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml b/charts/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml deleted file mode 100644 index a0d6b95c7..000000000 --- a/charts/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml +++ /dev/null @@ -1,128 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute AWS SSM Chaos on given ec2 instance Tag -kind: ChaosExperiment -metadata: - name: aws-ssm-chaos-by-tag - labels: - name: aws-ssm-chaos-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name aws-ssm-chaos-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: CHAOS_INTERVAL - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide tag of the target ec2 instances - # ex: team:devops (key:value) - - name: EC2_INSTANCE_TAG - value: '' - - - name: REGION - value: '' - - # it defines the sequence of chaos execution for multiple target instances - # supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # percentage of total instance to target - - name: INSTANCE_AFFECTED_PERC - value: '' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' - - # provide the number of workers for memory stress - - name: NUMBER_OF_WORKERS - value: '1' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - labels: - name: aws-ssm-chaos-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/charts/aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml b/charts/aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml deleted file mode 100644 index 473d90206..000000000 --- a/charts/aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: aws-ssm-chaos-by-tag-sa - namespace: default - labels: - name: aws-ssm-chaos-by-tag-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: aws-ssm-chaos-by-tag-sa - labels: - name: aws-ssm-chaos-by-tag-sa - app.kubernetes.io/part-of: litmus -rules: -# Create and monitor the experiment & helper pods -- apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] -# Performs CRUD operations on the events inside chaosengine and chaosresult -- apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] -# Fetch configmaps & secrets details and mount it to the experiment pod (if specified) -- apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] -# Track and get the runner, experiment, and helper pods log -- apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] -# for creating and managing to execute comands inside target container -- apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] -# for configuring and monitor the experiment job by the chaos-runner pod -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] -# for creation, status polling and deletion of litmus chaos resources used within a chaos workflow -- apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: aws-ssm-chaos-by-tag-sa - labels: - name: aws-ssm-chaos-by-tag-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: aws-ssm-chaos-by-tag-sa -subjects: -- kind: ServiceAccount - name: aws-ssm-chaos-by-tag-sa - namespace: default diff --git a/charts/aws-ssm/aws-ssm.chartserviceversion.yaml b/charts/aws-ssm/aws-ssm.chartserviceversion.yaml deleted file mode 100644 index ebfb1a8a1..000000000 --- a/charts/aws-ssm/aws-ssm.chartserviceversion.yaml +++ /dev/null @@ -1,36 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-11T10:28:08Z - name: aws-ssm - version: 0.1.0 - annotations: - categories: Kubernetes - chartDescription: Injects aws ssm chaos -spec: - displayName: AWS SSM - categoryDescription: > - aws ssm contains chaos to disrupt state of aws resources by litmus aws ssm docs - experiments: - - aws-ssm-chaos-by-id - - aws-ssm-chaos-by-tag - keywords: - - AWS - - SSM - - EC2 - maintainers: - - name: ksatchit - email: karthik@chaosnative.com - provider: - name: ChaosNative - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/aws-ssm - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - icon: - - url: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/aws-ssm/icons/aws-ssm.png - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/aws-ssm/experiments.yaml diff --git a/charts/aws-ssm/aws-ssm.package.yaml b/charts/aws-ssm/aws-ssm.package.yaml deleted file mode 100644 index cfae7ec76..000000000 --- a/charts/aws-ssm/aws-ssm.package.yaml +++ /dev/null @@ -1,8 +0,0 @@ -packageName: aws-ssm -experiments: - - name: aws-ssm-chaos-by-id - CSV: aws-ssm-chaos-by-id.chartserviceversion.yaml - desc: "aws-ssm-chaos-by-id" - - name: aws-ssm-chaos-by-tag - CSV: aws-ssm-chaos-by-tag.chartserviceversion.yaml - desc: "aws-ssm-chaos-by-tag" \ No newline at end of file diff --git a/charts/aws-ssm/experiments.yaml b/charts/aws-ssm/experiments.yaml deleted file mode 100644 index 4e9da4b89..000000000 --- a/charts/aws-ssm/experiments.yaml +++ /dev/null @@ -1,256 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute AWS SSM Chaos on given ec2 instance IDs -kind: ChaosExperiment -metadata: - name: aws-ssm-chaos-by-id - labels: - name: aws-ssm-chaos-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name aws-ssm-chaos-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: CHAOS_INTERVAL - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - - name: REGION - value: '' - - # it defines the sequence of chaos execution for multiple target instances - # supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' - - # provide the number of workers for memory stress - - name: NUMBER_OF_WORKERS - value: '1' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to be comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - labels: - name: aws-ssm-chaos-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute AWS SSM Chaos on given ec2 instance Tag -kind: ChaosExperiment -metadata: - name: aws-ssm-chaos-by-tag - labels: - name: aws-ssm-chaos-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name aws-ssm-chaos-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: CHAOS_INTERVAL - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide tag of the target ec2 instances - # ex: team:devops (key:value) - - name: EC2_INSTANCE_TAG - value: '' - - - name: REGION - value: '' - - # it defines the sequence of chaos execution for multiple target instances - # supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # percentage of total instance to target - - name: INSTANCE_AFFECTED_PERC - value: '' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' - - # provide the number of workers for memory stress - - name: NUMBER_OF_WORKERS - value: '1' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - labels: - name: aws-ssm-chaos-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- diff --git a/charts/aws-ssm/icons/aws-ssm-chaos-by-id.png b/charts/aws-ssm/icons/aws-ssm-chaos-by-id.png deleted file mode 100644 index fd09e34f6cd5c49336db1bb357ebf14d82201274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3152 zcmV-W46pNvP)jCR+=d*`L+4czA#!(zllHgrc<0?fHf|Fh(o*wV0m%zf(KebGfH6AH;z62kK%;Gf<*SG zoGeJ~@lM*YtwDKSy0m~MPs<_;@+d6u7+I+Ma^dhOG9ovHN|#Nbc@N}~g=m6+x5)zN z2`6JUA!9D!{tqtDj;)P!sjV-h^Qhb7YH$^~Q=fv+S;nj3mF#S29^m+Ka_bzGE~=})MkhY&Cb#>R&+FCy z8XTS2$0jR*1)Cla()K`#lG1n*b+wSSHJwakiwP(X!C(mx&>yh4>O-A$_-Gdei<60s z4OaR1ck}#OB!Gypx{5c>47T+|rxN+iUMy|+WL=E1h8t@TuZ@pdSfVuARDn;X>v+P#f-xo-|w4Z10; z#?6jZY`>`4U6YcAP(JIXb>091kjmh=^PF#BfF%OQ>?|c}?`Qk?T&J^dpqtAA!UrN_ zNE>GS@=Xy??!Fj;@y2Cl+(9`xLzSSwtp;Mq;vrr6)*>4dFU9K<2L(hT?U<9LoDac7 z>jF4dclMeRfH=i>4~mA!n?GT=>PJS(GjnbZ8O4+?jK+xAgmk|Zdz zPXR$|{?_eQ7kn~=;a4~!@){v`1K1bQ^R@W}!<3wmgSLk{nI&ULKsgoAoBWoeXlD8y zs{L6k544X7zD5Vplas=0IudFT6c&tNXe8n=h+L?pq1q5`@!^gVl#DDdZ z=SaeHN`L@^p&hTxAc!EL77MKK<>4+~GEG1+eR*$JYe2t-Zib6OL{3-Ink1#Fa?(%N zh8T~t)CGxl7qhN*RzPTO=~ERFWbhiqRMH)9u>xXMe{fN_maEYh@aQM)s(qvgKpA%3 z_KXlRyuxI9(+zQ$h4-P5AkO(ZTl}XK5Ch^VLX7nc?a*CC@Oh{wwxWE-qCd{T_oJ*f z*w%Eara=J_R037c^$6brCI45oqlHZyj#j!c5?sx5*a$(iOjyPbmL@4>dH71XyCXmR zHygrI3RZ|B z0xU_6%CJu4d#DwP;C=A15MM010=(a!cmQpbljm@)4}>ismSQ-hg*;dxP{k(J^~kj) z`PBYkK@d^)eGf14RErS+#DW1tM^QnmI1y+>gV{NG6~jVy9i>Zyn|Id2&`4zI4~u-} z8!BF}^V=n0QB$QUNx2&;!NqGy2sZQPWchtR9~b+>vw*WvbqvwCbXfrz!SKoitOj`T znL|om$U&;G{*Bpwmr(Gf8+yR%ctY$i6%vaIx@}}*_VufesJbr1d-1n3bytD~i{WYv z8nCKdy~G+~ZYr%4t$;^P*FiEXrSB9oMU`O4wyEvj+F>Aq(<#!>4LwY0_uc3uCO3gw<-fG zga70K1;IqGaLPf@kW&`V3a#*ihKy-TJHXRxrqBz|TvZK|5LB>QG+(1qBj$ecOxqQq z>n02S5CZaq964g4PBo^vzFRYBpzE56X%+|&Jm8p9r5XQ?YmY0ATt-Yq98#oJMi1Ui z?50R-xX;s@|G;-`EI+PpTbieB!7Qx{1ycnCaLiAyzFTz+J_tcYhIe0d%|L;G12M&1 z5=9Fce3$I^p8Dw&Q-X$!=>mcob8VVIWt%ioL8OJx)0znP2a2dX_{hQ|Xvl>QGlPaq zL>HN_fBuNiqx=?!Ucgu?A{0%@^BJ?ZPmJI6e%KNft*$ArmH5i z0oF2e3o#-d5XFPvlg0A{jY5hf5fu=@1R{z-1xYr7ijgX?3?FHzzS|o#BH{N$qVkV6 zSZ2FG*Q48c?nJxEw(Evds8sdSd2ngVd^k(hM1m9uiNFxwY6A&O5 zlY@$x;Ir`^(Zn+UaQ#IksuuWVBrc#q;sP2ZE}%iot?d}#XTN-f8XBAF`i&d(*y2TW zwY!H#=Z&P&#Sc>1if3u%lgnt%*Jse;CClm8FaMm@Z+J~PFUK~5e)q~t6e}zv;4jwv zn1&A@MyKl<=qGE|(yv}xO_jUer@7ylMdvTH(!Tu%$u=UJ(%E}z&zx1ng^;nvGF`ah zol1J*sa5ocKmC<%Fe{us^)CAKNDZ4Wu2rnBuD+2yKTQvo%xCpL2le*$(SnDT&>y$H zL$SmX0@j>3MF$QZrnfh5q!r))o^mWHX()ZAU>v<$`45_UR}rNoC)1AIRW#o*Td~5| ze)BR_Y+)O>a`m`HR%w@2S)*y#HR>^!vAHQqe^E zYVj2M_`s)1*ZsKq5bb*ZL(0y|q?maIqlTElBWBomw=-w?9 z3#<`D(#I3+`6ioXdYkChjo{8nVN;-^9IR$v&P=m~Vg)P^H(wk_u?E5&TTj%mot2Yw ziSn35W*0N-%4Drf#C=NHEYxM99yU?mewa ztb&V)Ci;x`%>7<+Nk-gyO%KG9`cCmzT$a|4S!DX-u8GO#R-S; zLs$g+h&_3g;)Kd3+*3M!8|3i7ZBy?XxDB%RrqakG;+E(iqjCR+=d*`L+4czA#!(zllHgrc<0?fHf|Fh(o*wV0m%zf(KebGfH6AH;z62kK%;Gf<*SG zoGeJ~@lM*YtwDKSy0m~MPs<_;@+d6u7+I+Ma^dhOG9ovHN|#Nbc@N}~g=m6+x5)zN z2`6JUA!9D!{tqtDj;)P!sjV-h^Qhb7YH$^~Q=fv+S;nj3mF#S29^m+Ka_bzGE~=})MkhY&Cb#>R&+FCy z8XTS2$0jR*1)Cla()K`#lG1n*b+wSSHJwakiwP(X!C(mx&>yh4>O-A$_-Gdei<60s z4OaR1ck}#OB!Gypx{5c>47T+|rxN+iUMy|+WL=E1h8t@TuZ@pdSfVuARDn;X>v+P#f-xo-|w4Z10; z#?6jZY`>`4U6YcAP(JIXb>091kjmh=^PF#BfF%OQ>?|c}?`Qk?T&J^dpqtAA!UrN_ zNE>GS@=Xy??!Fj;@y2Cl+(9`xLzSSwtp;Mq;vrr6)*>4dFU9K<2L(hT?U<9LoDac7 z>jF4dclMeRfH=i>4~mA!n?GT=>PJS(GjnbZ8O4+?jK+xAgmk|Zdz zPXR$|{?_eQ7kn~=;a4~!@){v`1K1bQ^R@W}!<3wmgSLk{nI&ULKsgoAoBWoeXlD8y zs{L6k544X7zD5Vplas=0IudFT6c&tNXe8n=h+L?pq1q5`@!^gVl#DDdZ z=SaeHN`L@^p&hTxAc!EL77MKK<>4+~GEG1+eR*$JYe2t-Zib6OL{3-Ink1#Fa?(%N zh8T~t)CGxl7qhN*RzPTO=~ERFWbhiqRMH)9u>xXMe{fN_maEYh@aQM)s(qvgKpA%3 z_KXlRyuxI9(+zQ$h4-P5AkO(ZTl}XK5Ch^VLX7nc?a*CC@Oh{wwxWE-qCd{T_oJ*f z*w%Eara=J_R037c^$6brCI45oqlHZyj#j!c5?sx5*a$(iOjyPbmL@4>dH71XyCXmR zHygrI3RZ|B z0xU_6%CJu4d#DwP;C=A15MM010=(a!cmQpbljm@)4}>ismSQ-hg*;dxP{k(J^~kj) z`PBYkK@d^)eGf14RErS+#DW1tM^QnmI1y+>gV{NG6~jVy9i>Zyn|Id2&`4zI4~u-} z8!BF}^V=n0QB$QUNx2&;!NqGy2sZQPWchtR9~b+>vw*WvbqvwCbXfrz!SKoitOj`T znL|om$U&;G{*Bpwmr(Gf8+yR%ctY$i6%vaIx@}}*_VufesJbr1d-1n3bytD~i{WYv z8nCKdy~G+~ZYr%4t$;^P*FiEXrSB9oMU`O4wyEvj+F>Aq(<#!>4LwY0_uc3uCO3gw<-fG zga70K1;IqGaLPf@kW&`V3a#*ihKy-TJHXRxrqBz|TvZK|5LB>QG+(1qBj$ecOxqQq z>n02S5CZaq964g4PBo^vzFRYBpzE56X%+|&Jm8p9r5XQ?YmY0ATt-Yq98#oJMi1Ui z?50R-xX;s@|G;-`EI+PpTbieB!7Qx{1ycnCaLiAyzFTz+J_tcYhIe0d%|L;G12M&1 z5=9Fce3$I^p8Dw&Q-X$!=>mcob8VVIWt%ioL8OJx)0znP2a2dX_{hQ|Xvl>QGlPaq zL>HN_fBuNiqx=?!Ucgu?A{0%@^BJ?ZPmJI6e%KNft*$ArmH5i z0oF2e3o#-d5XFPvlg0A{jY5hf5fu=@1R{z-1xYr7ijgX?3?FHzzS|o#BH{N$qVkV6 zSZ2FG*Q48c?nJxEw(Evds8sdSd2ngVd^k(hM1m9uiNFxwY6A&O5 zlY@$x;Ir`^(Zn+UaQ#IksuuWVBrc#q;sP2ZE}%iot?d}#XTN-f8XBAF`i&d(*y2TW zwY!H#=Z&P&#Sc>1if3u%lgnt%*Jse;CClm8FaMm@Z+J~PFUK~5e)q~t6e}zv;4jwv zn1&A@MyKl<=qGE|(yv}xO_jUer@7ylMdvTH(!Tu%$u=UJ(%E}z&zx1ng^;nvGF`ah zol1J*sa5ocKmC<%Fe{us^)CAKNDZ4Wu2rnBuD+2yKTQvo%xCpL2le*$(SnDT&>y$H zL$SmX0@j>3MF$QZrnfh5q!r))o^mWHX()ZAU>v<$`45_UR}rNoC)1AIRW#o*Td~5| ze)BR_Y+)O>a`m`HR%w@2S)*y#HR>^!vAHQqe^E zYVj2M_`s)1*ZsKq5bb*ZL(0y|q?maIqlTElBWBomw=-w?9 z3#<`D(#I3+`6ioXdYkChjo{8nVN;-^9IR$v&P=m~Vg)P^H(wk_u?E5&TTj%mot2Yw ziSn35W*0N-%4Drf#C=NHEYxM99yU?mewa ztb&V)Ci;x`%>7<+Nk-gyO%KG9`cCmzT$a|4S!DX-u8GO#R-S; zLs$g+h&_3g;)Kd3+*3M!8|3i7ZBy?XxDB%RrqakG;+E(iqjCR+=d*`L+4czA#!(zllHgrc<0?fHf|Fh(o*wV0m%zf(KebGfH6AH;z62kK%;Gf<*SG zoGeJ~@lM*YtwDKSy0m~MPs<_;@+d6u7+I+Ma^dhOG9ovHN|#Nbc@N}~g=m6+x5)zN z2`6JUA!9D!{tqtDj;)P!sjV-h^Qhb7YH$^~Q=fv+S;nj3mF#S29^m+Ka_bzGE~=})MkhY&Cb#>R&+FCy z8XTS2$0jR*1)Cla()K`#lG1n*b+wSSHJwakiwP(X!C(mx&>yh4>O-A$_-Gdei<60s z4OaR1ck}#OB!Gypx{5c>47T+|rxN+iUMy|+WL=E1h8t@TuZ@pdSfVuARDn;X>v+P#f-xo-|w4Z10; z#?6jZY`>`4U6YcAP(JIXb>091kjmh=^PF#BfF%OQ>?|c}?`Qk?T&J^dpqtAA!UrN_ zNE>GS@=Xy??!Fj;@y2Cl+(9`xLzSSwtp;Mq;vrr6)*>4dFU9K<2L(hT?U<9LoDac7 z>jF4dclMeRfH=i>4~mA!n?GT=>PJS(GjnbZ8O4+?jK+xAgmk|Zdz zPXR$|{?_eQ7kn~=;a4~!@){v`1K1bQ^R@W}!<3wmgSLk{nI&ULKsgoAoBWoeXlD8y zs{L6k544X7zD5Vplas=0IudFT6c&tNXe8n=h+L?pq1q5`@!^gVl#DDdZ z=SaeHN`L@^p&hTxAc!EL77MKK<>4+~GEG1+eR*$JYe2t-Zib6OL{3-Ink1#Fa?(%N zh8T~t)CGxl7qhN*RzPTO=~ERFWbhiqRMH)9u>xXMe{fN_maEYh@aQM)s(qvgKpA%3 z_KXlRyuxI9(+zQ$h4-P5AkO(ZTl}XK5Ch^VLX7nc?a*CC@Oh{wwxWE-qCd{T_oJ*f z*w%Eara=J_R037c^$6brCI45oqlHZyj#j!c5?sx5*a$(iOjyPbmL@4>dH71XyCXmR zHygrI3RZ|B z0xU_6%CJu4d#DwP;C=A15MM010=(a!cmQpbljm@)4}>ismSQ-hg*;dxP{k(J^~kj) z`PBYkK@d^)eGf14RErS+#DW1tM^QnmI1y+>gV{NG6~jVy9i>Zyn|Id2&`4zI4~u-} z8!BF}^V=n0QB$QUNx2&;!NqGy2sZQPWchtR9~b+>vw*WvbqvwCbXfrz!SKoitOj`T znL|om$U&;G{*Bpwmr(Gf8+yR%ctY$i6%vaIx@}}*_VufesJbr1d-1n3bytD~i{WYv z8nCKdy~G+~ZYr%4t$;^P*FiEXrSB9oMU`O4wyEvj+F>Aq(<#!>4LwY0_uc3uCO3gw<-fG zga70K1;IqGaLPf@kW&`V3a#*ihKy-TJHXRxrqBz|TvZK|5LB>QG+(1qBj$ecOxqQq z>n02S5CZaq964g4PBo^vzFRYBpzE56X%+|&Jm8p9r5XQ?YmY0ATt-Yq98#oJMi1Ui z?50R-xX;s@|G;-`EI+PpTbieB!7Qx{1ycnCaLiAyzFTz+J_tcYhIe0d%|L;G12M&1 z5=9Fce3$I^p8Dw&Q-X$!=>mcob8VVIWt%ioL8OJx)0znP2a2dX_{hQ|Xvl>QGlPaq zL>HN_fBuNiqx=?!Ucgu?A{0%@^BJ?ZPmJI6e%KNft*$ArmH5i z0oF2e3o#-d5XFPvlg0A{jY5hf5fu=@1R{z-1xYr7ijgX?3?FHzzS|o#BH{N$qVkV6 zSZ2FG*Q48c?nJxEw(Evds8sdSd2ngVd^k(hM1m9uiNFxwY6A&O5 zlY@$x;Ir`^(Zn+UaQ#IksuuWVBrc#q;sP2ZE}%iot?d}#XTN-f8XBAF`i&d(*y2TW zwY!H#=Z&P&#Sc>1if3u%lgnt%*Jse;CClm8FaMm@Z+J~PFUK~5e)q~t6e}zv;4jwv zn1&A@MyKl<=qGE|(yv}xO_jUer@7ylMdvTH(!Tu%$u=UJ(%E}z&zx1ng^;nvGF`ah zol1J*sa5ocKmC<%Fe{us^)CAKNDZ4Wu2rnBuD+2yKTQvo%xCpL2le*$(SnDT&>y$H zL$SmX0@j>3MF$QZrnfh5q!r))o^mWHX()ZAU>v<$`45_UR}rNoC)1AIRW#o*Td~5| ze)BR_Y+)O>a`m`HR%w@2S)*y#HR>^!vAHQqe^E zYVj2M_`s)1*ZsKq5bb*ZL(0y|q?maIqlTElBWBomw=-w?9 z3#<`D(#I3+`6ioXdYkChjo{8nVN;-^9IR$v&P=m~Vg)P^H(wk_u?E5&TTj%mot2Yw ziSn35W*0N-%4Drf#C=NHEYxM99yU?mewa ztb&V)Ci;x`%>7<+Nk-gyO%KG9`cCmzT$a|4S!DX-u8GO#R-S; zLs$g+h&_3g;)Kd3+*3M!8|3i7ZBy?XxDB%RrqakG;+E(iq - Azure category of chaos experiments causes the disruption of the azure serives for a certain chaos duration. - experiments: - - azure-instance-stop - - azure-disk-loss - keywords: - - Azure - - Instance - - AKS - - Scaleset - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - provider: - name: Chaos Native - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/azure/experiments/azure - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/contents/#cloud-infrastructure - icon: - - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/azure/experiments.yaml - diff --git a/charts/azure/experiments.yaml b/charts/azure/experiments.yaml deleted file mode 100644 index 7c27b7a89..000000000 --- a/charts/azure/experiments.yaml +++ /dev/null @@ -1,187 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaches disk from the VM and then re-attaches disk to the VM -kind: ChaosExperiment -metadata: - name: azure-disk-loss - labels: - name: azure-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name azure-disk-loss - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the resource group of the instance - - name: RESOURCE_GROUP - value: '' - - # accepts enable/disable, default is disable - - name: SCALE_SET - value: '' - - # provide the virtual disk names (comma separated if multiple) - - name: VIRTUAL_DISK_NAMES - value: '' - - # provide the sequence type for the run. Options: serial/parallel - - name: SEQUENCE - value: 'parallel' - - # provide the path to aks credentials mounted from secret - - name: AZURE_AUTH_LOCATION - value: '/tmp/azure.auth' - - labels: - name: azure-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Terminating azure VM instance -kind: ChaosExperiment -metadata: - name: azure-instance-stop - labels: - name: azure-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name azure-instance-stop - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the target instance name(s) (comma separated if multiple) - - name: AZURE_INSTANCE_NAMES - value: '' - - # provide the resource group of the instance - - name: RESOURCE_GROUP - value: '' - - # accepts enable/disable, default is disable - - name: SCALE_SET - value: '' - - # Provide the path of aks credentials mounted from secret - - name: AZURE_AUTH_LOCATION - value: '/tmp/azure.auth' - - - name: SEQUENCE - value: 'parallel' - - labels: - name: azure-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - - ---- diff --git a/charts/azure/icons/azure.png b/charts/azure/icons/azure.png deleted file mode 100644 index 5baec5e1850d10cf4b49c165957ed4c7a4739f3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22398 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 - Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back - keywords: - - "Disk" - - "GCP" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Neelanjan Manna - email: neelanjan.manna@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/gcp/gcp-vm-disk-loss-by-label/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/gcp-vm-disk-loss-by-label/experiment.yaml diff --git a/charts/gcp/gcp-vm-disk-loss-by-label/rbac.yaml b/charts/gcp/gcp-vm-disk-loss-by-label/rbac.yaml deleted file mode 100644 index 34065239c..000000000 --- a/charts/gcp/gcp-vm-disk-loss-by-label/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: gcp-vm-disk-loss-by-label-sa - namespace: default - labels: - name: gcp-vm-disk-loss-by-label-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: gcp-vm-disk-loss-by-label-sa - labels: - name: gcp-vm-disk-loss-by-label-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: gcp-vm-disk-loss-by-label-sa - labels: - name: gcp-vm-disk-loss-by-label-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: gcp-vm-disk-loss-by-label-sa -subjects: -- kind: ServiceAccount - name: gcp-vm-disk-loss-by-label-sa - namespace: default \ No newline at end of file diff --git a/charts/gcp/gcp-vm-disk-loss/experiment.yaml b/charts/gcp/gcp-vm-disk-loss/experiment.yaml deleted file mode 100644 index 24c37e1db..000000000 --- a/charts/gcp/gcp-vm-disk-loss/experiment.yaml +++ /dev/null @@ -1,86 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back -kind: ChaosExperiment -metadata: - name: gcp-vm-disk-loss - labels: - name: gcp-vm-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-disk-loss - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # parallel or serial; determines how chaos is injected - - name: SEQUENCE - value: 'parallel' - - # set the GCP project id - - name: GCP_PROJECT_ID - value: '' - - # set the disk volume name(s) as comma seperated values - # eg. volume1,volume2,... - - name: DISK_VOLUME_NAMES - value: '' - - # set the disk zone(s) as comma seperated values in the corresponding - # order of DISK_VOLUME_NAME - # eg. zone1,zone2,... - - name: ZONES - value: '' - - labels: - name: gcp-vm-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/charts/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml b/charts/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml deleted file mode 100644 index 452dffe31..000000000 --- a/charts/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: gcp-vm-disk-loss - version: 0.1.0 - annotations: - categories: gcp -spec: - displayName: gcp-vm-disk-loss - categoryDescription: > - Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back - keywords: - - "Disk" - - "GCP" - platforms: - - "GCP" - maturity: alpha - maintainers: - - name: Neelanjan Manna - email: neelanjan@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/gcp/gcp-vm-disk-loss/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/gcp-vm-disk-loss/experiment.yaml diff --git a/charts/gcp/gcp-vm-disk-loss/rbac.yaml b/charts/gcp/gcp-vm-disk-loss/rbac.yaml deleted file mode 100644 index 27c207252..000000000 --- a/charts/gcp/gcp-vm-disk-loss/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: gcp-vm-disk-loss-sa - namespace: default - labels: - name: gcp-vm-disk-loss-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: gcp-vm-disk-loss-sa - labels: - name: gcp-vm-disk-loss-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: gcp-vm-disk-loss-sa - labels: - name: gcp-vm-disk-loss-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: gcp-vm-disk-loss-sa -subjects: -- kind: ServiceAccount - name: gcp-vm-disk-loss-sa - namespace: default \ No newline at end of file diff --git a/charts/gcp/gcp-vm-instance-stop-by-label/experiment.yaml b/charts/gcp/gcp-vm-instance-stop-by-label/experiment.yaml deleted file mode 100644 index c4a68d18e..000000000 --- a/charts/gcp/gcp-vm-instance-stop-by-label/experiment.yaml +++ /dev/null @@ -1,95 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them -kind: ChaosExperiment -metadata: - name: gcp-vm-instance-stop-by-label - labels: - name: gcp-vm-instance-stop-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-instance-stop-by-label - command: - - /bin/bash - env: - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - - name: SEQUENCE - value: 'parallel' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Label of the target vm instance(s) - - name: INSTANCE_LABEL - value: '' - - # Zone in which the target vm instance(s) filtered by the label exist - # all the instances should lie in a single zone - - name: ZONES - value: '' - - # enable it if the target instance is a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # set the percentage value of the instances with the given label - # which should be targeted as part of the chaos injection - - name: INSTANCE_AFFECTED_PERC - value: '' - - labels: - name: gcp-vm-instance-stop-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/charts/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml b/charts/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml deleted file mode 100644 index f14399d3d..000000000 --- a/charts/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: gcp-vm-instance-stop-by-label - version: 0.1.0 - annotations: - categories: gcp -spec: - displayName: gcp-vm-instance-stop-by-label - categoryDescription: > - Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them - keywords: - - "VM" - - "GCP" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Neelanjan Manna - email: neelanjan.manna@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/gcp/gcp-vm-instance-stop-by-label/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/gcp-vm-instance-stop-by-label/experiment.yaml diff --git a/charts/gcp/gcp-vm-instance-stop-by-label/rbac.yaml b/charts/gcp/gcp-vm-instance-stop-by-label/rbac.yaml deleted file mode 100644 index f37f8f7f3..000000000 --- a/charts/gcp/gcp-vm-instance-stop-by-label/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: gcp-vm-instance-stop-by-label-sa - namespace: default - labels: - name: gcp-vm-instance-stop-by-label-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: gcp-vm-instance-stop-by-label-sa - labels: - name: gcp-vm-instance-stop-by-label-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: gcp-vm-instance-stop-by-label-sa - labels: - name: gcp-vm-instance-stop-by-label-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: gcp-vm-instance-stop-by-label-sa -subjects: -- kind: ServiceAccount - name: gcp-vm-instance-stop-by-label-sa - namespace: default \ No newline at end of file diff --git a/charts/gcp/gcp-vm-instance-stop/experiment.yaml b/charts/gcp/gcp-vm-instance-stop/experiment.yaml deleted file mode 100644 index facab7d1e..000000000 --- a/charts/gcp/gcp-vm-instance-stop/experiment.yaml +++ /dev/null @@ -1,94 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops GCP VM instances and GKE nodes for a specified duration and later restarts them -kind: ChaosExperiment -metadata: - name: gcp-vm-instance-stop - labels: - name: gcp-vm-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-instance-stop - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # parallel or serial; determines how the VM instances are terminated, all at once or one at a time - - name: SEQUENCE - value: 'parallel' - - # period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # enable or disable; shall be set to enable if the target instances are a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # Instance name of the target vm instance(s) - # Multiple instance names can be provided as comma separated values ex: instance1,instance2 - - name: VM_INSTANCE_NAMES - value: '' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Instance zone(s) of the target vm instance(s) - # If more than one instance is targetted, provide zone for each in the order of their - # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 - - name: ZONES - value: '' - - labels: - name: gcp-vm-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/charts/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml b/charts/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml deleted file mode 100644 index 6b8aab285..000000000 --- a/charts/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: gcp-vm-instance-stop - version: 0.1.0 - annotations: - categories: gcp -spec: - displayName: gcp-vm-instance-stop - categoryDescription: > - Stops GCP VM instances and GKE nodes for a specified duration and later restarts them - keywords: - - "VM" - - "GCP" - platforms: - - "GCP" - maturity: alpha - maintainers: - - name: Neelanjan Manna - email: neelanjan@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/gcp/gcp-vm-instance-stop/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/gcp-vm-instance-stop/experiment.yaml diff --git a/charts/gcp/gcp-vm-instance-stop/rbac.yaml b/charts/gcp/gcp-vm-instance-stop/rbac.yaml deleted file mode 100644 index 0592ea9e0..000000000 --- a/charts/gcp/gcp-vm-instance-stop/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: gcp-vm-instance-stop-sa - namespace: default - labels: - name: gcp-vm-instance-stop-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: gcp-vm-instance-stop-sa - labels: - name: gcp-vm-instance-stop-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: gcp-vm-instance-stop-sa - labels: - name: gcp-vm-instance-stop-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: gcp-vm-instance-stop-sa -subjects: -- kind: ServiceAccount - name: gcp-vm-instance-stop-sa - namespace: default \ No newline at end of file diff --git a/charts/gcp/gcp.chartserviceversion.yaml b/charts/gcp/gcp.chartserviceversion.yaml deleted file mode 100644 index bcf249e9e..000000000 --- a/charts/gcp/gcp.chartserviceversion.yaml +++ /dev/null @@ -1,38 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: gcp - version: 0.1.0 - annotations: - categories: gcp -spec: - displayName: gcp chaos - categoryDescription: > - GCP contains chaos to disrupt state of gcp resources running part of the gcp services - experiments: - - gcp-vm-instance-stop - - gcp-vm-disk-loss - - gcp-vm-instance-stop-by-label - - gcp-vm-disk-loss-by-label - keywords: - - "VM" - - "Disk" - - "GCP" - - "Infra" - maintainers: - - name: Neelanjan Manna - email: neelanjan.manna@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - links: - - name: GCP Website - url: https://cloud.google.com/ - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/contents/#cloud-infrastructure - - name: Community Slack - url: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/experiments.yaml diff --git a/charts/gcp/icons/gcp.png b/charts/gcp/icons/gcp.png deleted file mode 100644 index 577f8bad34919c9b7d0487c966c323ed6ed4bcb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30752 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%0DeSB+8VaA6;s|>>DYk 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 diff --git a/charts/generic/container-kill/container-kill.chartserviceversion.yaml b/charts/generic/container-kill/container-kill.chartserviceversion.yaml deleted file mode 100644 index 14db31c4a..000000000 --- a/charts/generic/container-kill/container-kill.chartserviceversion.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-15T10:28:08Z - name: container-kill - version: 0.1.13 - annotations: - categories: "Kubernetes" - vendor: "CNCF" - support: https://slack.openebs.io/ -spec: - displayName: container-kill - categoryDescription: | - Container kill contains chaos to disrupt state of kubernetes resources. Experiments can inject random container delete failures against specified application. - - Executes SIGKILL on containers of random replicas of an application deployment. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. - keywords: - - Kubernetes - - K8S - - Pod - - Container - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maturity: alpha - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/container-kill - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/container-kill/ - - name: Video - url: https://www.youtube.com/watch?v=XKyMNdVsKMo - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/experiment.yaml diff --git a/charts/generic/container-kill/engine.yaml b/charts/generic/container-kill/engine.yaml deleted file mode 100644 index 399084cdc..000000000 --- a/charts/generic/container-kill/engine.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: container-kill-sa - experiments: - - name: container-kill - spec: - components: - env: - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_CONTAINER - value: '' - \ No newline at end of file diff --git a/charts/generic/container-kill/engine_nginx_getstarted.yaml b/charts/generic/container-kill/engine_nginx_getstarted.yaml deleted file mode 100644 index df1430a30..000000000 --- a/charts/generic/container-kill/engine_nginx_getstarted.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: nginx -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'nginx' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: container-kill-sa - # It can be delete/retain - jobCleanUpPolicy: 'delete' - experiments: - - name: container-kill - spec: - components: - env: - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_CONTAINER - value: '' - \ No newline at end of file diff --git a/charts/generic/container-kill/experiment.yaml b/charts/generic/container-kill/experiment.yaml deleted file mode 100644 index 905c73aa0..000000000 --- a/charts/generic/container-kill/experiment.yaml +++ /dev/null @@ -1,121 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: "Kills a container belonging to an application pod \n" -kind: ChaosExperiment -metadata: - name: container-kill - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name container-kill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: TARGET_PODS - value: '' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - - name: SIGNAL - value: 'SIGKILL' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/charts/generic/container-kill/rbac-psp.yaml b/charts/generic/container-kill/rbac-psp.yaml deleted file mode 100644 index 12de772f1..000000000 --- a/charts/generic/container-kill/rbac-psp.yaml +++ /dev/null @@ -1,86 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: container-kill-sa -subjects: -- kind: ServiceAccount - name: container-kill-sa - namespace: default - diff --git a/charts/generic/container-kill/rbac.yaml b/charts/generic/container-kill/rbac.yaml deleted file mode 100644 index ccea310c3..000000000 --- a/charts/generic/container-kill/rbac.yaml +++ /dev/null @@ -1,81 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: container-kill-sa -subjects: -- kind: ServiceAccount - name: container-kill-sa - namespace: default - diff --git a/charts/generic/container-kill/rbac_nginx_getstarted.yaml b/charts/generic/container-kill/rbac_nginx_getstarted.yaml deleted file mode 100644 index 461b16457..000000000 --- a/charts/generic/container-kill/rbac_nginx_getstarted.yaml +++ /dev/null @@ -1,78 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: container-kill-sa - namespace: nginx - labels: - name: container-kill-sa ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: container-kill-sa - namespace: nginx - labels: - name: container-kill-sa -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: container-kill-sa - namespace: nginx - labels: - name: container-kill-sa -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: container-kill-sa -subjects: -- kind: ServiceAccount - name: container-kill-sa - namespace: nginx - diff --git a/charts/generic/disk-fill/disk-fill.chartserviceversion.yaml b/charts/generic/disk-fill/disk-fill.chartserviceversion.yaml deleted file mode 100644 index e5b202ceb..000000000 --- a/charts/generic/disk-fill/disk-fill.chartserviceversion.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-11-11T10:28:08Z - name: disk-fill - version: 0.0.12 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: disk-fill - categoryDescription: | - Disk fill contains chaos to disrupt state of kubernetes resources. - - Causes (forced/graceful) Disk Stress by filling up the Ephemeral Storage of the Pod using one of it containers. - - Causes Pod to get Evicted if the Pod exceeds it Ephemeral Storage Limit. - - Tests the Ephemeral Storage Limits, to ensure those parameters are sufficient. - keywords: - - Kubernetes - - K8S - - Pod - - Disk - platforms: - - GKE - - EKS - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/disk-fill - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/disk-fill/ - - name: Video - url: https://www.youtube.com/watch?v=pbok737rUPQ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-fill/experiment.yaml diff --git a/charts/generic/disk-fill/engine.yaml b/charts/generic/disk-fill/engine.yaml deleted file mode 100644 index 5245c8618..000000000 --- a/charts/generic/disk-fill/engine.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: disk-fill-sa - experiments: - - name: disk-fill - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - # specify the fill percentage according to the disk pressure required - - name: FILL_PERCENTAGE - value: '80' - - - name: PODS_AFFECTED_PERC - value: '' - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' diff --git a/charts/generic/disk-fill/experiment.yaml b/charts/generic/disk-fill/experiment.yaml deleted file mode 100644 index 1f5e0a2ff..000000000 --- a/charts/generic/disk-fill/experiment.yaml +++ /dev/null @@ -1,123 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Fillup Ephemeral Storage of a Resource -kind: ChaosExperiment -metadata: - name: disk-fill - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name disk-fill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: FILL_PERCENTAGE - value: '80' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the data block size - # supported unit is KB - - name: DATA_BLOCK_SIZE - value: '256' - - - name: TARGET_PODS - value: '' - - - name: EPHEMERAL_STORAGE_MEBIBYTES - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/host-path-usage: "true" - app.kubernetes.io/version: latest diff --git a/charts/generic/disk-fill/rbac-psp.yaml b/charts/generic/disk-fill/rbac-psp.yaml deleted file mode 100644 index e7aa8805e..000000000 --- a/charts/generic/disk-fill/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: disk-fill-sa -subjects: -- kind: ServiceAccount - name: disk-fill-sa - namespace: default diff --git a/charts/generic/disk-fill/rbac.yaml b/charts/generic/disk-fill/rbac.yaml deleted file mode 100644 index 37a9d9aef..000000000 --- a/charts/generic/disk-fill/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: disk-fill-sa -subjects: -- kind: ServiceAccount - name: disk-fill-sa - namespace: default diff --git a/charts/generic/docker-service-kill/docker-service-kill.chartserviceversion.yaml b/charts/generic/docker-service-kill/docker-service-kill.chartserviceversion.yaml deleted file mode 100644 index 0f629dd2b..000000000 --- a/charts/generic/docker-service-kill/docker-service-kill.chartserviceversion.yaml +++ /dev/null @@ -1,47 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-07-14T10:28:08Z - name: docker-service-kill - version: 0.1.1 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: docker-service-kill - categoryDescription: | - docker-service-kill contains killing docker service gracefully for a certain chaos duration. - - Causes replicas may be evicted or becomes unreachable on account on nodes turning unschedulable (Not Ready) due to docker service kill. - - The application node should be healthy once chaos is stopped and the services are reaccessable. - keywords: - - Kubernetes - - K8S - - Node - - Service - - Docker - platforms: - - GKE - - AKS - maturity: alpha - maintainers: - - name: Ankur Ghosh - email: ankur.ghosh3@wipro.com - minKubeVersion: 1.12.0 - provider: - name: Wipro - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/docker-service-kill - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/docker-service-kill/ - - name: Video - url: - - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/docker-service-kill/experiment.yaml diff --git a/charts/generic/docker-service-kill/rbac-psp.yaml b/charts/generic/docker-service-kill/rbac-psp.yaml deleted file mode 100644 index cc1c8a9fe..000000000 --- a/charts/generic/docker-service-kill/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: docker-service-kill-sa - namespace: default - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: docker-service-kill-sa - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: docker-service-kill-sa - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: docker-service-kill-sa -subjects: -- kind: ServiceAccount - name: docker-service-kill-sa - namespace: default diff --git a/charts/generic/docker-service-kill/rbac.yaml b/charts/generic/docker-service-kill/rbac.yaml deleted file mode 100644 index 1972a9762..000000000 --- a/charts/generic/docker-service-kill/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: docker-service-kill-sa - namespace: default - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: docker-service-kill-sa - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: docker-service-kill-sa - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: docker-service-kill-sa -subjects: -- kind: ServiceAccount - name: docker-service-kill-sa - namespace: default diff --git a/charts/generic/experiments.yaml b/charts/generic/experiments.yaml deleted file mode 100644 index 9af5b9c53..000000000 --- a/charts/generic/experiments.yaml +++ /dev/null @@ -1,3398 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-latency - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: NETWORK_INTERFACE - value: 'eth0' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_LATENCY - value: '2000' #in ms - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: JITTER - value: '0' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects chaos inside the pod which modifies the status code of the response from the provided application server to desired status code provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-status-code - labels: - name: pod-http-status-code - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-status-code - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # modified status code for the http response - # if no value is provided, a random status code from the supported code list will selected - # if an invalid status code is provided, the experiment will fail - # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504] - - name: STATUS_CODE - value: '' - - # whether to modify the body as per the status code provided - - name: "MODIFY_RESPONSE_BODY" - value: "true" - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-status-code - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Restart node -kind: ChaosExperiment -metadata: - name: node-restart - labels: - name: node-restart - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-restart - command: - - /bin/bash - env: - - name: SSH_USER - value: 'root' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - labels: - name: node-restart - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: id-rsa - mountPath: /mnt/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: "Kills a container belonging to an application pod \n" -kind: ChaosExperiment -metadata: - name: container-kill - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name container-kill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: TARGET_PODS - value: '' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - - name: SIGNAL - value: 'SIGKILL' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kills the kubelet service on the application node to check the resiliency. -kind: ChaosExperiment -metadata: - name: kubelet-service-kill - labels: - name: kubelet-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name kubelet-service-kill - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: NODE_LABEL - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' - - labels: - name: kubelet-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/service-kill: "true" - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Taint the node where application pod is scheduled -kind: ChaosExperiment -metadata: - name: node-taint - labels: - name: node-taint - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch","update"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-taint - command: - - /bin/bash - env: - - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # set taint label & effect - # key=value:effect or key:effect - - name: TAINTS - value: '' - - labels: - name: node-taint - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Pod DNS Error injects dns failure/error in target pod containers -kind: ChaosExperiment -metadata: - name: pod-dns-error - labels: - name: pod-dns-error - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name pod-dns-error - command: - - /bin/bash - env: - - name: TARGET_CONTAINER - value: "" - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: "" - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: "" - - - name: TARGET_PODS - value: "" - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: "parallel" - - # list of the target hostnames or kewywords eg. '["litmuschaos","chaosnative.io"]' . If empty all hostnames are targets - - name: TARGET_HOSTNAMES - value: "" - - # can be either exact or substring, determines whether the dns query has to match exactly with one of the targets or can have any of the targets as substring - - name: MATCH_SCHEME - value: "exact" - - labels: - experiment: pod-dns-error - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Inject network packet corruption into application pod -kind: ChaosExperiment -metadata: - name: pod-network-corruption - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-corruption - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - poweroff node -kind: ChaosExperiment -metadata: - name: node-poweroff - labels: - name: node-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-restart - command: - - /bin/bash - env: - - name: SSH_USER - value: 'root' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: REBOOT_COMMAND - value: '-o ServerAliveInterval=1 -o ServerAliveCountMax=1 "sudo systemctl poweroff --force --force" ; true' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - labels: - name: node-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: id-rsa - mountPath: /mnt/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kills the docker service on the application node to check the resiliency. -kind: ChaosExperiment -metadata: - name: docker-service-kill - labels: - name: docker-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name docker-service-kill - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '90' # in seconds - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: NODE_LABEL - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' - - labels: - name: docker-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/service-kill: "true" - app.kubernetes.io/version: latest - - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give a cpu spike on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-cpu-hog - labels: - name: node-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-cpu-hog - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## ENTER THE NUMBER OF CORES OF CPU FOR CPU HOGGING - ## OPTIONAL VALUE IN CASE OF EMPTY VALUE IT WILL TAKE NODE CPU CAPACITY - - name: NODE_CPU_CORE - value: '' - - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' - - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects 100% network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-partition - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # performs CRUD operations on the network policies - - apiGroups: ["networking.k8s.io"] - resources: ["networkpolicies"] - verbs: ["create","delete","list","get"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-partition - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide network policy type - # support ingress, egress, all values - - name: POLICY_TYPES - value: 'all' - - # provide labels of the destination pods - - name: POD_SELECTOR - value: '' - - # provide labels the destination namespaces - - name: NAMESPACE_SELECTOR - value: '' - - # provide comma separated ports - - name: PORTS - value: '' - - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes a pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - name: pod-delete - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-delete - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give a memory hog on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-memory-hog - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-memory-hog - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## Specify the size as percent of total node capacity Ex: '30' - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty - - name: MEMORY_CONSUMPTION_PERCENTAGE - value: '' - - ## Specify the amount of memory to be consumed in mebibytes - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty - - name: MEMORY_CONSUMPTION_MEBIBYTES - value: '' - - - name: NUMBER_OF_WORKERS - value: '1' - - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give IO disk stress on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-io-stress - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-io-stress - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' - - ## Number of core of CPU - - name: CPU - value: '1' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Total number of vm workers - - name: VM_WORKERS - value: '1' - - ## enter the comma separated target nodes name - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog-exec - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog-exec - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/md5sum' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}')" - - - name: TARGET_PODS - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Scale the application replicas and test the node autoscaling on cluster -kind: ChaosExperiment -metadata: - name: pod-autoscaler - labels: - name: pod-autoscaler - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # performs CRUD operations on the deployments and statefulsets - - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-autoscaler - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Number of replicas to scale - - name: REPLICA_COUNT - value: '5' - - labels: - name: pod-autoscaler - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - IO stress on a app pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-io-stress - labels: - name: pod-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-io-stress - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - # provide volume mount path - - name: VOLUME_MOUNT_PATH - value: '' - - ## specify the comma separated target pods - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects http request latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-http-latency - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # set latency value for the chaos - - name: LATENCY - value: '2000' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Drain the node where application pod is scheduled -kind: ChaosExperiment -metadata: - name: node-drain - labels: - name: node-drain - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-drain - command: - - /bin/bash - env: - - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - labels: - name: node-drain - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Fillup Ephemeral Storage of a Resource -kind: ChaosExperiment -metadata: - name: disk-fill - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name disk-fill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: FILL_PERCENTAGE - value: '80' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the data block size - # supported unit is KB - - name: DATA_BLOCK_SIZE - value: '256' - - - name: TARGET_PODS - value: '' - - - name: EPHEMERAL_STORAGE_MEBIBYTES - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/host-path-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects the chaos inside the pod which modifies the header of the request/response from the provided application server to the headers provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-modify-header - labels: - name: pod-http-modify-header - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-modify-header - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} - # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} - - name: HEADERS_MAP - value: '{}' - - # whether to modify response headers or request headers. Accepted values: request, response - - name: HEADER_MODE - value: 'response' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-modify-header - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects memory consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-memory-hog - labels: - name: pod-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-memory-hog - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## Number of workers to perform stress - - name: NUMBER_OF_WORKERS - value: '1' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - labels: - name: pod-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet duplication on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-duplication - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-duplication - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: RAMP_TIME - value: '' - - - name: TARGET_CONTAINER - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE - value: '100' # in percentage - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects memory consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-memory-hog-exec - labels: - name: pod-memory-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-memory-hog-exec - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/dd' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}' | head -n 1)" - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - - name: TARGET_PODS - value: '' - - labels: - name: pod-memory-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Pod DNS Spoof can spoof particular dns requests in target pod container to desired target hostnames -kind: ChaosExperiment -metadata: - name: pod-dns-spoof - labels: - name: pod-dns-spoof - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name pod-dns-spoof - command: - - /bin/bash - env: - - name: TARGET_CONTAINER - value: "" - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: "" - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: "" - - - name: TARGET_PODS - value: "" - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: "parallel" - - # map of the target hostnames eg. '{"abc.com":"spoofabc.com"}' . If empty no queries will be spoofed - - name: SPOOF_MAP - value: "" - - labels: - experiment: pod-dns-spoof - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-loss - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-loss - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - it injects chaos into the pod which stops outgoing http requests by resetting the TCP connection and then reverts back to the original state after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-reset-peer - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-reset-peer - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # reset timeout specifies after how much duration to reset the connection - - name: RESET_TIMEOUT - value: '0' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects the chaos inside the pod which modifies the body of the response from the provided application server to the body string provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-modify-body - labels: - name: pod-http-modify-body - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-modify-body - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the body string to overwrite the response body - # if no value is provided, response will be an empty body. - - name: RESPONSE_BODY - value: '' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-modify-body - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- diff --git a/charts/generic/generic.chartserviceversion.yaml b/charts/generic/generic.chartserviceversion.yaml deleted file mode 100644 index 9042fb0f4..000000000 --- a/charts/generic/generic.chartserviceversion.yaml +++ /dev/null @@ -1,80 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-09-26T10:28:08Z - name: generic - version: 0.1.16 - annotations: - categories: Kubernetes - chartDescription: Injects generic kubernetes chaos -spec: - displayName: Generic Chaos - categoryDescription: > - Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. It groups containers that make up an application into logical units for easier management and discovery. It will install all the experiments which can be used to inject chaos into containerized applications. - - experiments: - - pod-delete - - container-kill - - pod-cpu-hog - - pod-network-loss - - pod-network-latency - - pod-network-corruption - - node-drain - - node-cpu-hog - - disk-fill - - node-memory-hog - - pod-memory-hog - - kubelet-service-kill - - pod-network-duplication - - node-taint - - docker-service-kill - - pod-autoscaler - - node-io-stress - - pod-io-stress - - node-restart - - pod-dns-error - - pod-dns-spoof - - pod-cpu-hog-exec - - pod-memory-hog-exec - - pod-network-partition - - pod-http-latency - - pod-http-status-code - - pod-http-modify-header - - pod-http-modify-body - - pod-http-reset-peer - keywords: - - Kubernetes - - K8S - - Container - - Node - - Pod - - Disk - - IO - - Filesystem - - Network - - CPU - - Memory - - Stress - - Service - - DNS - - Scale - - Http - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/kubernetes/kubernetes - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/contents/#generic - icon: - - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/experiments.yaml diff --git a/charts/generic/generic.package.yaml b/charts/generic/generic.package.yaml deleted file mode 100644 index 3dd250d2c..000000000 --- a/charts/generic/generic.package.yaml +++ /dev/null @@ -1,89 +0,0 @@ -packageName: generic -experiments: - - name: pod-delete - CSV: pod-delete.chartserviceversion.yaml - desc: "pod-delete" - - name: container-kill - CSV: container-kill.chartserviceversion.yaml - desc: "container-kill" - - name: pod-network-loss - CSV: pod-network-loss.chartserviceversion.yaml - desc: "Pod-network-loss" - - name: pod-network-latency - CSV: pod-network-latency.chartserviceversion.yaml - desc: "pod-network-latency" - - name: pod-cpu-hog - CSV: pod-cpu-hog.chartserviceversion.yaml - desc: "pod-cpu-hog" - - name: node-cpu-hog - CSV: node-cpu-hog.chartserviceversion.yaml - desc: "node-cpu-hog" - - name: disk-fill - CSV: disk-fill.chartserviceversion.yaml - desc: "disk-fill" - - name: node-drain - CSV: node-drain.chartserviceversion.yaml - desc: "node-drain" - - name: pod-network-corruption - CSV: pod-network-corruption.chartserviceversion.yaml - desc: "pod-network-corruption" - - name: node-memory-hog - CSV: node-memory-hog.chartserviceversion.yaml - desc: "node-memory-hog" - - name: pod-memory-hog - CSV: pod-memory-hog.chartserviceversion.yaml - desc: "pod-memory-hog" - - name: kubelet-service-kill - CSV: kubelet-service-kill.chartserviceversion.yaml - desc: "kubelet-service-kill" - - name: pod-network-duplication - CSV: pod-network-duplication.chartserviceversion.yaml - desc: "pod-network-duplication" - - name: node-taint - CSV: node-taint.chartserviceversion.yaml - desc: "node-taint" - - name: docker-service-kill - CSV: docker-service-kill.chartserviceversion.yaml - desc: "docker-service-kill" - - name: pod-autoscaler - CSV: pod-autoscaler.chartserviceversion.yaml - desc: "pod-autoscaler" - - name: node-io-stress - CSV: node-io-stress.chartserviceversion.yaml - desc: "node-io-stress" - - name: pod-io-stress - CSV: pod-io-stress.chartserviceversion.yaml - desc: "pod-io-stress" - - name: node-restart - CSV: node-restart.chartserviceversion.yaml - desc: "node-restart" - - name: pod-dns-error - CSV: pod-dns-error.chartserviceversion.yaml - desc: "pod-dns-error" - - name: pod-dns-spoof - CSV: pod-dns-spoof.chartserviceversion.yaml - desc: "pod-dns-spoof" - - name: pod-cpu-hog-exec - CSV: pod-cpu-hog-exec.chartserviceversion.yaml - desc: "pod-cpu-hog-exec" - - name: pod-memory-hog-exec - CSV: pod-memory-hog-exec.chartserviceversion.yaml - desc: "pod-memory-hog-exec" - - name: pod-network-partition - CSV: pod-network-partition.chartserviceversion.yaml - desc: "pod-network-partition" - - name: pod-http-latency - CSV: pod-http-latency.chartserviceversion.yaml - desc: "pod-http-latency" - - name: pod-http-status-code - CSV: pod-http-status-code.chartserviceversion.yaml - desc: "pod-http-status-code" - - name: pod-http-modify-header - CSV: pod-http-modify-header.chartserviceversion.yaml - desc: "pod-http-modify-header" - - name: pod-http-modify-body - CSV: pod-http-modify-body.chartserviceversion.yaml - desc: "pod-http-modify-body" - - name: pod-http-reset-peer - CSV: pod-http-reset-peer.chartserviceversion.yaml - desc: "pod-http-reset-peer" diff --git a/charts/generic/icons/byoc-pod-delete.png b/charts/generic/icons/byoc-pod-delete.png deleted file mode 100644 index 16aa7b417698ef0d66f130fe9b3218f25fa6f356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di49p>(E{-7;jBn@e_YV#fIeuQ7g^T4ylTJ`q zg1CrpkM->C&R^mk&6B&2oo)RkuFzBEkb1r1%RWh_y3XRYCsm3X9RilQCUiLj z_*vStc(X7GDZIzMgm4+nQtI%y}<9r|`+Y zT%_}SrPbzor*AKk;m%QSYu}ae%Eew*{{7-33+fV9vF>`;r>@7Uq4P-xpGRLliI)saTo`SRHK8kKn4p_?~3b<&(HG;{*eC@e$L}X zE*Q3sZDq9 zZk*-ez2Q}Kg7(t$Q97DiqaGYvFB?@i{rjylw?kLHROqW;xx4ChEoYAqXX=7g^IYE9 zp9q|?qxAEPS5`Ki5->-=g6zuc1CtePYqm?DVD3%ekml44nCeq7bMe~#Iaf}&ElE>3 zCwT3qaq|?LTaUBZuO-fCE7-dw?Do59Pi}ZUTK%PBzUIv~EB^9l_xvs27T*w? zxnRka;K|I5+y4K$CBNg7YtxncIv@47Dqpp|a>;n>Z)QVo>A?G*?_G8H_mr8g+~ucx zp*KQlE$eG&;K1E=TH@^~o2&<(M>yIxz+x8`h%PK?oGhuHEP8?*r&e*)xG89G`#rr< zWZ5E??*3c(wZ*xJp7hZ%i{pII^a|OoU4-B3~ z-23`!wp+ZLfpco7Cezo7?YmB8tbHg`QtG;7j^W%zpTd(|ChAO`Ug^K{nfB+Sa{n01 X?;ErEthk>7%x?^yu6{1-oD!M - Drain the node where application pod is scheduled - keywords: - - Kubernetes - - K8S - - Node - - Drain - platforms: - - GKE - - AWS(KOPS) - - Packet(Kubeadm) - - Konvoy - - EKS - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: shubham chaudhary - email: shubham.chaudhary@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-drain - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-drain/ - - name: Video - url: https://www.youtube.com/watch?v=LQVCZUQ4-ok - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-drain/experiment.yaml diff --git a/charts/generic/node-drain/rbac-psp.yaml b/charts/generic/node-drain/rbac-psp.yaml deleted file mode 100644 index c1ddf8c34..000000000 --- a/charts/generic/node-drain/rbac-psp.yaml +++ /dev/null @@ -1,75 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-drain-sa - namespace: default - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-drain-sa - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-drain-sa - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-drain-sa -subjects: -- kind: ServiceAccount - name: node-drain-sa - namespace: default diff --git a/charts/generic/node-drain/rbac.yaml b/charts/generic/node-drain/rbac.yaml deleted file mode 100644 index e16cbd8e5..000000000 --- a/charts/generic/node-drain/rbac.yaml +++ /dev/null @@ -1,70 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-drain-sa - namespace: default - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-drain-sa - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-drain-sa - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-drain-sa -subjects: -- kind: ServiceAccount - name: node-drain-sa - namespace: default diff --git a/charts/generic/node-io-stress/experiment.yaml b/charts/generic/node-io-stress/experiment.yaml deleted file mode 100644 index eec95f033..000000000 --- a/charts/generic/node-io-stress/experiment.yaml +++ /dev/null @@ -1,111 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give IO disk stress on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-io-stress - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-io-stress - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' - - ## Number of core of CPU - - name: CPU - value: '1' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Total number of vm workers - - name: VM_WORKERS - value: '1' - - ## enter the comma separated target nodes name - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/node-io-stress/node-io-stress.chartserviceversion.yaml b/charts/generic/node-io-stress/node-io-stress.chartserviceversion.yaml deleted file mode 100644 index 2f990bccc..000000000 --- a/charts/generic/node-io-stress/node-io-stress.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-09-12T10:28:08Z - name: node-io-stress - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: node-io-stress - categoryDescription: | - This experiment causes disk stress on the Kubernetes node. The experiment aims to verify the resiliency of applications that share this disk resource for ephemeral or persistent storage purposes.. - - Disk stress on a particular node filesystem where the application deployment is available. - - The amount of disk stress can be either specifed as the size in percentage of the total free space on the file system or simply in Gigabytes(GB) - keywords: - - Kubernetes - - K8S - - Disk - - IO - - Filesystem - - Node - platforms: - - GKE - - EKS - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-io-stress - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-io-stress/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-io-stress/experiment.yaml diff --git a/charts/generic/node-io-stress/rbac-psp.yaml b/charts/generic/node-io-stress/rbac-psp.yaml deleted file mode 100644 index ab12913f8..000000000 --- a/charts/generic/node-io-stress/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-io-stress-sa - namespace: default - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-io-stress-sa - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-io-stress-sa - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-io-stress-sa -subjects: -- kind: ServiceAccount - name: node-io-stress-sa - namespace: default diff --git a/charts/generic/node-io-stress/rbac.yaml b/charts/generic/node-io-stress/rbac.yaml deleted file mode 100644 index a6858e7ee..000000000 --- a/charts/generic/node-io-stress/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-io-stress-sa - namespace: default - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-io-stress-sa - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-io-stress-sa - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-io-stress-sa -subjects: -- kind: ServiceAccount - name: node-io-stress-sa - namespace: default diff --git a/charts/generic/node-memory-hog/experiment.yaml b/charts/generic/node-memory-hog/experiment.yaml deleted file mode 100644 index 94912ade8..000000000 --- a/charts/generic/node-memory-hog/experiment.yaml +++ /dev/null @@ -1,102 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give a memory hog on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-memory-hog - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-memory-hog - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## Specify the size as percent of total node capacity Ex: '30' - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty - - name: MEMORY_CONSUMPTION_PERCENTAGE - value: '' - - ## Specify the amount of memory to be consumed in mebibytes - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty - - name: MEMORY_CONSUMPTION_MEBIBYTES - value: '' - - - name: NUMBER_OF_WORKERS - value: '1' - - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/node-memory-hog/node-memory-hog.chartserviceversion.yaml b/charts/generic/node-memory-hog/node-memory-hog.chartserviceversion.yaml deleted file mode 100644 index f6d7cf18c..000000000 --- a/charts/generic/node-memory-hog/node-memory-hog.chartserviceversion.yaml +++ /dev/null @@ -1,50 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-03-28T10:28:08Z - name: node-memory-hog - version: 0.1.5 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: node-memory-hog - categoryDescription: | - Kubernetes Node memory hog contains chaos to disrupt the state of Kubernetes resources. Experiments can inject a memory spike on a node where the application pod is scheduled. - - Memory hog on a particular node where the application deployment is available. - - After the test, the recovery should be manual for the application pod and node in case they are not in an appropriate state. - keywords: - - Kubernetes - - K8S - - Memory - - Node - platforms: - - GKE - - EKS - - AKS - - Kind - - Rancher - - OpenShift(OKD) - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-memory-hog - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-memory-hog/ - - name: Video - url: https://www.youtube.com/watch?v=ECxlWgQ8F5w - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-memory-hog/experiment.yaml diff --git a/charts/generic/node-memory-hog/rbac-psp.yaml b/charts/generic/node-memory-hog/rbac-psp.yaml deleted file mode 100644 index a6002c52a..000000000 --- a/charts/generic/node-memory-hog/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-memory-hog-sa - namespace: default - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-memory-hog-sa - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-memory-hog-sa - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-memory-hog-sa -subjects: -- kind: ServiceAccount - name: node-memory-hog-sa - namespace: default diff --git a/charts/generic/node-memory-hog/rbac.yaml b/charts/generic/node-memory-hog/rbac.yaml deleted file mode 100644 index 74cd3ebcc..000000000 --- a/charts/generic/node-memory-hog/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-memory-hog-sa - namespace: default - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-memory-hog-sa - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-memory-hog-sa - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-memory-hog-sa -subjects: -- kind: ServiceAccount - name: node-memory-hog-sa - namespace: default diff --git a/charts/generic/node-poweroff/engine.yaml b/charts/generic/node-poweroff/engine.yaml deleted file mode 100644 index 68ac3a7b5..000000000 --- a/charts/generic/node-poweroff/engine.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: node-poweroff-sa - experiments: - - name: node-poweroff - spec: - components: - # nodeSelector: - # # provide the node labels - # kubernetes.io/hostname: 'node02' - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - # ENTER THE USER TO BE USED FOR SSH AUTH - - name: SSH_USER - value: 'root' diff --git a/charts/generic/node-poweroff/node-poweroff.chartserviceversion.yaml b/charts/generic/node-poweroff/node-poweroff.chartserviceversion.yaml deleted file mode 100644 index 566ca14e2..000000000 --- a/charts/generic/node-poweroff/node-poweroff.chartserviceversion.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-01-28T10:28:08Z - name: node-poweroff - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: node-poweroff - categoryDescription: | - Node poweroff contains chaos experiment to poweroff a node via SSH. - keywords: - - Kubernetes - - K8S - - Poweroff - - Node - platforms: - - KVM/LibVirt based K8s - - EKS - maturity: alpha - chaosType: infra - maintainers: - - name: jordigilh - email: jordi.gil@gmail.com - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-restart - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-restart - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-poweroff/experiment.yaml diff --git a/charts/generic/node-poweroff/rbac-psp.yaml b/charts/generic/node-poweroff/rbac-psp.yaml deleted file mode 100644 index 93abac3af..000000000 --- a/charts/generic/node-poweroff/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-poweroff-sa - namespace: default - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-poweroff-sa - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-poweroff-sa - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-poweroff-sa -subjects: -- kind: ServiceAccount - name: node-poweroff-sa - namespace: default diff --git a/charts/generic/node-poweroff/rbac.yaml b/charts/generic/node-poweroff/rbac.yaml deleted file mode 100644 index 16898dfb8..000000000 --- a/charts/generic/node-poweroff/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-poweroff-sa - namespace: default - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-poweroff-sa - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-poweroff-sa - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-poweroff-sa -subjects: -- kind: ServiceAccount - name: node-poweroff-sa - namespace: default diff --git a/charts/generic/node-restart/engine.yaml b/charts/generic/node-restart/engine.yaml deleted file mode 100644 index 71e3d7047..000000000 --- a/charts/generic/node-restart/engine.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: node-restart-sa - experiments: - - name: node-restart - spec: - components: - # nodeSelector: - # # provide the node labels - # kubernetes.io/hostname: 'node02' - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - # ENTER THE USER TO BE USED FOR SSH AUTH - - name: SSH_USER - value: 'root' diff --git a/charts/generic/node-restart/node-restart.chartserviceversion.yaml b/charts/generic/node-restart/node-restart.chartserviceversion.yaml deleted file mode 100644 index 4eceec81b..000000000 --- a/charts/generic/node-restart/node-restart.chartserviceversion.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-01-28T10:28:08Z - name: node-restart - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: node-restart - categoryDescription: | - Node restart contains chaos to restart the node via SSH. - keywords: - - Kubernetes - - K8S - - Restart - - Node - platforms: - - KVM/LibVirt based K8s - - EKS - maturity: alpha - chaosType: infra - maintainers: - - name: machacekondra - email: machacek.ondra@gmail.com - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-restart - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-restart - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-restart/experiment.yaml diff --git a/charts/generic/node-restart/rbac-psp.yaml b/charts/generic/node-restart/rbac-psp.yaml deleted file mode 100644 index b21b60b01..000000000 --- a/charts/generic/node-restart/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-restart-sa - namespace: default - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-restart-sa - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-restart-sa - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-restart-sa -subjects: -- kind: ServiceAccount - name: node-restart-sa - namespace: default diff --git a/charts/generic/node-restart/rbac.yaml b/charts/generic/node-restart/rbac.yaml deleted file mode 100644 index 9b48dd1fc..000000000 --- a/charts/generic/node-restart/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-restart-sa - namespace: default - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-restart-sa - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-restart-sa - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-restart-sa -subjects: -- kind: ServiceAccount - name: node-restart-sa - namespace: default diff --git a/charts/generic/node-taint/experiment.yaml b/charts/generic/node-taint/experiment.yaml deleted file mode 100644 index 331349071..000000000 --- a/charts/generic/node-taint/experiment.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Taint the node where application pod is scheduled -kind: ChaosExperiment -metadata: - name: node-taint - labels: - name: node-taint - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch","update"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-taint - command: - - /bin/bash - env: - - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # set taint label & effect - # key=value:effect or key:effect - - name: TAINTS - value: '' - - labels: - name: node-taint - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/node-taint/node-taint.chartserviceversion.yaml b/charts/generic/node-taint/node-taint.chartserviceversion.yaml deleted file mode 100644 index 6e199735e..000000000 --- a/charts/generic/node-taint/node-taint.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-01-13T10:28:08Z - name: node-taint - version: 0.1.2 - annotations: - categories: Kubernetes - vendor: Mayadata - repository: https://github.com/litmuschaos/chaos-charts - support: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN -spec: - displayName: node-taint - categoryDescription: > - Taint the node where application pod is scheduled - keywords: - - Kubernetes - - K8S - - Node - - Taint - platforms: - - GKE - - AWS(KOPS) - - Packet(Kubeadm) - - Konvoy - - EKS - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: shubham chaudhary - email: shubham.chaudhary@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-taint - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-taint/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-taint/experiment.yaml diff --git a/charts/generic/node-taint/rbac-psp.yaml b/charts/generic/node-taint/rbac-psp.yaml deleted file mode 100644 index 1188ec741..000000000 --- a/charts/generic/node-taint/rbac-psp.yaml +++ /dev/null @@ -1,75 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-taint-sa - namespace: default - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-taint-sa - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch","update"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-taint-sa - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-taint-sa -subjects: -- kind: ServiceAccount - name: node-taint-sa - namespace: default diff --git a/charts/generic/node-taint/rbac.yaml b/charts/generic/node-taint/rbac.yaml deleted file mode 100644 index 8981a5548..000000000 --- a/charts/generic/node-taint/rbac.yaml +++ /dev/null @@ -1,70 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-taint-sa - namespace: default - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-taint-sa - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch","update"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-taint-sa - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-taint-sa -subjects: -- kind: ServiceAccount - name: node-taint-sa - namespace: default diff --git a/charts/generic/pod-autoscaler/experiment.yaml b/charts/generic/pod-autoscaler/experiment.yaml deleted file mode 100644 index 2ad305821..000000000 --- a/charts/generic/pod-autoscaler/experiment.yaml +++ /dev/null @@ -1,73 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Scale the application replicas and test the node autoscaling on cluster -kind: ChaosExperiment -metadata: - name: pod-autoscaler - labels: - name: pod-autoscaler - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # performs CRUD operations on the deployments and statefulsets - - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-autoscaler - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Number of replicas to scale - - name: REPLICA_COUNT - value: '5' - - labels: - name: pod-autoscaler - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml b/charts/generic/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml deleted file mode 100644 index a22bc4c44..000000000 --- a/charts/generic/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml +++ /dev/null @@ -1,47 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-08-08T10:28:08Z - name: pod-autoscaler - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-autoscaler - categoryDescription: | - The experiment aims to check the ability of nodes to accommodate the number of replicas a given application pod. - This experiment can be used for other scenarios as well, such as for checking the Node auto-scaling feature. For example, check if the pods are successfully rescheduled within a specified period in cases where the existing nodes are already running at the specified limits. - keywords: - - Kubernetes - - K8S - - Scale - - Pod - platforms: - - GKE - - EKS - - Minikube - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-autoscaler - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-autoscaler/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-autoscaler/experiment.yaml diff --git a/charts/generic/pod-autoscaler/rbac-psp.yaml b/charts/generic/pod-autoscaler/rbac-psp.yaml deleted file mode 100644 index 49a03acef..000000000 --- a/charts/generic/pod-autoscaler/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-autoscaler-sa - namespace: default - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pod-autoscaler-sa - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # performs CRUD operations on the deployments and statefulsets - - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pod-autoscaler-sa - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pod-autoscaler-sa -subjects: -- kind: ServiceAccount - name: pod-autoscaler-sa - namespace: default diff --git a/charts/generic/pod-autoscaler/rbac.yaml b/charts/generic/pod-autoscaler/rbac.yaml deleted file mode 100644 index 19114f159..000000000 --- a/charts/generic/pod-autoscaler/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-autoscaler-sa - namespace: default - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pod-autoscaler-sa - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # performs CRUD operations on the deployments and statefulsets - - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pod-autoscaler-sa - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pod-autoscaler-sa -subjects: -- kind: ServiceAccount - name: pod-autoscaler-sa - namespace: default diff --git a/charts/generic/pod-cpu-hog-exec/engine.yaml b/charts/generic/pod-cpu-hog-exec/engine.yaml deleted file mode 100644 index c7934107f..000000000 --- a/charts/generic/pod-cpu-hog-exec/engine.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-cpu-hog-exec-sa - experiments: - - name: pod-cpu-hog-exec - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - #number of cpu cores to be consumed - #verify the resources the app has been launched with - - name: CPU_CORES - value: '1' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - \ No newline at end of file diff --git a/charts/generic/pod-cpu-hog-exec/experiment.yaml b/charts/generic/pod-cpu-hog-exec/experiment.yaml deleted file mode 100644 index 744d7ecae..000000000 --- a/charts/generic/pod-cpu-hog-exec/experiment.yaml +++ /dev/null @@ -1,100 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog-exec - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog-exec - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/md5sum' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}')" - - - name: TARGET_PODS - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml b/charts/generic/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml deleted file mode 100644 index 65ef4e83c..000000000 --- a/charts/generic/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-16T10:28:08Z - name: pod-cpu-hog-exec - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-cpu-hog-exec - categoryDescription: | - pod-cpu-hog-exec contains chaos to consume CPU resouces of specified containers in Kubernetes pods. - - Causes high CPU resource consumption utilizing one or more cores by triggering md5sum commands - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - CPU - - Pod - - Exec - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - Kind - maturity: alpha - maintainers: - - name: ksatchit - email: karthik@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-cpu-hog-exec - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-cpu-hog-exec/ - - name: Video - url: https://www.youtube.com/watch?v=MBGSPmZKb2I - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-cpu-hog-exec/experiment.yaml diff --git a/charts/generic/pod-cpu-hog-exec/rbac-psp.yaml b/charts/generic/pod-cpu-hog-exec/rbac-psp.yaml deleted file mode 100644 index f1733be2d..000000000 --- a/charts/generic/pod-cpu-hog-exec/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-cpu-hog-exec-sa -subjects: -- kind: ServiceAccount - name: pod-cpu-hog-exec-sa - namespace: default diff --git a/charts/generic/pod-cpu-hog-exec/rbac.yaml b/charts/generic/pod-cpu-hog-exec/rbac.yaml deleted file mode 100644 index 9e801517a..000000000 --- a/charts/generic/pod-cpu-hog-exec/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-cpu-hog-exec-sa -subjects: -- kind: ServiceAccount - name: pod-cpu-hog-exec-sa - namespace: default diff --git a/charts/generic/pod-cpu-hog/engine.yaml b/charts/generic/pod-cpu-hog/engine.yaml deleted file mode 100644 index dfa9bbb3e..000000000 --- a/charts/generic/pod-cpu-hog/engine.yaml +++ /dev/null @@ -1,36 +0,0 @@ - -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-cpu-hog-sa - experiments: - - name: pod-cpu-hog - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: CPU_CORES - value: '1' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' diff --git a/charts/generic/pod-cpu-hog/experiment.yaml b/charts/generic/pod-cpu-hog/experiment.yaml deleted file mode 100644 index b37990381..000000000 --- a/charts/generic/pod-cpu-hog/experiment.yaml +++ /dev/null @@ -1,122 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml b/charts/generic/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml deleted file mode 100644 index 520611579..000000000 --- a/charts/generic/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-16T10:28:08Z - name: pod-cpu-hog - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-cpu-hog - categoryDescription: | - Pod-CPU-Hog contains chaos to consume CPU resouces of specified containers in Kubernetes pods. - - Causes CPU resource consumption on specified application containers using cgroups and litmus nsutil which consume CPU resources of the given target containers. - - It Can test the application's resilience to potential slowness/unavailability of some replicas due to high CPU load - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - CPU - - Pod - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - Kind - maturity: alpha - maintainers: - - name: ksatchit - email: karthik@chaosnative.com - - name: Udit Gaurav - email: udit@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-cpu-hog - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-cpu-hog/ - - name: Video - url: https://www.youtube.com/watch?v=MBGSPmZKb2I - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-cpu-hog/experiment.yaml diff --git a/charts/generic/pod-cpu-hog/rbac-psp.yaml b/charts/generic/pod-cpu-hog/rbac-psp.yaml deleted file mode 100644 index 895296880..000000000 --- a/charts/generic/pod-cpu-hog/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-cpu-hog-sa -subjects: -- kind: ServiceAccount - name: pod-cpu-hog-sa - namespace: default diff --git a/charts/generic/pod-cpu-hog/rbac.yaml b/charts/generic/pod-cpu-hog/rbac.yaml deleted file mode 100644 index f045de37e..000000000 --- a/charts/generic/pod-cpu-hog/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-cpu-hog-sa -subjects: -- kind: ServiceAccount - name: pod-cpu-hog-sa - namespace: default diff --git a/charts/generic/pod-delete/ansible/engine.yaml b/charts/generic/pod-delete/ansible/engine.yaml deleted file mode 100644 index 871f8f27a..000000000 --- a/charts/generic/pod-delete/ansible/engine.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: pod-delete-sa - experiments: - - name: pod-delete - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' diff --git a/charts/generic/pod-delete/ansible/experiment.yaml b/charts/generic/pod-delete/ansible/experiment.yaml deleted file mode 100644 index 86a289a43..000000000 --- a/charts/generic/pod-delete/ansible/experiment.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes a pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - name: pod-delete - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - - apiGroups: - - "" - - "apps" - - "batch" - - "litmuschaos.io" - resources: - - "deployments" - - "jobs" - - "pods" - - "pods/log" - - "events" - - "configmaps" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/generic/pod_delete/pod_delete_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the kill count - - name: KILL_COUNT - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - - name: LIB_IMAGE - value: 'litmuschaos/pod-delete-helper:latest' - - - name: LIB - value: 'litmus' - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-delete/ansible/powerfulseal_rbac.yaml b/charts/generic/pod-delete/ansible/powerfulseal_rbac.yaml deleted file mode 100644 index f53e37b90..000000000 --- a/charts/generic/pod-delete/ansible/powerfulseal_rbac.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pod-delete-sa - labels: - name: pod-delete-sa -rules: -- apiGroups: ["","litmuschaos.io","batch","apps"] - resources: ["pods","deployments","pods/log","events","jobs","configmaps","chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pod-delete-sa - labels: - name: pod-delete-sa -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/charts/generic/pod-delete/ansible/rbac.yaml b/charts/generic/pod-delete/ansible/rbac.yaml deleted file mode 100644 index 6a1535b2f..000000000 --- a/charts/generic/pod-delete/ansible/rbac.yaml +++ /dev/null @@ -1,40 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","litmuschaos.io","batch","apps"] - resources: ["pods","deployments","pods/log","events","jobs","chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/charts/generic/pod-delete/engine.yaml b/charts/generic/pod-delete/engine.yaml deleted file mode 100644 index c211c7320..000000000 --- a/charts/generic/pod-delete/engine.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - # It can be active/stop - engineState: 'active' - chaosServiceAccount: pod-delete-sa - experiments: - - name: pod-delete - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/charts/generic/pod-delete/engine_nginx_getstarted.yaml b/charts/generic/pod-delete/engine_nginx_getstarted.yaml deleted file mode 100644 index 043113fc4..000000000 --- a/charts/generic/pod-delete/engine_nginx_getstarted.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: nginx -spec: - appinfo: - appns: 'nginx' - applabel: 'app=nginx' - appkind: 'deployment' - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: pod-delete-sa - # It can be delete/retain - jobCleanUpPolicy: 'delete' - experiments: - - name: pod-delete - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/charts/generic/pod-delete/experiment.yaml b/charts/generic/pod-delete/experiment.yaml deleted file mode 100644 index c82ab8493..000000000 --- a/charts/generic/pod-delete/experiment.yaml +++ /dev/null @@ -1,103 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes a pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - name: pod-delete - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-delete - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-delete/pod-delete.chartserviceversion.yaml b/charts/generic/pod-delete/pod-delete.chartserviceversion.yaml deleted file mode 100644 index b5e42b607..000000000 --- a/charts/generic/pod-delete/pod-delete.chartserviceversion.yaml +++ /dev/null @@ -1,52 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-15T10:28:08Z - name: pod-delete - version: 0.1.13 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-delete - categoryDescription: | - Pod delete contains chaos to disrupt state of kubernetes resources. Experiments can inject random pod delete failures against specified application. - - Causes (forced/graceful) pod failure of random replicas of an application deployment. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. - - keywords: - - Kubernetes - - K8S - - Pod - platforms: - - GKE - - Konvoy - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - Kind - - Rancher - - OpenShift(OKD) - maturity: alpha - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-delete - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-delete/ - - name: Video - url: https://www.youtube.com/watch?v=X3JvY_58V9A - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-delete/experiment.yaml diff --git a/charts/generic/pod-delete/python/experiment.yaml b/charts/generic/pod-delete/python/experiment.yaml deleted file mode 100644 index d80a29daf..000000000 --- a/charts/generic/pod-delete/python/experiment.yaml +++ /dev/null @@ -1,90 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes a pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - name: pod-delete - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - - apiGroups: - - "" - - "apps" - - "apps.openshift.io" - - "argoproj.io" - - "batch" - - "litmuschaos.io" - resources: - - "deployments" - - "jobs" - - "pods" - - "pods/log" - - "replicationcontrollers" - - "deployments" - - "statefulsets" - - "daemonsets" - - "replicasets" - - "deploymentconfigs" - - "rollouts" - - "pods/exec" - - "events" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - - "deletecollection" - image: "litmuschaos/py-runner:latest" - imagePullPolicy: Always - args: - - -c - - python3 -u experiment - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB - value: 'litmus' - - - name: TARGET_PODS - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-delete/python/rbac.yaml b/charts/generic/pod-delete/python/rbac.yaml deleted file mode 100644 index 350173d42..000000000 --- a/charts/generic/pod-delete/python/rbac.yaml +++ /dev/null @@ -1,58 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: [""] - resources: ["pods","events"] - verbs: ["create","list","get","patch","update","delete","deletecollection"] -- apiGroups: [""] - resources: ["pods/exec","pods/log","replicationcontrollers"] - verbs: ["create","list","get"] -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] -- apiGroups: ["apps"] - resources: ["deployments","statefulsets","daemonsets","replicasets"] - verbs: ["list","get"] -- apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] -- apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] -- apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/charts/generic/pod-delete/rbac-psp.yaml b/charts/generic/pod-delete/rbac-psp.yaml deleted file mode 100644 index e494e6bf7..000000000 --- a/charts/generic/pod-delete/rbac-psp.yaml +++ /dev/null @@ -1,86 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/charts/generic/pod-delete/rbac.yaml b/charts/generic/pod-delete/rbac.yaml deleted file mode 100644 index a3f4f5c1e..000000000 --- a/charts/generic/pod-delete/rbac.yaml +++ /dev/null @@ -1,81 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/charts/generic/pod-delete/rbac_nginx_getstarted.yaml b/charts/generic/pod-delete/rbac_nginx_getstarted.yaml deleted file mode 100644 index 5ff2c8348..000000000 --- a/charts/generic/pod-delete/rbac_nginx_getstarted.yaml +++ /dev/null @@ -1,77 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: nginx - labels: - name: pod-delete-sa ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: nginx - labels: - name: pod-delete-sa -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: nginx - labels: - name: pod-delete-sa -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: nginx \ No newline at end of file diff --git a/charts/generic/pod-dns-error/pod-dns-error.chartserviceversion.yaml b/charts/generic/pod-dns-error/pod-dns-error.chartserviceversion.yaml deleted file mode 100644 index 4ece88ed1..000000000 --- a/charts/generic/pod-dns-error/pod-dns-error.chartserviceversion.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-dns-error - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-dns-error - categoryDescription: > - Pod DNS Error injects dns failure/error in target pod containers - keywords: - - "Pod" - - K8S - - "Kubernetes" - - "DNS" - maturity: alpha - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - maintainers: - - name: gdsoumya - email: gdsoumya@chaosnative.com - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-dns-error - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/getstarted/ - - name: Video - url: - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-dns-error/experiment.yaml diff --git a/charts/generic/pod-dns-error/rbac-psp.yaml b/charts/generic/pod-dns-error/rbac-psp.yaml deleted file mode 100644 index 1e8bbfd96..000000000 --- a/charts/generic/pod-dns-error/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-dns-error-sa -subjects: - - kind: ServiceAccount - name: pod-dns-error-sa - namespace: default diff --git a/charts/generic/pod-dns-error/rbac.yaml b/charts/generic/pod-dns-error/rbac.yaml deleted file mode 100644 index 84dc89436..000000000 --- a/charts/generic/pod-dns-error/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-dns-error-sa -subjects: - - kind: ServiceAccount - name: pod-dns-error-sa - namespace: default diff --git a/charts/generic/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml b/charts/generic/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml deleted file mode 100644 index b179d3026..000000000 --- a/charts/generic/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-dns-spoof - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-dns-spoof - categoryDescription: > - Pod DNS Spoof can spoof particular dns requests in target pod container to desired target hostnames - keywords: - - "Pod" - - K8S - - "Kubernetes" - - "DNS" - maturity: alpha - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - maintainers: - - name: gdsoumya - email: gdsoumya@chaosnative.com - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-dns-spoof - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/getstarted/ - - name: Video - url: - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-dns-spoof/experiment.yaml diff --git a/charts/generic/pod-dns-spoof/rbac-psp.yaml b/charts/generic/pod-dns-spoof/rbac-psp.yaml deleted file mode 100644 index 106c044fc..000000000 --- a/charts/generic/pod-dns-spoof/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-dns-spoof-sa -subjects: - - kind: ServiceAccount - name: pod-dns-spoof-sa - namespace: default diff --git a/charts/generic/pod-dns-spoof/rbac.yaml b/charts/generic/pod-dns-spoof/rbac.yaml deleted file mode 100644 index 6d2c76d35..000000000 --- a/charts/generic/pod-dns-spoof/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-dns-spoof-sa -subjects: - - kind: ServiceAccount - name: pod-dns-spoof-sa - namespace: default diff --git a/charts/generic/pod-http-latency/engine.yaml b/charts/generic/pod-http-latency/engine.yaml deleted file mode 100644 index 83f891eb2..000000000 --- a/charts/generic/pod-http-latency/engine.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-http-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-http-latency-sa - experiments: - - name: pod-http-latency - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # set latency value for the chaos - - name: LATENCY - value: '2000' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # provide the name of container runtime - # it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/charts/generic/pod-http-latency/experiment.yaml b/charts/generic/pod-http-latency/experiment.yaml deleted file mode 100644 index 0a4fb57d6..000000000 --- a/charts/generic/pod-http-latency/experiment.yaml +++ /dev/null @@ -1,131 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects http request latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-http-latency - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # set latency value for the chaos - - name: LATENCY - value: '2000' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-http-latency/pod-http-latency.chartserviceversion.yaml b/charts/generic/pod-http-latency/pod-http-latency.chartserviceversion.yaml deleted file mode 100644 index d39adc410..000000000 --- a/charts/generic/pod-http-latency/pod-http-latency.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-05-21T10:28:08Z - name: pod-http-latency - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-http-latency - categoryDescription: | - Pod-http-latency contains chaos to disrupt http requests of kubernetes pods. This experiment can inject random http response delays on the app replica pods. - - Causes flaky access to application replica by injecting http response delay using toxiproxy. - - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - HTTP - - Pod - - Latency - platforms: - - GKE - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-latency - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-latency/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-latency/experiment.yaml diff --git a/charts/generic/pod-http-latency/rbac-psp.yaml b/charts/generic/pod-http-latency/rbac-psp.yaml deleted file mode 100644 index 3b472ee42..000000000 --- a/charts/generic/pod-http-latency/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-latency-sa -subjects: -- kind: ServiceAccount - name: pod-http-latency-sa - namespace: default diff --git a/charts/generic/pod-http-latency/rbac.yaml b/charts/generic/pod-http-latency/rbac.yaml deleted file mode 100644 index 6c46d8843..000000000 --- a/charts/generic/pod-http-latency/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-latency-sa -subjects: -- kind: ServiceAccount - name: pod-http-latency-sa - namespace: default diff --git a/charts/generic/pod-http-modify-body/engine.yaml b/charts/generic/pod-http-modify-body/engine.yaml deleted file mode 100644 index fa5305de4..000000000 --- a/charts/generic/pod-http-modify-body/engine.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-http-modify-body-sa - experiments: - - name: pod-http-modify-body - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # provide the body string to overwrite the response body - - name: RESPONSE_BODY - value: '' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # provide the name of container runtime - # it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - \ No newline at end of file diff --git a/charts/generic/pod-http-modify-body/experiment.yaml b/charts/generic/pod-http-modify-body/experiment.yaml deleted file mode 100644 index 81ec27ed7..000000000 --- a/charts/generic/pod-http-modify-body/experiment.yaml +++ /dev/null @@ -1,131 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects the chaos inside the pod which modifies the body of the response from the provided application server to the body string provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-modify-body - labels: - name: pod-http-modify-body - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-modify-body - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the body string to overwrite the response body - # if no value is provided, response will be an empty body. - - name: RESPONSE_BODY - value: '' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-modify-body - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml b/charts/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml deleted file mode 100644 index 1a663901a..000000000 --- a/charts/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-http-modify-body - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-http-modify-body - categoryDescription: > - it injects http modify body chaos inside the pod which modifies the body of the response from the provided application server to the body string provided by user and reverts after specified duration - keywords: - - "pods" - - "kubernetes" - - "generic" - - "exec" - - "http" - - "response body" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-modify-body - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-modify-body/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-modify-body/experiment.yaml \ No newline at end of file diff --git a/charts/generic/pod-http-modify-body/rbac-psp.yaml b/charts/generic/pod-http-modify-body/rbac-psp.yaml deleted file mode 100644 index 2869bded7..000000000 --- a/charts/generic/pod-http-modify-body/rbac-psp.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-modify-body-sa -subjects: -- kind: ServiceAccount - name: pod-http-modify-body-sa - namespace: default diff --git a/charts/generic/pod-http-modify-body/rbac.yaml b/charts/generic/pod-http-modify-body/rbac.yaml deleted file mode 100644 index 584be6242..000000000 --- a/charts/generic/pod-http-modify-body/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-modify-body-sa -subjects: -- kind: ServiceAccount - name: pod-http-modify-body-sa - namespace: default diff --git a/charts/generic/pod-http-modify-header/engine.yaml b/charts/generic/pod-http-modify-header/engine.yaml deleted file mode 100644 index 84ee27810..000000000 --- a/charts/generic/pod-http-modify-header/engine.yaml +++ /dev/null @@ -1,47 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-http-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-http-modify-header-sa - experiments: - - name: pod-http-modify-header - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} - # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} - - name: HEADERS_MAP - value: '{}' - - # whether to modify response headers or request headers. Accepted values: request, response - - name: HEADER_MODE - value: 'response' - - # provide the name of container runtime - # it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/charts/generic/pod-http-modify-header/experiment.yaml b/charts/generic/pod-http-modify-header/experiment.yaml deleted file mode 100644 index 8a9deca84..000000000 --- a/charts/generic/pod-http-modify-header/experiment.yaml +++ /dev/null @@ -1,136 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects the chaos inside the pod which modifies the header of the request/response from the provided application server to the headers provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-modify-header - labels: - name: pod-http-modify-header - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-modify-header - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} - # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} - - name: HEADERS_MAP - value: '{}' - - # whether to modify response headers or request headers. Accepted values: request, response - - name: HEADER_MODE - value: 'response' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-modify-header - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml b/charts/generic/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml deleted file mode 100644 index c34601a60..000000000 --- a/charts/generic/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-07-13T2:14:08Z - name: pod-http-modify-header - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-http-modify-header - categoryDescription: | - Pod-http-modify-header contains chaos to disrupt http requests of kubernetes pods. This experiment can modify headers of incoming requests or the response from the service targetted. - - Causes modification of request/response headers of the HTTP request. - - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - HTTP - - Pod - - Headers - platforms: - - GKE - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-modify-header - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-modify-header/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-modify-header/experiment.yaml diff --git a/charts/generic/pod-http-modify-header/rbac-psp.yaml b/charts/generic/pod-http-modify-header/rbac-psp.yaml deleted file mode 100644 index fb3561755..000000000 --- a/charts/generic/pod-http-modify-header/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-modify-header-sa -subjects: -- kind: ServiceAccount - name: pod-http-modify-header-sa - namespace: default diff --git a/charts/generic/pod-http-modify-header/rbac.yaml b/charts/generic/pod-http-modify-header/rbac.yaml deleted file mode 100644 index 5f9208fea..000000000 --- a/charts/generic/pod-http-modify-header/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-modify-header-sa -subjects: -- kind: ServiceAccount - name: pod-http-modify-header-sa - namespace: default diff --git a/charts/generic/pod-http-reset-peer/experiment.yaml b/charts/generic/pod-http-reset-peer/experiment.yaml deleted file mode 100644 index f89099cc0..000000000 --- a/charts/generic/pod-http-reset-peer/experiment.yaml +++ /dev/null @@ -1,130 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - it injects chaos into the pod which stops outgoing http requests by resetting the TCP connection and then reverts back to the original state after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-reset-peer - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-reset-peer - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # reset timeout specifies after how much duration to reset the connection - - name: RESET_TIMEOUT - value: '0' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml b/charts/generic/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml deleted file mode 100644 index 5758eae83..000000000 --- a/charts/generic/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-http-reset-peer - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-http-reset-peer - categoryDescription: > - it injects http reset into the pod which stops outgoing http requests by resetting the TCP connection and then reverts back to the original state after the specified duration - keywords: - - "pods" - - "kubernetes" - - "generic" - - "exec" - - "http" - - "loss" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-reset-peer - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-reset-peer/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-reset-peer/experiment.yaml \ No newline at end of file diff --git a/charts/generic/pod-http-reset-peer/rbac-psp.yaml b/charts/generic/pod-http-reset-peer/rbac-psp.yaml deleted file mode 100644 index 5c22b38c3..000000000 --- a/charts/generic/pod-http-reset-peer/rbac-psp.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-reset-peer-sa -subjects: -- kind: ServiceAccount - name: pod-http-reset-peer-sa - namespace: default diff --git a/charts/generic/pod-http-reset-peer/rbac.yaml b/charts/generic/pod-http-reset-peer/rbac.yaml deleted file mode 100644 index 0c71681e1..000000000 --- a/charts/generic/pod-http-reset-peer/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-reset-peer-sa -subjects: -- kind: ServiceAccount - name: pod-http-reset-peer-sa - namespace: default diff --git a/charts/generic/pod-http-status-code/experiment.yaml b/charts/generic/pod-http-status-code/experiment.yaml deleted file mode 100644 index 7162037be..000000000 --- a/charts/generic/pod-http-status-code/experiment.yaml +++ /dev/null @@ -1,137 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects chaos inside the pod which modifies the status code of the response from the provided application server to desired status code provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-status-code - labels: - name: pod-http-status-code - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-status-code - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # modified status code for the http response - # if no value is provided, a random status code from the supported code list will selected - # if an invalid status code is provided, the experiment will fail - # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504] - - name: STATUS_CODE - value: '' - - # whether to modify the body as per the status code provided - - name: "MODIFY_RESPONSE_BODY" - value: "true" - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-status-code - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml b/charts/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml deleted file mode 100644 index af809c932..000000000 --- a/charts/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml +++ /dev/null @@ -1,40 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-http-status-code - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-http-status-code - categoryDescription: > - it injects http status code chaos inside the pod which modifies the status code of the response from the provided application server to desired status code provided by user and reverts after specified duration - keywords: - - "pods" - - "kubernetes" - - "generic" - - "exec" - - "http" - - "status code" - - "response code" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-status-code - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-status-code/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-status-code/experiment.yaml \ No newline at end of file diff --git a/charts/generic/pod-http-status-code/rbac-psp.yaml b/charts/generic/pod-http-status-code/rbac-psp.yaml deleted file mode 100644 index 8318ccd5f..000000000 --- a/charts/generic/pod-http-status-code/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-status-code-sa -subjects: -- kind: ServiceAccount - name: pod-http-status-code-sa - namespace: default diff --git a/charts/generic/pod-http-status-code/rbac.yaml b/charts/generic/pod-http-status-code/rbac.yaml deleted file mode 100644 index 5f117f5f0..000000000 --- a/charts/generic/pod-http-status-code/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-status-code-sa -subjects: -- kind: ServiceAccount - name: pod-http-status-code-sa - namespace: default diff --git a/charts/generic/pod-io-stress/pod-io-stress.chartserviceversion.yaml b/charts/generic/pod-io-stress/pod-io-stress.chartserviceversion.yaml deleted file mode 100644 index 8f7a0102e..000000000 --- a/charts/generic/pod-io-stress/pod-io-stress.chartserviceversion.yaml +++ /dev/null @@ -1,50 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-09-13T10:28:08Z - name: pod-io-stress - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-io-stress - categoryDescription: | - This experiment causes disk stress on the application pod. The experiment aims to verify the resiliency of applications that share this disk resource for ephemeral or persistent storage purposes. - - Consumes the disk available by executing filesystem IO stress as available memory or by providing the value in GB - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - Memory - - Pod - - IO - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - maturity: alpha - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-io-stress - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-io-stress/ - - name: Video - url: - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-io-stress/experiment.yaml diff --git a/charts/generic/pod-io-stress/rbac-psp.yaml b/charts/generic/pod-io-stress/rbac-psp.yaml deleted file mode 100644 index 755512a5a..000000000 --- a/charts/generic/pod-io-stress/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-io-stress-sa -subjects: -- kind: ServiceAccount - name: pod-io-stress-sa - namespace: default diff --git a/charts/generic/pod-io-stress/rbac.yaml b/charts/generic/pod-io-stress/rbac.yaml deleted file mode 100644 index e80025d6b..000000000 --- a/charts/generic/pod-io-stress/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-io-stress-sa -subjects: -- kind: ServiceAccount - name: pod-io-stress-sa - namespace: default diff --git a/charts/generic/pod-memory-hog-exec/engine.yaml b/charts/generic/pod-memory-hog-exec/engine.yaml deleted file mode 100644 index 5bc6b0dde..000000000 --- a/charts/generic/pod-memory-hog-exec/engine.yaml +++ /dev/null @@ -1,29 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-memory-hog-exec-sa - experiments: - - name: pod-memory-hog-exec - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - \ No newline at end of file diff --git a/charts/generic/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml b/charts/generic/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml deleted file mode 100644 index 2e3769971..000000000 --- a/charts/generic/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-04-10T10:28:08Z - name: pod-memory-hog-exec - version: 0.1.4 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-memory-hog-exec - categoryDescription: | - pod-memory-hog-exec contains chaos to consume Memory resouces of specified containers in Kubernetes pods. - - Consumes the memory specified by executing a dd command against special files /dev/zero(input) and /dev/null(output) - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - Memory - - Pod - - Exec - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - OpenShift(OKD) - maturity: alpha - maintainers: - - name: Udit Gaurav - email: udit@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-memory-hog-exec - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-memory-hog-exec/ - - name: Video - url: https://www.youtube.com/watch?v=HuAXg8W5Tzo - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-memory-hog-exec/experiment.yaml diff --git a/charts/generic/pod-memory-hog-exec/rbac-psp.yaml b/charts/generic/pod-memory-hog-exec/rbac-psp.yaml deleted file mode 100644 index eb39cec16..000000000 --- a/charts/generic/pod-memory-hog-exec/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-memory-hog-exec-sa -subjects: -- kind: ServiceAccount - name: pod-memory-hog-exec-sa - namespace: default diff --git a/charts/generic/pod-memory-hog-exec/rbac.yaml b/charts/generic/pod-memory-hog-exec/rbac.yaml deleted file mode 100644 index d4da0caaf..000000000 --- a/charts/generic/pod-memory-hog-exec/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-memory-hog-exec-sa -subjects: -- kind: ServiceAccount - name: pod-memory-hog-exec-sa - namespace: default diff --git a/charts/generic/pod-memory-hog/engine.yaml b/charts/generic/pod-memory-hog/engine.yaml deleted file mode 100644 index d039deedb..000000000 --- a/charts/generic/pod-memory-hog/engine.yaml +++ /dev/null @@ -1,36 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-memory-hog-sa - experiments: - - name: pod-memory-hog - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' diff --git a/charts/generic/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml b/charts/generic/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml deleted file mode 100644 index 958f9e46a..000000000 --- a/charts/generic/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-16T10:28:08Z - name: pod-memory-hog - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-memory-hog - categoryDescription: | - Pod-Memory-Hog contains chaos to consume memory resouces of specified containers in Kubernetes pods. - - Causes memory resource consumption on specified application containers using cgroups and litmus nsutil that consume memory resources of the given target containers. - - It Can test the application's resilience to potential slowness/unavailability of some replicas due to high memory load - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - Memory - - Pod - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - OpenShift(OKD) - maturity: alpha - maintainers: - - name: Udit Gaurav - email: udit@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-memory-hog - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-memory-hog/ - - name: Video - url: https://www.youtube.com/watch?v=HuAXg8W5Tzo - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-memory-hog/experiment.yaml diff --git a/charts/generic/pod-memory-hog/rbac-psp.yaml b/charts/generic/pod-memory-hog/rbac-psp.yaml deleted file mode 100644 index 3ad222daa..000000000 --- a/charts/generic/pod-memory-hog/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-memory-hog-sa -subjects: -- kind: ServiceAccount - name: pod-memory-hog-sa - namespace: default diff --git a/charts/generic/pod-memory-hog/rbac.yaml b/charts/generic/pod-memory-hog/rbac.yaml deleted file mode 100644 index 61445c95d..000000000 --- a/charts/generic/pod-memory-hog/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-memory-hog-sa -subjects: -- kind: ServiceAccount - name: pod-memory-hog-sa - namespace: default diff --git a/charts/generic/pod-network-corruption/experiment.yaml b/charts/generic/pod-network-corruption/experiment.yaml deleted file mode 100644 index af626a1a2..000000000 --- a/charts/generic/pod-network-corruption/experiment.yaml +++ /dev/null @@ -1,134 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Inject network packet corruption into application pod -kind: ChaosExperiment -metadata: - name: pod-network-corruption - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-corruption - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml b/charts/generic/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml deleted file mode 100644 index c4991a916..000000000 --- a/charts/generic/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-01-07T10:28:08Z - name: pod-network-corruption - version: 0.1.10 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-corruption - categoryDescription: | - Pod-network-corruption contains chaos to disrupt network connectivity to kubernetes pods. Experiments can inject percentage packet corruption on the app replica pods. - - Causes packet corruption of application replica by injecting packet corruption using pumba. - - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. - keywords: - - Kubernetes - - K8S - - Network - - Pod - - Corruption - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - maturity: alpha - maintainers: - - name: LaumiH - email: laura-marie.henning@stud.h-da.de - minKubeVersion: 1.12.0 - provider: - name: Laura-Marie Henning - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-corruption - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-corruption/ - - name: Video - url: https://www.youtube.com/watch?v=kSiLrIaILvs - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-corruption/experiment.yaml diff --git a/charts/generic/pod-network-corruption/rbac-psp.yaml b/charts/generic/pod-network-corruption/rbac-psp.yaml deleted file mode 100644 index 685855b09..000000000 --- a/charts/generic/pod-network-corruption/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-corruption-sa -subjects: -- kind: ServiceAccount - name: pod-network-corruption-sa - namespace: default diff --git a/charts/generic/pod-network-corruption/rbac.yaml b/charts/generic/pod-network-corruption/rbac.yaml deleted file mode 100644 index f0319df5f..000000000 --- a/charts/generic/pod-network-corruption/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-corruption-sa -subjects: -- kind: ServiceAccount - name: pod-network-corruption-sa - namespace: default diff --git a/charts/generic/pod-network-duplication/experiment.yaml b/charts/generic/pod-network-duplication/experiment.yaml deleted file mode 100644 index 21627d0e1..000000000 --- a/charts/generic/pod-network-duplication/experiment.yaml +++ /dev/null @@ -1,131 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet duplication on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-duplication - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-duplication - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: RAMP_TIME - value: '' - - - name: TARGET_CONTAINER - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE - value: '100' # in percentage - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml b/charts/generic/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml deleted file mode 100644 index cec3785cd..000000000 --- a/charts/generic/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-07-01T10:28:08Z - name: pod-network-duplication - version: 0.1.2 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-duplication - categoryDescription: | - Pod-network-duplication contains chaos to disrupt network connectivity to kubernetes pods. Experiments can inject percentage packet duplication on the app replica pods. - - Causes lossy access to application replica by injecting packet duplication using pumba. - - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. - keywords: - - Kubernetes - - K8S - - Network - - Pod - - Duplication - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maturity: alpha - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-duplication - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-duplication/ - - name: Video - url: - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-duplication/experiment.yaml diff --git a/charts/generic/pod-network-duplication/rbac-psp.yaml b/charts/generic/pod-network-duplication/rbac-psp.yaml deleted file mode 100644 index 01acf1a21..000000000 --- a/charts/generic/pod-network-duplication/rbac-psp.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-duplication-sa -subjects: -- kind: ServiceAccount - name: pod-network-duplication-sa - namespace: default diff --git a/charts/generic/pod-network-duplication/rbac.yaml b/charts/generic/pod-network-duplication/rbac.yaml deleted file mode 100644 index d225750b7..000000000 --- a/charts/generic/pod-network-duplication/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-duplication-sa -subjects: -- kind: ServiceAccount - name: pod-network-duplication-sa - namespace: default diff --git a/charts/generic/pod-network-latency/engine.yaml b/charts/generic/pod-network-latency/engine.yaml deleted file mode 100644 index aa4396c1d..000000000 --- a/charts/generic/pod-network-latency/engine.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-network-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-network-latency-sa - experiments: - - name: pod-network-latency - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: NETWORK_LATENCY - value: '2000' - - - name: JITTER - value: '0' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/charts/generic/pod-network-latency/experiment.yaml b/charts/generic/pod-network-latency/experiment.yaml deleted file mode 100644 index 1159c203c..000000000 --- a/charts/generic/pod-network-latency/experiment.yaml +++ /dev/null @@ -1,137 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-latency - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: NETWORK_INTERFACE - value: 'eth0' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_LATENCY - value: '2000' #in ms - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: JITTER - value: '0' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-network-latency/pod-network-latency.chartserviceversion.yaml b/charts/generic/pod-network-latency/pod-network-latency.chartserviceversion.yaml deleted file mode 100644 index 8e40c7a8f..000000000 --- a/charts/generic/pod-network-latency/pod-network-latency.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-11T10:28:08Z - name: pod-network-latency - version: 0.1.13 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-latency - categoryDescription: | - Pod-network-latency contains chaos to disrupt network connectivity of kubernetes pods. Experiments can inject random network delays on the app replica pods. - - Causes flaky access to application replica by injecting network delay using pumba. - - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - Network - - Pod - - Latency - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maturity: alpha - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-latency - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-latency/ - - name: Video - url: https://www.youtube.com/watch?v=QsQZyXVCcCw - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-latency/experiment.yaml diff --git a/charts/generic/pod-network-latency/rbac-psp.yaml b/charts/generic/pod-network-latency/rbac-psp.yaml deleted file mode 100644 index ee147c70a..000000000 --- a/charts/generic/pod-network-latency/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-latency-sa -subjects: -- kind: ServiceAccount - name: pod-network-latency-sa - namespace: default diff --git a/charts/generic/pod-network-latency/rbac.yaml b/charts/generic/pod-network-latency/rbac.yaml deleted file mode 100644 index 4b65e6ba8..000000000 --- a/charts/generic/pod-network-latency/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-latency-sa -subjects: -- kind: ServiceAccount - name: pod-network-latency-sa - namespace: default diff --git a/charts/generic/pod-network-loss/experiment.yaml b/charts/generic/pod-network-loss/experiment.yaml deleted file mode 100644 index aefe99edd..000000000 --- a/charts/generic/pod-network-loss/experiment.yaml +++ /dev/null @@ -1,134 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-loss - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-loss - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-network-loss/pod-network-loss.chartserviceversion.yaml b/charts/generic/pod-network-loss/pod-network-loss.chartserviceversion.yaml deleted file mode 100644 index 71ae9719d..000000000 --- a/charts/generic/pod-network-loss/pod-network-loss.chartserviceversion.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-11T10:28:08Z - name: pod-network-loss - version: 0.1.12 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-loss - categoryDescription: | - Pod-network-loss contains chaos to disrupt network connectivity to kubernetes pods. Experiments can inject percentage packet loss on the app replica pods. - - Causes loss of access to application replica by injecting packet loss using pumba. - - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. - keywords: - - Kubernetes - - K8S - - Network - - Pod - - Loss - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - maturity: alpha - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-loss - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-loss/ - - name: Video - url: https://www.youtube.com/watch?v=jqvYy-nWc_I - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-loss/experiment.yaml diff --git a/charts/generic/pod-network-loss/rbac-psp.yaml b/charts/generic/pod-network-loss/rbac-psp.yaml deleted file mode 100644 index d3af1b80d..000000000 --- a/charts/generic/pod-network-loss/rbac-psp.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-loss-sa -subjects: -- kind: ServiceAccount - name: pod-network-loss-sa - namespace: default diff --git a/charts/generic/pod-network-loss/rbac.yaml b/charts/generic/pod-network-loss/rbac.yaml deleted file mode 100644 index caa091822..000000000 --- a/charts/generic/pod-network-loss/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-loss-sa -subjects: -- kind: ServiceAccount - name: pod-network-loss-sa - namespace: default diff --git a/charts/generic/pod-network-partition/experiment.yaml b/charts/generic/pod-network-partition/experiment.yaml deleted file mode 100644 index 06ee41e51..000000000 --- a/charts/generic/pod-network-partition/experiment.yaml +++ /dev/null @@ -1,96 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects 100% network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-partition - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # performs CRUD operations on the network policies - - apiGroups: ["networking.k8s.io"] - resources: ["networkpolicies"] - verbs: ["create","delete","list","get"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-partition - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide network policy type - # support ingress, egress, all values - - name: POLICY_TYPES - value: 'all' - - # provide labels of the destination pods - - name: POD_SELECTOR - value: '' - - # provide labels the destination namespaces - - name: NAMESPACE_SELECTOR - value: '' - - # provide comma separated ports - - name: PORTS - value: '' - - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/generic/pod-network-partition/pod-network-partition.chartserviceversion.yaml b/charts/generic/pod-network-partition/pod-network-partition.chartserviceversion.yaml deleted file mode 100644 index 89b3957e0..000000000 --- a/charts/generic/pod-network-partition/pod-network-partition.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-08-25T10:28:08Z - name: pod-network-partition - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-partition - categoryDescription: | - pod-network-partition contains chaos to disrupt network connectivity to kubernetes pods. Experiments can inject complete egress/ingress network loss based on label and namespace selectors. - - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. - keywords: - - Kubernetes - - K8S - - Pod - - Network - - Partition - platforms: - - Minikube - - Packet(Kubeadm) - maturity: alpha - maintainers: - - name: ispeakc0de - email: shubham@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-partition - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-partition/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-partition/experiment.yaml diff --git a/charts/generic/pod-network-partition/rbac-psp.yaml b/charts/generic/pod-network-partition/rbac-psp.yaml deleted file mode 100644 index 933512391..000000000 --- a/charts/generic/pod-network-partition/rbac-psp.yaml +++ /dev/null @@ -1,72 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # performs CRUD operations on the network policies - - apiGroups: ["networking.k8s.io"] - resources: ["networkpolicies"] - verbs: ["create","delete","list","get"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-partition-sa -subjects: -- kind: ServiceAccount - name: pod-network-partition-sa - namespace: default diff --git a/charts/generic/pod-network-partition/rbac.yaml b/charts/generic/pod-network-partition/rbac.yaml deleted file mode 100644 index e2a0ae7e9..000000000 --- a/charts/generic/pod-network-partition/rbac.yaml +++ /dev/null @@ -1,67 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # performs CRUD operations on the network policies - - apiGroups: ["networking.k8s.io"] - resources: ["networkpolicies"] - verbs: ["create","delete","list","get"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-partition-sa -subjects: -- kind: ServiceAccount - name: pod-network-partition-sa - namespace: default diff --git a/charts/kube-aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml b/charts/kube-aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml deleted file mode 100755 index 163213814..000000000 --- a/charts/kube-aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: aws-az-chaos - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: aws-az-chaos - categoryDescription: > - Execute aws-az chaos to detach the target zones from the load balancer - keywords: - - "zone" - - "load-balancer" - - "aws" - platforms: - - "AWS" - maturity: alpha - maintainers: - - name: oumkale - email: imkaleoum@gmail.com - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-python/tree/master/experiments/aws_az - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/aws-az-chaos/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/aws-az-chaos/experiment.yaml diff --git a/charts/kube-aws/aws-az-chaos/rbac.yaml b/charts/kube-aws/aws-az-chaos/rbac.yaml deleted file mode 100755 index 3d2284cec..000000000 --- a/charts/kube-aws/aws-az-chaos/rbac.yaml +++ /dev/null @@ -1,60 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: aws-az-chaos-sa - namespace: default - labels: - name: aws-az-chaos-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1beta1 -kind: Role -metadata: - name: aws-az-chaos-sa - namespace: default - labels: - name: aws-az-chaos-sa - app.kubernetes.io/part-of: litmus -rules: -# Create and monitor the experiment & helper pods -- apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] -# Performs CRUD operations on the events inside chaosengine and chaosresult -- apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] -# Fetch configmaps & secrets details and mount it to the experiment pod (if specified) -- apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] -# Track and get the runner, experiment, and helper pods log -- apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] -# for configuring and monitor the experiment job by the chaos-runner pod -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] -# for creation, status polling and deletion of litmus chaos resources used within a chaos workflow -- apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1beta1 -kind: RoleBinding -metadata: - name: aws-az-chaos-sa - namespace: default - labels: - name: aws-az-chaos-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: aws-az-chaos-sa -subjects: -- kind: ServiceAccount - name: aws-az-chaos-sa - namespace: default \ No newline at end of file diff --git a/charts/kube-aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml b/charts/kube-aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml deleted file mode 100644 index 99464426e..000000000 --- a/charts/kube-aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-10-28T10:28:08Z - name: ebs-loss-by-id - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: ebs-loss-by-id - categoryDescription: | - EBS Loss By ID contains chaos to disrupt state of infra resources. The experiment can induce ebs volume loss against specified application for the give EBS Volume(s). - - Causes ebs volume loss from node or ec2 instance for a certain chaos interval from total chaos duration. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod - keywords: - - EBS - - Volume - - AWS - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: uditgaurav@mayadata.io - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws/ebs-loss-by-id - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/ebs-loss-by-id/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/ebs-loss-by-id/experiment.yaml diff --git a/charts/kube-aws/ebs-loss-by-id/experiment.yaml b/charts/kube-aws/ebs-loss-by-id/experiment.yaml deleted file mode 100644 index 73c866178..000000000 --- a/charts/kube-aws/ebs-loss-by-id/experiment.yaml +++ /dev/null @@ -1,83 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-id - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/charts/kube-aws/ebs-loss-by-id/rbac.yaml b/charts/kube-aws/ebs-loss-by-id/rbac.yaml deleted file mode 100644 index 52a1c57b4..000000000 --- a/charts/kube-aws/ebs-loss-by-id/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: ebs-loss-by-id-sa - namespace: default - labels: - name: ebs-loss-by-id-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: ebs-loss-by-id-sa - labels: - name: ebs-loss-by-id-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ebs-loss-by-id-sa - labels: - name: ebs-loss-by-id-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ebs-loss-by-id-sa -subjects: -- kind: ServiceAccount - name: ebs-loss-by-id-sa - namespace: default diff --git a/charts/kube-aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml b/charts/kube-aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml deleted file mode 100644 index 95eca9750..000000000 --- a/charts/kube-aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-05-15T10:28:08Z - name: ebs-loss-by-tag - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: ebs-loss-by-tag - categoryDescription: | - EBS Loss By Tag contains chaos to disrupt state of infra resources. The experiment can induce ebs volume loss against specified application for given volume tag. - - Causes ebs volume loss by tag from node or ec2 instance for certain chaos interval from total chaos duration. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod - keywords: - - EBS - - Volume - - AWS - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: uditgaurav@mayadata.io - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws/ebs-loss-by-tag - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/ebs-loss-by-tag/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/ebs-loss-by-tag/experiment.yaml diff --git a/charts/kube-aws/ebs-loss-by-tag/experiment.yaml b/charts/kube-aws/ebs-loss-by-tag/experiment.yaml deleted file mode 100644 index aa652e657..000000000 --- a/charts/kube-aws/ebs-loss-by-tag/experiment.yaml +++ /dev/null @@ -1,85 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-tag - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_TAG - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - - name: VOLUME_AFFECTED_PERC - value: '' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/charts/kube-aws/ebs-loss-by-tag/rbac.yaml b/charts/kube-aws/ebs-loss-by-tag/rbac.yaml deleted file mode 100644 index 52ad320c2..000000000 --- a/charts/kube-aws/ebs-loss-by-tag/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: ebs-loss-by-tag-sa - namespace: default - labels: - name: ebs-loss-by-tag-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: ebs-loss-by-tag-sa - labels: - name: ebs-loss-by-tag-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ebs-loss-by-tag-sa - labels: - name: ebs-loss-by-tag-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ebs-loss-by-tag-sa -subjects: -- kind: ServiceAccount - name: ebs-loss-by-tag-sa - namespace: default diff --git a/charts/kube-aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml b/charts/kube-aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml deleted file mode 100644 index b8de45f48..000000000 --- a/charts/kube-aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-10-28T10:28:08Z - name: ec2-terminate-by-id - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: Mayadata - support: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN -spec: - displayName: ec2-terminate-by-id - categoryDescription: | - This experiment causes termination of an EC2 instance for a certain chaos duration. - - Causes termination of an EC2 instance provided by instance ID before bringing it back to running state after the specified chaos duration. - - It helps to check the performance of the application on the ec2 instance. - keywords: - - EC2 - - AWS - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: uditgaurav@mayadata.io - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws/ec2-terminate-by-id - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/ec2-terminate-by-id/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/ec2-terminate-by-id/experiment.yaml diff --git a/charts/kube-aws/ec2-terminate-by-id/engine.yaml b/charts/kube-aws/ec2-terminate-by-id/engine.yaml deleted file mode 100644 index efceae8c9..000000000 --- a/charts/kube-aws/ec2-terminate-by-id/engine.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - engineState: 'active' - chaosServiceAccount: ec2-terminate-by-id-sa - experiments: - - name: ec2-terminate-by-id - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set interval duration (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - # provide the region name of the instance - - name: REGION - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' \ No newline at end of file diff --git a/charts/kube-aws/ec2-terminate-by-id/experiment.yaml b/charts/kube-aws/ec2-terminate-by-id/experiment.yaml deleted file mode 100644 index 21b6bbf74..000000000 --- a/charts/kube-aws/ec2-terminate-by-id/experiment.yaml +++ /dev/null @@ -1,93 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by ID. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-id - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/charts/kube-aws/ec2-terminate-by-id/rbac.yaml b/charts/kube-aws/ec2-terminate-by-id/rbac.yaml deleted file mode 100644 index 0f7fb1c04..000000000 --- a/charts/kube-aws/ec2-terminate-by-id/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: ec2-terminate-by-id-sa - namespace: default - labels: - name: ec2-terminate-by-id-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: ec2-terminate-by-id-sa - labels: - name: ec2-terminate-by-id-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ec2-terminate-by-id-sa - labels: - name: ec2-terminate-by-id-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ec2-terminate-by-id-sa -subjects: -- kind: ServiceAccount - name: ec2-terminate-by-id-sa - namespace: default \ No newline at end of file diff --git a/charts/kube-aws/ec2-terminate-by-tag/ec2-terminate-by-tag.chartserviceversion.yaml b/charts/kube-aws/ec2-terminate-by-tag/ec2-terminate-by-tag.chartserviceversion.yaml deleted file mode 100644 index 1caf610b2..000000000 --- a/charts/kube-aws/ec2-terminate-by-tag/ec2-terminate-by-tag.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-04-15T10:28:08Z - name: ec2-terminate-by-tag - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: Mayadata - support: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN -spec: - displayName: ec2-terminate-by-tag - categoryDescription: | - This experiment causes termination of an EC2 instance for a certain chaos duration. - - Causes termination of an EC2 instance using instance tags before bringing it back to running state after the specified chaos duration. - - It helps to check the performance of the application on the ec2 instance. - keywords: - - EC2 - - AWS - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: uditgaurav@mayadata.io - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws/ec2-terminate-by-tag - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/ec2-terminate-by-tag/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/ec2-terminate-by-tag/experiment.yaml diff --git a/charts/kube-aws/ec2-terminate-by-tag/experiment.yaml b/charts/kube-aws/ec2-terminate-by-tag/experiment.yaml deleted file mode 100644 index 15cb10ca6..000000000 --- a/charts/kube-aws/ec2-terminate-by-tag/experiment.yaml +++ /dev/null @@ -1,95 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by tag. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-tag - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: INSTANCE_TAG - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - - name: REGION - value: '' - - # Target the percentage of instance filtered from tag - - name: INSTANCE_AFFECTED_PERC - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/charts/kube-aws/ec2-terminate-by-tag/rbac.yaml b/charts/kube-aws/ec2-terminate-by-tag/rbac.yaml deleted file mode 100644 index e03101d0f..000000000 --- a/charts/kube-aws/ec2-terminate-by-tag/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: ec2-terminate-by-tag-sa - namespace: default - labels: - name: ec2-terminate-by-tag-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: ec2-terminate-by-tag-sa - labels: - name: ec2-terminate-by-tag-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ec2-terminate-by-tag-sa - labels: - name: ec2-terminate-by-tag-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ec2-terminate-by-tag-sa -subjects: -- kind: ServiceAccount - name: ec2-terminate-by-tag-sa - namespace: default \ No newline at end of file diff --git a/charts/kube-aws/experiments.yaml b/charts/kube-aws/experiments.yaml deleted file mode 100644 index 032637f5e..000000000 --- a/charts/kube-aws/experiments.yaml +++ /dev/null @@ -1,442 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by ID. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-id - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-tag - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_TAG - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - - name: VOLUME_AFFECTED_PERC - value: '' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-id - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by tag. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-tag - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: INSTANCE_TAG - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - - name: REGION - value: '' - - # Target the percentage of instance filtered from tag - - name: INSTANCE_AFFECTED_PERC - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute aws-az chaos to detach the target zones from the load balancer -kind: ChaosExperiment -metadata: - name: aws-az-chaos - labels: - name: aws-az-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/py-runner:latest" - imagePullPolicy: Always - args: - - -c - - python3 -u experiment -name aws-az-chaos - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - name: CHAOS_INTERVAL - value: '30' - - name: LIB - value: 'litmus' - - name: LOAD_BALANCER_NAME - value: '' - - name: LOAD_BALANCER_ZONES - value: '' - - name: LOAD_BALANCERNAME_ARN - value: 'na' - - name: AWS_SHARED_CREDENTIALS_FILE - value: "/tmp/cloud_config.yml" - - name: RAMP_TIME - value: '' - labels: - name: aws-az-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- diff --git a/charts/kube-aws/icons/aws-az-chaos.png b/charts/kube-aws/icons/aws-az-chaos.png deleted file mode 100644 index fd09e34f6cd5c49336db1bb357ebf14d82201274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3152 zcmV-W46pNvP)jCR+=d*`L+4czA#!(zllHgrc<0?fHf|Fh(o*wV0m%zf(KebGfH6AH;z62kK%;Gf<*SG zoGeJ~@lM*YtwDKSy0m~MPs<_;@+d6u7+I+Ma^dhOG9ovHN|#Nbc@N}~g=m6+x5)zN z2`6JUA!9D!{tqtDj;)P!sjV-h^Qhb7YH$^~Q=fv+S;nj3mF#S29^m+Ka_bzGE~=})MkhY&Cb#>R&+FCy z8XTS2$0jR*1)Cla()K`#lG1n*b+wSSHJwakiwP(X!C(mx&>yh4>O-A$_-Gdei<60s z4OaR1ck}#OB!Gypx{5c>47T+|rxN+iUMy|+WL=E1h8t@TuZ@pdSfVuARDn;X>v+P#f-xo-|w4Z10; z#?6jZY`>`4U6YcAP(JIXb>091kjmh=^PF#BfF%OQ>?|c}?`Qk?T&J^dpqtAA!UrN_ zNE>GS@=Xy??!Fj;@y2Cl+(9`xLzSSwtp;Mq;vrr6)*>4dFU9K<2L(hT?U<9LoDac7 z>jF4dclMeRfH=i>4~mA!n?GT=>PJS(GjnbZ8O4+?jK+xAgmk|Zdz zPXR$|{?_eQ7kn~=;a4~!@){v`1K1bQ^R@W}!<3wmgSLk{nI&ULKsgoAoBWoeXlD8y zs{L6k544X7zD5Vplas=0IudFT6c&tNXe8n=h+L?pq1q5`@!^gVl#DDdZ z=SaeHN`L@^p&hTxAc!EL77MKK<>4+~GEG1+eR*$JYe2t-Zib6OL{3-Ink1#Fa?(%N zh8T~t)CGxl7qhN*RzPTO=~ERFWbhiqRMH)9u>xXMe{fN_maEYh@aQM)s(qvgKpA%3 z_KXlRyuxI9(+zQ$h4-P5AkO(ZTl}XK5Ch^VLX7nc?a*CC@Oh{wwxWE-qCd{T_oJ*f z*w%Eara=J_R037c^$6brCI45oqlHZyj#j!c5?sx5*a$(iOjyPbmL@4>dH71XyCXmR zHygrI3RZ|B z0xU_6%CJu4d#DwP;C=A15MM010=(a!cmQpbljm@)4}>ismSQ-hg*;dxP{k(J^~kj) z`PBYkK@d^)eGf14RErS+#DW1tM^QnmI1y+>gV{NG6~jVy9i>Zyn|Id2&`4zI4~u-} z8!BF}^V=n0QB$QUNx2&;!NqGy2sZQPWchtR9~b+>vw*WvbqvwCbXfrz!SKoitOj`T znL|om$U&;G{*Bpwmr(Gf8+yR%ctY$i6%vaIx@}}*_VufesJbr1d-1n3bytD~i{WYv z8nCKdy~G+~ZYr%4t$;^P*FiEXrSB9oMU`O4wyEvj+F>Aq(<#!>4LwY0_uc3uCO3gw<-fG zga70K1;IqGaLPf@kW&`V3a#*ihKy-TJHXRxrqBz|TvZK|5LB>QG+(1qBj$ecOxqQq z>n02S5CZaq964g4PBo^vzFRYBpzE56X%+|&Jm8p9r5XQ?YmY0ATt-Yq98#oJMi1Ui z?50R-xX;s@|G;-`EI+PpTbieB!7Qx{1ycnCaLiAyzFTz+J_tcYhIe0d%|L;G12M&1 z5=9Fce3$I^p8Dw&Q-X$!=>mcob8VVIWt%ioL8OJx)0znP2a2dX_{hQ|Xvl>QGlPaq zL>HN_fBuNiqx=?!Ucgu?A{0%@^BJ?ZPmJI6e%KNft*$ArmH5i z0oF2e3o#-d5XFPvlg0A{jY5hf5fu=@1R{z-1xYr7ijgX?3?FHzzS|o#BH{N$qVkV6 zSZ2FG*Q48c?nJxEw(Evds8sdSd2ngVd^k(hM1m9uiNFxwY6A&O5 zlY@$x;Ir`^(Zn+UaQ#IksuuWVBrc#q;sP2ZE}%iot?d}#XTN-f8XBAF`i&d(*y2TW zwY!H#=Z&P&#Sc>1if3u%lgnt%*Jse;CClm8FaMm@Z+J~PFUK~5e)q~t6e}zv;4jwv zn1&A@MyKl<=qGE|(yv}xO_jUer@7ylMdvTH(!Tu%$u=UJ(%E}z&zx1ng^;nvGF`ah zol1J*sa5ocKmC<%Fe{us^)CAKNDZ4Wu2rnBuD+2yKTQvo%xCpL2le*$(SnDT&>y$H zL$SmX0@j>3MF$QZrnfh5q!r))o^mWHX()ZAU>v<$`45_UR}rNoC)1AIRW#o*Td~5| ze)BR_Y+)O>a`m`HR%w@2S)*y#HR>^!vAHQqe^E zYVj2M_`s)1*ZsKq5bb*ZL(0y|q?maIqlTElBWBomw=-w?9 z3#<`D(#I3+`6ioXdYkChjo{8nVN;-^9IR$v&P=m~Vg)P^H(wk_u?E5&TTj%mot2Yw ziSn35W*0N-%4Drf#C=NHEYxM99yU?mewa ztb&V)Ci;x`%>7<+Nk-gyO%KG9`cCmzT$a|4S!DX-u8GO#R-S; zLs$g+h&_3g;)Kd3+*3M!8|3i7ZBy?XxDB%RrqakG;+E(iqjCR+=d*`L+4czA#!(zllHgrc<0?fHf|Fh(o*wV0m%zf(KebGfH6AH;z62kK%;Gf<*SG zoGeJ~@lM*YtwDKSy0m~MPs<_;@+d6u7+I+Ma^dhOG9ovHN|#Nbc@N}~g=m6+x5)zN z2`6JUA!9D!{tqtDj;)P!sjV-h^Qhb7YH$^~Q=fv+S;nj3mF#S29^m+Ka_bzGE~=})MkhY&Cb#>R&+FCy z8XTS2$0jR*1)Cla()K`#lG1n*b+wSSHJwakiwP(X!C(mx&>yh4>O-A$_-Gdei<60s z4OaR1ck}#OB!Gypx{5c>47T+|rxN+iUMy|+WL=E1h8t@TuZ@pdSfVuARDn;X>v+P#f-xo-|w4Z10; z#?6jZY`>`4U6YcAP(JIXb>091kjmh=^PF#BfF%OQ>?|c}?`Qk?T&J^dpqtAA!UrN_ zNE>GS@=Xy??!Fj;@y2Cl+(9`xLzSSwtp;Mq;vrr6)*>4dFU9K<2L(hT?U<9LoDac7 z>jF4dclMeRfH=i>4~mA!n?GT=>PJS(GjnbZ8O4+?jK+xAgmk|Zdz zPXR$|{?_eQ7kn~=;a4~!@){v`1K1bQ^R@W}!<3wmgSLk{nI&ULKsgoAoBWoeXlD8y zs{L6k544X7zD5Vplas=0IudFT6c&tNXe8n=h+L?pq1q5`@!^gVl#DDdZ z=SaeHN`L@^p&hTxAc!EL77MKK<>4+~GEG1+eR*$JYe2t-Zib6OL{3-Ink1#Fa?(%N zh8T~t)CGxl7qhN*RzPTO=~ERFWbhiqRMH)9u>xXMe{fN_maEYh@aQM)s(qvgKpA%3 z_KXlRyuxI9(+zQ$h4-P5AkO(ZTl}XK5Ch^VLX7nc?a*CC@Oh{wwxWE-qCd{T_oJ*f z*w%Eara=J_R037c^$6brCI45oqlHZyj#j!c5?sx5*a$(iOjyPbmL@4>dH71XyCXmR zHygrI3RZ|B z0xU_6%CJu4d#DwP;C=A15MM010=(a!cmQpbljm@)4}>ismSQ-hg*;dxP{k(J^~kj) z`PBYkK@d^)eGf14RErS+#DW1tM^QnmI1y+>gV{NG6~jVy9i>Zyn|Id2&`4zI4~u-} z8!BF}^V=n0QB$QUNx2&;!NqGy2sZQPWchtR9~b+>vw*WvbqvwCbXfrz!SKoitOj`T znL|om$U&;G{*Bpwmr(Gf8+yR%ctY$i6%vaIx@}}*_VufesJbr1d-1n3bytD~i{WYv z8nCKdy~G+~ZYr%4t$;^P*FiEXrSB9oMU`O4wyEvj+F>Aq(<#!>4LwY0_uc3uCO3gw<-fG zga70K1;IqGaLPf@kW&`V3a#*ihKy-TJHXRxrqBz|TvZK|5LB>QG+(1qBj$ecOxqQq z>n02S5CZaq964g4PBo^vzFRYBpzE56X%+|&Jm8p9r5XQ?YmY0ATt-Yq98#oJMi1Ui z?50R-xX;s@|G;-`EI+PpTbieB!7Qx{1ycnCaLiAyzFTz+J_tcYhIe0d%|L;G12M&1 z5=9Fce3$I^p8Dw&Q-X$!=>mcob8VVIWt%ioL8OJx)0znP2a2dX_{hQ|Xvl>QGlPaq zL>HN_fBuNiqx=?!Ucgu?A{0%@^BJ?ZPmJI6e%KNft*$ArmH5i z0oF2e3o#-d5XFPvlg0A{jY5hf5fu=@1R{z-1xYr7ijgX?3?FHzzS|o#BH{N$qVkV6 zSZ2FG*Q48c?nJxEw(Evds8sdSd2ngVd^k(hM1m9uiNFxwY6A&O5 zlY@$x;Ir`^(Zn+UaQ#IksuuWVBrc#q;sP2ZE}%iot?d}#XTN-f8XBAF`i&d(*y2TW zwY!H#=Z&P&#Sc>1if3u%lgnt%*Jse;CClm8FaMm@Z+J~PFUK~5e)q~t6e}zv;4jwv zn1&A@MyKl<=qGE|(yv}xO_jUer@7ylMdvTH(!Tu%$u=UJ(%E}z&zx1ng^;nvGF`ah zol1J*sa5ocKmC<%Fe{us^)CAKNDZ4Wu2rnBuD+2yKTQvo%xCpL2le*$(SnDT&>y$H zL$SmX0@j>3MF$QZrnfh5q!r))o^mWHX()ZAU>v<$`45_UR}rNoC)1AIRW#o*Td~5| ze)BR_Y+)O>a`m`HR%w@2S)*y#HR>^!vAHQqe^E zYVj2M_`s)1*ZsKq5bb*ZL(0y|q?maIqlTElBWBomw=-w?9 z3#<`D(#I3+`6ioXdYkChjo{8nVN;-^9IR$v&P=m~Vg)P^H(wk_u?E5&TTj%mot2Yw ziSn35W*0N-%4Drf#C=NHEYxM99yU?mewa ztb&V)Ci;x`%>7<+Nk-gyO%KG9`cCmzT$a|4S!DX-u8GO#R-S; zLs$g+h&_3g;)Kd3+*3M!8|3i7ZBy?XxDB%RrqakG;+E(iqjCR+=d*`L+4czA#!(zllHgrc<0?fHf|Fh(o*wV0m%zf(KebGfH6AH;z62kK%;Gf<*SG zoGeJ~@lM*YtwDKSy0m~MPs<_;@+d6u7+I+Ma^dhOG9ovHN|#Nbc@N}~g=m6+x5)zN z2`6JUA!9D!{tqtDj;)P!sjV-h^Qhb7YH$^~Q=fv+S;nj3mF#S29^m+Ka_bzGE~=})MkhY&Cb#>R&+FCy z8XTS2$0jR*1)Cla()K`#lG1n*b+wSSHJwakiwP(X!C(mx&>yh4>O-A$_-Gdei<60s z4OaR1ck}#OB!Gypx{5c>47T+|rxN+iUMy|+WL=E1h8t@TuZ@pdSfVuARDn;X>v+P#f-xo-|w4Z10; z#?6jZY`>`4U6YcAP(JIXb>091kjmh=^PF#BfF%OQ>?|c}?`Qk?T&J^dpqtAA!UrN_ zNE>GS@=Xy??!Fj;@y2Cl+(9`xLzSSwtp;Mq;vrr6)*>4dFU9K<2L(hT?U<9LoDac7 z>jF4dclMeRfH=i>4~mA!n?GT=>PJS(GjnbZ8O4+?jK+xAgmk|Zdz zPXR$|{?_eQ7kn~=;a4~!@){v`1K1bQ^R@W}!<3wmgSLk{nI&ULKsgoAoBWoeXlD8y zs{L6k544X7zD5Vplas=0IudFT6c&tNXe8n=h+L?pq1q5`@!^gVl#DDdZ z=SaeHN`L@^p&hTxAc!EL77MKK<>4+~GEG1+eR*$JYe2t-Zib6OL{3-Ink1#Fa?(%N zh8T~t)CGxl7qhN*RzPTO=~ERFWbhiqRMH)9u>xXMe{fN_maEYh@aQM)s(qvgKpA%3 z_KXlRyuxI9(+zQ$h4-P5AkO(ZTl}XK5Ch^VLX7nc?a*CC@Oh{wwxWE-qCd{T_oJ*f z*w%Eara=J_R037c^$6brCI45oqlHZyj#j!c5?sx5*a$(iOjyPbmL@4>dH71XyCXmR zHygrI3RZ|B z0xU_6%CJu4d#DwP;C=A15MM010=(a!cmQpbljm@)4}>ismSQ-hg*;dxP{k(J^~kj) z`PBYkK@d^)eGf14RErS+#DW1tM^QnmI1y+>gV{NG6~jVy9i>Zyn|Id2&`4zI4~u-} z8!BF}^V=n0QB$QUNx2&;!NqGy2sZQPWchtR9~b+>vw*WvbqvwCbXfrz!SKoitOj`T znL|om$U&;G{*Bpwmr(Gf8+yR%ctY$i6%vaIx@}}*_VufesJbr1d-1n3bytD~i{WYv z8nCKdy~G+~ZYr%4t$;^P*FiEXrSB9oMU`O4wyEvj+F>Aq(<#!>4LwY0_uc3uCO3gw<-fG zga70K1;IqGaLPf@kW&`V3a#*ihKy-TJHXRxrqBz|TvZK|5LB>QG+(1qBj$ecOxqQq z>n02S5CZaq964g4PBo^vzFRYBpzE56X%+|&Jm8p9r5XQ?YmY0ATt-Yq98#oJMi1Ui z?50R-xX;s@|G;-`EI+PpTbieB!7Qx{1ycnCaLiAyzFTz+J_tcYhIe0d%|L;G12M&1 z5=9Fce3$I^p8Dw&Q-X$!=>mcob8VVIWt%ioL8OJx)0znP2a2dX_{hQ|Xvl>QGlPaq zL>HN_fBuNiqx=?!Ucgu?A{0%@^BJ?ZPmJI6e%KNft*$ArmH5i z0oF2e3o#-d5XFPvlg0A{jY5hf5fu=@1R{z-1xYr7ijgX?3?FHzzS|o#BH{N$qVkV6 zSZ2FG*Q48c?nJxEw(Evds8sdSd2ngVd^k(hM1m9uiNFxwY6A&O5 zlY@$x;Ir`^(Zn+UaQ#IksuuWVBrc#q;sP2ZE}%iot?d}#XTN-f8XBAF`i&d(*y2TW zwY!H#=Z&P&#Sc>1if3u%lgnt%*Jse;CClm8FaMm@Z+J~PFUK~5e)q~t6e}zv;4jwv zn1&A@MyKl<=qGE|(yv}xO_jUer@7ylMdvTH(!Tu%$u=UJ(%E}z&zx1ng^;nvGF`ah zol1J*sa5ocKmC<%Fe{us^)CAKNDZ4Wu2rnBuD+2yKTQvo%xCpL2le*$(SnDT&>y$H zL$SmX0@j>3MF$QZrnfh5q!r))o^mWHX()ZAU>v<$`45_UR}rNoC)1AIRW#o*Td~5| ze)BR_Y+)O>a`m`HR%w@2S)*y#HR>^!vAHQqe^E zYVj2M_`s)1*ZsKq5bb*ZL(0y|q?maIqlTElBWBomw=-w?9 z3#<`D(#I3+`6ioXdYkChjo{8nVN;-^9IR$v&P=m~Vg)P^H(wk_u?E5&TTj%mot2Yw ziSn35W*0N-%4Drf#C=NHEYxM99yU?mewa ztb&V)Ci;x`%>7<+Nk-gyO%KG9`cCmzT$a|4S!DX-u8GO#R-S; zLs$g+h&_3g;)Kd3+*3M!8|3i7ZBy?XxDB%RrqakG;+E(iqjCR+=d*`L+4czA#!(zllHgrc<0?fHf|Fh(o*wV0m%zf(KebGfH6AH;z62kK%;Gf<*SG zoGeJ~@lM*YtwDKSy0m~MPs<_;@+d6u7+I+Ma^dhOG9ovHN|#Nbc@N}~g=m6+x5)zN z2`6JUA!9D!{tqtDj;)P!sjV-h^Qhb7YH$^~Q=fv+S;nj3mF#S29^m+Ka_bzGE~=})MkhY&Cb#>R&+FCy z8XTS2$0jR*1)Cla()K`#lG1n*b+wSSHJwakiwP(X!C(mx&>yh4>O-A$_-Gdei<60s z4OaR1ck}#OB!Gypx{5c>47T+|rxN+iUMy|+WL=E1h8t@TuZ@pdSfVuARDn;X>v+P#f-xo-|w4Z10; z#?6jZY`>`4U6YcAP(JIXb>091kjmh=^PF#BfF%OQ>?|c}?`Qk?T&J^dpqtAA!UrN_ zNE>GS@=Xy??!Fj;@y2Cl+(9`xLzSSwtp;Mq;vrr6)*>4dFU9K<2L(hT?U<9LoDac7 z>jF4dclMeRfH=i>4~mA!n?GT=>PJS(GjnbZ8O4+?jK+xAgmk|Zdz zPXR$|{?_eQ7kn~=;a4~!@){v`1K1bQ^R@W}!<3wmgSLk{nI&ULKsgoAoBWoeXlD8y zs{L6k544X7zD5Vplas=0IudFT6c&tNXe8n=h+L?pq1q5`@!^gVl#DDdZ z=SaeHN`L@^p&hTxAc!EL77MKK<>4+~GEG1+eR*$JYe2t-Zib6OL{3-Ink1#Fa?(%N zh8T~t)CGxl7qhN*RzPTO=~ERFWbhiqRMH)9u>xXMe{fN_maEYh@aQM)s(qvgKpA%3 z_KXlRyuxI9(+zQ$h4-P5AkO(ZTl}XK5Ch^VLX7nc?a*CC@Oh{wwxWE-qCd{T_oJ*f z*w%Eara=J_R037c^$6brCI45oqlHZyj#j!c5?sx5*a$(iOjyPbmL@4>dH71XyCXmR zHygrI3RZ|B z0xU_6%CJu4d#DwP;C=A15MM010=(a!cmQpbljm@)4}>ismSQ-hg*;dxP{k(J^~kj) z`PBYkK@d^)eGf14RErS+#DW1tM^QnmI1y+>gV{NG6~jVy9i>Zyn|Id2&`4zI4~u-} z8!BF}^V=n0QB$QUNx2&;!NqGy2sZQPWchtR9~b+>vw*WvbqvwCbXfrz!SKoitOj`T znL|om$U&;G{*Bpwmr(Gf8+yR%ctY$i6%vaIx@}}*_VufesJbr1d-1n3bytD~i{WYv z8nCKdy~G+~ZYr%4t$;^P*FiEXrSB9oMU`O4wyEvj+F>Aq(<#!>4LwY0_uc3uCO3gw<-fG zga70K1;IqGaLPf@kW&`V3a#*ihKy-TJHXRxrqBz|TvZK|5LB>QG+(1qBj$ecOxqQq z>n02S5CZaq964g4PBo^vzFRYBpzE56X%+|&Jm8p9r5XQ?YmY0ATt-Yq98#oJMi1Ui z?50R-xX;s@|G;-`EI+PpTbieB!7Qx{1ycnCaLiAyzFTz+J_tcYhIe0d%|L;G12M&1 z5=9Fce3$I^p8Dw&Q-X$!=>mcob8VVIWt%ioL8OJx)0znP2a2dX_{hQ|Xvl>QGlPaq zL>HN_fBuNiqx=?!Ucgu?A{0%@^BJ?ZPmJI6e%KNft*$ArmH5i z0oF2e3o#-d5XFPvlg0A{jY5hf5fu=@1R{z-1xYr7ijgX?3?FHzzS|o#BH{N$qVkV6 zSZ2FG*Q48c?nJxEw(Evds8sdSd2ngVd^k(hM1m9uiNFxwY6A&O5 zlY@$x;Ir`^(Zn+UaQ#IksuuWVBrc#q;sP2ZE}%iot?d}#XTN-f8XBAF`i&d(*y2TW zwY!H#=Z&P&#Sc>1if3u%lgnt%*Jse;CClm8FaMm@Z+J~PFUK~5e)q~t6e}zv;4jwv zn1&A@MyKl<=qGE|(yv}xO_jUer@7ylMdvTH(!Tu%$u=UJ(%E}z&zx1ng^;nvGF`ah zol1J*sa5ocKmC<%Fe{us^)CAKNDZ4Wu2rnBuD+2yKTQvo%xCpL2le*$(SnDT&>y$H zL$SmX0@j>3MF$QZrnfh5q!r))o^mWHX()ZAU>v<$`45_UR}rNoC)1AIRW#o*Td~5| ze)BR_Y+)O>a`m`HR%w@2S)*y#HR>^!vAHQqe^E zYVj2M_`s)1*ZsKq5bb*ZL(0y|q?maIqlTElBWBomw=-w?9 z3#<`D(#I3+`6ioXdYkChjo{8nVN;-^9IR$v&P=m~Vg)P^H(wk_u?E5&TTj%mot2Yw ziSn35W*0N-%4Drf#C=NHEYxM99yU?mewa ztb&V)Ci;x`%>7<+Nk-gyO%KG9`cCmzT$a|4S!DX-u8GO#R-S; zLs$g+h&_3g;)Kd3+*3M!8|3i7ZBy?XxDB%RrqakG;+E(iqjCR+=d*`L+4czA#!(zllHgrc<0?fHf|Fh(o*wV0m%zf(KebGfH6AH;z62kK%;Gf<*SG zoGeJ~@lM*YtwDKSy0m~MPs<_;@+d6u7+I+Ma^dhOG9ovHN|#Nbc@N}~g=m6+x5)zN z2`6JUA!9D!{tqtDj;)P!sjV-h^Qhb7YH$^~Q=fv+S;nj3mF#S29^m+Ka_bzGE~=})MkhY&Cb#>R&+FCy z8XTS2$0jR*1)Cla()K`#lG1n*b+wSSHJwakiwP(X!C(mx&>yh4>O-A$_-Gdei<60s z4OaR1ck}#OB!Gypx{5c>47T+|rxN+iUMy|+WL=E1h8t@TuZ@pdSfVuARDn;X>v+P#f-xo-|w4Z10; z#?6jZY`>`4U6YcAP(JIXb>091kjmh=^PF#BfF%OQ>?|c}?`Qk?T&J^dpqtAA!UrN_ zNE>GS@=Xy??!Fj;@y2Cl+(9`xLzSSwtp;Mq;vrr6)*>4dFU9K<2L(hT?U<9LoDac7 z>jF4dclMeRfH=i>4~mA!n?GT=>PJS(GjnbZ8O4+?jK+xAgmk|Zdz zPXR$|{?_eQ7kn~=;a4~!@){v`1K1bQ^R@W}!<3wmgSLk{nI&ULKsgoAoBWoeXlD8y zs{L6k544X7zD5Vplas=0IudFT6c&tNXe8n=h+L?pq1q5`@!^gVl#DDdZ z=SaeHN`L@^p&hTxAc!EL77MKK<>4+~GEG1+eR*$JYe2t-Zib6OL{3-Ink1#Fa?(%N zh8T~t)CGxl7qhN*RzPTO=~ERFWbhiqRMH)9u>xXMe{fN_maEYh@aQM)s(qvgKpA%3 z_KXlRyuxI9(+zQ$h4-P5AkO(ZTl}XK5Ch^VLX7nc?a*CC@Oh{wwxWE-qCd{T_oJ*f z*w%Eara=J_R037c^$6brCI45oqlHZyj#j!c5?sx5*a$(iOjyPbmL@4>dH71XyCXmR zHygrI3RZ|B z0xU_6%CJu4d#DwP;C=A15MM010=(a!cmQpbljm@)4}>ismSQ-hg*;dxP{k(J^~kj) z`PBYkK@d^)eGf14RErS+#DW1tM^QnmI1y+>gV{NG6~jVy9i>Zyn|Id2&`4zI4~u-} z8!BF}^V=n0QB$QUNx2&;!NqGy2sZQPWchtR9~b+>vw*WvbqvwCbXfrz!SKoitOj`T znL|om$U&;G{*Bpwmr(Gf8+yR%ctY$i6%vaIx@}}*_VufesJbr1d-1n3bytD~i{WYv z8nCKdy~G+~ZYr%4t$;^P*FiEXrSB9oMU`O4wyEvj+F>Aq(<#!>4LwY0_uc3uCO3gw<-fG zga70K1;IqGaLPf@kW&`V3a#*ihKy-TJHXRxrqBz|TvZK|5LB>QG+(1qBj$ecOxqQq z>n02S5CZaq964g4PBo^vzFRYBpzE56X%+|&Jm8p9r5XQ?YmY0ATt-Yq98#oJMi1Ui z?50R-xX;s@|G;-`EI+PpTbieB!7Qx{1ycnCaLiAyzFTz+J_tcYhIe0d%|L;G12M&1 z5=9Fce3$I^p8Dw&Q-X$!=>mcob8VVIWt%ioL8OJx)0znP2a2dX_{hQ|Xvl>QGlPaq zL>HN_fBuNiqx=?!Ucgu?A{0%@^BJ?ZPmJI6e%KNft*$ArmH5i z0oF2e3o#-d5XFPvlg0A{jY5hf5fu=@1R{z-1xYr7ijgX?3?FHzzS|o#BH{N$qVkV6 zSZ2FG*Q48c?nJxEw(Evds8sdSd2ngVd^k(hM1m9uiNFxwY6A&O5 zlY@$x;Ir`^(Zn+UaQ#IksuuWVBrc#q;sP2ZE}%iot?d}#XTN-f8XBAF`i&d(*y2TW zwY!H#=Z&P&#Sc>1if3u%lgnt%*Jse;CClm8FaMm@Z+J~PFUK~5e)q~t6e}zv;4jwv zn1&A@MyKl<=qGE|(yv}xO_jUer@7ylMdvTH(!Tu%$u=UJ(%E}z&zx1ng^;nvGF`ah zol1J*sa5ocKmC<%Fe{us^)CAKNDZ4Wu2rnBuD+2yKTQvo%xCpL2le*$(SnDT&>y$H zL$SmX0@j>3MF$QZrnfh5q!r))o^mWHX()ZAU>v<$`45_UR}rNoC)1AIRW#o*Td~5| ze)BR_Y+)O>a`m`HR%w@2S)*y#HR>^!vAHQqe^E zYVj2M_`s)1*ZsKq5bb*ZL(0y|q?maIqlTElBWBomw=-w?9 z3#<`D(#I3+`6ioXdYkChjo{8nVN;-^9IR$v&P=m~Vg)P^H(wk_u?E5&TTj%mot2Yw ziSn35W*0N-%4Drf#C=NHEYxM99yU?mewa ztb&V)Ci;x`%>7<+Nk-gyO%KG9`cCmzT$a|4S!DX-u8GO#R-S; zLs$g+h&_3g;)Kd3+*3M!8|3i7ZBy?XxDB%RrqakG;+E(iq*id$R+OQG|BcSmMtKiHXf_Jid8C2!b;W#5_q z`^-Eu&pb0Ol9-yB+Q@!vXV*4%)sO?Y5xow&T&`~M4=(UEpPB-4u!SR_O$sRw7#o|U-o7yk{qrvk4n3h@ zU_9nV1HXsT1bAMo63E2$>YiW^LH^F6Dx(3J6PU`(uPU{tij^QBbH`ml8IFtPdPxiCF67yLI+kAe= z5_!Ygg&A`=84>VdXo9{u-5+Niu(lVTE474!7$$(AxL|E9mxkkng!hKEzP+Qu^5CX1 z{#ek&j-Tv{6R)b$L+`&+X;svecp_-BTetY=!w;(Bnk~wL2a2+p#%N7Yz^2m!F^&RO zw|Qe3?R=}ks${0&LcX%8%(^!xBI1B?5se9$NIX;qR);2=ZO~QV-r_?WV`Vcfq7ebn z=Y4lB5F;K2x!JP1WZ>R%8Mufjvk7buW8iJ&J`V+ck3IcN^mRHwv?kUE27}Wx9;=MI zDs6jb+cm^cMHUZFJzvBFD9fAM7ROj3%G`2!nCxP!mKZXK<2-cQxo)<};15=GEEwWo z9BBtz0%F`H@**3sniB8!@56NR%MSWw;s#J?d+{+I<(i^Bp0WfjVHGj@gP1+7>8VpZsK1fVF+w z)NM5>c*mhY;%0@g7cAz;v0htN`PvqL%zJc0x>l%Vfr+e7x9J}Jyq#Kp?5Cnd9;yjU z(oYxfQ$L&ArUJtyJ635mWoB{QiHt?RPp1WG)!L5r!P>4~3erT8hbpV)Q(teG?7*$k z?Y?hCbNyqxak0z+SEkxy&UaNn*eRG)VUaF#jd;b}6 z4nWl^Jysa4i1mk~)_e4c@W?9BA)qW^o7B7-8|KgWKYMq!katNja|ny5r_XF8IuYC| zOG}2W;6gIiSPo_M>3gips0yg;M0)zBJ9t=LIyW2*o0&GLk}TNDLD|J|Ap*IoC<%zp zR-6u%``t9#SL= z2`Gnv%6+rH2`?y}6Z2kmjXKVRkldII(SZO=iIS0L$&e}QC4yjUs?W;xiW5*?PE19r z&*qze>DJ2{0x8tXNiMR9BcM$j0c{f32O@^7 zCr-droj>M^qJW5g+K#h(Lsj15~QLJZhh5t~nc!XIH9|10?}Vq%ZHa zxge7dAS+hHub8N*B%mC5(akK)Cpx6bfa>f@Nk9Z4#V3?%CNf)yi7sj6T`PNl<+an{ zA9TR!tgHGKdngyUXIR`v@~7C3s|HhnaySK9q;z@uJyz0Yy76aUt)=d+Fg?SBJkouS zx*lYvfwiq>0@Se>WjdCG$WogiAiS?mroUD|4^dn(%U)$++E+f0 zcJFI=`o8n(01fuUT7p|4uST>sm3$mIFGhD=TT4I`_7}Fa$-FzWPJ9ku&4%M~A z*2O8BKPTbmbgfOsl=T7a{6L6y{6uVC;O0$b)>5GfdOAnw{Fz<~geGa-%N5$zCIhF3 z><134FV)iLOxQ}W#1IDAo*Y=kySpkgk_~SHG+iWvikY;?r?#_~#8xB#79m<(Bz?Bu zSo*9<_|^+iJaj{LH{#e1rJ(rC;~3fMg@PSB(HEDY zue-U$;a*~NJ=Z?r*WsJS@hXU!e4 zNd$N^-Bgp2GXX^~)InMqgbcA^$RHC}J{ARiqu=kg4yS-{NH5NZ4UKsrpv){efYHK9 zF0u&(>?Q|YZa~0u0;UDwGWU2u-{0lY|b zlKIEt?;YYe%&r45Cz*>x&y|LdINdjw2h`@%L+qxAvppN_@}BZPoSr@_mMaz$00000 LNkvXXu0mjf0VG17 diff --git a/charts/kube-aws/icons/kube-aws.png b/charts/kube-aws/icons/kube-aws.png deleted file mode 100644 index fd09e34f6cd5c49336db1bb357ebf14d82201274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3152 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 - kube-aws contains chaos to disrupt state of aws resources running part of kubernetes cluster - experiments: - - ec2-terminate-by-id - - ec2-terminate-by-tag - - ebs-loss-by-id - - ebs-loss-by-tag - - aws-az-chaos - keywords: - - AWS - - EC2 - - EBS - - AZ - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - - name: oumkale - email: imkaleoum@gmail.com - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws - - name: Source Code - url: https://github.com/litmuschaos/litmus-python/tree/master/experiments/aws_az - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - icon: - - url: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/icons/kube-aws.png - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/experiments.yaml diff --git a/charts/kube-aws/kube-aws.package.yaml b/charts/kube-aws/kube-aws.package.yaml deleted file mode 100644 index db03f2ef3..000000000 --- a/charts/kube-aws/kube-aws.package.yaml +++ /dev/null @@ -1,17 +0,0 @@ -packageName: kube-aws -experiments: - - name: ec2-terminate-by-id - CSV: ec2-terminate-by-id.chartserviceversion.yaml - desc: "ec2-terminate-by-id" - - name: ec2-terminate-by-tag - CSV: ec2-terminate-by-tag.chartserviceversion.yaml - desc: "ec2-terminate-by-tag" - - name: ebs-loss-by-id - CSV: ebs-loss-by-id.chartserviceversion.yaml - desc: "ebs-loss-by-id" - - name: ebs-loss-by-tag - CSV: ebs-loss-by-tag.chartserviceversion.yaml - desc: "ebs-loss-by-tag" - - name: aws-az-chaos - CSV: aws-az-chaos.chartserviceversion.yaml - desc: "aws-az-chaos" diff --git a/charts/kube-aws/rbac-admin.yaml b/charts/kube-aws/rbac-admin.yaml deleted file mode 100644 index f386c6c34..000000000 --- a/charts/kube-aws/rbac-admin.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: chaos-admin - labels: - name: chaos-admin ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: chaos-admin - labels: - name: chaos-admin -rules: -- apiGroups: ["","apps","batch","extensions","litmuschaos.io","openebs.io","storage.k8s.io"] - resources: ["chaosengines","chaosexperiments","chaosresults","configmaps","cstorpools","cstorvolumereplicas","events","jobs","persistentvolumeclaims","persistentvolumes","pods","pods/exec","pods/log","secrets","storageclasses","chaosengines","chaosexperiments","chaosresults","configmaps","cstorpools","cstorvolumereplicas","daemonsets","deployments","events","jobs","persistentvolumeclaims","persistentvolumes","pods","pods/eviction","pods/exec","pods/log","replicasets","secrets","services","statefulsets","storageclasses"] - verbs: ["create","delete","get","list","patch","update"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: chaos-admin - labels: - name: chaos-admin -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: chaos-admin -subjects: -- kind: ServiceAccount - name: chaos-admin - namespace: default diff --git a/charts/mongodb/experiments.yaml b/charts/mongodb/experiments.yaml deleted file mode 100644 index e69de29bb..000000000 diff --git a/charts/mongodb/icons/mongodb.png b/charts/mongodb/icons/mongodb.png deleted file mode 100644 index ab6378ff5096920216db042733a9f42976cb27e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23291 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 - MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. - experiments: - keywords: - - Kubernetes - - MongoDB - maintainers: - - name: Sanjay1611 - email: sanjay.nathani@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: MongoDB Website - url: https://www.mongodb.com/ - icon: - - url: - mediatype: - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/mongodb/experiments.yaml diff --git a/charts/mongodb/mongodb.package.yaml b/charts/mongodb/mongodb.package.yaml deleted file mode 100644 index 1ad30e836..000000000 --- a/charts/mongodb/mongodb.package.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packageName: mongodb -experiments: diff --git a/charts/spring-boot/experiments.yaml b/charts/spring-boot/experiments.yaml deleted file mode 100644 index 929722e50..000000000 --- a/charts/spring-boot/experiments.yaml +++ /dev/null @@ -1,605 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject network latency -kind: ChaosExperiment -metadata: - name: spring-boot-exceptions - labels: - name: spring-boot-exceptions - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-exceptions - command: - - /bin/bash - env: - - # Type of raised exception - - name: CM_EXCEPTIONS_TYPE - value: 'java.lang.IllegalArgumentException' - - # Argument of raised exception - - name: CM_EXCEPTIONS_ARGUMENTS - value: 'java.lang.String:custom illegal argument exception' - - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-exceptions - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject network latency -kind: ChaosExperiment -metadata: - name: spring-boot-latency - labels: - name: spring-boot-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-latency - command: - - /bin/bash - env: - - # provide the latency (ms) - - name: LATENCY - value: '2000' - - # port of the spring boot application - - name: CM_PORT - value: '' - - # it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject cpu-stress -kind: ChaosExperiment -metadata: - name: spring-boot-cpu-stress - labels: - name: spring-boot-cpu-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-cpu-stress - command: - - /bin/bash - env: - - # it contains fraction of cpu to be stressed(0.95 equals 95%) - # it supports value in range [0.1,1.0] - - name: CPU_LOAD_FRACTION - value: '0.9' - - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-cpu-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject cpu-stress -kind: ChaosExperiment -metadata: - name: spring-boot-faults - labels: - name: spring-boot-faults - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-faults - command: - - /bin/bash - env: - - # it enables spring app-kill fault - - name: CM_KILL_APPLICATION_ACTIVE - value: '' - - # it enables spring-boot latency fault - - name: CM_LATENCY_ACTIVE - value: '' - - # provide the latency (ms) - # it is applicable when latency is active - - name: LATENCY - value: '2000' - - # it enables spring-boot memory stress fault - - name: CM_MEMORY_ACTIVE - value: '' - - # it contains fraction of memory to be stressed(0.70 equals 70%) - # it supports value in range [0.01,0.95] - # it is applicable when memory is active - - name: MEMORY_FILL_FRACTION - value: '0.70' - - # it enables spring-boot cpu stress fault - - name: CM_CPU_ACTIVE - value: '' - - # it contains fraction of cpu to be stressed(0.95 equals 95%) - # it supports value in range [0.1,1.0] - # it is applicable when cpu is active - - name: CPU_LOAD_FRACTION - value: '0.9' - - # it enables spring-boot exceptions fault - - name: CM_EXCEPTIONS_ACTIVE - value: '' - - # Type of raised exception - # it is applicable when exceptions is active - - name: CM_EXCEPTIONS_TYPE - value: 'java.lang.IllegalArgumentException' - - # Argument of raised exception - # it is applicable when exceptions is active - - name: CM_EXCEPTIONS_ARGUMENTS - value: 'java.lang.String:custom illegal argument exception' - - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-faults - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject memory-stress -kind: ChaosExperiment -metadata: - name: spring-boot-memory-stress - labels: - name: spring-boot-memory-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-memory-stress - command: - - /bin/bash - env: - - # it contains fraction of memory to be stressed(0.70 equals 70%) - # it supports value in range [0.01,0.95] - - name: MEMORY_FILL_FRACTION - value: '0.70' - - # port of the spring boot application - - name: CM_PORT - value: '' - - # it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-memory-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject app-kill -kind: ChaosExperiment -metadata: - name: spring-boot-app-kill - labels: - name: spring-boot-app-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-app-kill - command: - - /bin/bash - env: - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-app-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- diff --git a/charts/spring-boot/icons/spring-boot.png b/charts/spring-boot/icons/spring-boot.png deleted file mode 100644 index fa8728f1a7fc2774700515a50cdf0f39f8959365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2047 zcmVv6S3^7!xh{P>Z?bmH&ZfxKPJ;=tDE z%$v!9-0Re#%!!A;WsAXVtkIXI&yan(SLgBJx7Vgxs~L5-OqIrYlfbv|000MCNkltS2%Dzw!<=bnnoA|MS9!Ud#r2+c^`j7uLfDj9 z<)y8A`Z1^A^R7e%0szhcAVhs4>a_hQ*48T=N$HpY1c}JGZ<{sn5<=HVM{+9iyTwy? z`2#5Iu)aW8(gl`iy@c(_s>w}BZiCtj*+F5aVrRcnr$EoL4%B^S(6cK)NE;{Tr5&le z#q+%65UpDs)hIJi+-DC=;E1{11^z-S0a$Ccl~PRic{}_`+?UWzJQ277lI_v@CHtM$ zQ9_S0deYO99rx0TGnTsvR=v1<2Xlhkdd+Pd^BXj}Js+B5b8WER;`P2aA``Gtx*Ri> zUTVY*-py=?0p}v@>bvZsx5$X%@L&+y@j}REC0tUnM1<7;iA`^muLH& zU%zXWrE^#vY!;J7-nOkUS506WJl1qS_R zzmesHw?+)G7vBz}oK-EigyffM&0!L2yqwJ*<(4G6JXVOAt#iJ(&7%Dfk>XOAt!X7U z{RUmXNb4V@xrF9(epurTFkB?M84;Hi#j-cjXxO44mc*f%c&Fuf1|7mO4a>2*|c#vJ8<8_Zrn^!i+5=>>nHZ##)vq1J!pF%-x45$0<^kXv+okUTmByY((MOS z_=%OeL79@XeR%Kf7}zU8$QbbTRwm5HGY2s4sSwz4_0oFr{a*rovPaHda@u?rMsPQn z)2U>+rq}1nao-c;MgiT86!80(m83Vy~rk);nrBKE*3> z;`XrEkK_^2b4flE`2g$HlgawzeF3ZegHmxCwfry9Mc%vRwkw&wfkefDvPU&~h~9bP z{q!l0sor_xmgZqU+fXs>P#JzxwbbT20=g3cVg6O0S7E>CxDI4~Im|7(k-A(g2f!n!8be zP#hfgC~>>N_ErMl_2^`iAQtI~NWz=pFjv#L(SH#&OESL(VJu6}q-AmOeiE*#;d_&d zNlkTmu^6!e_F;9dF_Vh^Ex=Z@@Tu~joJrrX0?LYW`@Al%$s}ZMWj0Tz_9?d9(VYRM zGK z(?O*xpKRA_ya)U$A5)Xq(j*;@^(gr#bIR>Z(hte2(7x^?wX-Wh#9_ts)mnpZX(@%4 zC;XhBHHl+~m*wZ`?at2r?H9v39$L_>#Wwp9_>W(godNUjx(n%V*No!pk&0XQU!OPW zzpAs}xIX%?&YSedQtb`I(W!63474n>(TR;SQ%1cCTVKLa2&(3w*kJK%M^D`DnJ_2y zQ&vQ~U$h$F^ICwRcKVQlsPFc+V|27>ErxH?4FUhPSS8V%*{k{z0Z+R+i;ARalA_Gj dV$~P7`Uea#Uq;u%XJh~X002ovPDHLkV1mt58$tj8 diff --git a/charts/spring-boot/spring-boot-app-kill/experiment.yaml b/charts/spring-boot/spring-boot-app-kill/experiment.yaml deleted file mode 100644 index 6e5864b7d..000000000 --- a/charts/spring-boot/spring-boot-app-kill/experiment.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject app-kill -kind: ChaosExperiment -metadata: - name: spring-boot-app-kill - labels: - name: spring-boot-app-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-app-kill - command: - - /bin/bash - env: - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-app-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/spring-boot/spring-boot-app-kill/rbac.yaml b/charts/spring-boot/spring-boot-app-kill/rbac.yaml deleted file mode 100644 index 991ef22c3..000000000 --- a/charts/spring-boot/spring-boot-app-kill/rbac.yaml +++ /dev/null @@ -1,61 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: spring-boot-app-kill-sa - namespace: default - labels: - name: spring-boot-app-kill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: spring-boot-app-kill-sa - namespace: default - labels: - name: spring-boot-app-kill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute commands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: spring-boot-app-kill-sa - namespace: default - labels: - name: spring-boot-app-kill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: spring-boot-app-kill-sa -subjects: -- kind: ServiceAccount - name: spring-boot-app-kill-sa - namespace: default - diff --git a/charts/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml b/charts/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml deleted file mode 100644 index 184c5302c..000000000 --- a/charts/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-11-17T10:28:08Z - name: spring-boot-app-kill - version: 0.1.0 - annotations: - categories: Spring Boot - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: spring-boot-app-kill - categoryDescription: | - This experiment allows injecting Chaos Monkey app-kill assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. - It can target random pods with a Spring Boot application and allows configuring the assaults to inject app-kill. It tests the resiliency of the system when some applications are having unexpected faulty behavior. - keywords: - - Kubernetes - - K8S - - Spring Boot - - Pod - platforms: - - GKE - - Konvoy - - Packet(Kubeadm) - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Stephane Cazeaux - email: stephane.cazeaux@orange.com - - name: Shubham Chaudhary - email: shubham.chaudhary@harness.io - minKubeVersion: 1.12.0 - provider: - name: Orange - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/spring-boot/spring-boot-app-kill - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/spring-boot/spring-boot-app-kill - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/spring-boot-app-kill/experiment.yaml diff --git a/charts/spring-boot/spring-boot-cpu-stress/experiment.yaml b/charts/spring-boot/spring-boot-cpu-stress/experiment.yaml deleted file mode 100644 index 4c4f03021..000000000 --- a/charts/spring-boot/spring-boot-cpu-stress/experiment.yaml +++ /dev/null @@ -1,93 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject cpu-stress -kind: ChaosExperiment -metadata: - name: spring-boot-cpu-stress - labels: - name: spring-boot-cpu-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-cpu-stress - command: - - /bin/bash - env: - - # it contains fraction of cpu to be stressed(0.95 equals 95%) - # it supports value in range [0.1,1.0] - - name: CPU_LOAD_FRACTION - value: '0.9' - - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-cpu-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/spring-boot/spring-boot-cpu-stress/rbac.yaml b/charts/spring-boot/spring-boot-cpu-stress/rbac.yaml deleted file mode 100644 index 812ec5b0c..000000000 --- a/charts/spring-boot/spring-boot-cpu-stress/rbac.yaml +++ /dev/null @@ -1,61 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: spring-boot-cpu-stress-sa - namespace: default - labels: - name: spring-boot-cpu-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: spring-boot-cpu-stress-sa - namespace: default - labels: - name: spring-boot-cpu-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute commands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: spring-boot-cpu-stress-sa - namespace: default - labels: - name: spring-boot-cpu-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: spring-boot-cpu-stress-sa -subjects: -- kind: ServiceAccount - name: spring-boot-cpu-stress-sa - namespace: default - diff --git a/charts/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml b/charts/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml deleted file mode 100644 index a040b370e..000000000 --- a/charts/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-11-17T10:28:08Z - name: spring-boot-cpu-stress - version: 0.1.0 - annotations: - categories: Spring Boot - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: spring-boot-cpu-stress - categoryDescription: | - This experiment allows injecting Chaos Monkey cpu stress assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. - It can target random pods with a Spring Boot application and allows configuring the assaults to inject CPU stress. It tests the resiliency of the system when some applications are having unexpected faulty behavior. - keywords: - - Kubernetes - - K8S - - Spring Boot - - Pod - platforms: - - GKE - - Konvoy - - Packet(Kubeadm) - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Stephane Cazeaux - email: stephane.cazeaux@orange.com - - name: Shubham Chaudhary - email: shubham.chaudhary@harness.io - minKubeVersion: 1.12.0 - provider: - name: Orange - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/spring-boot/spring-boot-cpu-stress - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/spring-boot/spring-boot-cpu-stress - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/spring-boot-cpu-stress/experiment.yaml diff --git a/charts/spring-boot/spring-boot-exceptions/experiment.yaml b/charts/spring-boot/spring-boot-exceptions/experiment.yaml deleted file mode 100644 index d0b473234..000000000 --- a/charts/spring-boot/spring-boot-exceptions/experiment.yaml +++ /dev/null @@ -1,96 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject network latency -kind: ChaosExperiment -metadata: - name: spring-boot-exceptions - labels: - name: spring-boot-exceptions - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-exceptions - command: - - /bin/bash - env: - - # Type of raised exception - - name: CM_EXCEPTIONS_TYPE - value: 'java.lang.IllegalArgumentException' - - # Argument of raised exception - - name: CM_EXCEPTIONS_ARGUMENTS - value: 'java.lang.String:custom illegal argument exception' - - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-exceptions - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/spring-boot/spring-boot-exceptions/rbac.yaml b/charts/spring-boot/spring-boot-exceptions/rbac.yaml deleted file mode 100644 index 6ef38bad2..000000000 --- a/charts/spring-boot/spring-boot-exceptions/rbac.yaml +++ /dev/null @@ -1,61 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: spring-boot-exceptions-sa - namespace: default - labels: - name: spring-boot-exceptions-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: spring-boot-exceptions-sa - namespace: default - labels: - name: spring-boot-exceptions-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute commands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: spring-boot-exceptions-sa - namespace: default - labels: - name: spring-boot-exceptions-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: spring-boot-exceptions-sa -subjects: -- kind: ServiceAccount - name: spring-boot-exceptions-sa - namespace: default - diff --git a/charts/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml b/charts/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml deleted file mode 100644 index ac9e8ee24..000000000 --- a/charts/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-11-17T10:28:08Z - name: spring-boot-exceptions - version: 0.1.0 - annotations: - categories: Spring Boot - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: spring-boot-exceptions - categoryDescription: | - This experiment allows injecting Chaos Monkey exceptions assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. - It can target random pods with a Spring Boot application and allows configuring the assaults to inject exception. It tests the resiliency of the system when some applications are having unexpected faulty behavior. - keywords: - - Kubernetes - - K8S - - Spring Boot - - Pod - platforms: - - GKE - - Konvoy - - Packet(Kubeadm) - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Stephane Cazeaux - email: stephane.cazeaux@orange.com - - name: Shubham Chaudhary - email: shubham.chaudhary@harness.io - minKubeVersion: 1.12.0 - provider: - name: Orange - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/spring-boot/spring-boot-exceptions - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/spring-boot/spring-boot-exceptions - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/spring-boot-exceptions/experiment.yaml diff --git a/charts/spring-boot/spring-boot-faults/experiment.yaml b/charts/spring-boot/spring-boot-faults/experiment.yaml deleted file mode 100644 index 8f47e56fb..000000000 --- a/charts/spring-boot/spring-boot-faults/experiment.yaml +++ /dev/null @@ -1,135 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject cpu-stress -kind: ChaosExperiment -metadata: - name: spring-boot-faults - labels: - name: spring-boot-faults - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-faults - command: - - /bin/bash - env: - - # it enables spring app-kill fault - - name: CM_KILL_APPLICATION_ACTIVE - value: '' - - # it enables spring-boot latency fault - - name: CM_LATENCY_ACTIVE - value: '' - - # provide the latency (ms) - # it is applicable when latency is active - - name: LATENCY - value: '2000' - - # it enables spring-boot memory stress fault - - name: CM_MEMORY_ACTIVE - value: '' - - # it contains fraction of memory to be stressed(0.70 equals 70%) - # it supports value in range [0.01,0.95] - # it is applicable when memory is active - - name: MEMORY_FILL_FRACTION - value: '0.70' - - # it enables spring-boot cpu stress fault - - name: CM_CPU_ACTIVE - value: '' - - # it contains fraction of cpu to be stressed(0.95 equals 95%) - # it supports value in range [0.1,1.0] - # it is applicable when cpu is active - - name: CPU_LOAD_FRACTION - value: '0.9' - - # it enables spring-boot exceptions fault - - name: CM_EXCEPTIONS_ACTIVE - value: '' - - # Type of raised exception - # it is applicable when exceptions is active - - name: CM_EXCEPTIONS_TYPE - value: 'java.lang.IllegalArgumentException' - - # Argument of raised exception - # it is applicable when exceptions is active - - name: CM_EXCEPTIONS_ARGUMENTS - value: 'java.lang.String:custom illegal argument exception' - - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-faults - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/spring-boot/spring-boot-faults/rbac.yaml b/charts/spring-boot/spring-boot-faults/rbac.yaml deleted file mode 100644 index 3a124c956..000000000 --- a/charts/spring-boot/spring-boot-faults/rbac.yaml +++ /dev/null @@ -1,61 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: spring-boot-faults-sa - namespace: default - labels: - name: spring-boot-faults-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: spring-boot-faults-sa - namespace: default - labels: - name: spring-boot-faults-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute commands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: spring-boot-faults-sa - namespace: default - labels: - name: spring-boot-faults-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: spring-boot-faults-sa -subjects: -- kind: ServiceAccount - name: spring-boot-faults-sa - namespace: default - diff --git a/charts/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml b/charts/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml deleted file mode 100644 index 78e505533..000000000 --- a/charts/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-11-17T10:28:08Z - name: spring-boot-faults - version: 0.1.0 - annotations: - categories: Spring Boot - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: spring-boot-faults - categoryDescription: | - This experiment allows injecting Chaos Monkey assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. - It can target random pods with a Spring Boot application and allows configuring the assaults to inject Spring Boot faults. It tests the resiliency of the system when some applications are having unexpected faulty behavior. - keywords: - - Kubernetes - - K8S - - Spring Boot - - Pod - platforms: - - GKE - - Konvoy - - Packet(Kubeadm) - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Stephane Cazeaux - email: stephane.cazeaux@orange.com - - name: Shubham Chaudhary - email: shubham.chaudhary@harness.io - minKubeVersion: 1.12.0 - provider: - name: Orange - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/spring-boot/spring-boot-faults - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/spring-boot/spring-boot-faults - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/spring-boot-faults/experiment.yaml diff --git a/charts/spring-boot/spring-boot-latency/experiment.yaml b/charts/spring-boot/spring-boot-latency/experiment.yaml deleted file mode 100644 index 3ae2dc477..000000000 --- a/charts/spring-boot/spring-boot-latency/experiment.yaml +++ /dev/null @@ -1,92 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject network latency -kind: ChaosExperiment -metadata: - name: spring-boot-latency - labels: - name: spring-boot-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-latency - command: - - /bin/bash - env: - - # provide the latency (ms) - - name: LATENCY - value: '2000' - - # port of the spring boot application - - name: CM_PORT - value: '' - - # it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/spring-boot/spring-boot-latency/rbac.yaml b/charts/spring-boot/spring-boot-latency/rbac.yaml deleted file mode 100644 index 91b9639db..000000000 --- a/charts/spring-boot/spring-boot-latency/rbac.yaml +++ /dev/null @@ -1,61 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: spring-boot-latency-sa - namespace: default - labels: - name: spring-boot-latency-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: spring-boot-latency-sa - namespace: default - labels: - name: spring-boot-latency-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute commands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: spring-boot-latency-sa - namespace: default - labels: - name: spring-boot-latency-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: spring-boot-latency-sa -subjects: -- kind: ServiceAccount - name: spring-boot-latency-sa - namespace: default - diff --git a/charts/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml b/charts/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml deleted file mode 100644 index f8553bded..000000000 --- a/charts/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-11-17T10:28:08Z - name: spring-boot-latency - version: 0.1.0 - annotations: - categories: Spring Boot - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: spring-boot-latency - categoryDescription: | - This experiment allows injecting Chaos Monkey network latency assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. - It can target random pods with a Spring Boot application and allows configuring the assaults to inject latency. It tests the resiliency of the system when some applications are having unexpected faulty behavior. - keywords: - - Kubernetes - - K8S - - Spring Boot - - Pod - platforms: - - GKE - - Konvoy - - Packet(Kubeadm) - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Stephane Cazeaux - email: stephane.cazeaux@orange.com - - name: Shubham Chaudhary - email: shubham.chaudhary@harness.io - minKubeVersion: 1.12.0 - provider: - name: Orange - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/spring-boot/spring-boot-latency - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/spring-boot/spring-boot-latency - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/spring-boot-latency/experiment.yaml diff --git a/charts/spring-boot/spring-boot-memory-stress/experiment.yaml b/charts/spring-boot/spring-boot-memory-stress/experiment.yaml deleted file mode 100644 index 80be563bc..000000000 --- a/charts/spring-boot/spring-boot-memory-stress/experiment.yaml +++ /dev/null @@ -1,93 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject memory-stress -kind: ChaosExperiment -metadata: - name: spring-boot-memory-stress - labels: - name: spring-boot-memory-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-memory-stress - command: - - /bin/bash - env: - - # it contains fraction of memory to be stressed(0.70 equals 70%) - # it supports value in range [0.01,0.95] - - name: MEMORY_FILL_FRACTION - value: '0.70' - - # port of the spring boot application - - name: CM_PORT - value: '' - - # it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-memory-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/spring-boot/spring-boot-memory-stress/rbac.yaml b/charts/spring-boot/spring-boot-memory-stress/rbac.yaml deleted file mode 100644 index 4b467751f..000000000 --- a/charts/spring-boot/spring-boot-memory-stress/rbac.yaml +++ /dev/null @@ -1,61 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: spring-boot-memory-stress-sa - namespace: default - labels: - name: spring-boot-memory-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: spring-boot-memory-stress-sa - namespace: default - labels: - name: spring-boot-memory-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute commands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: spring-boot-memory-stress-sa - namespace: default - labels: - name: spring-boot-memory-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: spring-boot-memory-stress-sa -subjects: -- kind: ServiceAccount - name: spring-boot-memory-stress-sa - namespace: default - diff --git a/charts/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml b/charts/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml deleted file mode 100644 index 568687cf2..000000000 --- a/charts/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-11-17T10:28:08Z - name: spring-boot-memory-stress - version: 0.1.0 - annotations: - categories: Spring Boot - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: spring-boot-memory-stress - categoryDescription: | - This experiment allows injecting Chaos Monkey memory-stress assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. - It can target random pods with a Spring Boot application and allows configuring the assaults to inject memory-stress. It tests the resiliency of the system when some applications are having unexpected faulty behavior. - keywords: - - Kubernetes - - K8S - - Spring Boot - - Pod - platforms: - - GKE - - Konvoy - - Packet(Kubeadm) - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Stephane Cazeaux - email: stephane.cazeaux@orange.com - - name: Shubham Chaudhary - email: shubham.chaudhary@harness.io - minKubeVersion: 1.12.0 - provider: - name: Orange - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/spring-boot/spring-boot-memory-stress - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/spring-boot/spring-boot-memory-stress - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/spring-boot-memory-stress/experiment.yaml diff --git a/charts/spring-boot/spring-boot.chartserviceversion.yaml b/charts/spring-boot/spring-boot.chartserviceversion.yaml deleted file mode 100644 index 5f2409e04..000000000 --- a/charts/spring-boot/spring-boot.chartserviceversion.yaml +++ /dev/null @@ -1,40 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-11-17T10:28:08Z - name: spring-boot - version: 0.1.0 - annotations: - categories: Spring Boot - chartDescription: Injects spring boot chaos -spec: - displayName: Spring Boot Chaos - categoryDescription: > - It contains chaos to disrupt state of spring-boot application. - experiments: - - spring-boot-app-kill - - spring-boot-cpu-stress - - spring-boot-memory-stress - - spring-boot-latency - - spring-boot-exceptions - - spring-boot-faults - keywords: - - Kubernetes - - Spring Boot - - K8S - - Pod - maintainers: - - name: Stephane Cazeaux - email: stephane.cazeaux@orange.com - - name: Shubham Chaudhary - email: shubham.chaudhary@harness.io - minKubeVersion: 1.12.0 - provider: - name: Orange - links: - - name: Documentation - url: https://spring.io/projects/spring-boot - icon: - - url: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/spring-boot/icons/spring-boot.png - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/spring-boot/experiments.yaml diff --git a/charts/vmware/experiments.yaml b/charts/vmware/experiments.yaml deleted file mode 100644 index 57f67db87..000000000 --- a/charts/vmware/experiments.yaml +++ /dev/null @@ -1,96 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops one or more VMs for a certain chaos duration. -kind: ChaosExperiment -metadata: - name: vm-poweroff - labels: - name: vm-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name vm-poweroff - command: - - /bin/bash - env: - - - name: VCENTERSERVER - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERSERVER - - - name: VCENTERUSER - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERUSER - - - name: VCENTERPASS - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERPASS - - # provide the VM MOIDs as comma separated values - - name: APP_VM_MOIDS - value: '' - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - - name: RAMP_TIME - value: '' - - # parallel or sequence; the mode of chaos sequence, defaults to parallel - - name: SEQUENCE - value: 'parallel' - - labels: - experiment: vm-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- diff --git a/charts/vmware/icons/vmware.png b/charts/vmware/icons/vmware.png deleted file mode 100644 index 50807e52d29dd34e61cb79965092ada938a64a67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74909 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 ZwA;&cO|19@`9tudrJ;K@U(F)qzW`eC3Ge^_ diff --git a/charts/vmware/vm-poweroff/engine.yaml b/charts/vmware/vm-poweroff/engine.yaml deleted file mode 100644 index a9fa88a46..000000000 --- a/charts/vmware/vm-poweroff/engine.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: vmware-vm-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: vm-poweroff-sa - experiments: - - name: vm-poweroff - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # provide VM MOIDs as comma separated values - - name: APP_VM_MOIDS - value: '' diff --git a/charts/vmware/vm-poweroff/experiment.yaml b/charts/vmware/vm-poweroff/experiment.yaml deleted file mode 100644 index cab2259f2..000000000 --- a/charts/vmware/vm-poweroff/experiment.yaml +++ /dev/null @@ -1,94 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops one or more VMs for a certain chaos duration. -kind: ChaosExperiment -metadata: - name: vm-poweroff - labels: - name: vm-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name vm-poweroff - command: - - /bin/bash - env: - - - name: VCENTERSERVER - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERSERVER - - - name: VCENTERUSER - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERUSER - - - name: VCENTERPASS - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERPASS - - # provide the VM MOIDs as comma separated values - - name: APP_VM_MOIDS - value: '' - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - - name: RAMP_TIME - value: '' - - # parallel or sequence; the mode of chaos sequence, defaults to parallel - - name: SEQUENCE - value: 'parallel' - - labels: - experiment: vm-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/charts/vmware/vm-poweroff/rbac.yaml b/charts/vmware/vm-poweroff/rbac.yaml deleted file mode 100644 index 4bbd8eecb..000000000 --- a/charts/vmware/vm-poweroff/rbac.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: vm-poweroff-sa - namespace: default - labels: - name: vm-poweroff-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: vm-poweroff-sa - labels: - name: vm-poweroff-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: vm-poweroff-sa - labels: - name: vm-poweroff-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: vm-poweroff-sa -subjects: -- kind: ServiceAccount - name: vm-poweroff-sa - namespace: default - diff --git a/charts/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml b/charts/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml deleted file mode 100644 index 0b2ad002d..000000000 --- a/charts/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-04-29T10:28:08Z - name: vm-poweroff - annotations: - categories: vmware - vendor: Wipro, ChaosNative - support: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN -spec: - displayName: vm-poweroff - categoryDescription: | - This experiment causes power-off of target VMWare VM(s) for a certain chaos duration: - - Causes power-off of the VMWare VM(s) provided by the Moid(s) of the instance. - - It helps to check the performance of the application/services on the instance. - - Currently, the experiment is supported for vsphere version 6.X (Support for 7.X will be added soon). - - keywords: - - Vmware - - VM - platforms: - - vmware - maturity: alpha - maintainers: - - name: Delphine Joyneer, Neelanjan Manna - email: golkonda.joyneer@wipro.com, neelanjan@chaosnative.com - provider: - name: Wipro, ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/vmware/vm-poweroff - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/vmware/vm-poweroff/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/vmware/vm-poweroff/experiment.yaml diff --git a/charts/vmware/vmware.chartserviceversion.yaml b/charts/vmware/vmware.chartserviceversion.yaml deleted file mode 100644 index 8c4ed2623..000000000 --- a/charts/vmware/vmware.chartserviceversion.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-04-29T10:28:08Z - name: vmware - version: 0.1.0 - annotations: - categories: vmware - chartDescription: Injects chaos on VMWare components -spec: - displayName: VMWare Chaos - categoryDescription: > - Contains chaos to disrupt the state of VMWare resources - experiments: - - vm-poweroff - keywords: - - vmware - - VM - maintainers: - - name: Delphine Joyneer, Neelanjan Manna - email: golkonda.joyneer@wipro.com, neelanjan@chaosnative.com - provider: - name: Wipro, ChaosNative - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/vmware - - name: Community Slack - url: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN - icon: - - url: - mediatype: - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/vmware/experiments.yaml diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml b/experiments/aws-ssm/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml deleted file mode 100644 index bc0191672..000000000 --- a/experiments/aws-ssm/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-10T10:28:08Z - name: aws-ssm-chaos-by-id - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: aws-ssm-chaos-by-id - categoryDescription: | - AWS SSM Chaos By ID contains chaos to disrupt the state of infra resources. The experiment can induce chaos on AWS resources using Amazon SSM Run Command This is carried out by using SSM Docs that defines the actions performed by Systems Manager on your managed instances (having SSM agent installed) which let us perform chaos experiments on resources. - - Causes chaos on AWS ec2 instances with given instance ID(s) using SSM docs for total chaos duration with the specified chaos interval. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the target application pod(if provided). - keywords: - - SSM - - AWS - - EC2 - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit@chaosnative.com - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/aws-ssm/aws-ssm-chaos-by-id - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws-ssm/aws-ssm-chaos-by-id/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-id/engine.yaml b/experiments/aws-ssm/aws-ssm-chaos-by-id/engine.yaml deleted file mode 100644 index 1133a5a7e..000000000 --- a/experiments/aws-ssm/aws-ssm-chaos-by-id/engine.yaml +++ /dev/null @@ -1,62 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - engineState: 'active' - chaosServiceAccount: aws-ssm-chaos-by-id-sa - experiments: - - name: aws-ssm-chaos-by-id - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '60' - - # set chaos duration (in sec) as desired - - name: CHAOS_INTERVAL - value: '60' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - # provide the region name of the target instances - - name: REGION - value: '' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to be comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml b/experiments/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml deleted file mode 100644 index c0f9996c8..000000000 --- a/experiments/aws-ssm/aws-ssm-chaos-by-id/experiment.yaml +++ /dev/null @@ -1,129 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute AWS SSM Chaos on given ec2 instance IDs -kind: ChaosExperiment -metadata: - name: aws-ssm-chaos-by-id - labels: - name: aws-ssm-chaos-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name aws-ssm-chaos-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: CHAOS_INTERVAL - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - - name: REGION - value: '' - - # it defines the sequence of chaos execution for multiple target instances - # supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' - - # provide the number of workers for memory stress - - name: NUMBER_OF_WORKERS - value: '1' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to be comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: aws-ssm-chaos-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-id/rbac.yaml b/experiments/aws-ssm/aws-ssm-chaos-by-id/rbac.yaml deleted file mode 100644 index 72db75e44..000000000 --- a/experiments/aws-ssm/aws-ssm-chaos-by-id/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: aws-ssm-chaos-by-id-sa - namespace: default - labels: - name: aws-ssm-chaos-by-id-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: aws-ssm-chaos-by-id-sa - labels: - name: aws-ssm-chaos-by-id-sa - app.kubernetes.io/part-of: litmus -rules: -# Create and monitor the experiment & helper pods -- apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] -# Performs CRUD operations on the events inside chaosengine and chaosresult -- apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] -# Fetch configmaps & secrets details and mount it to the experiment pod (if specified) -- apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] -# Track and get the runner, experiment, and helper pods log -- apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] -# for creating and managing to execute comands inside target container -- apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] -# for configuring and monitor the experiment job by the chaos-runner pod -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] -# for creation, status polling and deletion of litmus chaos resources used within a chaos workflow -- apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: aws-ssm-chaos-by-id-sa - labels: - name: aws-ssm-chaos-by-id-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: aws-ssm-chaos-by-id-sa -subjects: -- kind: ServiceAccount - name: aws-ssm-chaos-by-id-sa - namespace: default diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml b/experiments/aws-ssm/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml deleted file mode 100644 index fea5b08f8..000000000 --- a/experiments/aws-ssm/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-10T10:28:08Z - name: aws-ssm-chaos-by-tag - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: aws-ssm-chaos-by-tag - categoryDescription: | - AWS SSM Chaos By ID contains chaos to disrupt the state of infra resources. The experiment can induce chaos on AWS resources using Amazon SSM Run Command This is carried out by using SSM Docs that defines the actions performed by Systems Manager on your managed instances (having SSM agent installed) which let us perform chaos experiments on resources. - - Causes chaos on AWS ec2 instances with given instance tag using SSM docs for total chaos duration with the specified chaos interval. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the target application pod(if provided). - keywords: - - SSM - - AWS - - EC2 - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit@chaosnative.com - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/aws-ssm/aws-ssm-chaos-by-tag - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws-ssm/aws-ssm-chaos-by-tag/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-tag/engine.yaml b/experiments/aws-ssm/aws-ssm-chaos-by-tag/engine.yaml deleted file mode 100644 index 19d294b60..000000000 --- a/experiments/aws-ssm/aws-ssm-chaos-by-tag/engine.yaml +++ /dev/null @@ -1,62 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - engineState: 'active' - chaosServiceAccount: aws-ssm-chaos-by-tag-sa - experiments: - - name: aws-ssm-chaos-by-tag - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '60' - - # set chaos duration (in sec) as desired - - name: CHAOS_INTERVAL - value: '60' - - # provide tag of the target ec2 instances - # ex: team:devops (key:value) - - name: EC2_INSTANCE_TAG - value: '' - - # provide the region name of the target instances - - name: REGION - value: '' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml b/experiments/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml deleted file mode 100644 index 2ca8c4546..000000000 --- a/experiments/aws-ssm/aws-ssm-chaos-by-tag/experiment.yaml +++ /dev/null @@ -1,133 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute AWS SSM Chaos on given ec2 instance Tag -kind: ChaosExperiment -metadata: - name: aws-ssm-chaos-by-tag - labels: - name: aws-ssm-chaos-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name aws-ssm-chaos-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: CHAOS_INTERVAL - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide tag of the target ec2 instances - # ex: team:devops (key:value) - - name: EC2_INSTANCE_TAG - value: '' - - - name: REGION - value: '' - - # it defines the sequence of chaos execution for multiple target instances - # supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # percentage of total instance to target - - name: INSTANCE_AFFECTED_PERC - value: '' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' - - # provide the number of workers for memory stress - - name: NUMBER_OF_WORKERS - value: '1' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: aws-ssm-chaos-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml b/experiments/aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml deleted file mode 100644 index 473d90206..000000000 --- a/experiments/aws-ssm/aws-ssm-chaos-by-tag/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: aws-ssm-chaos-by-tag-sa - namespace: default - labels: - name: aws-ssm-chaos-by-tag-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: aws-ssm-chaos-by-tag-sa - labels: - name: aws-ssm-chaos-by-tag-sa - app.kubernetes.io/part-of: litmus -rules: -# Create and monitor the experiment & helper pods -- apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] -# Performs CRUD operations on the events inside chaosengine and chaosresult -- apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] -# Fetch configmaps & secrets details and mount it to the experiment pod (if specified) -- apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] -# Track and get the runner, experiment, and helper pods log -- apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] -# for creating and managing to execute comands inside target container -- apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] -# for configuring and monitor the experiment job by the chaos-runner pod -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] -# for creation, status polling and deletion of litmus chaos resources used within a chaos workflow -- apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: aws-ssm-chaos-by-tag-sa - labels: - name: aws-ssm-chaos-by-tag-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: aws-ssm-chaos-by-tag-sa -subjects: -- kind: ServiceAccount - name: aws-ssm-chaos-by-tag-sa - namespace: default diff --git a/experiments/aws-ssm/aws-ssm.chartserviceversion.yaml b/experiments/aws-ssm/aws-ssm.chartserviceversion.yaml deleted file mode 100644 index 38f76a87d..000000000 --- a/experiments/aws-ssm/aws-ssm.chartserviceversion.yaml +++ /dev/null @@ -1,38 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-11T10:28:08Z - name: aws-ssm - version: 0.1.0 - annotations: - categories: Kubernetes - chartDescription: Injects aws ssm chaos -spec: - displayName: AWS SSM - categoryDescription: > - aws ssm contains chaos to disrupt state of aws resources by litmus aws ssm docs - experiments: - - name: aws-ssm-chaos-by-id - description: "" - - name: aws-ssm-chaos-by-tag - description: "" - keywords: - - AWS - - SSM - - EC2 - maintainers: - - name: ksatchit - email: karthik@chaosnative.com - provider: - name: ChaosNative - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/aws-ssm - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - icon: - - url: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/aws-ssm/icons/aws-ssm.png - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/aws-ssm/experiments.yaml diff --git a/experiments/aws-ssm/aws-ssm.package.yaml b/experiments/aws-ssm/aws-ssm.package.yaml deleted file mode 100644 index cfae7ec76..000000000 --- a/experiments/aws-ssm/aws-ssm.package.yaml +++ /dev/null @@ -1,8 +0,0 @@ -packageName: aws-ssm -experiments: - - name: aws-ssm-chaos-by-id - CSV: aws-ssm-chaos-by-id.chartserviceversion.yaml - desc: "aws-ssm-chaos-by-id" - - name: aws-ssm-chaos-by-tag - CSV: aws-ssm-chaos-by-tag.chartserviceversion.yaml - desc: "aws-ssm-chaos-by-tag" \ No newline at end of file diff --git a/experiments/aws-ssm/experiments.yaml b/experiments/aws-ssm/experiments.yaml deleted file mode 100644 index 6915473cb..000000000 --- a/experiments/aws-ssm/experiments.yaml +++ /dev/null @@ -1,266 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute AWS SSM Chaos on given ec2 instance IDs -kind: ChaosExperiment -metadata: - name: aws-ssm-chaos-by-id - labels: - name: aws-ssm-chaos-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name aws-ssm-chaos-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: CHAOS_INTERVAL - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - - name: REGION - value: '' - - # it defines the sequence of chaos execution for multiple target instances - # supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' - - # provide the number of workers for memory stress - - name: NUMBER_OF_WORKERS - value: '1' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to be comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: aws-ssm-chaos-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute AWS SSM Chaos on given ec2 instance Tag -kind: ChaosExperiment -metadata: - name: aws-ssm-chaos-by-tag - labels: - name: aws-ssm-chaos-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name aws-ssm-chaos-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: CHAOS_INTERVAL - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide tag of the target ec2 instances - # ex: team:devops (key:value) - - name: EC2_INSTANCE_TAG - value: '' - - - name: REGION - value: '' - - # it defines the sequence of chaos execution for multiple target instances - # supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # percentage of total instance to target - - name: INSTANCE_AFFECTED_PERC - value: '' - - # Provide the name of ssm doc - # if not using the default stress docs - - name: DOCUMENT_NAME - value: '' - - # Provide the type of ssm doc - # if not using the default stress docs - - name: DOCUMENT_TYPE - value: '' - - # Provide the format of ssm doc - # if not using the default stress docs - - name: DOCUMENT_FORMAT - value: '' - - # Provide the path of ssm doc - # if not using the default stress docs - - name: DOCUMENT_PATH - value: '' - - # if you want to install dependencies to run default ssm docs - - name: INSTALL_DEPENDENCIES - value: 'True' - - # provide the number of workers for memory stress - - name: NUMBER_OF_WORKERS - value: '1' - - # provide the percentage of available memory to stress - - name: MEMORY_PERCENTAGE - value: '80' - - # provide the CPU chores to comsumed - # 0 will consume all the available cpu cores - - name: CPU_CORE - value: '0' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: aws-ssm-chaos-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- diff --git a/experiments/aws-ssm/icons/aws-ssm-chaos-by-id.png b/experiments/aws-ssm/icons/aws-ssm-chaos-by-id.png deleted file mode 100644 index fd09e34f6cd5c49336db1bb357ebf14d82201274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3152 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 - Azure category of chaos experiments causes the disruption of the azure serives for a certain chaos duration. - experiments: - - name: azure-instance-stop - description: "" - - name: azure-disk-loss - description: "" - keywords: - - Azure - - Instance - - AKS - - Scaleset - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - provider: - name: Chaos Native - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/azure/experiments/azure - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/contents/#cloud-infrastructure - icon: - - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/azure/experiments.yaml diff --git a/experiments/azure/azure.package.yaml b/experiments/azure/azure.package.yaml deleted file mode 100644 index 904710a36..000000000 --- a/experiments/azure/azure.package.yaml +++ /dev/null @@ -1,10 +0,0 @@ -packageName: azure -experiments: - - name: azure-instance-stop - CSV: azure-instance-stop.chartserviceversion.yaml - desc: "azure-instance-stop" - - - name: azure-disk-loss - CSV: azure-disk-loss.chartserviceversion.yaml - desc: "azure-disk-loss" - diff --git a/experiments/azure/experiments.yaml b/experiments/azure/experiments.yaml deleted file mode 100644 index 06d46d207..000000000 --- a/experiments/azure/experiments.yaml +++ /dev/null @@ -1,195 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Terminating azure VM instance -kind: ChaosExperiment -metadata: - name: azure-instance-stop - labels: - name: azure-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name azure-instance-stop - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the target instance name(s) (comma separated if multiple) - - name: AZURE_INSTANCE_NAME - value: '' - - # provide the resource group of the instance - - name: RESOURCE_GROUP - value: '' - - # accepts enable/disable, default is disable - - name: SCALE_SET - value: '' - - # Provide the path of aks credentials mounted from secret - - name: AZURE_AUTH_LOCATION - value: '/tmp/azure.auth' - - - name: SEQUENCE - value: 'parallel' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: azure-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaches disk from the VM and then re-attaches disk to the VM -kind: ChaosExperiment -metadata: - name: azure-disk-loss - labels: - name: azure-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name azure-disk-loss - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - - name: LIB - value: 'litmus' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the resource group of the instance - - name: RESOURCE_GROUP - value: '' - - # accepts enable/disable, default is disable - - name: SCALE_SET - value: '' - - # provide the virtual disk names (comma separated if multiple) - - name: VIRTUAL_DISK_NAMES - value: '' - - # provide the sequence type for the run. Options: serial/parallel - - name: SEQUENCE - value: 'parallel' - - # provide the path to aks credentials mounted from secret - - name: AZURE_AUTH_LOCATION - value: '/tmp/azure.auth' - - labels: - name: azure-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- diff --git a/experiments/azure/icons/azure-disk-loss.png b/experiments/azure/icons/azure-disk-loss.png deleted file mode 100644 index 5baec5e1850d10cf4b49c165957ed4c7a4739f3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22398 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 + Injects pod network loss chaos in the bank of anthos application + faults: + - name: pod-network-loss + description: Injects network packet loss on pods belonging to an app deployment + keywords: + - Kubernetes + platforms: + - GKE + - Minikube + - Packet(Kubeadm) + - EKS + - AKS + icon: + - url: + mediatype: "" diff --git a/workflows/bank-of-anthos/workflow.yaml b/experiments/bank-of-anthos/experiment.yaml similarity index 100% rename from workflows/bank-of-anthos/workflow.yaml rename to experiments/bank-of-anthos/experiment.yaml diff --git a/workflows/bank-of-anthos/workflow_cron.yaml b/experiments/bank-of-anthos/experiment_cron.yaml similarity index 100% rename from workflows/bank-of-anthos/workflow_cron.yaml rename to experiments/bank-of-anthos/experiment_cron.yaml diff --git a/experiments/coredns/coredns-pod-delete/coredns-pod-delete.chartserviceversion.yaml b/experiments/coredns/coredns-pod-delete/coredns-pod-delete.chartserviceversion.yaml deleted file mode 100644 index d0288b4f4..000000000 --- a/experiments/coredns/coredns-pod-delete/coredns-pod-delete.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-12-30T10:28:08Z - name: coredns-pod-delete - version: 0.1.7 - annotations: - categories: CoreDNS - vendor: CNCF - support: https://slack.cncf.io/ -spec: - displayName: coredns-pod-delete - categoryDescription: | - Pod delete contains chaos to disrupt state of coredns resources. Experiments can inject random pod delete failures against specified application. - - Causes (forced/graceful) pod failure of coredns replicas of an application deployment. - - Tests of successful resolution of app services during chaos injection - keywords: - - Kubernetes - - K8S - - CoreDNS - - DNS - - Pod - platforms: - - GKE - - Minikube - maturity: alpha - maintainers: - - name: Raj Babu Das - email: raj.das@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/coredns/pod_delete - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/coredns-pod-delete/ - - name: Video - url: https://www.youtube.com/watch?v=pwo5idKW7q8 - chaosexpcrdlink: https://raw.githubusercontent.com/litmuchaos/chaos-charts/master/charts/coredns/coredns-pod-delete/experiment.yaml \ No newline at end of file diff --git a/experiments/coredns/coredns-pod-delete/engine.yaml b/experiments/coredns/coredns-pod-delete/engine.yaml deleted file mode 100644 index 329bdef59..000000000 --- a/experiments/coredns/coredns-pod-delete/engine.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: engine-coredns - namespace: kube-system -spec: - appinfo: - appns: 'kube-system' - applabel: 'k8s-app=kube-dns' - appkind: 'deployment' - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: coredns-pod-delete-sa - experiments: - - name: coredns-pod-delete - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - - - name: CHAOS_NAMESPACE - value: 'kube-system' \ No newline at end of file diff --git a/experiments/coredns/coredns-pod-delete/experiment.yaml b/experiments/coredns/coredns-pod-delete/experiment.yaml deleted file mode 100644 index 44edb1909..000000000 --- a/experiments/coredns/coredns-pod-delete/experiment.yaml +++ /dev/null @@ -1,72 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes coredns pod in kube-system namespace -kind: ChaosExperiment -metadata: - name: coredns-pod-delete - labels: - name: coredns-pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - permissions: - - apiGroups: - - "" - - "batch" - - "litmuschaos.io" - resources: - - "services" - - "jobs" - - "pods" - - "pods/log" - - "events" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "get" - - "list" - - "patch" - - "create" - - "update" - - "delete" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/coredns/pod_delete/pod_delete_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # provide the kill count - - name: KILL_COUNT - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - #supported libs are litmus and powerfulseal - - name: LIB - value: 'litmus' - - - name: LIB_IMAGE - value: 'litmuschaos/pod-delete-helper:latest' - - labels: - name: coredns-pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/coredns/coredns-pod-delete/rbac.yaml b/experiments/coredns/coredns-pod-delete/rbac.yaml deleted file mode 100644 index 00fe7dbd3..000000000 --- a/experiments/coredns/coredns-pod-delete/rbac.yaml +++ /dev/null @@ -1,36 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: coredns-pod-delete-sa - namespace: kube-system - labels: - name: coredns-pod-delete-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: coredns-pod-delete-sa - labels: - name: coredns-pod-delete-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","litmuschaos.io","batch"] - resources: ["services", "pods","jobs","events","pods/log","chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: coredns-pod-delete-sa - labels: - name: coredns-pod-delete-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: coredns-pod-delete-sa -subjects: -- kind: ServiceAccount - name: coredns-pod-delete-sa - namespace: kube-system diff --git a/experiments/coredns/coredns.chartserviceversion.yaml b/experiments/coredns/coredns.chartserviceversion.yaml deleted file mode 100644 index dbe4fc8bc..000000000 --- a/experiments/coredns/coredns.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-12-30T10:28:08Z - name: coredns - version: 0.1.4 - annotations: - categories: Kubernetes - chartDescription: Injects coredns chaos -spec: - displayName: CoreDNS chaos - categoryDescription: > - CoreDNS is an open-source system for DNS management of containerized applications. - It helps to resolve services to IP address. It will install all the experiments which can be used to inject chaos into containerized applications. - experiments: - - name: coredns-pod-delete - description: "" - keywords: - - Kubernetes - - K8S - - Pod - - CoreDNS - - DNS - maintainers: - - name: Raj Babu Das - email: raj.das@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: CoreDNS Website - url: https://coredns.io - - name: Source Code - url: https://github.com/coredns/coredns - - name: CoreDNS Slack - url: https://slack.cncf.io/ - - name: Documentation - url: https://coredns.io/manual/toc/ - icon: - - url: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/coredns/icons/coredns-pod-delete.png - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/coredns/experiments.yaml diff --git a/experiments/coredns/coredns.package.yaml b/experiments/coredns/coredns.package.yaml deleted file mode 100644 index 9fa1e666d..000000000 --- a/experiments/coredns/coredns.package.yaml +++ /dev/null @@ -1,5 +0,0 @@ -packageName: coredns -experiments: - - name: coredns-pod-delete - CSV: coredns-pod-delete.chartserviceversion.yaml - desc: "coredns pod delete experiment" \ No newline at end of file diff --git a/experiments/coredns/experiments.yaml b/experiments/coredns/experiments.yaml deleted file mode 100644 index 46c81be3e..000000000 --- a/experiments/coredns/experiments.yaml +++ /dev/null @@ -1,74 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes coredns pod in kube-system namespace -kind: ChaosExperiment -metadata: - name: coredns-pod-delete - labels: - name: coredns-pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - permissions: - - apiGroups: - - "" - - "batch" - - "litmuschaos.io" - resources: - - "services" - - "jobs" - - "pods" - - "pods/log" - - "events" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "get" - - "list" - - "patch" - - "create" - - "update" - - "delete" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/coredns/pod_delete/pod_delete_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # provide the kill count - - name: KILL_COUNT - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - #supported libs are litmus and powerfulseal - - name: LIB - value: 'litmus' - - - name: LIB_IMAGE - value: 'litmuschaos/pod-delete-helper:latest' - - labels: - name: coredns-pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- diff --git a/experiments/coredns/icons/coredns-pod-delete.png b/experiments/coredns/icons/coredns-pod-delete.png deleted file mode 100644 index c643b7b898a3ed9c82a48e03046b2c98c0a119bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20309 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 diff --git a/experiments/coredns/icons/coredns.png b/experiments/coredns/icons/coredns.png deleted file mode 100644 index c643b7b898a3ed9c82a48e03046b2c98c0a119bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20309 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 diff --git a/experiments/gcp/experiments.yaml b/experiments/gcp/experiments.yaml deleted file mode 100644 index c262a5d1e..000000000 --- a/experiments/gcp/experiments.yaml +++ /dev/null @@ -1,374 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back -kind: ChaosExperiment -metadata: - name: gcp-vm-disk-loss-by-label - labels: - name: gcp-vm-disk-loss-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-disk-loss-by-label - command: - - /bin/bash - env: - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # set the GCP project id - - name: GCP_PROJECT_ID - value: '' - - # set the zone in which all the disks are created - # all the disks must exist in the same zone - - name: DISK_ZONES - value: '' - - # set the label of the target disk volumes - - name: DISK_VOLUME_LABEL - value: '' - - # set the percentage value of the disks with the given label - # which should be targeted as part of the chaos injection - - name: DISK_AFFECTED_PERC - value: '' - - labels: - name: gcp-vm-disk-loss-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them -kind: ChaosExperiment -metadata: - name: gcp-vm-instance-stop-by-label - labels: - name: gcp-vm-instance-stop-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-instance-stop-by-label - command: - - /bin/bash - env: - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - - name: SEQUENCE - value: 'parallel' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Label of the target vm instance(s) - - name: INSTANCE_LABEL - value: '' - - # Zone in which the target vm instance(s) filtered by the label exist - # all the instances should lie in a single zone - - name: INSTANCE_ZONES - value: '' - - # enable it if the target instance is a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # set the percentage value of the instances with the given label - # which should be targeted as part of the chaos injection - - name: INSTANCE_AFFECTED_PERC - value: '' - - labels: - name: gcp-vm-instance-stop-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops GCP VM instances and GKE nodes for a specified duration and later restarts them -kind: ChaosExperiment -metadata: - name: gcp-vm-instance-stop - labels: - name: gcp-vm-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-instance-stop - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # parallel or serial; determines how the VM instances are terminated, all at once or one at a time - - name: SEQUENCE - value: 'parallel' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - # period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # enable or disable; shall be set to enable if the target instances are a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # Instance name of the target vm instance(s) - # Multiple instance names can be provided as comma separated values ex: instance1,instance2 - - name: VM_INSTANCE_NAMES - value: '' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Instance zone(s) of the target vm instance(s) - # If more than one instance is targetted, provide zone for each in the order of their - # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 - - name: INSTANCE_ZONES - value: '' - - labels: - name: gcp-vm-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back -kind: ChaosExperiment -metadata: - name: gcp-vm-disk-loss - labels: - name: gcp-vm-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-disk-loss - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - - name: LIB - value: 'litmus' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # parallel or serial; determines how chaos is injected - - name: SEQUENCE - value: 'parallel' - - # set the GCP project id - - name: GCP_PROJECT_ID - value: '' - - # set the disk volume name(s) as comma seperated values - # eg. volume1,volume2,... - - name: DISK_VOLUME_NAMES - value: '' - - # set the disk zone(s) as comma seperated values in the corresponding - # order of DISK_VOLUME_NAME - # eg. zone1,zone2,... - - name: DISK_ZONES - value: '' - - labels: - name: gcp-vm-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- diff --git a/experiments/gcp/gcp-vm-disk-loss-by-label/engine.yaml b/experiments/gcp/gcp-vm-disk-loss-by-label/engine.yaml deleted file mode 100644 index 827a47e4d..000000000 --- a/experiments/gcp/gcp-vm-disk-loss-by-label/engine.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: gcp-disk-chaos -spec: - engineState: 'active' - chaosServiceAccount: gcp-vm-disk-loss-by-label-sa - experiments: - - name: gcp-vm-disk-loss-by-label - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # set the GCP project id - - name: GCP_PROJECT_ID - value: '' - - # set the zone in which all the disks are created - # all the disks must exist in the same zone - - name: DISK_ZONES - value: '' - - # set the label of the target disk volumes - - name: DISK_VOLUME_LABEL - value: '' - - # set the percentage value of the disks with the given label - # which should be targeted as part of the chaos injection - - name: DISK_AFFECTED_PERC - value: '' - - # parallel or serial; determines how chaos is injected - - name: SEQUENCE - value: 'parallel' diff --git a/experiments/gcp/gcp-vm-disk-loss-by-label/experiment.yaml b/experiments/gcp/gcp-vm-disk-loss-by-label/experiment.yaml deleted file mode 100644 index 773443cbd..000000000 --- a/experiments/gcp/gcp-vm-disk-loss-by-label/experiment.yaml +++ /dev/null @@ -1,83 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back -kind: ChaosExperiment -metadata: - name: gcp-vm-disk-loss-by-label - labels: - name: gcp-vm-disk-loss-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-disk-loss-by-label - command: - - /bin/bash - env: - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # set the GCP project id - - name: GCP_PROJECT_ID - value: '' - - # set the zone in which all the disks are created - # all the disks must exist in the same zone - - name: DISK_ZONES - value: '' - - # set the label of the target disk volumes - - name: DISK_VOLUME_LABEL - value: '' - - # set the percentage value of the disks with the given label - # which should be targeted as part of the chaos injection - - name: DISK_AFFECTED_PERC - value: '' - - labels: - name: gcp-vm-disk-loss-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml b/experiments/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml deleted file mode 100644 index 2aa5bee13..000000000 --- a/experiments/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: gcp-vm-disk-loss-by-label - version: 0.1.0 - annotations: - categories: gcp -spec: - displayName: gcp-vm-disk-loss-by-label - categoryDescription: > - Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back - keywords: - - "Disk" - - "GCP" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Neelanjan Manna - email: neelanjan.manna@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/gcp/gcp-vm-disk-loss-by-label/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/gcp-vm-disk-loss-by-label/experiment.yaml diff --git a/experiments/gcp/gcp-vm-disk-loss-by-label/rbac.yaml b/experiments/gcp/gcp-vm-disk-loss-by-label/rbac.yaml deleted file mode 100644 index 34065239c..000000000 --- a/experiments/gcp/gcp-vm-disk-loss-by-label/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: gcp-vm-disk-loss-by-label-sa - namespace: default - labels: - name: gcp-vm-disk-loss-by-label-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: gcp-vm-disk-loss-by-label-sa - labels: - name: gcp-vm-disk-loss-by-label-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: gcp-vm-disk-loss-by-label-sa - labels: - name: gcp-vm-disk-loss-by-label-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: gcp-vm-disk-loss-by-label-sa -subjects: -- kind: ServiceAccount - name: gcp-vm-disk-loss-by-label-sa - namespace: default \ No newline at end of file diff --git a/experiments/gcp/gcp-vm-disk-loss/engine.yaml b/experiments/gcp/gcp-vm-disk-loss/engine.yaml deleted file mode 100644 index 71a4b351f..000000000 --- a/experiments/gcp/gcp-vm-disk-loss/engine.yaml +++ /dev/null @@ -1,40 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: gcp-disk-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - chaosServiceAccount: gcp-vm-disk-loss-sa - experiments: - - name: gcp-vm-disk-loss - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # set the GCP project id - - name: GCP_PROJECT_ID - value: '' - - # set the disk volume name(s) as comma seperated values - # eg. volume1,volume2,... - - name: DISK_VOLUME_NAMES - value: '' - - # set the disk zone(s) as comma seperated values in the corresponding - # order of DISK_VOLUME_NAME - # eg. zone1,zone2,... - - name: DISK_ZONES - value: '' - - # parallel or serial; determines how chaos is injected - - name: SEQUENCE - value: 'parallel' diff --git a/experiments/gcp/gcp-vm-disk-loss/experiment.yaml b/experiments/gcp/gcp-vm-disk-loss/experiment.yaml deleted file mode 100644 index dc9fa37c0..000000000 --- a/experiments/gcp/gcp-vm-disk-loss/experiment.yaml +++ /dev/null @@ -1,89 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back -kind: ChaosExperiment -metadata: - name: gcp-vm-disk-loss - labels: - name: gcp-vm-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-disk-loss - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - - name: LIB - value: 'litmus' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # parallel or serial; determines how chaos is injected - - name: SEQUENCE - value: 'parallel' - - # set the GCP project id - - name: GCP_PROJECT_ID - value: '' - - # set the disk volume name(s) as comma seperated values - # eg. volume1,volume2,... - - name: DISK_VOLUME_NAMES - value: '' - - # set the disk zone(s) as comma seperated values in the corresponding - # order of DISK_VOLUME_NAME - # eg. zone1,zone2,... - - name: DISK_ZONES - value: '' - - labels: - name: gcp-vm-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml b/experiments/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml deleted file mode 100644 index 452dffe31..000000000 --- a/experiments/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: gcp-vm-disk-loss - version: 0.1.0 - annotations: - categories: gcp -spec: - displayName: gcp-vm-disk-loss - categoryDescription: > - Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back - keywords: - - "Disk" - - "GCP" - platforms: - - "GCP" - maturity: alpha - maintainers: - - name: Neelanjan Manna - email: neelanjan@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/gcp/gcp-vm-disk-loss/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/gcp-vm-disk-loss/experiment.yaml diff --git a/experiments/gcp/gcp-vm-disk-loss/rbac.yaml b/experiments/gcp/gcp-vm-disk-loss/rbac.yaml deleted file mode 100644 index 27c207252..000000000 --- a/experiments/gcp/gcp-vm-disk-loss/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: gcp-vm-disk-loss-sa - namespace: default - labels: - name: gcp-vm-disk-loss-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: gcp-vm-disk-loss-sa - labels: - name: gcp-vm-disk-loss-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: gcp-vm-disk-loss-sa - labels: - name: gcp-vm-disk-loss-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: gcp-vm-disk-loss-sa -subjects: -- kind: ServiceAccount - name: gcp-vm-disk-loss-sa - namespace: default \ No newline at end of file diff --git a/experiments/gcp/gcp-vm-instance-stop-by-label/engine.yaml b/experiments/gcp/gcp-vm-instance-stop-by-label/engine.yaml deleted file mode 100644 index 34bf1beca..000000000 --- a/experiments/gcp/gcp-vm-instance-stop-by-label/engine.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: gcp-vm-chaos -spec: - # It can be active/stop - engineState: 'active' - chaosServiceAccount: gcp-vm-instance-stop-by-label-sa - # It can be delete/retain - experiments: - - name: gcp-vm-instance-stop-by-label - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - - name: SEQUENCE - value: 'parallel' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Label of the target vm instance(s) - - name: INSTANCE_LABEL - value: '' - - # Zone in which the target vm instance(s) filtered by the label exist - # all the instances should lie in a single zone - - name: INSTANCE_ZONES - value: '' - - # enable it if the target instances are a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # set the percentage value of the instances with the given label - # which should be targeted as part of the chaos injection - - name: INSTANCE_AFFECTED_PERC - value: '' \ No newline at end of file diff --git a/experiments/gcp/gcp-vm-instance-stop-by-label/experiment.yaml b/experiments/gcp/gcp-vm-instance-stop-by-label/experiment.yaml deleted file mode 100644 index 4091b8fbc..000000000 --- a/experiments/gcp/gcp-vm-instance-stop-by-label/experiment.yaml +++ /dev/null @@ -1,95 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them -kind: ChaosExperiment -metadata: - name: gcp-vm-instance-stop-by-label - labels: - name: gcp-vm-instance-stop-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-instance-stop-by-label - command: - - /bin/bash - env: - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - - name: SEQUENCE - value: 'parallel' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Label of the target vm instance(s) - - name: INSTANCE_LABEL - value: '' - - # Zone in which the target vm instance(s) filtered by the label exist - # all the instances should lie in a single zone - - name: INSTANCE_ZONES - value: '' - - # enable it if the target instance is a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # set the percentage value of the instances with the given label - # which should be targeted as part of the chaos injection - - name: INSTANCE_AFFECTED_PERC - value: '' - - labels: - name: gcp-vm-instance-stop-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml b/experiments/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml deleted file mode 100644 index f14399d3d..000000000 --- a/experiments/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: gcp-vm-instance-stop-by-label - version: 0.1.0 - annotations: - categories: gcp -spec: - displayName: gcp-vm-instance-stop-by-label - categoryDescription: > - Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them - keywords: - - "VM" - - "GCP" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Neelanjan Manna - email: neelanjan.manna@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/gcp/gcp-vm-instance-stop-by-label/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/gcp-vm-instance-stop-by-label/experiment.yaml diff --git a/experiments/gcp/gcp-vm-instance-stop-by-label/rbac.yaml b/experiments/gcp/gcp-vm-instance-stop-by-label/rbac.yaml deleted file mode 100644 index f37f8f7f3..000000000 --- a/experiments/gcp/gcp-vm-instance-stop-by-label/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: gcp-vm-instance-stop-by-label-sa - namespace: default - labels: - name: gcp-vm-instance-stop-by-label-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: gcp-vm-instance-stop-by-label-sa - labels: - name: gcp-vm-instance-stop-by-label-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: gcp-vm-instance-stop-by-label-sa - labels: - name: gcp-vm-instance-stop-by-label-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: gcp-vm-instance-stop-by-label-sa -subjects: -- kind: ServiceAccount - name: gcp-vm-instance-stop-by-label-sa - namespace: default \ No newline at end of file diff --git a/experiments/gcp/gcp-vm-instance-stop/engine.yaml b/experiments/gcp/gcp-vm-instance-stop/engine.yaml deleted file mode 100644 index 3966faaae..000000000 --- a/experiments/gcp/gcp-vm-instance-stop/engine.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: gcp-vm-chaos -spec: - engineState: 'active' - chaosServiceAccount: gcp-vm-instance-stop-sa - experiments: - - name: gcp-vm-instance-stop - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # Instance name of the target vm instance(s) - # Multiple instance names can be provided as comma separated values ex: instance1,instance2 - - name: VM_INSTANCE_NAMES - value: '' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Instance zone(s) of the target vm instance(s) - # If more than one instance is targetted, provide zone for each in the order of their - # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 - - name: INSTANCE_ZONES - value: '' - - # enable it if the target instance is a part of a managed instance group. - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # parallel or serial; determines how chaos is injected - - name: SEQUENCE - value: 'parallel' diff --git a/experiments/gcp/gcp-vm-instance-stop/experiment.yaml b/experiments/gcp/gcp-vm-instance-stop/experiment.yaml deleted file mode 100644 index f1a60ab1a..000000000 --- a/experiments/gcp/gcp-vm-instance-stop/experiment.yaml +++ /dev/null @@ -1,99 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops GCP VM instances and GKE nodes for a specified duration and later restarts them -kind: ChaosExperiment -metadata: - name: gcp-vm-instance-stop - labels: - name: gcp-vm-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-instance-stop - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # parallel or serial; determines how the VM instances are terminated, all at once or one at a time - - name: SEQUENCE - value: 'parallel' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - # period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # enable or disable; shall be set to enable if the target instances are a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # Instance name of the target vm instance(s) - # Multiple instance names can be provided as comma separated values ex: instance1,instance2 - - name: VM_INSTANCE_NAMES - value: '' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Instance zone(s) of the target vm instance(s) - # If more than one instance is targetted, provide zone for each in the order of their - # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 - - name: INSTANCE_ZONES - value: '' - - labels: - name: gcp-vm-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml b/experiments/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml deleted file mode 100644 index 6b8aab285..000000000 --- a/experiments/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: gcp-vm-instance-stop - version: 0.1.0 - annotations: - categories: gcp -spec: - displayName: gcp-vm-instance-stop - categoryDescription: > - Stops GCP VM instances and GKE nodes for a specified duration and later restarts them - keywords: - - "VM" - - "GCP" - platforms: - - "GCP" - maturity: alpha - maintainers: - - name: Neelanjan Manna - email: neelanjan@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/gcp/gcp-vm-instance-stop/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/gcp-vm-instance-stop/experiment.yaml diff --git a/experiments/gcp/gcp-vm-instance-stop/rbac.yaml b/experiments/gcp/gcp-vm-instance-stop/rbac.yaml deleted file mode 100644 index 0592ea9e0..000000000 --- a/experiments/gcp/gcp-vm-instance-stop/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: gcp-vm-instance-stop-sa - namespace: default - labels: - name: gcp-vm-instance-stop-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: gcp-vm-instance-stop-sa - labels: - name: gcp-vm-instance-stop-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: gcp-vm-instance-stop-sa - labels: - name: gcp-vm-instance-stop-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: gcp-vm-instance-stop-sa -subjects: -- kind: ServiceAccount - name: gcp-vm-instance-stop-sa - namespace: default \ No newline at end of file diff --git a/experiments/gcp/gcp.chartserviceversion.yaml b/experiments/gcp/gcp.chartserviceversion.yaml deleted file mode 100644 index ed3d6031d..000000000 --- a/experiments/gcp/gcp.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: gcp - version: 0.1.0 - annotations: - categories: gcp -spec: - displayName: gcp chaos - categoryDescription: > - GCP contains chaos to disrupt state of gcp resources running part of the gcp services - experiments: - - name: gcp-vm-instance-stop - description: "" - - name: gcp-vm-disk-loss - description: "" - - name: gcp-vm-instance-stop-by-label - description: "" - - name: gcp-vm-disk-loss-by-label - description: "" - keywords: - - "VM" - - "Disk" - - "GCP" - - "Infra" - maintainers: - - name: Neelanjan Manna - email: neelanjan.manna@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - links: - - name: GCP Website - url: https://cloud.google.com/ - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/contents/#cloud-infrastructure - - name: Community Slack - url: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/gcp/experiments.yaml diff --git a/experiments/gcp/gcp.package.yaml b/experiments/gcp/gcp.package.yaml deleted file mode 100644 index 28c1b33e7..000000000 --- a/experiments/gcp/gcp.package.yaml +++ /dev/null @@ -1,14 +0,0 @@ -packageName: gcp -experiments: - - name: gcp-vm-instance-stop - CSV: gcp-vm-instance-stop.chartserviceversion.yaml - desc: "gcp-vm-instance-stop" - - name: gcp-vm-disk-loss - CSV: gcp-vm-disk-loss.chartserviceversion.yaml - desc: "gcp-vm-disk-loss" - - name: gcp-vm-instance-stop-by-label - CSV: gcp-vm-instance-stop-by-label.chartserviceversion.yaml - desc: "gcp-vm-instance-stop-by-label" - - name: gcp-vm-disk-loss-by-label - CSV: gcp-vm-disk-loss-by-label.chartserviceversion.yaml - desc: "gcp-vm-disk-loss-by-label" diff --git a/experiments/gcp/icons/gcp-vm-disk-loss-by-label.png b/experiments/gcp/icons/gcp-vm-disk-loss-by-label.png deleted file mode 100644 index 1b1b94c522b45561914527f96acb40d2b0b635df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40149 zcmYhh2VBkX`#)Yu3Q-Y}NJwMnd-{bLrJkGe!eP6HZzVGY4uIDxGQ^;nLB6|+*859&0Ng?C8K|#SI0`KrJpvRY} z85eM=w@;@2~2m&4pLXHK&`5<@-6azs4A5d@x1dWvbM=#T;%>Ty_o&f?Fj1q&vDNroX zqU+2qFYxU}A+iy$(Lf7hwHj3-m7JynW+TF($P6eV@Cc2}XV6n1IG}CR8C1X*Nu@AY z0*~Odc8dw(=MCPPgtvErp zNK4e(;s34Jt+G3G7W02(U|0q!1Nz^9(`Qxv*Q->ybqZioND7ny2=D)-1n}4WpIod+ zDpLcoGrTAZn9riCP&%3AKPF}wu-gC0mko$!EcibrcA-&hKr(3tHwcV|5?wF`SPzpy zJ$xNXPNDe-7#7JWMxupKHCXBJGx!cJ!%J3zm{g*XC{@X+2C&&f@)=SfSUyzDvZ5s_ zAHojoU9Z5?P<|y37_fje3X0zV!w{)ZCyHls$$)XJ0;(|b(KNNkhC>?JXp-BYhstd} zksD!hQQ&$vRL+OOL{J4+X9MI%v_M6CBpVPfkqC8)?GB&;ypRH#2$;d9_EHE=q#x*! zLd-m)$c?0{1Qc{&S#Y6Q$OOKDmz&CBGxbnE8=$kQy?URLZi0*TD6W7{bHm9xHU()% zqs@LI&7ooeLdJ^4NFhIEU)2n+&_2TulA9@fP&tLQc&pP>bt!D2YmpoFS$OfAPv5i{Xfs}aKHle};Q0nZ^A zlw=A>jy5U0d?WCrTV(|^DHN(6g|NCE5W2<9aza5WtQiaza5*lhmQ2t?TvEN*t`e|3 zP_opGb%O{_kWCAssyGlo0geIhpma9~ z1Yj=AgK*l+Sf|ks*SXzvBk+dE>{PBRz?MeQL7Xfe+~#+pEkdh`VA7~F-+#yldVFZi--_l0M=R* zh=mus5OR}Qp|Jo!2a?(v3A}eMT2lMYL(OD6-Xv zR~rdp9I$h{U$2&$J#iG^NaMq03=@nA*YjI21&gn?&O>Wi%;=sN(U+evgzb zhIyD|ELC9fqqQ6C1{i|7&Zj3lsC zh*I)RMitJFN6HjRPXGv@Qa3|IlzH?Zof8Q$8>}vigbfz!U0enfBDcW+>`|x~Vm#dg zLx|;Mn+i&0VL1#li4KO^2uzQcU=T221}Mpdk#RgIFqjEIx`Sk($e1by*`h`9bsmJ+ zBeii20fqKSF%Bj}=CK3XOjJXB2)afFKqidJwtK{Os9VcK06voF<^i8rEdk^rnz$e+ z5l;1J1vEF7PcUGx5-;E50`rYBCsN}zVVzb{zyeJ!28U_TnxGIoLrdZq#99g4MZh3+ z6c>?fLvyJL9^5ab3%m|C6rr&5DHImd%0=OL2oTijm(n~~CW`LHITS*s)ZkEA95%e% zhTzIjYzhTU5#mHH9gku&v)~{++sm_o_y}Da&}1EV~ZOGZ~eBlM|-) z>cn_6Lv3L3Jv0ghW~R|u0s#haz(k8zM&pyU1TWM@HBdwXqk--QwvQ!9v1mFB%fV?C zBrs9$2WjPWGuus~7-5*cK-ndBGx7y(yg(>V-cCe$RggFRS-+Gqj@s9qjez-E&L!0~`ZauL_>)lnpN z0R}}eTa9`g#0#e)bg&ucqf%@#Dl_11k!Ft44LDI41gb#b*eW>;r)3*?7zi*% zhWm|JA3=jLST!^X+y@ccbsR6jC|4*U29QJ~q3GZoq);Iv+u2&YltjRSOb|O65K&kP9;25tI1Z~)0I^{88Zn>Y zVj%5cyI-NfUS(0C844^M0(Y3mcpFP;qp&$jvWL&5$s8aJ4??#h#0aX2#$!;> z09$7uEI|T(59<_h!7`K8zymY{EAlE0+W&b&sheu^Sbzu;t7a*5ZmYz`lQHc?CBv#@ z3$!jdgy14t;9eDqM8}Jb0yV)yb4Yw#2}x{*xENxFolJnqygr-<%%;hB3N{bn#pw+Q z7GC7RSxrQYki}$BSZs)g?j^#AVl>Umgkji$HF#tq6&eAP<)&}qdI*?zRZ62Kh3PwbX~O?qj- zIp~p06$QuQW0)YZ$1d?vd0r#LV8sF<2h^&h^8peeL1hSpAtH`}$b|YmdY;beQJG|R zR3KK9kvRY|A+$z{MT_=;U_1dp>ZIZWT7VO9=sKDX#Rj4iERkfuvRMoQn=VI-H5!G3 z&(SF~CWTtgG~$dBhek|bVCZ1DFW|^*5*LpQfzX@JJ8Z&Y}ctK#tMFbX1my0;gll0pl`SRS+HC1Jg2v zHY}Qf6G8NHGGB_qVzC~Ym?6Mf#1NiL$TYb`3LG4)AtBgCvL5QD;$a*m5h@k3C^jpW z3hab0LW&S9D@LgVe(0rmp@MFd>ETR;M1tVCVHyho0o7qaJa*vZq(r|$XJbLVM2tuY z5kg#YHWx%jbFpG9%*=)vIZ}wlEf*5_1f>Fm6r0EvyAwe*L%}GjUCy@$LUaKd_+ZKr zZYo)5bP=&qJKPG^1?+%sG0XMPKuB&70l*AK1LQ%Y;$IGAq$%l54352NC4cVsJbj+hoQ2WgfQ| zNXPJCf`bln3&A>z#lU7GuyVHstAUUlO1G2lrg<26s?h>>qj6liU9O>;fvKP}k{xd% zQPe6F1)^8M0x^=90CVE?WC90_W?(^nE*ma2q1`f>8%=TfNn$S1C4rGiI3$IpAvqKf zAsNKxaOggvk|M^rY#J*UPBDW~L=gkaVqrvqlVxgs9=S&ib~@pHozo?=8n^-iTZ%Tz zC_<@@1W*WoK#@j38IgV^(WGYitr!UsEwQ`&0jo@cXO*R@@OviI| zW&+F0BHN^HJldy`gC%Y(muu1?X>cFSZ}*8+B)5*NKniSpkqT~5A@nk>kxsV?D0U3e z=tKt)%M4KxwGb9w#-hTMS_g)%!C`1-j#f@1GTllyT|u_Uy$H1rDW+OQR2{-(w!3vW zghnT&Iw?-33}GcOG-eLb0VV3eN`(RogV}Tzie2oqbA1da5#@7>KolgFDTAmT8n;m* zWcbJiI$aIJnN50eAfKdaSyDD%xQ^Q1bs2GZot63(GVyy}WbBlEhke&f0u@H18f(JG5Nld-n0U#aL z5D4D*8VUf)Obr;SGb<$;5^#!Qo(M>nHCm}m!o`#IZj4N+@F+BHq?c>fqcs#Xf@VSC z)m)aJ%knUEc9+Tws43PXBpUe=vref(`>g?_BAWChvkzr*^2`o|P{tww7-3)tjRc36 z&*OM46g*Pyv%=vBHbBghdPo2un8<#w&K$I#iMBs6nwQ8isrBx{au@DhL4VM(aXN22M z5?kFgoSN*z$zV{l(t>bEjX?0v0kuU z$mJ5e96i}B19EyLkwK+6Ib4xZh19yBAh->t6B(3vAysc6fY@LL)_|6v)B-$%sGyMv zC<)Vq0THwc57PuBV@$8s42H37Mx)D2W5G3EK1s${KB~eUr0ck4GBOsc|019b%Y?p~^Vxeh1 zt;Y(47e0?bO$zuloI=gyBRm|IOX}yVwN#%mP+;QHg?JB~0;kC|5IBo$QOS&IC!B93 zvs?~5hiVe}YzTpbC!?t?F1?G&1kl%E^x`})0mN!WN|hoq+^peA#YQ@bM&Tkwa6q$( zPM%%Cz#()N8;`-&E7(q=2c_T#6yHXqFl8EwOr%f+Km-Z~i)bvFMhUY}m;x?@%U4So zP(RA(^_%@_n*&Hqv2-riC8bm7T8Bh!x3dXsmxX{g8S!ia4PvIL$Z)71EO%lET&;ub za_f{@gwCMF!VmX|NHvu6i!mHpSi9paSmn-yOuogrP=q4J6!!huBlZu9iL7@a1 z(rvXupc*j^#6W;uLOWF;)(CkXx6?oe(45HUA=n@;j$>m5$`K4K-H3&1WgZ8YW`&Xz zU@==B@KZLDpJYHANhFVqLJ7nq9IjJ~r{mRpxl$`ZYh6kl(dGg24L?t7@{(;LmC3?E z%aI&Bn&D(X5l|u&1wqQ7beqlu#7|nk8>K*C0uakZvYkkn%7`}uMF{~$f%U^-5*Y@} zQi+XPE=H>$yY*@X1cp%xICva}sTK*WR+Jn>am&$CqFUK$ zG8Y5yBm1C$1`~l8fo|03;3O@Vh6W%M%TsU&fJ?zzFl43_&7hKD7@13rM7y9^D8??8 zU|CQOS)-)Fy*@L@3dbXKe6k@>jR0Oc5{&8rX}DxD6Na**uwcF(XSM_AjV6*=7697i z2s=R!5R!muA~1)TEf(Uz2&j~!0LpwUk5uoYg3Mkm2g~M?NG=dsuJ?FRIyS+MR1laP z1luMh&|G2zNH3?MKtvan1czGiJg`LIR079?HL%<$A4O+idu(hQK9H{o*esTXt0Kw3 zLcdx|P=a6>FoJ?b6KNQ?QezLO3{`@)dsr?bRAfexgi@M-&gC%FGKEoPqygau)+_L; zv_PprXM&M|kd{WK$Pf$>1_(}x0%5>L8BUU4N20lT3amm&pxFXU-6{mhWadD?N|}Z3 z^0+ZrDAWXmQ-B7sWOzSNK@fnHa3%|5lADkK4;7fCcL5o?f`Jg&83HO-fFheg2pk&2 zHb~qqx=llNa{`kIrBEZ(Y+wtF7!1+uF^~fLMj`;tJQUBY=i)JbG7@k7*VvI_t&m3K_=IXHpy))PUPqK8U@jq^O%_X#D2*42G*D>DKu8Cq zk|>SLha&iZpuiK@Jwn9=^QcyrS0{DwK_(H%&SATiYB`|kSfx;l)d?Ib9|Yz%Gm$tLf=6{Q;f%o65m2Lo%@(4tBDfHR)_~k18i}UXS;#z{)@Y}qbv!J}rEy}hbSqwA zL?GY@htCW+R;&%kIEiW+OGo$fnNl%^;R?VQjV2)n+%DPUWlKp8F&Cr}+EE0Iz-LF{ zU2-uN1wyN3Or+b(!np)Ega--`TcA<}5$#c#jaFE|k6>|b0!5%hW5qnUQi3z9y>y@? z!?p`7UN3NX93%||JZ10`cp!lk$#)B!R5K6g8dGaLaH)JX#g~9Jq#P2rSdb~QWKE0c=39>L<~`J z5C#U8Ym-=HJ`NaU;3z$Alt7LnqFEFui_N2Y+&CFpVRONxCM*@<6VsI%gVFETQ;m2A zi%ydT(jf!aCWBgRDjrzL3W!|laEU+&x=9X{b{J-eTfqlQOhzXKMOQ)*U@ycYaU(rC z9*V}oaS=L40JFUW5|rS=GO#8sn90+4y;dIHN>SjTV4oRk2LT37ci~B>~5(VXgPrv*u}N@1uUP9?`CRnY!)1*RtC7qv^=!aB~;_MNGzNWCZqJ+ zz=JrTTF;}<5oQ?>V-V3A0nQ41!+?~Os1n$*1i03XW&=Nf7Z$1uC<^cN`2BxZc2L5@t;QWeL5V>?jfC&bdVAKl zR(REy+BM_NM$4PXQ;h?ILny0*A}EQ4jJuJ`Ro7PUBZoA7ipl);&;x<~9Kljge33km z3}J3u*Lsanea&?ytEtd*P)VzFZ#5s9H#Hn{I6UHzg;6(SP80g;={qw9D<$zy8l2xf zgPA{n4n4S=SJttA?~^_LHBZtDsL6TckY%CR#NY_bux%Omn1bXeN>FqhVR7Q}smXb4 za$?AKHXT=A7@$f5EqVZSl0&wZObsP&U7NqVAJ7?r&*{JaKQ6=b!i%urNKPuy8B=g! zl(bu5d_FcLI&Oh{@HXcE*ynMMgayXK7XS=M< zHj(yc$ovyM`bVAkjwF9F`n}EaeLW_uDLEOoHuPyv_Vu~JCDVhJ1fjy8g!C$V@4bl8XB-Lnn+ZAn^CjWBVduIMs+p(Ai=5NO zRsR`M$O_pPv?C;B68z8mu6zHm?1DZao3Im!PktfCubM!bQSZDK+v0n@pmS6 zS%0sRZ(iDwl?7(2Ebwh?DMS$gVK-pk=zH}(D4v!Ez#Z}8I{L8MXY1lcg(@5QP& zi)T*WJ9|(-uWo277bkT5nL=-nKD-mr>dqYzv?pU%Wbo}6?c5sa@W1aGvZ?U?pJ(#F zcLwxrO~cHA@JGMSZK>G)^t0T0`fi^dN-ZZccYl90?#5B<=M`7aZ`?cX{mEVb+&aL9_AWb3EGkh`X{f@ zh3tbKobvPLz#G}dY3DYk3-__7?AVQu`H>JXnXv`m$))GcJ!UK&_Tjg(uI7|;@;Axc z&)sP2OUav}9|au?S58k`{qOjlJCmnx8Sk$@P+tBy=@2Q#dmK3VQ}Y|wZ6%ADfzStk*qm^k+{tbcdtmceKV6(X!E2GB2+0$4O6)PoDUqac%W}-{u9^Xphw? z)%#X_t1QHik6(KAZ0ct3rKL>%70R50_m^DI9=s)v{|nLVD$*N$Nk>ld=v7CWIOjR@^*t zXLq~y{HeXCd5OB*L3vKz!-U@v&K~`f=Q6uFy$>v$VJZEVZuxq4+TsFO-g9{r@|RrL*#Tge3Q^O#EB zd{e*cP`kqQ>uyBsx*g%Qxyt@C!<~c3sTVWyoKeRv7aWm(>|F>2b(NtNHSR;T-4CrR zYCVg((K!_Q(|h}6S~{sM_r=e3P)%B1e2RS481*8o00{s!gY;~ZK zzoPwI==Q?cb^U`_i9<0v`(0a{s4?By66#0_X742I*svo+G?+?CdR?4}?-yMd#jpD`dDGU~Zo%b2P+t?m;jf8; z9@%rvd4+Uk`Ua+Na(U#<~=}zj(aAPtDkS-F}}o@XQwlujiEKTStxA zo5vI;y9hp~~Hnmr5X{biln6v~l)NcFzqs^oU_dm%^F73QK zs_RhV!uD0v&^}{^^eoB^>smM!UpVl|tr~I8xJx0#;AiJM=Fa^m`ExpUrxp5<^7`n_ zd1PqKi|d!iCiSSgnhC3XLj4^%<^H`!_vOfSJ7ZG9Mp-*(+_53smlyo`lP%5uCyc=@ zJJQlVe6sOqw>@AYF&8p7Oo1ut{&p0W7!voOA7R+2&D~V)?7k^ua-4ZKojN9@cF$x+ z(E3R0qAFe7&{W$c@XI1WSnv~ztyp*M$4`WF+nb8hYHdv3?)mtTS?6+bkP1v=@zDbb zd%umJkRJ`<3~|KHoYvjC=%y5i8_uqndVb9F$F8@?5hf6JV$H()t8-b@;|=)&&MN>SOS{OW3Z zovvDZ9VPuYIA~a~a%J2g%C^D8G>mX=hjx@I>VCJce*|wY=g*1AU8cWLAGa>--u{e` z+#_#X%mbGGL(AIUFmE=dZl2RyvTUX!=!L!hHJ4hLP{^A{UFb2c?ABN*h*9u!l9*_5_`vEwaB?g{eZra6L+Xiilk zZakRgz8Tl5xwSrar)Y5Ls<=%>VdT4Czcwv=u*=g8d_{o?uC$n^S6dusdIvsN@_UWhJV{*+MsdNEJ|!CxY%j$*>w^@7th9yOwWGSFBJ&Nc4R$f@Uv4oL9#xz9~1F?3b#x$R+=;W zAI#jrU%Y#09w+)z+L4a@$arqn%-45k-p+bfu#RLMdY=*v$$C-MJ2~vG>W=FzHX^#$ zER*HUp2;n9zvSEmZ*ZvAU?`19Nx`2Q3gm51$#E^c@-)&r+#0V)X zJTe$z%a`9SxOb}>vGY};QA)YJ@?-CaPgRaTSC{lT-6kGy%YJ}7jGwzvcLh8t#FU)* zd`ZiA#Hv}p{~ppD6E`^I6)#$~)3?6q`Mdwj)phm)8$B{-;hw7}EBmrXv%V}$d@4G7 z>jq)&3gy28O`BJ6Gftce16z*?5`TsJZuRtB8GhQ-Ri7Cd8Hrfrd$Xaf`QM61$UnWO zrw^|3H@$jXAe-aB?p;`4wd!Ee86j-g*_^?Jd*q;tkh_InCI#*JM_*bYiMU$%YWBs5 zf>+Eb{+6EDv;`AH<99Y%v&N;9`a9A8BXGb`9 zZ*Njma`UU5q-*1@56B(RlexE7(6w&4EwbWYdtaba zII()gke==6lx0Qflp%>>Idgs(+atb=(Jrm4p!I2MJEsd^$sS` zZESeR_N0_uw-?V&Lp=ELlDg<@79TU#o`N6Q{lV~-s96cP2iwoT#`c}`CZgw(Ubahf zI}UmtrDhhR#(puS7wd{oA9^rf)%5IgG%{=bwZQDM4b$+Rjnp%kqwM2Vqi4!8;A34|~ zI(@?ISNler2pRitob!hg2^o1^j9*vl?%YZAF3yt#U7Yr(t1`9Z==s+6@>+DbEcfkP zYmX{j(V+M5%(oJNKgj_5qu)rMac{x_38BxsN%t>@5Ql;Ka27v%U}|daH+A3j^mq+n zvV3e=-r%fx?IA^Xv#0ovym@zPVD!>ff5|wG(tvpJ?o64v`rhJI|JuIIoMYNdBQCiP zpY?d&`ixZ6xoL{~{JvQ|YWfHH)3|eC&QZW4DYc$r+Cv8xU1A24t+c-^<`0~_GG7nRkW>v)-?O%2)JcT>vs z2m672rACzx79ehTs}2DE-+y)4)AWyn7jGG}RF)zXVc2OZcs zB0FnxN4MBJvyOfY>lW9p~Qc*_j3Z`G3N*)NZq?w_$7R^Q^5ziO(^JGXv2ZO^82kMV2f8|Qwx zUAOv#;_9iwqBqln7e`drFp@3NYscAWO)h zc}q0wE$9F2eVOf?<%!5x!YxYicc2e-7}-msBx4zQTVFh%jLqjJ8lXimG}COuzh z8tK_l30bkJQE{|rYWu90ppfm~qZifAs*(eLOLhxsV~$R(SrD}@3DhMJusSNwZTlIO zXek^iz|S)#E6d`}5!P?7kgYiJ`t29_bWva2x4q>RwfxE5j+K1)^{>_?Hw6(V!H(a> zFS)Yv!O(H)ik;vovw!#He!VhrCfId9{ck(+ae-)4=Zj4bglkc0L()eCO<=Ah4LP&9 z%DM9+Jmy4?FNKZ%>+pgQ~TMyQhthdFE4O&`a4?S{V5b~Qo|C<)_ zV#{dwy@s<>$m9Ay{Z0T4EA9F=DlwJ^+lbvWy+Qh1!dtXgDzV%CTm41uZbRS81`{~>E*Jt9=HQ6^( z#=Ik>Zui`*;{E!bnvY1iaoD&av3k_4tEQkYQa3zw((k%~Z;o$^{*<$RZoiPXBM%M~ zI_7*T$=i4=#&CUb9k|v+`~G0c?gIlFQs>;AvOzCbK4q@ zUwD+iB=JeS5+1oFx$*T5Xj$Hp2l@%7rczLVHBGkWZ0ULgGKxH!B< znZM|e=gBF}&rsNU##1@gA3}>C6xw{Q4`xJeLg|_3)jv;dIg;S28}ayE zc+u_sU0wTs<^Rf>y@RINoH8Zi;=T)xf$TXedzsGkdbi2(wys>d)j$W?G{!aQVn;&D6uozZ~-wF6zgc zErcDA>|PYI{Pw3h%b94L!;z%EG4j-s8R?^shrhcOYRT7T-F%$c^!Q@w9$}q1{CIHZ ziC%|qe`;Cr`Q>!ics_PCN0Z^+zG`>Vz<<)S>u=3^%D--zkR=>2ZiBhKC4BvcpyuA& zcRhUytG_YAA4S>)R<74QkJ7E$VK^W6cHsD5g>U1x?`_`Ia{AX*$*1Q#>*|2wEZw*6 zHuVi!#NiiOEIsg)=M}Fxtvp`prfl4)^0T>bvs%M*mWHVJe|VJ*d+?Ukd$c9{DF5Wj zOOlmg>bJ*CxBHLd;83ETXhQBAeEmtm{@rWCJ9?xgR=+Ww*^pW?@xr|1Z@ceBPTWg=;Y9554j)+_s)RrYTw4~)<#Zy zb~{M0iM5|r)WH`Q7OcbR!;AQ# zRoe3{YxTqV3-)o3oBJP%*B!iE*0_qgbNw#FrOZP~^;tD}pIi41D`?TOmk?$4{`PA!@doqf)cbz&lJ@#Q4%rYdz;bCFl_nf?83 zBR8|gfB5>8e~Q(fUyX;(SwqHJl59|X{-siGO^$+_+}AJxzoUDV8(i74bx4LI=IWfz z?ng&OR%}~+yw8UEx96_!be8W{-49zWIGWZ+H1c{bX^)67^KRPfjiCqg`d?iQu|*$@g@c)=9~ z?MyoJ@qV8iOnKR>5s53m{PP`}`MCP#wZm<*uhzEL3D$Tet8Ro9)fZ)EW*RCBqXnw! zge{-X8j9AQ4sPyOQaaj@GtL=2Nx1#nJ!}J@(EA)V;=alJOq1)|GN) zzx%rAe7EB}2Uk4Fmu+?~E!}=jl>6i6%h8PeIPR^J1H4V=cJ*G_?bX<&tuGGI>z@g2;pOK860k ztYFsqy4sP`$|gb~&rZFV^Z&HpPT>s~5{qBh9Z{nRtV$EOn?OXin zEv8r%U)0bw7kTG&TGq%MyyUn!dqMU3LC8J29m7Jcss80Ldn3*x?Wpr5eBJ5D)lEgH z4V6AmUH-tbA(`hUZhYDGIAi7Olerc6)#Db9>H4wZ#l9^YdR;W`{VH&2Ck<^n+g17% zw6(O`C3n!B%=D!vn8tfY44$-PoM5|-Tzk_k)|KfOaF$)*dG{#R(rzEwHY>YvvPSw` zIO6)>Yqm)zJL~%%c{sM(Jazm^CK11R-ovk1Ll=HHGwammOXJ$P`*wtF0%bjH_MQ$l zm$i+F)`VUARJ)>fmw22st*kW2(o;EtkhN>+rseSBW#8YHW)7HDD?57k_N=FQ{E1uW zU`-k4ZDi7k?yW-#=zW&Q#}*T}p&!i*UJ`yXAt^KBu=(CbL&JAU8Lqh|C4!hv(cmwa zuR^~NRx56kMxW@FX9=&KN9Z@d`y)bhTLSiQ?gY%?uIT&?}BfQ1#g_{8dqW5TWelWBfEF=sC>&j*OtS!WWwBDw{BWrg? z5aSU$^fwFAWoNI+PdsD~=r=g8c#-_ty~hutmz^%onK1moUHOK>#)f+fZgcyUM&8X@ zoaG3P7-fsU&UwbGKny_cIfNf;3ZZ`}?$bU5y&?a>kZwOhW}V3?`Zb{P(>#|;qr@{1T>7+y_^gx8AEU0C$4!ah+9fl#Nz` z?;hbp6Rk41t$I-z$Mol+a`5ee_9fB%tjS-OcTeheQC6~0){4I1W1g~&*@Q^=-t5qU z30cydFZH|jDh2u?xP8;s&m{%Eg3|O59)0}q$WQDkvoKTlom*Wcg+G~~)6AIOLV^{u z`AHEocZaSVvH0X~dI9wFkgwNghNy`3y}2t38LU_9J!4rnvau(w4?K)~w{FFjjdS*A zy~tQ+r{r>;4l3`1-|&q|o_n3@jW1{lJ+UgLHFF#ylJOlatR4~ifP0X5>-%iO`-js# zx55RXT{k~~R*!EIMt^^ys*bFDl!dtB|L9;=OqdQ_Vl_3aOdU0mz#^;G{Xo&^m8~JK z@6>o>w%^%FOxt}p>2B|3{n?|Xh+elw_B!2t&i#(y3nj-peD{e!?xsd~!o}mo(2bmKNkxJYC-+uwl_1si0+~0Z0$`Z9a z?BdgQen|Ncb?EyRS{x`EkvQS>%tg_CtA?K?0`-Nfw-7gJBG3Gb?fhGRX{*QBnwmJv z95=DG8OgR0ITasNN6wEwl`yaqRrqSw#c?ff+cyO&S-lOF;|5H(AoSU1jbj_g0R<_h)WkQVI`6FGH!hC<7q<>{FwEF;T|DEIZEuw|VYH+B zwg$MWc+9x!hfwDacw^tt?4kI;(o4+>;lg1UdR4lWoxJX^}mi~>=;lI ze}}Vezzi%=(*Bt}*zxRDd^QW==pINWw^aIanrrpS~B@L=Snu2?D-qXD3{H$khwBz83 zo0fjdwl-8W$~oyoH3xsd&@XuV_*>7Nvs!}(`xuFtQ|B<2zdP`@=<3-6KzTpytmF_) z8#OO_=ecu-rj4GuwuI2XdE5oY{GzDR6B|Eb+@ifB8qc+8n_X?JbXp@de2d0Gdf+If4+_hq-a-7L@Mc`dgvy@=yajx#rdA3SW0 zOMiSd=VMeNFSwnde-2%3oO@;PRofiNAV>D(S&!70o?eYES$Adpnz)OepwR=An=`PQxo%%ERd+v{&!#96Q zanA%meaXUSFB+Q`K(!aizD4=P=iei`y%MHfi$#<0)xntA<=CtDaZRP!ag0g58=t@W zGj_?79iESD5bQz5n<1u{PE<{%f5NpjUmZ!~n#O!Eh&fwZzo(2{zbtHRYvq|4i@v@! zc5|fT)p`8EnJRX=w?!{x4_`XBdH35AtQkGa_+d40eYy9PjJ+D$W7w&SqgkBHjGraZ zK2RcgpL2bwRJ^ z%PZEU{M_F)^GeV8$%0zTgLA^^o1IrLzUXcER1*Ha*W^+Hv3|K0xqeOG<`EAjcljZ| zUgtcBj~ox;?sOsU?Jni@8~8aWw+CURY~0hOqo2QLq!dkw-LWZb^YB|MV1>v#k5;^s z4ZoXxW}gf4;`ZmLlbzERwb2H{yHwVT*Vb4lx6eDiF0$@uczo~~d2h>`xb+1Scw_#s z!he9HMhw53o(UfCv?yw9l#B3e#O6=K80ve^eYXQaRy`zy_mKdJbUE5KWj@C&lpr!KW@g1 z62$s$KU)vZyiz9GU$VR`X#B9dEz6lp@-9!9FIE;g5_0ztMju|aXmwt!xK1%C+xD)mcR16;il28ZVJFz3z3xQ68F+-{ukcy9s9UOX zx1bHHy9O=TR{w|ahHh)t1otm%?oIfBdr&y^>{ChC66-cI9cYlfcH8A>8^1J!7C=HbteBIaGEZ@q3_aFZDVh>`byZGCr&$fc*v90hV z%<4Ny6`GoPZ)@x8{72vemMUjC^fQZ1eR`SRnr^Hwzpf}8IDD-w;{`sNH(2l|C_?+X zW=X|N_q~^~mtnm~*KY7wlU7;FNA`6Lnb5V-^$s&vQItq1UEBZBpn@}f9{rKGwi^eq zT3o+esXaEROm}lROXn#RF*a!7+@156zfr6uTkWG>Zf?OG#RmN{_>VbvY)@Ctteb{SxXa#h;LHzA?37-Y*WSK*01jWZhLZMc#<`qPM}EC7O!}uDKJ@FT^p<`927t!$kOh@L`wRw2kDD#3$0xRrTDNEZ=NTc7 zX`qxO%E8?u_CsEo4n8o4w5d|Fzu8Uib~K}J=nE5uj6OQ234Xox5c;Vstz-Al{CBaP zlf!35ky=oeS?|vaVXMZw8ME4i`=u&kvz>Nx!XtE3+{s&Uj`-ongNI}ugw1f024P=( z`hm(BO1Rmwspd!7tG-F=mtndQzkWSU9ML|lmqEjARYWy&J}SQ|FCGrrU1=Fskd3){ z_>lN*&F^(9?%x>SAH7Gv=KkrJ4PPUpe;y|5rr&%!AWM{puKm07mgUce{8*QN+bG{~ z-2-DI63ntJ&ufmjo*JChZRh#X9k}v7A)Q0UZVCI;Ghxn?gu@3!hEJuVfIH+Y@vjbe z^@*cV(7rLDmmafs%!lti9ZQYGPVDIV=DTy_c*BFo4+kuI(+F8lFgL9Nz3&r#J&8Aa z+2KsDYtkS0B|q})>quXE?{g$S77%LLV0C_1>!$w?oj_v0uzXN}>#cBzK#EMMB|B*C zb{JXj3tsx@?5X<;7foqv4jM3eZr#pV#xb83=!r;13oxoE(Gg8Ba+tI)8^|LK&-~)W zFcDMD`THZORJ!_K1@ikWo(!%iQC#ko1IiKb-_xmAr z5>SZ&p;xtHt*IwT94D~a`0|TIw_g_;>*0mu9C|R?uwg^0+o>)y;A~j=49PkXR2E~- z4}?JMQ_2OBo5a`+i*B2~<3hq2sDEFwl1}rRoeRa9rwPUf>b;lqd(K_g?i_Ya#rjoC zm9-%p<)sacH~E6wH9IW@vjl;)xbUK!MtXTpoUxk{+4Ane;CD0#z-U)ZCgzTy zXKxqs(-gT~5YVd@N4o%QFvk4aT5O0X@YejBuRUJ)4EJx%yO%XrWn%GXMMSfhL}h>^ zK*;)>TXy&QuS;mSr0X~B7*89Y0@%3_(J+zX)&${0;0dtCiusv|xoh3-?&jNXzd`f< zg}Q_uj9%KjxD^mh`BF?d4#9B?)Qk0hZL;!O zWo0HC4jNhDj=$-iV0~`r$QUKwvE4;FAJ+WL$PQrG+ zvoEaObB#FuM+qzxk*N}Jbrn$rCusSGIOb*e_Ng;Rr#3V;E@zm@`@;!Fr0i;Jj5ReO zj+FU?rTu+CW(ZJ&9s>Ge%4&+dKyaI5?9RGdrjcz5(*v`jcBI0Qm9w5aur$i){$QT@(WMwo-)sz z42wtV-OE^&jd%SEfKNxB)~@BMN>)9sk(hPAp?nX;^L6+AR*YIy3ABRd;bGUL z9uI@5zrOyhWG?PkIc|Q6vB3xH(;&+zfik<0h<=jL$bvUWKH`gg(!}Lx%YkXfmWIfc z;hjsbfQ>!yD^*z>+r9D|eCy3{;4Fl2(K#l^LOY{J(Ix_#iu&J;UerrSd2ICp7T&{gs1lJPsE$^3mgW7<+BLR1e67@utKm~AbSAr zwSs4ywEIk5-A78kz_jDmMwS|p7s?~c5NEd~F!EE{8H>?Qqla;)z zd1e0yKkI$m5+4ufa)eidg`4>ao)+Z+hitLduJ>Bw>%wq5ct6305{%UAIwLjr0=y64 zbr6{Xvhd6pf>x4iA)0xU+j2;33yWXT;{Vw>ion_+C3RH7D1kk0oVCyW*UHmj=v+X+ z=H+fP?efs2?&N4kpV~D6;6?S3u1nr755i+-*#1}?vpU6EJCX@ zQYwXphJ$gGcMYX=zC`k2Kt@W>b*2CUwYNEekHPTAIm@5qvzgWkbhL(npuFxcI%gOM z&$8Gc-_mT#%l54zIN|5)qK4&FdrK_@)t|O{i5fCdBa;8T1ALAY4WKP3C6@qs0!k`( zQivbs5dWdy#FU_V=qZXL_an3e+xR(!{%8)D+xN*hi_i_yynZ=@mb5;>0~q|I^jk3)b$(3VK_3 z`sp{~`6@qN;o2_?_!UsoVk^~hL77C9|66(ATL}EXy7GM|o;-~kCw10IIP_xY#TP1_ z(X-F)D36t6JRNtkP#&V-AwdwKUr;{<8t}-IpzKxuqSs@cE5AB(rXL3Kw7PG0-6OQ> z^Hi+UWNr>VpF48?v1#7BBE(L&R^7f_Tu zkR7yG1;{ERu>+m)vg7y8Dt+4T(4LIyx4$)%nd~&e-T>mGVsIx|sKA3^odIMYz#Xu7 zYSG;5o(e!P;%RssT8 zO=;yZJ7-P4=2)rY)?V1O^9I1&U=Wb6X>!jgg^rkjCa=`}&}bm5Ewj%ro_pi5LZ2Uq zdZF4JPjB2lDS_kz(99p?1OX;M3RKcT)TF-)#4jQ4b0X zX#APu+hi`?`W~qRB#<8B zcu;?%FH$g5y@d)i@F=zJ84zbE{3UGsCyVD@{bs4f8#)EHCbO$uzT9BLo@=exuZYNJ zpji<_$_j~64vwHi2E--^zn4PQZ+6B{d0(3~OJmeZP$=`hg^Hx#`8X-XQa|)-e;@nf zGE^i(u*pAUlwDck^Z#@PZP`?4Znh$LA=8?EVEx|?*DNz7q2SoHYghcuRyR>$yidT$ zR|L2X6jftfIQwi*Zndr;fE@BOIQ+hJo!-~b&|t&DaTJPGss2SB$z%eZX1ZqlB=Gy{ z8_}~B| zi_iYUDYT>w+_+k=OTSD50)NYU+m7t5-}bMi`N*wYxzd?Dd9rECCqD*pz5sHL^sqh@ z;x3|U42`$T3*_G|?RUL$zwux`pDW!*`*+uU>1P?hh7CtjrZQjE)zvja=%}OPr;6F0 z8Vm?P^+Owc`oH|>+#6mh=J~#@doC+%4r`!+jUg+82aHbQY^Q}dvCsgL#&-#^c=ex_ zpDxwuNSD(KoA%a`_A>^U(?dyHTsk8HKexd5thiQ^lzfr zPYdMUBKPni2=@jjBl79RbEj`9^7%fiu1f24N7sKg!2j;EM*Fa#!3IV;^Z<}zmvtBa&(0eN)Q6Qy zb})ib07ynpNM-t$zMQV!wAExKwxHn~iIT;wJ-?yxCQ&L{${dk^j=884IDzMl;4vV! zE$7RDyXIXL3WkDEfYI}7cTI5P&J9$W1j-_S^NLv|1h#`%LxW8*VB5kHrS#SOXW4l2 z?;!Y6SWWqZ6^zcGkery>HA)IdJ|X{{bG!d^{ntm7B;Q*7hJDx4@o%M11*5qDicR&t zP9QJP=gUsq-?{MC>yH$(-};W zxOw2++~@ywYjw+Kv&YJq_Kmt(@m28)$r=DL>e9(mkH30v9 zDS}b({VAQNw#G$1+cu*7!GSs*DHttZzFZdG{pp)PevRaVBBBW^3Q1a_(rP2w3X0Mo z|7h{NscQyc>0R&@ApxTui$%=W42*KLlnEqx!Jb1u+H3*jEWyWPG4rE^v##4&z;k_6 zg;M*MU5kyuBPako`{<GlT3I6NidDC7j;=^LHUR~tdBngWU)Xr0{OyG z$N?DP1b~x(eTssg-7$Om?tbj!E(VO0tYRP*OptG? zm)FA*osfKiyd1AAt9|;9WWWggpIyIux-0xFhjj z8CZUPjTX}Je%s$GNvGnCH{9fz>|KQU&j1z|tcdHOL^x!DLn8KB@%&#cnm=P-zjgLq z4cC6N>uZMmhn_4AgQr{!7=3m@B_3XM!5j2N3!^(r{J}r<1j_cNlqhs0Ex=b-|7pcf zd(-FMJX61Q-?hy7O9zA_|DWJT{n+Ps* zQDG;eU^!%cdF@ojeR5BGetE)v&9U zs-d-Sd7b(ej7YirX~bhE5En^L1!O8M#=&qnAeADFk@oFmj3NOrNqNj4R^@tEBph2^ z=;qRIrcX(GR?-}QrmWuKO ze`ryzq9JFx{|?}P3>#O`h5D}lez|~Au%QOt%I1OcH#T3kqG82_bCNAt$#~X7HFKTA z;XBtFk!wX*L$DHpgvK|LAFKk1yDTer{E;cwuW`VXF-#WoWz71frNeWNbmh!hidg-? zzYRtLPbhgS(k_%UBGAOByRDbnlOKcJ(|04+*T$m00V7hDtb)m;kcgemjP@lzTHwsE zFgF6Yg5*dsQYB!F;Cu8z67cxK6ocyLq;}5fQB=k7p;`tBfQX9b>JZsZ%Vvn|G$Ok^ zn|}+g`&PB2T8~_TY(w4qFCGy2bhqwYmJw z3o-QY2c5KQ>*-!`1c?@=hXT0Lp`A=Bu^^|5$gmzoG?N+;%nNX*2YW`SZw@}}#cb$v zdq$l%-?MiFk`H*Zi8hF6RR0m7-9gXa;W)9Ac`tb~S&i(fCBa9&mm0p`U7^MF{R2O| z%J&?fa$O?Ms$q_m`68TeEw2!f@ftKrq70&0KIjPFC*)e;T!mR|Zvtr&LAKZnsTXv* zptbaNhn%Kv0dQJ`O@w(F#^3Dv?t$)D*QuvJH|%}GN$y?FvaVR?zX780K!dVeZeUcR z(2<{}Q{`XX_{YH-dr!Ihr>shLcZ~L9W-=hR32+O55t^8hV5%o0jwn;Px!?!SsIp&) zu#5SWpX-wDh=Ak!y?vz63Pi7Ms*q1B$U<;bERI01PCv*tpK1;OX=zaJqD!&c|9xLr z`$Hzn&^0s(Gszb$1@S3}RDe{@(9qJq2lsrvzJUz_J`XtCtZ(-`{^hb0@4gS~sp!n! z?i{J}5irnu11L2njx|4nR zz7-F~kW^;z54qLqo%eq|)`C-Qy8eFq_Q9mUem|M14#|lR3?C99-)64tPa0MPYJs5W z2MvvI@{{sYt@ZANV4eWiis0&VTyrV5O|LD~%13`liG>G+gI59N->I;>9 zLeADFgTL=5nXAP2@3KT)AY90G!KEwYL8IpdO-NUO`owA&^TR}WVqMb+tuw`OSBIH6t8vd&9oNE=W{=yNI&RwDm_kM!i{3F zO2l0wPVD%vz7SXuf>QgJ9ks@Ya$8>#h1Q1=MTd+403ZNKL_t)a(*t4Qy2oO`$g_kd zV=O52{#_F7&RKlv+o#adOQ**|CTIXWwMk)J{WmJ#&Qx>XcRNQxWURQ(?F5$yHM>XP zr`9L?u#j>0NgY9_B|1gq*FNm`p8R6@w!Ub$PlRy)_quPT;eP_;fgY<_@EeR}Gl56M zan~@PKl1pO%N6}ENifnu(R%Q6-30?uF<|uUtKInFi*3jkj&*OZ7rh>y?ev30_x)M= z8<4DJUBjPOHk=>Bec$gIOCuA6SRevTPhBKkY=26l@U{sJd0~zskATiUKk=pb%Y{Gv z!8Q8~j9~bOggh95QD02Uz_n2fAQb~fk8SD1KR(@tyw}f&a*?9yPaRSOM#W7|-+9W1W@?-e_KdriA^6xh`85XdutS^2~l6ODbbX8Ht-?)zTbRU+mtXoe4i z>oCYn`vAHCbOKmyV1DGjk7-}Cf5ff(41invLhz+(BLbrjmVBRvjtF)Lao6fUtvGf5 zjhBpRpWJOByCHnZ5$D-oe=+%HU##ao0V8#K^z-gC5#9)}Rv-(h)Ea@=au7H@io6bT zuR1*%y3ddBV!Pk%^mr~n_74R3&R~nwf9FCeB^Wsd`16NqG<@en*RB%s|KpRb==@MZ z{=QiL?{1^-vW|$zvUo+=x8BKbbg4K!T0sM$KY2Bm@peD=A4BBy_{ASGdHQ@f2(c8< zpGF?bB@+&UfI0+2OuS3k{I2bftuPR6mJ*Cq-}L;laY01%hn2pd5b3=v`v8!LlQw2< zY3NQJ#|n9ucWD$3@#hQ6ExB|p@5ey+v1~3sMO6U8;sts_UECSP{ zbOTnY5t<0R48scs%1&Lz_!zhIKhVhk6Xuw^58H?l7!?Ln7opTvALYNZ`KCW_Sn>Wb zTkj5(HG)~BC>PNP3Q}OOS4tWv3sG*PfaM}fpj*f`07pSNB4G}c)lA^X(I)2H zV8zS;?F500fPxYk=lfWr29!cXkcO3Z8Z-&fC`NW!@+~Vkcp(ZAfO7A0q`G3=FA8`| z$O9YSch^N=R2UcqN^K?iFD@^enhp=;g}1KFRy4o&RMhkC-=PrkyenN3yVCa1hfD)F zTtuo!n<_1Z2=XGL$p+d8IZfCjLg!VVxz{8XJBf7iR46G#-k#ofkgFLteI2ZwN;qR7 zGF-?iijC3!*7f~j$<-`P+PBDLtZDAdI|Y%e2~5V?ARB12I03oZUOy{m6GINRtXew# zg5+vTme6Usq5V!{+(#iy4koLi&Qkv1&JO%01(y3?-&C3D)u7me)nm&gvP`;&k4ksnd_W zawMJHc&IB`Fzu`lX2dlu*2(_=?Y#+<9mjPgcwc1x|LfNV6n0_<2yOrf0z?rTu~cyZ zMT!t*N`NiPvaQATEN47DJ?`l_O;y(rJbErmK!&*GPj`8_2#&OQARkr^8;T}CqIpL*7#09ucNfHu4UGv)9xgS z%_Fmw1B7J?Sw_bDwQ&$KPuP_7zEw1LFYu>b)$%A+?Le=U@FlDqjg>r|#5!ZPWX=0sa?Y z^KTO;{AT>RJj=FRAlP4u=RY=JPx-$wK($xvtnndiPSO2%_{e3wN zUfH&Lma+23ARdEA4Mdbv`})o(7ID1xFm*-VI=Gu410oAW4+Gz=pMU$?oe6cl_?G>1 zKXlK(G1dM@AT-oJfVOLd_3|AKsjF&{yr*!vTQP?n636~FS z(JtArruuyNG3eSA>TuSqfh>J!f33j(@1cptLKh;X22;+{;tYumV&tdyFS=t(*ILrE zSC!yJd-j1>yW4A9_s+M#N>G*=gK=QV+nx@IBJwF({wKf6e{*=TSg5V7)je_Fl+`r% zC)@8Qc>5$kWtFWHZ;(! zsydatRA|3Pr1;;0_yQ$>U6mHu511Np48-dc`_%o5X1-a-}lFlcG zR~QfTJnR372p-cHxs%lY`t2Z&060L(Mi@SK|HA1XQ{!I$;@+zf31{@mw)bZl+Rq4N zF~K_kObgXz^4H2;4RX7eOrLwO_U1mF9GaQE>^qrS$MP3IC`THqn>|svukwt#)7F9D zj6{=W4ZrgG6XSo~QzC|?+H8Ge;}DZijc{Cd9xcB@1l;o_7XlxO#Xbr*(X%fc_MVA@9@W>UFDGW)f|G z2{Hew1BVyQ5<8WE95g3Iq-_WyeWmko@LAK{8-y9SGPqX?pnol&<3`y*R4b({Zs z+|h2|sf#yg*t}=96;o%#EFi4zB5ny8yC`j?pL-*d*BZ{!0+HjT1k#I&0 z4LgS-<&3c~b429#0Qp>)js^HM@I#?&h2Z)61=F{MxxOds1|V9eb)j*bmkE~lRkmK8k#9veMt{7Zcq%Kv1G8@BCRV0}I+f`t&=0?33=y&`@o7Eihf*_m^aXZk+i zbM@9n!x??_QJK^1Re8C>EQ)+XfZq#cT;M!mPl?DD3;z6p1vC3qZ1LW|W>w0|`~ct= zL-wQBtH;i$J0_M*p2NqsJ~81!cka^NYa6z{R|nePCAbJ;#sUbH-$vkPLVhpj<=;*F zHLdmaS0{n%Zac$X9}Q>JK(|nMH|172GmMx&VUUdtR{*!9+zGM`f{OsQTG}5CP3B)Z zbm)*>wQ5xtBm~2n@VD#h>S!~v<89J50vOr-JNDciVrSGfTME!l-<>yR&X^DSYgI(j z?AWoxxs)$oPT?Pk=)rY>M=J%2r1`UoY3?Uh10F!d(>! zXLK38&x%pEiIs1V{Cz;mAyQrm%WeE;qel%bsb3`9la58ZsOr z!vHE5@bwA_B|fKWe*e&QlFt`fE?#=@!P-7fe!QZYt7(>3wv8wj)z+Ztve^DQ1&>$6(lE$ zW;2%p{!?IV2TE

VFGlz3+L)9$YfB-y$B`*}BzqO{(>)p!xf#z(gD&{9-#)*1A_I zM6Ns9*RG&L=||#Qt!)gpF#l)f?CHPV@!dYeJYK~-ufKU$kjjrvYXf;Zk;_zmyD{BB1>4N}%3A_lNx> z<&0k1ylYg#I13=M01WbU7C=xI!Z0U5G(zM}W6Z|7`L}KA|Ia_={%^JG#Ce8-^2p>K z#SW>IX_bNS>l^>ggrE1fBhn?>hV6S7TZ<*2%!8m7z_?O65v=bZSrS{ta0{$#cRY9d z(xtbYEA{%ms23?`r1?fR_O1|^ z6$EEN#9)6lwawazq<*CD8h%<3p`NETi( z6Fa2e^nQ8HBDWj?Fl3DucC%qBQ5+w2DI@Csq-aK@xq^PbjSbk zwS*W;@BlqhMOQ?7_wG%cJBK9F=IfUHhCn6(Oamn`JF3F16`~o&eBU?xfs-sdi`kRg z>LnWaMUh+?X;RmL0|ydKO}U}%*8M63Uj;cvL}3*r8Xi<}oRebl6A}N%1@gl1RI#~F z*&nYl4HvF%8CIS&+X%U(M`mhI-Xz|#eQZq;9?tvTg6-e#dn%ew4rya!W1=aas7Z

-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 diff --git a/experiments/gcp/icons/gcp-vm-disk-loss.png b/experiments/gcp/icons/gcp-vm-disk-loss.png deleted file mode 100644 index 1b1b94c522b45561914527f96acb40d2b0b635df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40149 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

-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 diff --git a/experiments/gcp/icons/gcp-vm-instance-stop-by-label.png b/experiments/gcp/icons/gcp-vm-instance-stop-by-label.png deleted file mode 100644 index 9f1b90f8534574a0171ce676f92f4c3dacabd71b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68699 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 M07*qoM6N<$f+#YqcmMzZ diff --git a/experiments/gcp/icons/gcp-vm-instance-stop.png b/experiments/gcp/icons/gcp-vm-instance-stop.png deleted file mode 100644 index 9f1b90f8534574a0171ce676f92f4c3dacabd71b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68699 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 M07*qoM6N<$f+#YqcmMzZ diff --git a/experiments/gcp/icons/gcp.png b/experiments/gcp/icons/gcp.png deleted file mode 100644 index 577f8bad34919c9b7d0487c966c323ed6ed4bcb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30752 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%0DeSB+8VaA6;s|>>DYk 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 diff --git a/experiments/generic/container-kill/container-kill.chartserviceversion.yaml b/experiments/generic/container-kill/container-kill.chartserviceversion.yaml deleted file mode 100644 index 14db31c4a..000000000 --- a/experiments/generic/container-kill/container-kill.chartserviceversion.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-15T10:28:08Z - name: container-kill - version: 0.1.13 - annotations: - categories: "Kubernetes" - vendor: "CNCF" - support: https://slack.openebs.io/ -spec: - displayName: container-kill - categoryDescription: | - Container kill contains chaos to disrupt state of kubernetes resources. Experiments can inject random container delete failures against specified application. - - Executes SIGKILL on containers of random replicas of an application deployment. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. - keywords: - - Kubernetes - - K8S - - Pod - - Container - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maturity: alpha - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/container-kill - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/container-kill/ - - name: Video - url: https://www.youtube.com/watch?v=XKyMNdVsKMo - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/experiment.yaml diff --git a/experiments/generic/container-kill/engine_nginx_getstarted.yaml b/experiments/generic/container-kill/engine_nginx_getstarted.yaml deleted file mode 100644 index df1430a30..000000000 --- a/experiments/generic/container-kill/engine_nginx_getstarted.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: nginx -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'nginx' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: container-kill-sa - # It can be delete/retain - jobCleanUpPolicy: 'delete' - experiments: - - name: container-kill - spec: - components: - env: - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_CONTAINER - value: '' - \ No newline at end of file diff --git a/experiments/generic/container-kill/experiment.yaml b/experiments/generic/container-kill/experiment.yaml deleted file mode 100644 index bf60b7d9b..000000000 --- a/experiments/generic/container-kill/experiment.yaml +++ /dev/null @@ -1,125 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: "Kills a container belonging to an application pod \n" -kind: ChaosExperiment -metadata: - name: container-kill - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name container-kill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - - name: TARGET_PODS - value: '' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - - name: SIGNAL - value: 'SIGKILL' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/experiments/generic/container-kill/rbac-psp.yaml b/experiments/generic/container-kill/rbac-psp.yaml deleted file mode 100644 index 12de772f1..000000000 --- a/experiments/generic/container-kill/rbac-psp.yaml +++ /dev/null @@ -1,86 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: container-kill-sa -subjects: -- kind: ServiceAccount - name: container-kill-sa - namespace: default - diff --git a/experiments/generic/container-kill/rbac.yaml b/experiments/generic/container-kill/rbac.yaml deleted file mode 100644 index ccea310c3..000000000 --- a/experiments/generic/container-kill/rbac.yaml +++ /dev/null @@ -1,81 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: container-kill-sa - namespace: default - labels: - name: container-kill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: container-kill-sa -subjects: -- kind: ServiceAccount - name: container-kill-sa - namespace: default - diff --git a/experiments/generic/container-kill/rbac_nginx_getstarted.yaml b/experiments/generic/container-kill/rbac_nginx_getstarted.yaml deleted file mode 100644 index 461b16457..000000000 --- a/experiments/generic/container-kill/rbac_nginx_getstarted.yaml +++ /dev/null @@ -1,78 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: container-kill-sa - namespace: nginx - labels: - name: container-kill-sa ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: container-kill-sa - namespace: nginx - labels: - name: container-kill-sa -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: container-kill-sa - namespace: nginx - labels: - name: container-kill-sa -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: container-kill-sa -subjects: -- kind: ServiceAccount - name: container-kill-sa - namespace: nginx - diff --git a/experiments/generic/disk-fill/disk-fill.chartserviceversion.yaml b/experiments/generic/disk-fill/disk-fill.chartserviceversion.yaml deleted file mode 100644 index e5b202ceb..000000000 --- a/experiments/generic/disk-fill/disk-fill.chartserviceversion.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-11-11T10:28:08Z - name: disk-fill - version: 0.0.12 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: disk-fill - categoryDescription: | - Disk fill contains chaos to disrupt state of kubernetes resources. - - Causes (forced/graceful) Disk Stress by filling up the Ephemeral Storage of the Pod using one of it containers. - - Causes Pod to get Evicted if the Pod exceeds it Ephemeral Storage Limit. - - Tests the Ephemeral Storage Limits, to ensure those parameters are sufficient. - keywords: - - Kubernetes - - K8S - - Pod - - Disk - platforms: - - GKE - - EKS - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/disk-fill - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/disk-fill/ - - name: Video - url: https://www.youtube.com/watch?v=pbok737rUPQ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-fill/experiment.yaml diff --git a/experiments/generic/disk-fill/experiment.yaml b/experiments/generic/disk-fill/experiment.yaml deleted file mode 100644 index 74f62b9ac..000000000 --- a/experiments/generic/disk-fill/experiment.yaml +++ /dev/null @@ -1,128 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Fillup Ephemeral Storage of a Resource -kind: ChaosExperiment -metadata: - name: disk-fill - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name disk-fill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: FILL_PERCENTAGE - value: '80' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # provide the data block size - # supported unit is KB - - name: DATA_BLOCK_SIZE - value: '256' - - - name: TARGET_PODS - value: '' - - - name: EPHEMERAL_STORAGE_MEBIBYTES - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/host-path-usage: "true" - app.kubernetes.io/version: latest diff --git a/experiments/generic/disk-fill/rbac-psp.yaml b/experiments/generic/disk-fill/rbac-psp.yaml deleted file mode 100644 index e7aa8805e..000000000 --- a/experiments/generic/disk-fill/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: disk-fill-sa -subjects: -- kind: ServiceAccount - name: disk-fill-sa - namespace: default diff --git a/experiments/generic/disk-fill/rbac.yaml b/experiments/generic/disk-fill/rbac.yaml deleted file mode 100644 index 37a9d9aef..000000000 --- a/experiments/generic/disk-fill/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: disk-fill-sa - namespace: default - labels: - name: disk-fill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: disk-fill-sa -subjects: -- kind: ServiceAccount - name: disk-fill-sa - namespace: default diff --git a/experiments/generic/docker-service-kill/docker-service-kill.chartserviceversion.yaml b/experiments/generic/docker-service-kill/docker-service-kill.chartserviceversion.yaml deleted file mode 100644 index 0f629dd2b..000000000 --- a/experiments/generic/docker-service-kill/docker-service-kill.chartserviceversion.yaml +++ /dev/null @@ -1,47 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-07-14T10:28:08Z - name: docker-service-kill - version: 0.1.1 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: docker-service-kill - categoryDescription: | - docker-service-kill contains killing docker service gracefully for a certain chaos duration. - - Causes replicas may be evicted or becomes unreachable on account on nodes turning unschedulable (Not Ready) due to docker service kill. - - The application node should be healthy once chaos is stopped and the services are reaccessable. - keywords: - - Kubernetes - - K8S - - Node - - Service - - Docker - platforms: - - GKE - - AKS - maturity: alpha - maintainers: - - name: Ankur Ghosh - email: ankur.ghosh3@wipro.com - minKubeVersion: 1.12.0 - provider: - name: Wipro - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/docker-service-kill - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/docker-service-kill/ - - name: Video - url: - - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/docker-service-kill/experiment.yaml diff --git a/experiments/generic/docker-service-kill/engine.yaml b/experiments/generic/docker-service-kill/engine.yaml deleted file mode 100644 index cfc1d1aea..000000000 --- a/experiments/generic/docker-service-kill/engine.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - auxiliaryAppInfo: '' - chaosServiceAccount: docker-service-kill-sa - experiments: - - name: docker-service-kill - spec: - components: - # nodeSelector: - # # provide the node labels - # kubernetes.io/hostname: 'node02' - env: - - name: TOTAL_CHAOS_DURATION - value: '90' # in seconds - - - name: TARGET_NODE - value: '' \ No newline at end of file diff --git a/experiments/generic/docker-service-kill/experiment.yaml b/experiments/generic/docker-service-kill/experiment.yaml deleted file mode 100644 index 056f9a607..000000000 --- a/experiments/generic/docker-service-kill/experiment.yaml +++ /dev/null @@ -1,85 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kills the docker service on the application node to check the resiliency. -kind: ChaosExperiment -metadata: - name: docker-service-kill - labels: - name: docker-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name docker-service-kill - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '90' # in seconds - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: LIB - value: 'litmus' - - - name: NODE_LABEL - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' - - labels: - name: docker-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/service-kill: "true" - app.kubernetes.io/version: latest - diff --git a/experiments/generic/docker-service-kill/rbac-psp.yaml b/experiments/generic/docker-service-kill/rbac-psp.yaml deleted file mode 100644 index cc1c8a9fe..000000000 --- a/experiments/generic/docker-service-kill/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: docker-service-kill-sa - namespace: default - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: docker-service-kill-sa - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: docker-service-kill-sa - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: docker-service-kill-sa -subjects: -- kind: ServiceAccount - name: docker-service-kill-sa - namespace: default diff --git a/experiments/generic/docker-service-kill/rbac.yaml b/experiments/generic/docker-service-kill/rbac.yaml deleted file mode 100644 index 1972a9762..000000000 --- a/experiments/generic/docker-service-kill/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: docker-service-kill-sa - namespace: default - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: docker-service-kill-sa - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: docker-service-kill-sa - labels: - name: docker-service-kill-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: docker-service-kill-sa -subjects: -- kind: ServiceAccount - name: docker-service-kill-sa - namespace: default diff --git a/experiments/generic/experiments.yaml b/experiments/generic/experiments.yaml deleted file mode 100644 index c23272107..000000000 --- a/experiments/generic/experiments.yaml +++ /dev/null @@ -1,3040 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-loss - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-loss - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # it can be litmus or pumba - - name: LIB - value: 'litmus' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - IO stress on a app pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-io-stress - labels: - name: pod-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-io-stress - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - # provide volume mount path - - name: VOLUME_MOUNT_PATH - value: '' - - ## specify the comma separated target pods - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Provide the LIB here - # support litmus and pumba - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Pod DNS Error injects dns failure/error in target pod containers -kind: ChaosExperiment -metadata: - name: pod-dns-error - labels: - name: pod-dns-error - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name pod-dns-error - command: - - /bin/bash - env: - - name: TARGET_CONTAINER - value: "" - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: "" - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: "" - - - name: TARGET_PODS - value: "" - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: "parallel" - - # list of the target hostnames or kewywords eg. '["litmuschaos","chaosnative.io"]' . If empty all hostnames are targets - - name: TARGET_HOSTNAMES - value: "" - - # can be either exact or substring, determines whether the dns query has to match exactly with one of the targets or can have any of the targets as substring - - name: MATCH_SCHEME - value: "exact" - - labels: - experiment: pod-dns-error - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give a memory hog on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-memory-hog - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-memory-hog - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## Specify the size as percent of total node capacity Ex: '30' - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty - - name: MEMORY_CONSUMPTION_PERCENTAGE - value: '' - - ## Specify the amount of memory to be consumed in mebibytes - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty - - name: MEMORY_CONSUMPTION_MEBIBYTES - value: '' - - - name: NUMBER_OF_WORKERS - value: '1' - - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: "Kills a container belonging to an application pod \n" -kind: ChaosExperiment -metadata: - name: container-kill - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name container-kill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - - name: TARGET_PODS - value: '' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - - name: SIGNAL - value: 'SIGKILL' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Inject network packet corruption into application pod -kind: ChaosExperiment -metadata: - name: pod-network-corruption - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-corruption - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog-exec - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog-exec - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus - - name: LIB - value: 'litmus' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/md5sum' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}')" - - - name: TARGET_PODS - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Fillup Ephemeral Storage of a Resource -kind: ChaosExperiment -metadata: - name: disk-fill - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name disk-fill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: FILL_PERCENTAGE - value: '80' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # provide the data block size - # supported unit is KB - - name: DATA_BLOCK_SIZE - value: '256' - - - name: TARGET_PODS - value: '' - - - name: EPHEMERAL_STORAGE_MEBIBYTES - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # Provide the container runtime path - # Default set to docker container path - - name: CONTAINER_PATH - value: '/var/lib/docker/containers' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/host-path-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kills the docker service on the application node to check the resiliency. -kind: ChaosExperiment -metadata: - name: docker-service-kill - labels: - name: docker-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name docker-service-kill - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '90' # in seconds - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: LIB - value: 'litmus' - - - name: NODE_LABEL - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' - - labels: - name: docker-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/service-kill: "true" - app.kubernetes.io/version: latest - - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects http request latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-http-latency - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: LATENCY - value: '2000' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Drain the node where application pod is scheduled -kind: ChaosExperiment -metadata: - name: node-drain - labels: - name: node-drain - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-drain - command: - - /bin/bash - env: - - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - labels: - name: node-drain - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kills the kubelet service on the application node to check the resiliency. -kind: ChaosExperiment -metadata: - name: kubelet-service-kill - labels: - name: kubelet-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name kubelet-service-kill - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: LIB - value: 'litmus' - - - name: NODE_LABEL - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' - - labels: - name: kubelet-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/service-kill: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects memory consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-memory-hog-exec - labels: - name: pod-memory-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-memory-hog-exec - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus - - name: LIB - value: 'litmus' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/dd' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}' | head -n 1)" - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - - name: TARGET_PODS - value: '' - - labels: - name: pod-memory-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects 100% network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-partition - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # performs CRUD operations on the network policies - - apiGroups: ["networking.k8s.io"] - resources: ["networkpolicies"] - verbs: ["create","delete","list","get"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-partition - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # it should be litmus - - name: LIB - value: 'litmus' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide network policy type - # support ingress, egress, all values - - name: POLICY_TYPES - value: 'all' - - # provide labels of the destination pods - - name: POD_SELECTOR - value: '' - - # provide labels the destination namespaces - - name: NAMESPACE_SELECTOR - value: '' - - # provide comma separated ports - - name: PORTS - value: '' - - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Scale the application replicas and test the node autoscaling on cluster -kind: ChaosExperiment -metadata: - name: pod-autoscaler - labels: - name: pod-autoscaler - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # performs CRUD operations on the deployments and statefulsets - - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-autoscaler - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Number of replicas to scale - - name: REPLICA_COUNT - value: '5' - - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED - - name: LIB - value: 'litmus' - - labels: - name: pod-autoscaler - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - poweroff node -kind: ChaosExperiment -metadata: - name: node-poweroff - labels: - name: node-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-restart - command: - - /bin/bash - env: - - name: SSH_USER - value: 'root' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: REBOOT_COMMAND - value: '-o ServerAliveInterval=1 -o ServerAliveCountMax=1 "sudo systemctl poweroff --force --force" ; true' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - labels: - name: node-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: id-rsa - mountPath: /mnt/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Taint the node where application pod is scheduled -kind: ChaosExperiment -metadata: - name: node-taint - labels: - name: node-taint - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch","update"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-taint - command: - - /bin/bash - env: - - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # set taint label & effect - # key=value:effect or key:effect - - name: TAINTS - value: '' - - labels: - name: node-taint - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus, pumba - - name: LIB - value: 'litmus' - - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet duplication on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-duplication - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-duplication - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: RAMP_TIME - value: '' - - - name: TARGET_CONTAINER - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE - value: '100' # in percentage - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give a cpu spike on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-cpu-hog - labels: - name: node-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-cpu-hog - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## ENTER THE NUMBER OF CORES OF CPU FOR CPU HOGGING - ## OPTIONAL VALUE IN CASE OF EMPTY VALUE IT WILL TAKE NODE CPU CAPACITY - - name: NODE_CPU_CORE - value: '' - - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' - - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-latency - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: NETWORK_INTERFACE - value: 'eth0' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_LATENCY - value: '2000' #in ms - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: JITTER - value: '0' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give IO disk stress on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-io-stress - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-io-stress - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' - - ## Number of core of CPU - - name: CPU - value: '1' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Total number of vm workers - - name: VM_WORKERS - value: '1' - - ## enter the comma separated target nodes name - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Pod DNS Spoof can spoof particular dns requests in target pod container to desired target hostnames -kind: ChaosExperiment -metadata: - name: pod-dns-spoof - labels: - name: pod-dns-spoof - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name pod-dns-spoof - command: - - /bin/bash - env: - - name: TARGET_CONTAINER - value: "" - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: "" - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: "" - - - name: TARGET_PODS - value: "" - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: "parallel" - - # map of the target hostnames eg. '{"abc.com":"spoofabc.com"}' . If empty no queries will be spoofed - - name: SPOOF_MAP - value: "" - - labels: - experiment: pod-dns-spoof - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes a pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - name: pod-delete - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-delete - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB - value: 'litmus' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects memory consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-memory-hog - labels: - name: pod-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-memory-hog - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## Number of workers to perform stress - - name: NUMBER_OF_WORKERS - value: '1' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus, pumba - - name: LIB - value: 'litmus' - - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - labels: - name: pod-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Restart node -kind: ChaosExperiment -metadata: - name: node-restart - labels: - name: node-restart - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-restart - command: - - /bin/bash - env: - - name: SSH_USER - value: 'root' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - labels: - name: node-restart - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: id-rsa - mountPath: /mnt/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Drain the node where application pod is scheduled -kind: ChaosExperiment -metadata: - name: node-drain - labels: - name: node-drain - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-drain - command: - - /bin/bash - env: - - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - labels: - name: node-drain - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- diff --git a/experiments/generic/generic.chartserviceversion.yaml b/experiments/generic/generic.chartserviceversion.yaml deleted file mode 100644 index a8b31b662..000000000 --- a/experiments/generic/generic.chartserviceversion.yaml +++ /dev/null @@ -1,109 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-09-26T10:28:08Z - name: generic - version: 0.1.16 - annotations: - categories: Kubernetes - chartDescription: Injects generic kubernetes chaos -spec: - displayName: Generic Chaos - categoryDescription: > - Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. It groups containers that make up an application into logical units for easier management and discovery. It will install all the experiments which can be used to inject chaos into containerized applications. - - experiments: - - name: pod-delete - description: "deletes a k8s pod" - - name: container-kill - description: "deletes a container in a k8s pod" - - name: pod-cpu-hog - description: "" - - name: pod-network-loss - description: "" - - name: pod-network-latency - description: "" - - name: pod-network-corruption - description: "" - - name: node-drain - description: "" - - name: node-cpu-hog - description: "" - - name: disk-fill - description: "" - - name: node-memory-hog - description: "" - - name: pod-memory-hog - description: "" - - name: kubelet-service-kill - description: "" - - name: pod-network-duplication - description: "" - - name: node-taint - description: "" - - name: docker-service-kill - description: "" - - name: pod-autoscaler - description: "" - - name: node-io-stress - description: "" - - name: pod-io-stress - description: "" - - name: node-restart - description: "" - - name: pod-dns-error - description: "" - - name: pod-dns-spoof - description: "" - - name: pod-cpu-hog-exec - description: "" - - name: pod-memory-hog-exec - description: "" - - name: pod-network-partition - description: "" - - name: pod-http-latency - description: "" - - name: pod-http-modify-body - description: "" - - name: pod-http-reset-peer - description: "" - - name: pod-http-modify-header - description: "" - - name: pod-http-status-code - description: "" - keywords: - - Kubernetes - - K8S - - Container - - Node - - Pod - - Disk - - IO - - Filesystem - - Network - - CPU - - Memory - - Stress - - Service - - DNS - - Scale - - Http - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/kubernetes/kubernetes - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/contents/#generic - icon: - - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/experiments.yaml diff --git a/experiments/generic/icons/byoc-pod-delete.png b/experiments/generic/icons/byoc-pod-delete.png deleted file mode 100644 index 16aa7b417698ef0d66f130fe9b3218f25fa6f356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di49p>(E{-7;jBn@e_YV#fIeuQ7g^T4ylTJ`q zg1CrpkM->C&R^mk&6B&2oo)RkuFzBEkb1r1%RWh_y3XRYCsm3X9RilQCUiLj z_*vStc(X7GDZIzMgm4+nQtI%y}<9r|`+Y zT%_}SrPbzor*AKk;m%QSYu}ae%Eew*{{7-33+fV9vF>`;r>@7Uq4P-xpGRLliI)saTo`SRHK8kKn4p_?~3b<&(HG;{*eC@e$L}X zE*Q3sZDq9 zZk*-ez2Q}Kg7(t$Q97DiqaGYvFB?@i{rjylw?kLHROqW;xx4ChEoYAqXX=7g^IYE9 zp9q|?qxAEPS5`Ki5->-=g6zuc1CtePYqm?DVD3%ekml44nCeq7bMe~#Iaf}&ElE>3 zCwT3qaq|?LTaUBZuO-fCE7-dw?Do59Pi}ZUTK%PBzUIv~EB^9l_xvs27T*w? zxnRka;K|I5+y4K$CBNg7YtxncIv@47Dqpp|a>;n>Z)QVo>A?G*?_G8H_mr8g+~ucx zp*KQlE$eG&;K1E=TH@^~o2&<(M>yIxz+x8`h%PK?oGhuHEP8?*r&e*)xG89G`#rr< zWZ5E??*3c(wZ*xJp7hZ%i{pII^a|OoU4-B3~ z-23`!wp+ZLfpco7Cezo7?YmB8tbHg`QtG;7j^W%zpTd(|ChAO`Ug^K{nfB+Sa{n01 X?;ErEthk>7%x?^yu6{1-oD!M z+;i_a_k$90VRCY^hIeoAwu-luaJSx}cKX1Pfe8MNC-*0h_3ZDUU(Gr4$mz z#{Q#t-yOPf^KRN_IM#i6OnfIqG?lOqoTNMfLHhc~c|R&%kB_T~Q&u*EqV@OF!UdHS zn^!Jg=Zl;R81KJBofn4bkCQ{nf@Pz6_DqV+FBgsNn(CR9OL8V4EUf+5b?V`Lki_Ok zSjY#ck@vYEZ~^0e<8=7wwXDLSSi+K`^<^}4b0Y2g5GKOk5q^@bIGgphEU2L8SJeh? zk%0+_8*Tr6kdAXvosQVN2wO@ywLDZo(YmtKag|s&&b|{Ocbp%lp5Eyn4*mvz8x(;& zo*P4V>FaN=uqCC}rm(apAFmb`0&6n`f@53GzlHNabW}#pbK>}!zi-hSugwj_8h!u8 zGymM8!$+>A6)`E?@+YcAQS=iO{g+zngm@6kX}vi9<(^*goffXS{lr%R-HIMSQC<6D zy|~dJ!SAEUE_t*nVR`&8C1dQ?f_!s>E~w8(mHAL6>Kr2+4O zUn2Sbio+;gwrg<~aZ@}sV^G_E!Oq!Q zM8YJV6c7G^X5EHwX-J+L{p^@!~<^EhKdFE;3Yv}EFg-2^=YEQ2&;G!DPozW z8710~E-eRDj08l{b)FQpZJ5QA$fk~!<9`l`kkbSs0e?C=V0*u0QB}^HDqcYC9CIWa z5U-n{Eg-Tgofk%I$3oIytHs*ZdRtLOT#Zmr7i|HNlClEv3Zdva!8OAYt(f>iEdk;C ztZ61(1d4B=0=MI|LS0{|C7|;OAr)1K)+dQ16C74LFOHB7S_1Ysd_*DoJ}1aUTFI2Z zbVFIdt8CiVb{}dnQ|s%$Iz|KWF&e&om+}pAiq;w#jcc9CL|K8$j;!y(X8pX{p?y8n z*jz>DPG6^edoHDpKfGj)7$;USYbI4zmQrmr!mktiO5WEslv8;ne>N)^chSf_dsg4x z$6c#%Pbw&1Q3odtti%*gAZh>c3hn)@gSLLOEbX(cA1|ZL8`_0cN+4$ID>0kU0HQ)r zKgAXncx>u@Hyev;yH@!u=^@RuAU^7wctO%oXYb&0>kxAzCA-Yh zy5StFGB*Bi#_xx&P;xgsM{lW^nw7gRKJA%q~@~ zDA15aBi9;bzUq8sN<52iJ?M}{Xv1XICr zZ7S|%Q4r&f+@7HKwk%5gHXjr5ulSC6vcVauMj~p}gYp^S_s%E#LJ->FggWuC6cOQ7 zD)>)|fbHu8&bz@RF)i zZpPHt*~K#H!3ry0QgzA#%9M}9qyr|5xOJ52lq{`=wAT)pFyhuxrh}G%ZXGZon>nOK z!uq^*lxYd*)&X<;FTGx@FoEE}Ye$)OEbI)2V1;;+g@)SzDU%Va+5*ByIIZyD4}DZ< zIK^veuF&>>z$hED=D7!L?@@~(gIg%zTF*KXrfXK$k_kov$_Xx3kS;HTqKs?&#gW?g zGC;~WALu-(94;GX5#7PyOpliPMRPhvCP(IbZrj+~%Lj34ZykopEl= zV{sENR8zfxEMC^4hl&L=H?MN;FqhNuVRdMmy7gU$cCsPB#UU99pJ=V=(B{I1&lf*Z z6_}8S%Mn_-t;c{01MOG8ha~%cCz#yVu(2#{S{0C!pZ#7SBHKb1LC&BG#1wF$AG{lL ztxboLU8L9$5}Gbug6S4Ly`v(rn`xK{QgF|*<@-I!TN3!96AvYgRv~+`DE<4wpR{6&9Ikfe1f7tMTVWyk?B&?1rgfNN6oWj+dq9UerL%^S@h$-Jgz^{0_K}B@w!lK+W_#cS( zHWksO4gUy_%p&gR-A*c^%67RVe5y+016aj;I~B>sPS&bTzH$4{2sTk-VeTd>Vnw*R zWNA%NGTpb6LSl{SCJNC?zd5Fh63x7$yzNfb7dHL}_aG^`%H!(O00000NkvXXu0mjf DVw6lF diff --git a/experiments/generic/icons/disk-fill.png b/experiments/generic/icons/disk-fill.png deleted file mode 100644 index a0418eec072fc17f943c62567308c62aa53b20ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1703 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 FV1j;V=*s{A diff --git a/experiments/generic/icons/node-cpu-hog.png b/experiments/generic/icons/node-cpu-hog.png deleted file mode 100644 index aa91993bd725ca14b0b7932cea0aba3338d708c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2453 zcmV;G32OFuz|EUCYsKzOu{|fY$HZ1owFVa0i-~Z4BS0sX!U7kOhT!o}BA&QPn&CMR zSWg-v@=vC<^{|+z2^vA*W26}n@8T9NY;~^4s4r?}nhlZeaqA1+S3!ZA$;N99g@m*u z@U*BtBxVN7X~v8@%wx@jL{9>F{`bJ_DyqM)(md8pNG6kJxYR$E7VE--Jh-leZbG7+ z1#;^{`~$+=0yPs7?Fi)YFMMy3xQg;g+6u`nVS#|ILZTIcJpRGzxa&fVC3F%Jtq6>= z>VsRHdaRR>XhmRzbzkO)4m8Ki8O#DT5)!>Eusgd2LPW~TlOI3F#6L-j8vi7? zsOTaj+7M_L|0HT_rkJmF5fW_(JjMEdYW$Pn7O0Dml!=b?P5K{>p=C4SRzlGT+|w4N zV~69k?WEj?5YX%3d(Xk_ObL@~H&m4QA&#+2ZbMw

HB7ZQq_VECp5r@><_$Ah)r1XEz-eM1~rs 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 diff --git a/experiments/generic/icons/node-io-stress.png b/experiments/generic/icons/node-io-stress.png deleted file mode 100644 index 5d13f6b2fde28f9f5851dda3b8508814821df434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12130 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 diff --git a/experiments/generic/icons/node-restart.png b/experiments/generic/icons/node-restart.png deleted file mode 100644 index 5d13f6b2fde28f9f5851dda3b8508814821df434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12130 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 QI{*Lx07*qoM6N<$f&(6imjD0& diff --git a/experiments/generic/icons/pod-network-loss.png b/experiments/generic/icons/pod-network-loss.png deleted file mode 100644 index 5826e28ffd2541bf4e2c59059d30b1e41c8be230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2715 zcmV;M3S{+(P)kvo&>D#YzlOno>w@yA4gG@K6KYV)_D>J~e%-N&D0X>4Q&AV}0qr zv}px=F?P}F1Jow9Y*QNP9||E2D0X)xxI3%Dpscfs;Q8*%SH8^zTVgm>qlpL*MO~IJ( zWy#Spx+F(i$O&u{Ie~4WB?4=;OLDcL)iGrz@Lctx{C3Z2d3JwAt`;0U{#G<5j4dlN z5r`W+@#Gn)p1&x^j=z0XkO=ag+dmzR31iDjVkQFr@XTa%BMXpt^5qM%P%$+<8iOfw2 z96fZ_^LxPdZ`~rLV*FP@_Q6AErBeY*(t-rWf-x1HG1X=-MPqMssu9Qcp{qm;9EFCZ`)c{+g`~6gmy1PT28%?G((9DO@%MLJR=%Z0w;)VI9Cmv zAHvL$-7_$tD^-B7g#nF35VMZPf-z`qS%pU_8?lHHh~VL>3To1(Ypgyk4Y05gdcLEx zTNvOB!UBEdeD9b-4#?(qni+R#o!|>;c#)*P%8;y?Zhczxq5MH&=xMeC49+bK;GUX! z!j##fPMp%GZTHX=Pc!2ffv8ZpxO?@Dv0s|3%u0n)gLP};W{zO=BF&-8z1PP&rs2Zd z7v=S-T6ExjGpNxsV4mF9P>{IujwRmb6UzM9lMH0a#AphHid=+J9G(WE&9<%m5(0=i zuy0%r9yk*b=k;UdO)|9UQ?mBnvh?w!eN;wvzY-%a zy6364Wbe;U$|FDcryTs#8TA_Kbj(d)cd+=rADB)t9_HEKk2R#By5 zgh${c`9Dp8no3GM1q8CtW&>xA)h!w=rB zk_hsKcibMenQ4$V(+D~YO)R4-|$rRX+ z05egZ7ms|FAdncLAVKon>ntz(=GbiDK&j}fi^ZX#mPFu{1k#can8Xly7VxD^Afq-r zKgEoW-5WFQt570IPXhdtfGghQgpj~irfrS~Z!%ReIQzCABpBd16k>~aaB;r1r zNuqDsW`NLwn2XTv40Y44RLJ=wc0Fm+z>f=Bgbr;M)%Jw152Qjs zuzG;hC5;M!2e$Ob+CK5*Yx7pb%!+3ZOnaY;jXlvCj-^a-EP@1TD#Vis6&QF=AcDqx z)!?$?0oogQzX>vFH;eK*Gb3??P@%T{UjuxEHHrC-wprn(I7xpTq-_>mmtej?)4y0p zZU=L8fhZl?g^EIEIj~mzaRV+TWEHS3R$m$+G_^5pQ({u2?NsuB5P292lNXu>GEzAy zE!=lnq-_=Ods>9PFXcY(R0QJ5Ved0X+NYkGYUyumI|cTSgLu&^^p{u~Qin;HCi^{v z`^xmfRbinJKeuti&52Q$ktxq`BP|e`b1oEc0Rpb7S=42;^t~~NSlAQONvTRZfF)^l z&os!tc&ANt?ADHjf}FrMkrUV^ast}~2pp3ft>Op>JR&(-#W)E3tK?`E`wES3EytJ8 z=HDHi4P%8u;kGXG55A4|JCY+ScHy5W3gi2b&C6qwBQ1VxzY^Z7M;LS7WnLbZ97%Z0 zkoSH2LHo}Lc1oSZLCN7Fa&--BokJnix* diff --git a/experiments/generic/icons/pod-network-partition.png b/experiments/generic/icons/pod-network-partition.png deleted file mode 100644 index 5d13f6b2fde28f9f5851dda3b8508814821df434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12130 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 - Drain the node where application pod is scheduled - keywords: - - Kubernetes - - K8S - - Node - - Drain - platforms: - - GKE - - AWS(KOPS) - - Packet(Kubeadm) - - Konvoy - - EKS - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: shubham chaudhary - email: shubham.chaudhary@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-drain - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-drain/ - - name: Video - url: https://www.youtube.com/watch?v=LQVCZUQ4-ok - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-drain/experiment.yaml diff --git a/experiments/generic/node-drain/rbac-psp.yaml b/experiments/generic/node-drain/rbac-psp.yaml deleted file mode 100644 index c1ddf8c34..000000000 --- a/experiments/generic/node-drain/rbac-psp.yaml +++ /dev/null @@ -1,75 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-drain-sa - namespace: default - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-drain-sa - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-drain-sa - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-drain-sa -subjects: -- kind: ServiceAccount - name: node-drain-sa - namespace: default diff --git a/experiments/generic/node-drain/rbac.yaml b/experiments/generic/node-drain/rbac.yaml deleted file mode 100644 index e16cbd8e5..000000000 --- a/experiments/generic/node-drain/rbac.yaml +++ /dev/null @@ -1,70 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-drain-sa - namespace: default - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-drain-sa - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-drain-sa - labels: - name: node-drain-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-drain-sa -subjects: -- kind: ServiceAccount - name: node-drain-sa - namespace: default diff --git a/experiments/generic/node-io-stress/engine.yaml b/experiments/generic/node-io-stress/engine.yaml deleted file mode 100644 index 938949fdd..000000000 --- a/experiments/generic/node-io-stress/engine.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: node-io-stress-sa - experiments: - - name: node-io-stress - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## Number of core of CPU - - name: CPU - value: '1' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - # provide the comma separated target node names - - name: TARGET_NODES - value: '' diff --git a/experiments/generic/node-io-stress/experiment.yaml b/experiments/generic/node-io-stress/experiment.yaml deleted file mode 100644 index 0e46e7f18..000000000 --- a/experiments/generic/node-io-stress/experiment.yaml +++ /dev/null @@ -1,116 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give IO disk stress on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-io-stress - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-io-stress - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' - - ## Number of core of CPU - - name: CPU - value: '1' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Total number of vm workers - - name: VM_WORKERS - value: '1' - - ## enter the comma separated target nodes name - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/generic/node-io-stress/node-io-stress.chartserviceversion.yaml b/experiments/generic/node-io-stress/node-io-stress.chartserviceversion.yaml deleted file mode 100644 index 2f990bccc..000000000 --- a/experiments/generic/node-io-stress/node-io-stress.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-09-12T10:28:08Z - name: node-io-stress - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: node-io-stress - categoryDescription: | - This experiment causes disk stress on the Kubernetes node. The experiment aims to verify the resiliency of applications that share this disk resource for ephemeral or persistent storage purposes.. - - Disk stress on a particular node filesystem where the application deployment is available. - - The amount of disk stress can be either specifed as the size in percentage of the total free space on the file system or simply in Gigabytes(GB) - keywords: - - Kubernetes - - K8S - - Disk - - IO - - Filesystem - - Node - platforms: - - GKE - - EKS - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-io-stress - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-io-stress/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-io-stress/experiment.yaml diff --git a/experiments/generic/node-io-stress/rbac-psp.yaml b/experiments/generic/node-io-stress/rbac-psp.yaml deleted file mode 100644 index ab12913f8..000000000 --- a/experiments/generic/node-io-stress/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-io-stress-sa - namespace: default - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-io-stress-sa - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-io-stress-sa - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-io-stress-sa -subjects: -- kind: ServiceAccount - name: node-io-stress-sa - namespace: default diff --git a/experiments/generic/node-io-stress/rbac.yaml b/experiments/generic/node-io-stress/rbac.yaml deleted file mode 100644 index a6858e7ee..000000000 --- a/experiments/generic/node-io-stress/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-io-stress-sa - namespace: default - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-io-stress-sa - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-io-stress-sa - labels: - name: node-io-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-io-stress-sa -subjects: -- kind: ServiceAccount - name: node-io-stress-sa - namespace: default diff --git a/experiments/generic/node-memory-hog/engine.yaml b/experiments/generic/node-memory-hog/engine.yaml deleted file mode 100644 index 8e6b01ce9..000000000 --- a/experiments/generic/node-memory-hog/engine.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: node-memory-hog-sa - experiments: - - name: node-memory-hog - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - # provide the comma separated target node names - - name: TARGET_NODES - value: '' - - ## Specify the size as percent of total node capacity Ex: '30' - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty - - name: MEMORY_CONSUMPTION_PERCENTAGE - value: '0' - - ## Specify the amount of memory to be consumed in mebibytes - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty - - name: MEMORY_CONSUMPTION_MEBIBYTES - value: '0' diff --git a/experiments/generic/node-memory-hog/experiment.yaml b/experiments/generic/node-memory-hog/experiment.yaml deleted file mode 100644 index f5f7b59f4..000000000 --- a/experiments/generic/node-memory-hog/experiment.yaml +++ /dev/null @@ -1,107 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give a memory hog on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-memory-hog - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-memory-hog - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## Specify the size as percent of total node capacity Ex: '30' - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty - - name: MEMORY_CONSUMPTION_PERCENTAGE - value: '' - - ## Specify the amount of memory to be consumed in mebibytes - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty - - name: MEMORY_CONSUMPTION_MEBIBYTES - value: '' - - - name: NUMBER_OF_WORKERS - value: '1' - - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/generic/node-memory-hog/node-memory-hog.chartserviceversion.yaml b/experiments/generic/node-memory-hog/node-memory-hog.chartserviceversion.yaml deleted file mode 100644 index f6d7cf18c..000000000 --- a/experiments/generic/node-memory-hog/node-memory-hog.chartserviceversion.yaml +++ /dev/null @@ -1,50 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-03-28T10:28:08Z - name: node-memory-hog - version: 0.1.5 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: node-memory-hog - categoryDescription: | - Kubernetes Node memory hog contains chaos to disrupt the state of Kubernetes resources. Experiments can inject a memory spike on a node where the application pod is scheduled. - - Memory hog on a particular node where the application deployment is available. - - After the test, the recovery should be manual for the application pod and node in case they are not in an appropriate state. - keywords: - - Kubernetes - - K8S - - Memory - - Node - platforms: - - GKE - - EKS - - AKS - - Kind - - Rancher - - OpenShift(OKD) - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-memory-hog - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-memory-hog/ - - name: Video - url: https://www.youtube.com/watch?v=ECxlWgQ8F5w - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-memory-hog/experiment.yaml diff --git a/experiments/generic/node-memory-hog/rbac-psp.yaml b/experiments/generic/node-memory-hog/rbac-psp.yaml deleted file mode 100644 index a6002c52a..000000000 --- a/experiments/generic/node-memory-hog/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-memory-hog-sa - namespace: default - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-memory-hog-sa - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-memory-hog-sa - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-memory-hog-sa -subjects: -- kind: ServiceAccount - name: node-memory-hog-sa - namespace: default diff --git a/experiments/generic/node-memory-hog/rbac.yaml b/experiments/generic/node-memory-hog/rbac.yaml deleted file mode 100644 index 74cd3ebcc..000000000 --- a/experiments/generic/node-memory-hog/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-memory-hog-sa - namespace: default - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-memory-hog-sa - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-memory-hog-sa - labels: - name: node-memory-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-memory-hog-sa -subjects: -- kind: ServiceAccount - name: node-memory-hog-sa - namespace: default diff --git a/experiments/generic/node-poweroff/experiment.yaml b/experiments/generic/node-poweroff/experiment.yaml deleted file mode 100644 index d59814776..000000000 --- a/experiments/generic/node-poweroff/experiment.yaml +++ /dev/null @@ -1,97 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - poweroff node -kind: ChaosExperiment -metadata: - name: node-poweroff - labels: - name: node-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-restart - command: - - /bin/bash - env: - - name: SSH_USER - value: 'root' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: REBOOT_COMMAND - value: '-o ServerAliveInterval=1 -o ServerAliveCountMax=1 "sudo systemctl poweroff --force --force" ; true' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - labels: - name: node-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: id-rsa - mountPath: /mnt/ diff --git a/experiments/generic/node-poweroff/node-poweroff.chartserviceversion.yaml b/experiments/generic/node-poweroff/node-poweroff.chartserviceversion.yaml deleted file mode 100644 index 566ca14e2..000000000 --- a/experiments/generic/node-poweroff/node-poweroff.chartserviceversion.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-01-28T10:28:08Z - name: node-poweroff - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: node-poweroff - categoryDescription: | - Node poweroff contains chaos experiment to poweroff a node via SSH. - keywords: - - Kubernetes - - K8S - - Poweroff - - Node - platforms: - - KVM/LibVirt based K8s - - EKS - maturity: alpha - chaosType: infra - maintainers: - - name: jordigilh - email: jordi.gil@gmail.com - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-restart - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-restart - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-poweroff/experiment.yaml diff --git a/experiments/generic/node-poweroff/rbac-psp.yaml b/experiments/generic/node-poweroff/rbac-psp.yaml deleted file mode 100644 index 93abac3af..000000000 --- a/experiments/generic/node-poweroff/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-poweroff-sa - namespace: default - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-poweroff-sa - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-poweroff-sa - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-poweroff-sa -subjects: -- kind: ServiceAccount - name: node-poweroff-sa - namespace: default diff --git a/experiments/generic/node-poweroff/rbac.yaml b/experiments/generic/node-poweroff/rbac.yaml deleted file mode 100644 index 16898dfb8..000000000 --- a/experiments/generic/node-poweroff/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-poweroff-sa - namespace: default - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-poweroff-sa - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-poweroff-sa - labels: - name: node-poweroff-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-poweroff-sa -subjects: -- kind: ServiceAccount - name: node-poweroff-sa - namespace: default diff --git a/experiments/generic/node-restart/experiment.yaml b/experiments/generic/node-restart/experiment.yaml deleted file mode 100644 index f36bf821d..000000000 --- a/experiments/generic/node-restart/experiment.yaml +++ /dev/null @@ -1,94 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Restart node -kind: ChaosExperiment -metadata: - name: node-restart - labels: - name: node-restart - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-restart - command: - - /bin/bash - env: - - name: SSH_USER - value: 'root' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - labels: - name: node-restart - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: id-rsa - mountPath: /mnt/ diff --git a/experiments/generic/node-restart/node-restart.chartserviceversion.yaml b/experiments/generic/node-restart/node-restart.chartserviceversion.yaml deleted file mode 100644 index 4eceec81b..000000000 --- a/experiments/generic/node-restart/node-restart.chartserviceversion.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-01-28T10:28:08Z - name: node-restart - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: node-restart - categoryDescription: | - Node restart contains chaos to restart the node via SSH. - keywords: - - Kubernetes - - K8S - - Restart - - Node - platforms: - - KVM/LibVirt based K8s - - EKS - maturity: alpha - chaosType: infra - maintainers: - - name: machacekondra - email: machacek.ondra@gmail.com - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-restart - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-restart - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-restart/experiment.yaml diff --git a/experiments/generic/node-restart/rbac-psp.yaml b/experiments/generic/node-restart/rbac-psp.yaml deleted file mode 100644 index b21b60b01..000000000 --- a/experiments/generic/node-restart/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-restart-sa - namespace: default - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-restart-sa - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-restart-sa - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-restart-sa -subjects: -- kind: ServiceAccount - name: node-restart-sa - namespace: default diff --git a/experiments/generic/node-restart/rbac.yaml b/experiments/generic/node-restart/rbac.yaml deleted file mode 100644 index 9b48dd1fc..000000000 --- a/experiments/generic/node-restart/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-restart-sa - namespace: default - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-restart-sa - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-restart-sa - labels: - name: node-restart-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-restart-sa -subjects: -- kind: ServiceAccount - name: node-restart-sa - namespace: default diff --git a/experiments/generic/node-taint/engine.yaml b/experiments/generic/node-taint/engine.yaml deleted file mode 100644 index 44cfc24de..000000000 --- a/experiments/generic/node-taint/engine.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: node-taint-sa - experiments: - - name: node-taint - spec: - components: - # nodeSelector: - # # provide the node labels - # kubernetes.io/hostname: 'node02' - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - # set target node name - - name: TARGET_NODE - value: '' - - # set taint label & effect - # key=value:effect or key:effect - - name: TAINTS - value: 'node.kubernetes.io/unreachable:NoExecute' - \ No newline at end of file diff --git a/experiments/generic/node-taint/node-taint.chartserviceversion.yaml b/experiments/generic/node-taint/node-taint.chartserviceversion.yaml deleted file mode 100644 index 6e199735e..000000000 --- a/experiments/generic/node-taint/node-taint.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-01-13T10:28:08Z - name: node-taint - version: 0.1.2 - annotations: - categories: Kubernetes - vendor: Mayadata - repository: https://github.com/litmuschaos/chaos-charts - support: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN -spec: - displayName: node-taint - categoryDescription: > - Taint the node where application pod is scheduled - keywords: - - Kubernetes - - K8S - - Node - - Taint - platforms: - - GKE - - AWS(KOPS) - - Packet(Kubeadm) - - Konvoy - - EKS - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: shubham chaudhary - email: shubham.chaudhary@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/node-taint - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/nodes/node-taint/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-taint/experiment.yaml diff --git a/experiments/generic/node-taint/rbac-psp.yaml b/experiments/generic/node-taint/rbac-psp.yaml deleted file mode 100644 index 1188ec741..000000000 --- a/experiments/generic/node-taint/rbac-psp.yaml +++ /dev/null @@ -1,75 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-taint-sa - namespace: default - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-taint-sa - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch","update"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-taint-sa - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-taint-sa -subjects: -- kind: ServiceAccount - name: node-taint-sa - namespace: default diff --git a/experiments/generic/node-taint/rbac.yaml b/experiments/generic/node-taint/rbac.yaml deleted file mode 100644 index 8981a5548..000000000 --- a/experiments/generic/node-taint/rbac.yaml +++ /dev/null @@ -1,70 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: node-taint-sa - namespace: default - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: node-taint-sa - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch","update"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: node-taint-sa - labels: - name: node-taint-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: node-taint-sa -subjects: -- kind: ServiceAccount - name: node-taint-sa - namespace: default diff --git a/experiments/generic/pod-autoscaler/engine.yaml b/experiments/generic/pod-autoscaler/engine.yaml deleted file mode 100644 index 65dfbf16d..000000000 --- a/experiments/generic/pod-autoscaler/engine.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-autoscaler-sa - experiments: - - name: pod-autoscaler - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '60' - - # number of replicas to scale - - name: REPLICA_COUNT - value: '5' - \ No newline at end of file diff --git a/experiments/generic/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml b/experiments/generic/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml deleted file mode 100644 index a22bc4c44..000000000 --- a/experiments/generic/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml +++ /dev/null @@ -1,47 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-08-08T10:28:08Z - name: pod-autoscaler - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-autoscaler - categoryDescription: | - The experiment aims to check the ability of nodes to accommodate the number of replicas a given application pod. - This experiment can be used for other scenarios as well, such as for checking the Node auto-scaling feature. For example, check if the pods are successfully rescheduled within a specified period in cases where the existing nodes are already running at the specified limits. - keywords: - - Kubernetes - - K8S - - Scale - - Pod - platforms: - - GKE - - EKS - - Minikube - - AKS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-autoscaler - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-autoscaler/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-autoscaler/experiment.yaml diff --git a/experiments/generic/pod-autoscaler/rbac-psp.yaml b/experiments/generic/pod-autoscaler/rbac-psp.yaml deleted file mode 100644 index 49a03acef..000000000 --- a/experiments/generic/pod-autoscaler/rbac-psp.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-autoscaler-sa - namespace: default - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pod-autoscaler-sa - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # performs CRUD operations on the deployments and statefulsets - - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pod-autoscaler-sa - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pod-autoscaler-sa -subjects: -- kind: ServiceAccount - name: pod-autoscaler-sa - namespace: default diff --git a/experiments/generic/pod-autoscaler/rbac.yaml b/experiments/generic/pod-autoscaler/rbac.yaml deleted file mode 100644 index 19114f159..000000000 --- a/experiments/generic/pod-autoscaler/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-autoscaler-sa - namespace: default - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pod-autoscaler-sa - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # performs CRUD operations on the deployments and statefulsets - - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pod-autoscaler-sa - labels: - name: pod-autoscaler-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pod-autoscaler-sa -subjects: -- kind: ServiceAccount - name: pod-autoscaler-sa - namespace: default diff --git a/experiments/generic/pod-cpu-hog-exec/experiment.yaml b/experiments/generic/pod-cpu-hog-exec/experiment.yaml deleted file mode 100644 index a04eda9ae..000000000 --- a/experiments/generic/pod-cpu-hog-exec/experiment.yaml +++ /dev/null @@ -1,105 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog-exec - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog-exec - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus - - name: LIB - value: 'litmus' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/md5sum' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}')" - - - name: TARGET_PODS - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml b/experiments/generic/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml deleted file mode 100644 index 65ef4e83c..000000000 --- a/experiments/generic/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-16T10:28:08Z - name: pod-cpu-hog-exec - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-cpu-hog-exec - categoryDescription: | - pod-cpu-hog-exec contains chaos to consume CPU resouces of specified containers in Kubernetes pods. - - Causes high CPU resource consumption utilizing one or more cores by triggering md5sum commands - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - CPU - - Pod - - Exec - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - Kind - maturity: alpha - maintainers: - - name: ksatchit - email: karthik@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-cpu-hog-exec - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-cpu-hog-exec/ - - name: Video - url: https://www.youtube.com/watch?v=MBGSPmZKb2I - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-cpu-hog-exec/experiment.yaml diff --git a/experiments/generic/pod-cpu-hog-exec/rbac-psp.yaml b/experiments/generic/pod-cpu-hog-exec/rbac-psp.yaml deleted file mode 100644 index f1733be2d..000000000 --- a/experiments/generic/pod-cpu-hog-exec/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-cpu-hog-exec-sa -subjects: -- kind: ServiceAccount - name: pod-cpu-hog-exec-sa - namespace: default diff --git a/experiments/generic/pod-cpu-hog-exec/rbac.yaml b/experiments/generic/pod-cpu-hog-exec/rbac.yaml deleted file mode 100644 index 9e801517a..000000000 --- a/experiments/generic/pod-cpu-hog-exec/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-cpu-hog-exec-sa - namespace: default - labels: - name: pod-cpu-hog-exec-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-cpu-hog-exec-sa -subjects: -- kind: ServiceAccount - name: pod-cpu-hog-exec-sa - namespace: default diff --git a/experiments/generic/pod-cpu-hog/experiment.yaml b/experiments/generic/pod-cpu-hog/experiment.yaml deleted file mode 100644 index e49ce0b3f..000000000 --- a/experiments/generic/pod-cpu-hog/experiment.yaml +++ /dev/null @@ -1,127 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus, pumba - - name: LIB - value: 'litmus' - - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml b/experiments/generic/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml deleted file mode 100644 index 520611579..000000000 --- a/experiments/generic/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-16T10:28:08Z - name: pod-cpu-hog - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-cpu-hog - categoryDescription: | - Pod-CPU-Hog contains chaos to consume CPU resouces of specified containers in Kubernetes pods. - - Causes CPU resource consumption on specified application containers using cgroups and litmus nsutil which consume CPU resources of the given target containers. - - It Can test the application's resilience to potential slowness/unavailability of some replicas due to high CPU load - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - CPU - - Pod - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - Kind - maturity: alpha - maintainers: - - name: ksatchit - email: karthik@chaosnative.com - - name: Udit Gaurav - email: udit@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-cpu-hog - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-cpu-hog/ - - name: Video - url: https://www.youtube.com/watch?v=MBGSPmZKb2I - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-cpu-hog/experiment.yaml diff --git a/experiments/generic/pod-cpu-hog/rbac-psp.yaml b/experiments/generic/pod-cpu-hog/rbac-psp.yaml deleted file mode 100644 index 895296880..000000000 --- a/experiments/generic/pod-cpu-hog/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-cpu-hog-sa -subjects: -- kind: ServiceAccount - name: pod-cpu-hog-sa - namespace: default diff --git a/experiments/generic/pod-cpu-hog/rbac.yaml b/experiments/generic/pod-cpu-hog/rbac.yaml deleted file mode 100644 index f045de37e..000000000 --- a/experiments/generic/pod-cpu-hog/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-cpu-hog-sa - namespace: default - labels: - name: pod-cpu-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-cpu-hog-sa -subjects: -- kind: ServiceAccount - name: pod-cpu-hog-sa - namespace: default diff --git a/experiments/generic/pod-delete/ansible/engine.yaml b/experiments/generic/pod-delete/ansible/engine.yaml deleted file mode 100644 index 871f8f27a..000000000 --- a/experiments/generic/pod-delete/ansible/engine.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: pod-delete-sa - experiments: - - name: pod-delete - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' diff --git a/experiments/generic/pod-delete/ansible/experiment.yaml b/experiments/generic/pod-delete/ansible/experiment.yaml deleted file mode 100644 index 86a289a43..000000000 --- a/experiments/generic/pod-delete/ansible/experiment.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes a pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - name: pod-delete - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - - apiGroups: - - "" - - "apps" - - "batch" - - "litmuschaos.io" - resources: - - "deployments" - - "jobs" - - "pods" - - "pods/log" - - "events" - - "configmaps" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/generic/pod_delete/pod_delete_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the kill count - - name: KILL_COUNT - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - - name: LIB_IMAGE - value: 'litmuschaos/pod-delete-helper:latest' - - - name: LIB - value: 'litmus' - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-delete/ansible/powerfulseal_rbac.yaml b/experiments/generic/pod-delete/ansible/powerfulseal_rbac.yaml deleted file mode 100644 index f53e37b90..000000000 --- a/experiments/generic/pod-delete/ansible/powerfulseal_rbac.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pod-delete-sa - labels: - name: pod-delete-sa -rules: -- apiGroups: ["","litmuschaos.io","batch","apps"] - resources: ["pods","deployments","pods/log","events","jobs","configmaps","chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pod-delete-sa - labels: - name: pod-delete-sa -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/experiments/generic/pod-delete/ansible/rbac.yaml b/experiments/generic/pod-delete/ansible/rbac.yaml deleted file mode 100644 index 6a1535b2f..000000000 --- a/experiments/generic/pod-delete/ansible/rbac.yaml +++ /dev/null @@ -1,40 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","litmuschaos.io","batch","apps"] - resources: ["pods","deployments","pods/log","events","jobs","chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/experiments/generic/pod-delete/engine.yaml b/experiments/generic/pod-delete/engine.yaml deleted file mode 100644 index c211c7320..000000000 --- a/experiments/generic/pod-delete/engine.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - # It can be active/stop - engineState: 'active' - chaosServiceAccount: pod-delete-sa - experiments: - - name: pod-delete - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/experiments/generic/pod-delete/engine_nginx_getstarted.yaml b/experiments/generic/pod-delete/engine_nginx_getstarted.yaml deleted file mode 100644 index 043113fc4..000000000 --- a/experiments/generic/pod-delete/engine_nginx_getstarted.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: nginx -spec: - appinfo: - appns: 'nginx' - applabel: 'app=nginx' - appkind: 'deployment' - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: pod-delete-sa - # It can be delete/retain - jobCleanUpPolicy: 'delete' - experiments: - - name: pod-delete - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/experiments/generic/pod-delete/pod-delete.chartserviceversion.yaml b/experiments/generic/pod-delete/pod-delete.chartserviceversion.yaml deleted file mode 100644 index b5e42b607..000000000 --- a/experiments/generic/pod-delete/pod-delete.chartserviceversion.yaml +++ /dev/null @@ -1,52 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-15T10:28:08Z - name: pod-delete - version: 0.1.13 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-delete - categoryDescription: | - Pod delete contains chaos to disrupt state of kubernetes resources. Experiments can inject random pod delete failures against specified application. - - Causes (forced/graceful) pod failure of random replicas of an application deployment. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. - - keywords: - - Kubernetes - - K8S - - Pod - platforms: - - GKE - - Konvoy - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - Kind - - Rancher - - OpenShift(OKD) - maturity: alpha - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-delete - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-delete/ - - name: Video - url: https://www.youtube.com/watch?v=X3JvY_58V9A - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-delete/experiment.yaml diff --git a/experiments/generic/pod-delete/python/engine.yaml b/experiments/generic/pod-delete/python/engine.yaml deleted file mode 100644 index c211c7320..000000000 --- a/experiments/generic/pod-delete/python/engine.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - # It can be active/stop - engineState: 'active' - chaosServiceAccount: pod-delete-sa - experiments: - - name: pod-delete - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/experiments/generic/pod-delete/python/experiment.yaml b/experiments/generic/pod-delete/python/experiment.yaml deleted file mode 100644 index d80a29daf..000000000 --- a/experiments/generic/pod-delete/python/experiment.yaml +++ /dev/null @@ -1,90 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes a pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - name: pod-delete - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - - apiGroups: - - "" - - "apps" - - "apps.openshift.io" - - "argoproj.io" - - "batch" - - "litmuschaos.io" - resources: - - "deployments" - - "jobs" - - "pods" - - "pods/log" - - "replicationcontrollers" - - "deployments" - - "statefulsets" - - "daemonsets" - - "replicasets" - - "deploymentconfigs" - - "rollouts" - - "pods/exec" - - "events" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - - "deletecollection" - image: "litmuschaos/py-runner:latest" - imagePullPolicy: Always - args: - - -c - - python3 -u experiment - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB - value: 'litmus' - - - name: TARGET_PODS - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-delete/python/rbac.yaml b/experiments/generic/pod-delete/python/rbac.yaml deleted file mode 100644 index 350173d42..000000000 --- a/experiments/generic/pod-delete/python/rbac.yaml +++ /dev/null @@ -1,58 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: [""] - resources: ["pods","events"] - verbs: ["create","list","get","patch","update","delete","deletecollection"] -- apiGroups: [""] - resources: ["pods/exec","pods/log","replicationcontrollers"] - verbs: ["create","list","get"] -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] -- apiGroups: ["apps"] - resources: ["deployments","statefulsets","daemonsets","replicasets"] - verbs: ["list","get"] -- apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] -- apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] -- apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/experiments/generic/pod-delete/rbac-psp.yaml b/experiments/generic/pod-delete/rbac-psp.yaml deleted file mode 100644 index e494e6bf7..000000000 --- a/experiments/generic/pod-delete/rbac-psp.yaml +++ /dev/null @@ -1,86 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/experiments/generic/pod-delete/rbac.yaml b/experiments/generic/pod-delete/rbac.yaml deleted file mode 100644 index a3f4f5c1e..000000000 --- a/experiments/generic/pod-delete/rbac.yaml +++ /dev/null @@ -1,81 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: default - labels: - name: pod-delete-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: default - diff --git a/experiments/generic/pod-delete/rbac_nginx_getstarted.yaml b/experiments/generic/pod-delete/rbac_nginx_getstarted.yaml deleted file mode 100644 index 5ff2c8348..000000000 --- a/experiments/generic/pod-delete/rbac_nginx_getstarted.yaml +++ /dev/null @@ -1,77 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-delete-sa - namespace: nginx - labels: - name: pod-delete-sa ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-delete-sa - namespace: nginx - labels: - name: pod-delete-sa -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-delete-sa - namespace: nginx - labels: - name: pod-delete-sa -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-delete-sa -subjects: -- kind: ServiceAccount - name: pod-delete-sa - namespace: nginx \ No newline at end of file diff --git a/experiments/generic/pod-dns-error/engine.yaml b/experiments/generic/pod-dns-error/engine.yaml deleted file mode 100644 index 83fd6bb97..000000000 --- a/experiments/generic/pod-dns-error/engine.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos -spec: - appinfo: - appns: "default" - applabel: "app=nginx" - appkind: "deployment" - # It can be active/stop - engineState: "active" - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: "" - chaosServiceAccount: pod-dns-error-sa - experiments: - - name: pod-dns-error - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds - - # list of the target hostnames or kewywords eg. '["litmuschaos","chaosnative.io"]' . If empty all hostnames are targets - - name: TARGET_HOSTNAMES - value: "" - - # can be either exact or substring, determines whether the dns query has to match exactly with one of the targets or can have any of the targets as substring - - name: MATCH_SCHEME - value: "exact" - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: "" diff --git a/experiments/generic/pod-dns-error/pod-dns-error.chartserviceversion.yaml b/experiments/generic/pod-dns-error/pod-dns-error.chartserviceversion.yaml deleted file mode 100644 index 4ece88ed1..000000000 --- a/experiments/generic/pod-dns-error/pod-dns-error.chartserviceversion.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-dns-error - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-dns-error - categoryDescription: > - Pod DNS Error injects dns failure/error in target pod containers - keywords: - - "Pod" - - K8S - - "Kubernetes" - - "DNS" - maturity: alpha - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - maintainers: - - name: gdsoumya - email: gdsoumya@chaosnative.com - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-dns-error - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/getstarted/ - - name: Video - url: - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-dns-error/experiment.yaml diff --git a/experiments/generic/pod-dns-error/rbac-psp.yaml b/experiments/generic/pod-dns-error/rbac-psp.yaml deleted file mode 100644 index 1e8bbfd96..000000000 --- a/experiments/generic/pod-dns-error/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-dns-error-sa -subjects: - - kind: ServiceAccount - name: pod-dns-error-sa - namespace: default diff --git a/experiments/generic/pod-dns-error/rbac.yaml b/experiments/generic/pod-dns-error/rbac.yaml deleted file mode 100644 index 84dc89436..000000000 --- a/experiments/generic/pod-dns-error/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-dns-error-sa - namespace: default - labels: - name: pod-dns-error-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-dns-error-sa -subjects: - - kind: ServiceAccount - name: pod-dns-error-sa - namespace: default diff --git a/experiments/generic/pod-dns-spoof/engine.yaml b/experiments/generic/pod-dns-spoof/engine.yaml deleted file mode 100644 index a468d883f..000000000 --- a/experiments/generic/pod-dns-spoof/engine.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos -spec: - appinfo: - appns: "default" - applabel: "app=nginx" - appkind: "deployment" - # It can be active/stop - engineState: "active" - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: "" - chaosServiceAccount: pod-dns-spoof-sa - experiments: - - name: pod-dns-spoof - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds - - # map of the target hostnames eg. '{"abc.com":"spoofabc.com"}' . If empty no queries will be spoofed - - name: SPOOF_MAP - value: '{"google.com":"fakegoogle.com"}' - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: "" diff --git a/experiments/generic/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml b/experiments/generic/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml deleted file mode 100644 index b179d3026..000000000 --- a/experiments/generic/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-dns-spoof - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-dns-spoof - categoryDescription: > - Pod DNS Spoof can spoof particular dns requests in target pod container to desired target hostnames - keywords: - - "Pod" - - K8S - - "Kubernetes" - - "DNS" - maturity: alpha - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - maintainers: - - name: gdsoumya - email: gdsoumya@chaosnative.com - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-dns-spoof - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/getstarted/ - - name: Video - url: - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-dns-spoof/experiment.yaml diff --git a/experiments/generic/pod-dns-spoof/rbac-psp.yaml b/experiments/generic/pod-dns-spoof/rbac-psp.yaml deleted file mode 100644 index 106c044fc..000000000 --- a/experiments/generic/pod-dns-spoof/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-dns-spoof-sa -subjects: - - kind: ServiceAccount - name: pod-dns-spoof-sa - namespace: default diff --git a/experiments/generic/pod-dns-spoof/rbac.yaml b/experiments/generic/pod-dns-spoof/rbac.yaml deleted file mode 100644 index 6d2c76d35..000000000 --- a/experiments/generic/pod-dns-spoof/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-dns-spoof-sa - namespace: default - labels: - name: pod-dns-spoof-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-dns-spoof-sa -subjects: - - kind: ServiceAccount - name: pod-dns-spoof-sa - namespace: default diff --git a/experiments/generic/pod-http-latency/experiment.yaml b/experiments/generic/pod-http-latency/experiment.yaml deleted file mode 100644 index f7ae57320..000000000 --- a/experiments/generic/pod-http-latency/experiment.yaml +++ /dev/null @@ -1,140 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects http request latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-http-latency - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: LATENCY - value: '2000' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # toxicity is the probability of the request to be affected - # provide the percentage value in the range of 0-100 - # 0 means no request will be affected and 100 means all request will be affected - - name: TOXICITY - value: "100" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-http-latency/pod-http-latency.chartserviceversion.yaml b/experiments/generic/pod-http-latency/pod-http-latency.chartserviceversion.yaml deleted file mode 100644 index d39adc410..000000000 --- a/experiments/generic/pod-http-latency/pod-http-latency.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-05-21T10:28:08Z - name: pod-http-latency - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-http-latency - categoryDescription: | - Pod-http-latency contains chaos to disrupt http requests of kubernetes pods. This experiment can inject random http response delays on the app replica pods. - - Causes flaky access to application replica by injecting http response delay using toxiproxy. - - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - HTTP - - Pod - - Latency - platforms: - - GKE - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-latency - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-latency/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-latency/experiment.yaml diff --git a/experiments/generic/pod-http-latency/rbac-psp.yaml b/experiments/generic/pod-http-latency/rbac-psp.yaml deleted file mode 100644 index 3b472ee42..000000000 --- a/experiments/generic/pod-http-latency/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-latency-sa -subjects: -- kind: ServiceAccount - name: pod-http-latency-sa - namespace: default diff --git a/experiments/generic/pod-http-latency/rbac.yaml b/experiments/generic/pod-http-latency/rbac.yaml deleted file mode 100644 index 6c46d8843..000000000 --- a/experiments/generic/pod-http-latency/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-latency-sa - namespace: default - labels: - name: pod-http-latency-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-latency-sa -subjects: -- kind: ServiceAccount - name: pod-http-latency-sa - namespace: default diff --git a/experiments/generic/pod-http-modify-body/experiment.yaml b/experiments/generic/pod-http-modify-body/experiment.yaml deleted file mode 100644 index 13cd635b6..000000000 --- a/experiments/generic/pod-http-modify-body/experiment.yaml +++ /dev/null @@ -1,151 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects the chaos inside the pod which modifies the body of the response from the provided application server to the body string provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-modify-body - labels: - name: pod-http-modify-body - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-modify-body - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the body string to overwrite the response body - # if no value is provided, response will be an empty body. - - name: RESPONSE_BODY - value: '' - - # provide the encoding type for the response body - # currently supported value are gzip, deflate - # if empty no encoding will be applied - - name: CONTENT_ENCODING - value: '' - - # provide the content type for the response body - - name: CONTENT_TYPE - value: 'text/plain' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # toxicity is the probability of the request to be affected - # provide the percentage value in the range of 0-100 - # 0 means no request will be affected and 100 means all request will be affected - - name: TOXICITY - value: "100" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-modify-body - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml b/experiments/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml deleted file mode 100644 index 0cf42479e..000000000 --- a/experiments/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-http-modify-body - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-http-modify-body - categoryDescription: > - Pod-http-modify-body contains chaos to disrupt http requests of kubernetes pods. This experiment can modify the body of the response from the service targetted. - - Causes modification of response body of the HTTP request. - - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - "pods" - - "kubernetes" - - "generic" - - "exec" - - "http" - - "response body" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-modify-body - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-modify-body/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-modify-body/experiment.yaml \ No newline at end of file diff --git a/experiments/generic/pod-http-modify-body/rbac-psp.yaml b/experiments/generic/pod-http-modify-body/rbac-psp.yaml deleted file mode 100644 index d871fd9a6..000000000 --- a/experiments/generic/pod-http-modify-body/rbac-psp.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-modify-body-sa -subjects: -- kind: ServiceAccount - name: pod-http-modify-body-sa - namespace: default diff --git a/experiments/generic/pod-http-modify-body/rbac.yaml b/experiments/generic/pod-http-modify-body/rbac.yaml deleted file mode 100644 index 16ec26958..000000000 --- a/experiments/generic/pod-http-modify-body/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-modify-body-sa - namespace: default - labels: - name: pod-http-modify-body-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-modify-body-sa -subjects: -- kind: ServiceAccount - name: pod-http-modify-body-sa - namespace: default diff --git a/experiments/generic/pod-http-modify-header/experiment.yaml b/experiments/generic/pod-http-modify-header/experiment.yaml deleted file mode 100644 index 77dd74dd2..000000000 --- a/experiments/generic/pod-http-modify-header/experiment.yaml +++ /dev/null @@ -1,146 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects the chaos inside the pod which modifies the header of the request/response from the provided application server to the headers provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-modify-header - labels: - name: pod-http-modify-header - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-modify-header - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} - # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} - - name: HEADERS_MAP - value: '{}' - - # whether to modify response headers or request headers. Accepted values: request, response - - name: HEADER_MODE - value: 'response' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # toxicity is the probability of the request to be affected - # provide the percentage value in the range of 0-100 - # 0 means no request will be affected and 100 means all request will be affected - - name: TOXICITY - value: "100" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-modify-header - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml b/experiments/generic/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml deleted file mode 100644 index c34601a60..000000000 --- a/experiments/generic/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2022-07-13T2:14:08Z - name: pod-http-modify-header - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-http-modify-header - categoryDescription: | - Pod-http-modify-header contains chaos to disrupt http requests of kubernetes pods. This experiment can modify headers of incoming requests or the response from the service targetted. - - Causes modification of request/response headers of the HTTP request. - - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - HTTP - - Pod - - Headers - platforms: - - GKE - - Minikube - - EKS - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-modify-header - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-modify-header/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-modify-header/experiment.yaml diff --git a/experiments/generic/pod-http-modify-header/rbac-psp.yaml b/experiments/generic/pod-http-modify-header/rbac-psp.yaml deleted file mode 100644 index fb3561755..000000000 --- a/experiments/generic/pod-http-modify-header/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-modify-header-sa -subjects: -- kind: ServiceAccount - name: pod-http-modify-header-sa - namespace: default diff --git a/experiments/generic/pod-http-modify-header/rbac.yaml b/experiments/generic/pod-http-modify-header/rbac.yaml deleted file mode 100644 index 5f9208fea..000000000 --- a/experiments/generic/pod-http-modify-header/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-modify-header-sa - namespace: default - labels: - name: pod-http-modify-header-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-modify-header-sa -subjects: -- kind: ServiceAccount - name: pod-http-modify-header-sa - namespace: default diff --git a/experiments/generic/pod-http-reset-peer/engine.yaml b/experiments/generic/pod-http-reset-peer/engine.yaml deleted file mode 100644 index a05236882..000000000 --- a/experiments/generic/pod-http-reset-peer/engine.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-http-reset-peer-sa - experiments: - - name: pod-http-reset-peer - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # reset timeout specifies after how much duration to reset the connection - - name: RESET_TIMEOUT - value: '0' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - \ No newline at end of file diff --git a/experiments/generic/pod-http-reset-peer/experiment.yaml b/experiments/generic/pod-http-reset-peer/experiment.yaml deleted file mode 100644 index f497c53fe..000000000 --- a/experiments/generic/pod-http-reset-peer/experiment.yaml +++ /dev/null @@ -1,140 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - it injects chaos into the pod which stops outgoing http requests by resetting the TCP connection and then reverts back to the original state after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-reset-peer - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-reset-peer - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # reset timeout specifies after how much duration to reset the connection - - name: RESET_TIMEOUT - value: '0' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # toxicity is the probability of the request to be affected - # provide the percentage value in the range of 0-100 - # 0 means no request will be affected and 100 means all request will be affected - - name: TOXICITY - value: "100" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml b/experiments/generic/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml deleted file mode 100644 index fcf3b5618..000000000 --- a/experiments/generic/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-http-reset-peer - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-http-reset-peer - categoryDescription: > - pod-http-reset-peer contains chaos to disrupt http requests of kubernetes pods. This experiment can stop outgoing http requests by resetting the TCP connection on the service targetted. - - Causes connection failure (connection reset by peer) of the HTTP request. - - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - "pods" - - "kubernetes" - - "generic" - - "exec" - - "http" - - "loss" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-reset-peer - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-reset-peer/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-reset-peer/experiment.yaml \ No newline at end of file diff --git a/experiments/generic/pod-http-reset-peer/rbac-psp.yaml b/experiments/generic/pod-http-reset-peer/rbac-psp.yaml deleted file mode 100644 index 5c22b38c3..000000000 --- a/experiments/generic/pod-http-reset-peer/rbac-psp.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-reset-peer-sa -subjects: -- kind: ServiceAccount - name: pod-http-reset-peer-sa - namespace: default diff --git a/experiments/generic/pod-http-reset-peer/rbac.yaml b/experiments/generic/pod-http-reset-peer/rbac.yaml deleted file mode 100644 index 0c71681e1..000000000 --- a/experiments/generic/pod-http-reset-peer/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-reset-peer-sa - namespace: default - labels: - name: pod-http-reset-peer-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-reset-peer-sa -subjects: -- kind: ServiceAccount - name: pod-http-reset-peer-sa - namespace: default diff --git a/experiments/generic/pod-http-status-code/engine.yaml b/experiments/generic/pod-http-status-code/engine.yaml deleted file mode 100644 index 1aa1218d5..000000000 --- a/experiments/generic/pod-http-status-code/engine.yaml +++ /dev/null @@ -1,56 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-http-status-code-sa - experiments: - - name: pod-http-status-code - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - - # modified status code for the http response - # if no value is provided, a random status code from the supported code list will selected - # if an invalid status code is provided, the experiment will fail - # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504 - - name: STATUS_CODE - value: '' - - # whether to modify the body as per the status code provided - - name: "MODIFY_RESPONSE_BODY" - value: "true" - - # provide the body string to overwrite the response body. This will be used only if MODIFY_RESPONSE_BODY is set to true - - name: RESPONSE_BODY - value: '' - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # provide the name of container runtime - # it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - diff --git a/experiments/generic/pod-http-status-code/experiment.yaml b/experiments/generic/pod-http-status-code/experiment.yaml deleted file mode 100644 index d649d9287..000000000 --- a/experiments/generic/pod-http-status-code/experiment.yaml +++ /dev/null @@ -1,162 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects chaos inside the pod which modifies the status code of the response from the provided application server to desired status code provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-status-code - labels: - name: pod-http-status-code - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-status-code - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # modified status code for the http response - # if no value is provided, a random status code from the supported code list will selected - # if an invalid status code is provided, the experiment will fail - # if multiple comma separated values are provided, then a random value from the provided list will be selected - # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504] - - name: STATUS_CODE - value: '' - - # whether to modify the body as per the status code provided - - name: "MODIFY_RESPONSE_BODY" - value: "true" - - # provide the body string to overwrite the response body. This will be used only if MODIFY_RESPONSE_BODY is set to true - - name: RESPONSE_BODY - value: '' - - # provide the encoding type for the response body - # currently supported value are gzip, deflate - # if empty no encoding will be applied - - name: CONTENT_ENCODING - value: '' - - # provide the content type for the response body - - name: CONTENT_TYPE - value: 'text/plain' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # toxicity is the probability of the request to be affected - # provide the percentage value in the range of 0-100 - # 0 means no request will be affected and 100 means all request will be affected - - name: TOXICITY - value: "100" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-status-code - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml b/experiments/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml deleted file mode 100644 index fad76f309..000000000 --- a/experiments/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: pod-http-status-code - version: 0.1.0 - annotations: - categories: generic -spec: - displayName: pod-http-status-code - categoryDescription: > - pod-http-status-code contains chaos to disrupt http requests of kubernetes pods. This experiment can modify the status code of the response on the service targetted. - - Causes modification of status code of the HTTP request. - - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - "pods" - - "kubernetes" - - "generic" - - "exec" - - "http" - - "status code" - - "response code" - platforms: - - "Minikube" - maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: - name: Harness - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-status-code - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-http-status-code/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-http-status-code/experiment.yaml \ No newline at end of file diff --git a/experiments/generic/pod-http-status-code/rbac-psp.yaml b/experiments/generic/pod-http-status-code/rbac-psp.yaml deleted file mode 100644 index 58d13cd34..000000000 --- a/experiments/generic/pod-http-status-code/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-status-code-sa -subjects: -- kind: ServiceAccount - name: pod-http-status-code-sa - namespace: default diff --git a/experiments/generic/pod-http-status-code/rbac.yaml b/experiments/generic/pod-http-status-code/rbac.yaml deleted file mode 100644 index 8716759d3..000000000 --- a/experiments/generic/pod-http-status-code/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-http-status-code-sa - namespace: default - labels: - name: pod-http-status-code-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-http-status-code-sa -subjects: -- kind: ServiceAccount - name: pod-http-status-code-sa - namespace: default diff --git a/experiments/generic/pod-io-stress/engine.yaml b/experiments/generic/pod-io-stress/engine.yaml deleted file mode 100644 index 4b49e1d2a..000000000 --- a/experiments/generic/pod-io-stress/engine.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-io-stress-sa - experiments: - - name: pod-io-stress - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' diff --git a/experiments/generic/pod-io-stress/pod-io-stress.chartserviceversion.yaml b/experiments/generic/pod-io-stress/pod-io-stress.chartserviceversion.yaml deleted file mode 100644 index 8f7a0102e..000000000 --- a/experiments/generic/pod-io-stress/pod-io-stress.chartserviceversion.yaml +++ /dev/null @@ -1,50 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-09-13T10:28:08Z - name: pod-io-stress - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-io-stress - categoryDescription: | - This experiment causes disk stress on the application pod. The experiment aims to verify the resiliency of applications that share this disk resource for ephemeral or persistent storage purposes. - - Consumes the disk available by executing filesystem IO stress as available memory or by providing the value in GB - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - Memory - - Pod - - IO - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - maturity: alpha - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-io-stress - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-io-stress/ - - name: Video - url: - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-io-stress/experiment.yaml diff --git a/experiments/generic/pod-io-stress/rbac-psp.yaml b/experiments/generic/pod-io-stress/rbac-psp.yaml deleted file mode 100644 index 755512a5a..000000000 --- a/experiments/generic/pod-io-stress/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-io-stress-sa -subjects: -- kind: ServiceAccount - name: pod-io-stress-sa - namespace: default diff --git a/experiments/generic/pod-io-stress/rbac.yaml b/experiments/generic/pod-io-stress/rbac.yaml deleted file mode 100644 index e80025d6b..000000000 --- a/experiments/generic/pod-io-stress/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-io-stress-sa - namespace: default - labels: - name: pod-io-stress-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-io-stress-sa -subjects: -- kind: ServiceAccount - name: pod-io-stress-sa - namespace: default diff --git a/experiments/generic/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml b/experiments/generic/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml deleted file mode 100644 index 2e3769971..000000000 --- a/experiments/generic/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-04-10T10:28:08Z - name: pod-memory-hog-exec - version: 0.1.4 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-memory-hog-exec - categoryDescription: | - pod-memory-hog-exec contains chaos to consume Memory resouces of specified containers in Kubernetes pods. - - Consumes the memory specified by executing a dd command against special files /dev/zero(input) and /dev/null(output) - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - Memory - - Pod - - Exec - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - OpenShift(OKD) - maturity: alpha - maintainers: - - name: Udit Gaurav - email: udit@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-memory-hog-exec - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-memory-hog-exec/ - - name: Video - url: https://www.youtube.com/watch?v=HuAXg8W5Tzo - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-memory-hog-exec/experiment.yaml diff --git a/experiments/generic/pod-memory-hog-exec/rbac-psp.yaml b/experiments/generic/pod-memory-hog-exec/rbac-psp.yaml deleted file mode 100644 index eb39cec16..000000000 --- a/experiments/generic/pod-memory-hog-exec/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-memory-hog-exec-sa -subjects: -- kind: ServiceAccount - name: pod-memory-hog-exec-sa - namespace: default diff --git a/experiments/generic/pod-memory-hog-exec/rbac.yaml b/experiments/generic/pod-memory-hog-exec/rbac.yaml deleted file mode 100644 index d4da0caaf..000000000 --- a/experiments/generic/pod-memory-hog-exec/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-memory-hog-exec-sa - namespace: default - labels: - name: pod-memory-hog-exec-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-memory-hog-exec-sa -subjects: -- kind: ServiceAccount - name: pod-memory-hog-exec-sa - namespace: default diff --git a/experiments/generic/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml b/experiments/generic/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml deleted file mode 100644 index 958f9e46a..000000000 --- a/experiments/generic/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-06-16T10:28:08Z - name: pod-memory-hog - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-memory-hog - categoryDescription: | - Pod-Memory-Hog contains chaos to consume memory resouces of specified containers in Kubernetes pods. - - Causes memory resource consumption on specified application containers using cgroups and litmus nsutil that consume memory resources of the given target containers. - - It Can test the application's resilience to potential slowness/unavailability of some replicas due to high memory load - - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - Memory - - Pod - - Stress - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - - OpenShift(OKD) - maturity: alpha - maintainers: - - name: Udit Gaurav - email: udit@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-memory-hog - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-memory-hog/ - - name: Video - url: https://www.youtube.com/watch?v=HuAXg8W5Tzo - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-memory-hog/experiment.yaml diff --git a/experiments/generic/pod-memory-hog/rbac-psp.yaml b/experiments/generic/pod-memory-hog/rbac-psp.yaml deleted file mode 100644 index 3ad222daa..000000000 --- a/experiments/generic/pod-memory-hog/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-memory-hog-sa -subjects: -- kind: ServiceAccount - name: pod-memory-hog-sa - namespace: default diff --git a/experiments/generic/pod-memory-hog/rbac.yaml b/experiments/generic/pod-memory-hog/rbac.yaml deleted file mode 100644 index 61445c95d..000000000 --- a/experiments/generic/pod-memory-hog/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-memory-hog-sa - namespace: default - labels: - name: pod-memory-hog-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-memory-hog-sa -subjects: -- kind: ServiceAccount - name: pod-memory-hog-sa - namespace: default diff --git a/experiments/generic/pod-network-corruption/engine.yaml b/experiments/generic/pod-network-corruption/engine.yaml deleted file mode 100644 index 63570eadb..000000000 --- a/experiments/generic/pod-network-corruption/engine.yaml +++ /dev/null @@ -1,38 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-network-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-network-corruption-sa - experiments: - - name: pod-network-corruption - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE - value: '100' #in PERCENTAGE - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/experiments/generic/pod-network-corruption/experiment.yaml b/experiments/generic/pod-network-corruption/experiment.yaml deleted file mode 100644 index 9285a5433..000000000 --- a/experiments/generic/pod-network-corruption/experiment.yaml +++ /dev/null @@ -1,148 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Inject network packet corruption into application pod -kind: ChaosExperiment -metadata: - name: pod-network-corruption - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-corruption - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the comma seperated source ports - # chaos injection will be triggered for these source ports - - name: SOURCE_PORTS - value: '' - - # provide the comma seperated destination ports - # chaos injection will be triggered for these destination ports - - name: DESTINATION_PORTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml b/experiments/generic/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml deleted file mode 100644 index c4991a916..000000000 --- a/experiments/generic/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-01-07T10:28:08Z - name: pod-network-corruption - version: 0.1.10 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-corruption - categoryDescription: | - Pod-network-corruption contains chaos to disrupt network connectivity to kubernetes pods. Experiments can inject percentage packet corruption on the app replica pods. - - Causes packet corruption of application replica by injecting packet corruption using pumba. - - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. - keywords: - - Kubernetes - - K8S - - Network - - Pod - - Corruption - platforms: - - GKE - - Packet(Kubeadm) - - Minikube - - EKS - - AKS - maturity: alpha - maintainers: - - name: LaumiH - email: laura-marie.henning@stud.h-da.de - minKubeVersion: 1.12.0 - provider: - name: Laura-Marie Henning - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-corruption - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-corruption/ - - name: Video - url: https://www.youtube.com/watch?v=kSiLrIaILvs - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-corruption/experiment.yaml diff --git a/experiments/generic/pod-network-corruption/rbac-psp.yaml b/experiments/generic/pod-network-corruption/rbac-psp.yaml deleted file mode 100644 index 685855b09..000000000 --- a/experiments/generic/pod-network-corruption/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-corruption-sa -subjects: -- kind: ServiceAccount - name: pod-network-corruption-sa - namespace: default diff --git a/experiments/generic/pod-network-corruption/rbac.yaml b/experiments/generic/pod-network-corruption/rbac.yaml deleted file mode 100644 index f0319df5f..000000000 --- a/experiments/generic/pod-network-corruption/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-corruption-sa - namespace: default - labels: - name: pod-network-corruption-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-corruption-sa -subjects: -- kind: ServiceAccount - name: pod-network-corruption-sa - namespace: default diff --git a/experiments/generic/pod-network-duplication/engine.yaml b/experiments/generic/pod-network-duplication/engine.yaml deleted file mode 100644 index 7c1faedd4..000000000 --- a/experiments/generic/pod-network-duplication/engine.yaml +++ /dev/null @@ -1,39 +0,0 @@ -# chaosengine.yaml -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-network-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-network-duplication-sa - experiments: - - name: pod-network-duplication - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE - value: '100' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' diff --git a/experiments/generic/pod-network-duplication/experiment.yaml b/experiments/generic/pod-network-duplication/experiment.yaml deleted file mode 100644 index 8ca79e3de..000000000 --- a/experiments/generic/pod-network-duplication/experiment.yaml +++ /dev/null @@ -1,145 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet duplication on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-duplication - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-duplication - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: RAMP_TIME - value: '' - - - name: TARGET_CONTAINER - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE - value: '100' # in percentage - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the comma seperated source ports - # chaos injection will be triggered for these source ports - - name: SOURCE_PORTS - value: '' - - # provide the comma seperated destination ports - # chaos injection will be triggered for these destination ports - - name: DESTINATION_PORTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml b/experiments/generic/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml deleted file mode 100644 index cec3785cd..000000000 --- a/experiments/generic/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-07-01T10:28:08Z - name: pod-network-duplication - version: 0.1.2 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-duplication - categoryDescription: | - Pod-network-duplication contains chaos to disrupt network connectivity to kubernetes pods. Experiments can inject percentage packet duplication on the app replica pods. - - Causes lossy access to application replica by injecting packet duplication using pumba. - - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. - keywords: - - Kubernetes - - K8S - - Network - - Pod - - Duplication - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maturity: alpha - maintainers: - - name: Udit Gaurav - email: udit.gaurav@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-duplication - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-duplication/ - - name: Video - url: - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-duplication/experiment.yaml diff --git a/experiments/generic/pod-network-duplication/rbac-psp.yaml b/experiments/generic/pod-network-duplication/rbac-psp.yaml deleted file mode 100644 index 01acf1a21..000000000 --- a/experiments/generic/pod-network-duplication/rbac-psp.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-duplication-sa -subjects: -- kind: ServiceAccount - name: pod-network-duplication-sa - namespace: default diff --git a/experiments/generic/pod-network-duplication/rbac.yaml b/experiments/generic/pod-network-duplication/rbac.yaml deleted file mode 100644 index d225750b7..000000000 --- a/experiments/generic/pod-network-duplication/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-duplication-sa - namespace: default - labels: - name: pod-network-duplication-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-duplication-sa -subjects: -- kind: ServiceAccount - name: pod-network-duplication-sa - namespace: default diff --git a/experiments/generic/pod-network-latency/experiment.yaml b/experiments/generic/pod-network-latency/experiment.yaml deleted file mode 100644 index 4b623322a..000000000 --- a/experiments/generic/pod-network-latency/experiment.yaml +++ /dev/null @@ -1,151 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-latency - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: NETWORK_INTERFACE - value: 'eth0' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_LATENCY - value: '2000' #in ms - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: JITTER - value: '0' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the comma seperated source ports - # chaos injection will be triggered for these source ports - - name: SOURCE_PORTS - value: '' - - # provide the comma seperated destination ports - # chaos injection will be triggered for these destination ports - - name: DESTINATION_PORTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-network-latency/pod-network-latency.chartserviceversion.yaml b/experiments/generic/pod-network-latency/pod-network-latency.chartserviceversion.yaml deleted file mode 100644 index 8e40c7a8f..000000000 --- a/experiments/generic/pod-network-latency/pod-network-latency.chartserviceversion.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-11T10:28:08Z - name: pod-network-latency - version: 0.1.13 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-latency - categoryDescription: | - Pod-network-latency contains chaos to disrupt network connectivity of kubernetes pods. Experiments can inject random network delays on the app replica pods. - - Causes flaky access to application replica by injecting network delay using pumba. - - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - Kubernetes - - K8S - - Network - - Pod - - Latency - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maturity: alpha - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-latency - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-latency/ - - name: Video - url: https://www.youtube.com/watch?v=QsQZyXVCcCw - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-latency/experiment.yaml diff --git a/experiments/generic/pod-network-latency/rbac-psp.yaml b/experiments/generic/pod-network-latency/rbac-psp.yaml deleted file mode 100644 index ee147c70a..000000000 --- a/experiments/generic/pod-network-latency/rbac-psp.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-latency-sa -subjects: -- kind: ServiceAccount - name: pod-network-latency-sa - namespace: default diff --git a/experiments/generic/pod-network-latency/rbac.yaml b/experiments/generic/pod-network-latency/rbac.yaml deleted file mode 100644 index 4b65e6ba8..000000000 --- a/experiments/generic/pod-network-latency/rbac.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-latency-sa - namespace: default - labels: - name: pod-network-latency-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-latency-sa -subjects: -- kind: ServiceAccount - name: pod-network-latency-sa - namespace: default diff --git a/experiments/generic/pod-network-loss/engine.yaml b/experiments/generic/pod-network-loss/engine.yaml deleted file mode 100644 index 96599ae94..000000000 --- a/experiments/generic/pod-network-loss/engine.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# chaosengine.yaml -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-network-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-network-loss-sa - experiments: - - name: pod-network-loss - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - \ No newline at end of file diff --git a/experiments/generic/pod-network-loss/experiment.yaml b/experiments/generic/pod-network-loss/experiment.yaml deleted file mode 100644 index 1a3da51b6..000000000 --- a/experiments/generic/pod-network-loss/experiment.yaml +++ /dev/null @@ -1,148 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-loss - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-loss - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # it can be litmus or pumba - - name: LIB - value: 'litmus' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the comma seperated source ports - # chaos injection will be triggered for these source ports - - name: SOURCE_PORTS - value: '' - - # provide the comma seperated destination ports - # chaos injection will be triggered for these destination ports - - name: DESTINATION_PORTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-network-loss/pod-network-loss.chartserviceversion.yaml b/experiments/generic/pod-network-loss/pod-network-loss.chartserviceversion.yaml deleted file mode 100644 index 71ae9719d..000000000 --- a/experiments/generic/pod-network-loss/pod-network-loss.chartserviceversion.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-11T10:28:08Z - name: pod-network-loss - version: 0.1.12 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-loss - categoryDescription: | - Pod-network-loss contains chaos to disrupt network connectivity to kubernetes pods. Experiments can inject percentage packet loss on the app replica pods. - - Causes loss of access to application replica by injecting packet loss using pumba. - - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. - keywords: - - Kubernetes - - K8S - - Network - - Pod - - Loss - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - maturity: alpha - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-loss - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-loss/ - - name: Video - url: https://www.youtube.com/watch?v=jqvYy-nWc_I - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-loss/experiment.yaml diff --git a/experiments/generic/pod-network-loss/rbac-psp.yaml b/experiments/generic/pod-network-loss/rbac-psp.yaml deleted file mode 100644 index d3af1b80d..000000000 --- a/experiments/generic/pod-network-loss/rbac-psp.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-loss-sa -subjects: -- kind: ServiceAccount - name: pod-network-loss-sa - namespace: default diff --git a/experiments/generic/pod-network-loss/rbac.yaml b/experiments/generic/pod-network-loss/rbac.yaml deleted file mode 100644 index caa091822..000000000 --- a/experiments/generic/pod-network-loss/rbac.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-loss-sa - namespace: default - labels: - name: pod-network-loss-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-loss-sa -subjects: -- kind: ServiceAccount - name: pod-network-loss-sa - namespace: default diff --git a/experiments/generic/pod-network-partition/engine.yaml b/experiments/generic/pod-network-partition/engine.yaml deleted file mode 100644 index ef656e198..000000000 --- a/experiments/generic/pod-network-partition/engine.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-network-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-network-partition-sa - experiments: - - name: pod-network-partition - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds diff --git a/experiments/generic/pod-network-partition/experiment.yaml b/experiments/generic/pod-network-partition/experiment.yaml deleted file mode 100644 index 7c2cde29d..000000000 --- a/experiments/generic/pod-network-partition/experiment.yaml +++ /dev/null @@ -1,100 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects 100% network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-partition - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # performs CRUD operations on the network policies - - apiGroups: ["networking.k8s.io"] - resources: ["networkpolicies"] - verbs: ["create","delete","list","get"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-partition - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # it should be litmus - - name: LIB - value: 'litmus' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide network policy type - # support ingress, egress, all values - - name: POLICY_TYPES - value: 'all' - - # provide labels of the destination pods - - name: POD_SELECTOR - value: '' - - # provide labels the destination namespaces - - name: NAMESPACE_SELECTOR - value: '' - - # provide comma separated ports - - name: PORTS - value: '' - - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-network-partition/pod-network-partition.chartserviceversion.yaml b/experiments/generic/pod-network-partition/pod-network-partition.chartserviceversion.yaml deleted file mode 100644 index 89b3957e0..000000000 --- a/experiments/generic/pod-network-partition/pod-network-partition.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-08-25T10:28:08Z - name: pod-network-partition - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: pod-network-partition - categoryDescription: | - pod-network-partition contains chaos to disrupt network connectivity to kubernetes pods. Experiments can inject complete egress/ingress network loss based on label and namespace selectors. - - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. - keywords: - - Kubernetes - - K8S - - Pod - - Network - - Partition - platforms: - - Minikube - - Packet(Kubeadm) - maturity: alpha - maintainers: - - name: ispeakc0de - email: shubham@chaosnative.com - minKubeVersion: 1.12.0 - provider: - name: ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-network-partition - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/pods/pod-network-partition/ - icon: - - base64data: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-partition/experiment.yaml diff --git a/experiments/generic/pod-network-partition/rbac-psp.yaml b/experiments/generic/pod-network-partition/rbac-psp.yaml deleted file mode 100644 index 933512391..000000000 --- a/experiments/generic/pod-network-partition/rbac-psp.yaml +++ /dev/null @@ -1,72 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # performs CRUD operations on the network policies - - apiGroups: ["networking.k8s.io"] - resources: ["networkpolicies"] - verbs: ["create","delete","list","get"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # use litmus psp - - apiGroups: ["policy"] - resources: ["podsecuritypolicies"] - verbs: ["use"] - resourceNames: ["litmus"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-partition-sa -subjects: -- kind: ServiceAccount - name: pod-network-partition-sa - namespace: default diff --git a/experiments/generic/pod-network-partition/rbac.yaml b/experiments/generic/pod-network-partition/rbac.yaml deleted file mode 100644 index e2a0ae7e9..000000000 --- a/experiments/generic/pod-network-partition/rbac.yaml +++ /dev/null @@ -1,67 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # performs CRUD operations on the network policies - - apiGroups: ["networking.k8s.io"] - resources: ["networkpolicies"] - verbs: ["create","delete","list","get"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-network-partition-sa - namespace: default - labels: - name: pod-network-partition-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pod-network-partition-sa -subjects: -- kind: ServiceAccount - name: pod-network-partition-sa - namespace: default diff --git a/scenarios/icons/bank-of-anthos.png b/experiments/icons/bank-of-anthos.png similarity index 100% rename from scenarios/icons/bank-of-anthos.png rename to experiments/icons/bank-of-anthos.png diff --git a/scenarios/icons/podtato-head.png b/experiments/icons/podtato-head.png similarity index 100% rename from scenarios/icons/podtato-head.png rename to experiments/icons/podtato-head.png diff --git a/scenarios/icons/sock-shop-promProbe.png b/experiments/icons/sock-shop-promProbe.png similarity index 100% rename from scenarios/icons/sock-shop-promProbe.png rename to experiments/icons/sock-shop-promProbe.png diff --git a/scenarios/icons/sock-shop.png b/experiments/icons/sock-shop.png similarity index 100% rename from scenarios/icons/sock-shop.png rename to experiments/icons/sock-shop.png diff --git a/experiments/kube-aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml b/experiments/kube-aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml deleted file mode 100755 index 163213814..000000000 --- a/experiments/kube-aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: aws-az-chaos - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: aws-az-chaos - categoryDescription: > - Execute aws-az chaos to detach the target zones from the load balancer - keywords: - - "zone" - - "load-balancer" - - "aws" - platforms: - - "AWS" - maturity: alpha - maintainers: - - name: oumkale - email: imkaleoum@gmail.com - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-python/tree/master/experiments/aws_az - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/aws-az-chaos/ - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/aws-az-chaos/experiment.yaml diff --git a/experiments/kube-aws/aws-az-chaos/engine.yaml b/experiments/kube-aws/aws-az-chaos/engine.yaml deleted file mode 100755 index a7afbbcf9..000000000 --- a/experiments/kube-aws/aws-az-chaos/engine.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: aws-az-chaos -spec: - # It can be active/stop - engineState: 'active' - chaosServiceAccount: aws-az-chaos-sa - experiments: - - name: aws-az-chaos - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - name: CHAOS_INTERVAL - value: '30' - #LOAD_BALANCER_NAME name of the load balancer - - name: LOAD_BALANCER_NAME - value: "" - #LOAD_BALANCER_ZONES can be multiple, provide it by comma separated - - name: LOAD_BALANCER_ZONES - value: "" - - name: LOAD_BALANCERNAME_ARN - value: "na" - - name: AWS_SHARED_CREDENTIALS_FILE - value: "/tmp/cloud_config.yml" diff --git a/experiments/kube-aws/aws-az-chaos/experiment.yaml b/experiments/kube-aws/aws-az-chaos/experiment.yaml deleted file mode 100755 index 921723b12..000000000 --- a/experiments/kube-aws/aws-az-chaos/experiment.yaml +++ /dev/null @@ -1,76 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute aws-az chaos to detach the target zones from the load balancer -kind: ChaosExperiment -metadata: - name: aws-az-chaos - labels: - name: aws-az-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/py-runner:latest" - imagePullPolicy: Always - args: - - -c - - python3 -u experiment -name aws-az-chaos - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - name: CHAOS_INTERVAL - value: '30' - - name: LIB - value: 'litmus' - - name: LOAD_BALANCER_NAME - value: '' - - name: LOAD_BALANCER_ZONES - value: '' - - name: LOAD_BALANCERNAME_ARN - value: 'na' - - name: AWS_SHARED_CREDENTIALS_FILE - value: "/tmp/cloud_config.yml" - - name: RAMP_TIME - value: '' - labels: - name: aws-az-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/kube-aws/aws-az-chaos/rbac.yaml b/experiments/kube-aws/aws-az-chaos/rbac.yaml deleted file mode 100755 index 3d2284cec..000000000 --- a/experiments/kube-aws/aws-az-chaos/rbac.yaml +++ /dev/null @@ -1,60 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: aws-az-chaos-sa - namespace: default - labels: - name: aws-az-chaos-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1beta1 -kind: Role -metadata: - name: aws-az-chaos-sa - namespace: default - labels: - name: aws-az-chaos-sa - app.kubernetes.io/part-of: litmus -rules: -# Create and monitor the experiment & helper pods -- apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] -# Performs CRUD operations on the events inside chaosengine and chaosresult -- apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] -# Fetch configmaps & secrets details and mount it to the experiment pod (if specified) -- apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] -# Track and get the runner, experiment, and helper pods log -- apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] -# for configuring and monitor the experiment job by the chaos-runner pod -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] -# for creation, status polling and deletion of litmus chaos resources used within a chaos workflow -- apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1beta1 -kind: RoleBinding -metadata: - name: aws-az-chaos-sa - namespace: default - labels: - name: aws-az-chaos-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: aws-az-chaos-sa -subjects: -- kind: ServiceAccount - name: aws-az-chaos-sa - namespace: default \ No newline at end of file diff --git a/experiments/kube-aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml b/experiments/kube-aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml deleted file mode 100644 index 99464426e..000000000 --- a/experiments/kube-aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-10-28T10:28:08Z - name: ebs-loss-by-id - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: ebs-loss-by-id - categoryDescription: | - EBS Loss By ID contains chaos to disrupt state of infra resources. The experiment can induce ebs volume loss against specified application for the give EBS Volume(s). - - Causes ebs volume loss from node or ec2 instance for a certain chaos interval from total chaos duration. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod - keywords: - - EBS - - Volume - - AWS - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: uditgaurav@mayadata.io - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws/ebs-loss-by-id - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/ebs-loss-by-id/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/ebs-loss-by-id/experiment.yaml diff --git a/experiments/kube-aws/ebs-loss-by-id/engine.yaml b/experiments/kube-aws/ebs-loss-by-id/engine.yaml deleted file mode 100644 index cdb30105a..000000000 --- a/experiments/kube-aws/ebs-loss-by-id/engine.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - engineState: 'active' - chaosServiceAccount: ebs-loss-by-id-sa - experiments: - - name: ebs-loss-by-id - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos duration (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # set target ebs volume ID - - name: EBS_VOLUME_ID - value: '' - - # provide the region name of the instance - - name: REGION - value: '' diff --git a/experiments/kube-aws/ebs-loss-by-id/experiment.yaml b/experiments/kube-aws/ebs-loss-by-id/experiment.yaml deleted file mode 100644 index 143caf417..000000000 --- a/experiments/kube-aws/ebs-loss-by-id/experiment.yaml +++ /dev/null @@ -1,88 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-id - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/kube-aws/ebs-loss-by-id/rbac.yaml b/experiments/kube-aws/ebs-loss-by-id/rbac.yaml deleted file mode 100644 index 52a1c57b4..000000000 --- a/experiments/kube-aws/ebs-loss-by-id/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: ebs-loss-by-id-sa - namespace: default - labels: - name: ebs-loss-by-id-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: ebs-loss-by-id-sa - labels: - name: ebs-loss-by-id-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ebs-loss-by-id-sa - labels: - name: ebs-loss-by-id-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ebs-loss-by-id-sa -subjects: -- kind: ServiceAccount - name: ebs-loss-by-id-sa - namespace: default diff --git a/experiments/kube-aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml b/experiments/kube-aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml deleted file mode 100644 index 95eca9750..000000000 --- a/experiments/kube-aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-05-15T10:28:08Z - name: ebs-loss-by-tag - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: ebs-loss-by-tag - categoryDescription: | - EBS Loss By Tag contains chaos to disrupt state of infra resources. The experiment can induce ebs volume loss against specified application for given volume tag. - - Causes ebs volume loss by tag from node or ec2 instance for certain chaos interval from total chaos duration. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod - keywords: - - EBS - - Volume - - AWS - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: uditgaurav@mayadata.io - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws/ebs-loss-by-tag - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/ebs-loss-by-tag/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/ebs-loss-by-tag/experiment.yaml diff --git a/experiments/kube-aws/ebs-loss-by-tag/engine.yaml b/experiments/kube-aws/ebs-loss-by-tag/engine.yaml deleted file mode 100644 index a9212ef24..000000000 --- a/experiments/kube-aws/ebs-loss-by-tag/engine.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - engineState: 'active' - chaosServiceAccount: ebs-loss-by-tag-sa - experiments: - - name: ebs-loss-by-tag - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # provide EBS volume tag attached to the given instance - # it'll be in form of key:value (ex: 'team:devops') - - name: EBS_VOLUME_TAG - value: '' - - # provide the region name of the instance - - name: REGION - value: '' - - - name: VOLUME_AFFECTED_PERC - value: '' - \ No newline at end of file diff --git a/experiments/kube-aws/ebs-loss-by-tag/experiment.yaml b/experiments/kube-aws/ebs-loss-by-tag/experiment.yaml deleted file mode 100644 index 54a4710a2..000000000 --- a/experiments/kube-aws/ebs-loss-by-tag/experiment.yaml +++ /dev/null @@ -1,90 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-tag - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_TAG - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - - name: VOLUME_AFFECTED_PERC - value: '' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/kube-aws/ebs-loss-by-tag/rbac.yaml b/experiments/kube-aws/ebs-loss-by-tag/rbac.yaml deleted file mode 100644 index 52ad320c2..000000000 --- a/experiments/kube-aws/ebs-loss-by-tag/rbac.yaml +++ /dev/null @@ -1,62 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: ebs-loss-by-tag-sa - namespace: default - labels: - name: ebs-loss-by-tag-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: ebs-loss-by-tag-sa - labels: - name: ebs-loss-by-tag-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ebs-loss-by-tag-sa - labels: - name: ebs-loss-by-tag-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ebs-loss-by-tag-sa -subjects: -- kind: ServiceAccount - name: ebs-loss-by-tag-sa - namespace: default diff --git a/experiments/kube-aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml b/experiments/kube-aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml deleted file mode 100644 index b8de45f48..000000000 --- a/experiments/kube-aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-10-28T10:28:08Z - name: ec2-terminate-by-id - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: Mayadata - support: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN -spec: - displayName: ec2-terminate-by-id - categoryDescription: | - This experiment causes termination of an EC2 instance for a certain chaos duration. - - Causes termination of an EC2 instance provided by instance ID before bringing it back to running state after the specified chaos duration. - - It helps to check the performance of the application on the ec2 instance. - keywords: - - EC2 - - AWS - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: uditgaurav@mayadata.io - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws/ec2-terminate-by-id - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/ec2-terminate-by-id/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/ec2-terminate-by-id/experiment.yaml diff --git a/experiments/kube-aws/ec2-terminate-by-id/experiment.yaml b/experiments/kube-aws/ec2-terminate-by-id/experiment.yaml deleted file mode 100644 index 003f18df8..000000000 --- a/experiments/kube-aws/ec2-terminate-by-id/experiment.yaml +++ /dev/null @@ -1,98 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by ID. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-id - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/kube-aws/ec2-terminate-by-id/rbac.yaml b/experiments/kube-aws/ec2-terminate-by-id/rbac.yaml deleted file mode 100644 index 0f7fb1c04..000000000 --- a/experiments/kube-aws/ec2-terminate-by-id/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: ec2-terminate-by-id-sa - namespace: default - labels: - name: ec2-terminate-by-id-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: ec2-terminate-by-id-sa - labels: - name: ec2-terminate-by-id-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ec2-terminate-by-id-sa - labels: - name: ec2-terminate-by-id-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ec2-terminate-by-id-sa -subjects: -- kind: ServiceAccount - name: ec2-terminate-by-id-sa - namespace: default \ No newline at end of file diff --git a/experiments/kube-aws/ec2-terminate-by-tag/ec2-terminate-by-tag.chartserviceversion.yaml b/experiments/kube-aws/ec2-terminate-by-tag/ec2-terminate-by-tag.chartserviceversion.yaml deleted file mode 100644 index 1caf610b2..000000000 --- a/experiments/kube-aws/ec2-terminate-by-tag/ec2-terminate-by-tag.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-04-15T10:28:08Z - name: ec2-terminate-by-tag - version: 0.1.0 - annotations: - categories: Kubernetes - vendor: Mayadata - support: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN -spec: - displayName: ec2-terminate-by-tag - categoryDescription: | - This experiment causes termination of an EC2 instance for a certain chaos duration. - - Causes termination of an EC2 instance using instance tags before bringing it back to running state after the specified chaos duration. - - It helps to check the performance of the application on the ec2 instance. - keywords: - - EC2 - - AWS - platforms: - - AWS - maturity: alpha - chaosType: infra - maintainers: - - name: Udit Gaurav - email: uditgaurav@mayadata.io - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws/ec2-terminate-by-tag - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/aws/ec2-terminate-by-tag/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/ec2-terminate-by-tag/experiment.yaml diff --git a/experiments/kube-aws/ec2-terminate-by-tag/engine.yaml b/experiments/kube-aws/ec2-terminate-by-tag/engine.yaml deleted file mode 100644 index 6ed309da6..000000000 --- a/experiments/kube-aws/ec2-terminate-by-tag/engine.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nginx-chaos - namespace: default -spec: - engineState: 'active' - chaosServiceAccount: ec2-terminate-by-tag-sa - experiments: - - name: ec2-terminate-by-tag - spec: - components: - env: - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set interval duration (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # Instance Tag of the target ec2 instances - # ex: team:devops (key:value) - - name: INSTANCE_TAG - value: '' - - # provide the region name of the instance - - name: REGION - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - # Target the percentage of instance filtered from tag - - name: INSTANCE_AFFECTED_PERC - value: '' diff --git a/experiments/kube-aws/ec2-terminate-by-tag/experiment.yaml b/experiments/kube-aws/ec2-terminate-by-tag/experiment.yaml deleted file mode 100644 index 435689305..000000000 --- a/experiments/kube-aws/ec2-terminate-by-tag/experiment.yaml +++ /dev/null @@ -1,100 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by tag. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-tag - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: INSTANCE_TAG - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - - name: REGION - value: '' - - # Target the percentage of instance filtered from tag - - name: INSTANCE_AFFECTED_PERC - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/kube-aws/ec2-terminate-by-tag/rbac.yaml b/experiments/kube-aws/ec2-terminate-by-tag/rbac.yaml deleted file mode 100644 index e03101d0f..000000000 --- a/experiments/kube-aws/ec2-terminate-by-tag/rbac.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: ec2-terminate-by-tag-sa - namespace: default - labels: - name: ec2-terminate-by-tag-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: ec2-terminate-by-tag-sa - labels: - name: ec2-terminate-by-tag-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ec2-terminate-by-tag-sa - labels: - name: ec2-terminate-by-tag-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ec2-terminate-by-tag-sa -subjects: -- kind: ServiceAccount - name: ec2-terminate-by-tag-sa - namespace: default \ No newline at end of file diff --git a/experiments/kube-aws/experiments.yaml b/experiments/kube-aws/experiments.yaml deleted file mode 100644 index 22918b032..000000000 --- a/experiments/kube-aws/experiments.yaml +++ /dev/null @@ -1,462 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by ID. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-id - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by tag. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-tag - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: INSTANCE_TAG - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - - name: REGION - value: '' - - # Target the percentage of instance filtered from tag - - name: INSTANCE_AFFECTED_PERC - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute aws-az chaos to detach the target zones from the load balancer -kind: ChaosExperiment -metadata: - name: aws-az-chaos - labels: - name: aws-az-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/py-runner:latest" - imagePullPolicy: Always - args: - - -c - - python3 -u experiment -name aws-az-chaos - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - name: CHAOS_INTERVAL - value: '30' - - name: LIB - value: 'litmus' - - name: LOAD_BALANCER_NAME - value: '' - - name: LOAD_BALANCER_ZONES - value: '' - - name: LOAD_BALANCERNAME_ARN - value: 'na' - - name: AWS_SHARED_CREDENTIALS_FILE - value: "/tmp/cloud_config.yml" - - name: RAMP_TIME - value: '' - labels: - name: aws-az-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-id - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-tag - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_TAG - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - - name: VOLUME_AFFECTED_PERC - value: '' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- diff --git a/experiments/kube-aws/icons/aws-az-chaos.png b/experiments/kube-aws/icons/aws-az-chaos.png deleted file mode 100644 index fd09e34f6cd5c49336db1bb357ebf14d82201274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3152 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 LNkvXXu0mjf0VG17 diff --git a/experiments/kube-aws/icons/kube-aws.png b/experiments/kube-aws/icons/kube-aws.png deleted file mode 100644 index fd09e34f6cd5c49336db1bb357ebf14d82201274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3152 zcmV-W46pNvP)jCR+=d*`L+4czA#!(zllHgrc<0?fHf|Fh(o*wV0m%zf(KebGfH6AH;z62kK%;Gf<*SG zoGeJ~@lM*YtwDKSy0m~MPs<_;@+d6u7+I+Ma^dhOG9ovHN|#Nbc@N}~g=m6+x5)zN z2`6JUA!9D!{tqtDj;)P!sjV-h^Qhb7YH$^~Q=fv+S;nj3mF#S29^m+Ka_bzGE~=})MkhY&Cb#>R&+FCy z8XTS2$0jR*1)Cla()K`#lG1n*b+wSSHJwakiwP(X!C(mx&>yh4>O-A$_-Gdei<60s z4OaR1ck}#OB!Gypx{5c>47T+|rxN+iUMy|+WL=E1h8t@TuZ@pdSfVuARDn;X>v+P#f-xo-|w4Z10; z#?6jZY`>`4U6YcAP(JIXb>091kjmh=^PF#BfF%OQ>?|c}?`Qk?T&J^dpqtAA!UrN_ zNE>GS@=Xy??!Fj;@y2Cl+(9`xLzSSwtp;Mq;vrr6)*>4dFU9K<2L(hT?U<9LoDac7 z>jF4dclMeRfH=i>4~mA!n?GT=>PJS(GjnbZ8O4+?jK+xAgmk|Zdz zPXR$|{?_eQ7kn~=;a4~!@){v`1K1bQ^R@W}!<3wmgSLk{nI&ULKsgoAoBWoeXlD8y zs{L6k544X7zD5Vplas=0IudFT6c&tNXe8n=h+L?pq1q5`@!^gVl#DDdZ z=SaeHN`L@^p&hTxAc!EL77MKK<>4+~GEG1+eR*$JYe2t-Zib6OL{3-Ink1#Fa?(%N zh8T~t)CGxl7qhN*RzPTO=~ERFWbhiqRMH)9u>xXMe{fN_maEYh@aQM)s(qvgKpA%3 z_KXlRyuxI9(+zQ$h4-P5AkO(ZTl}XK5Ch^VLX7nc?a*CC@Oh{wwxWE-qCd{T_oJ*f z*w%Eara=J_R037c^$6brCI45oqlHZyj#j!c5?sx5*a$(iOjyPbmL@4>dH71XyCXmR zHygrI3RZ|B z0xU_6%CJu4d#DwP;C=A15MM010=(a!cmQpbljm@)4}>ismSQ-hg*;dxP{k(J^~kj) z`PBYkK@d^)eGf14RErS+#DW1tM^QnmI1y+>gV{NG6~jVy9i>Zyn|Id2&`4zI4~u-} z8!BF}^V=n0QB$QUNx2&;!NqGy2sZQPWchtR9~b+>vw*WvbqvwCbXfrz!SKoitOj`T znL|om$U&;G{*Bpwmr(Gf8+yR%ctY$i6%vaIx@}}*_VufesJbr1d-1n3bytD~i{WYv z8nCKdy~G+~ZYr%4t$;^P*FiEXrSB9oMU`O4wyEvj+F>Aq(<#!>4LwY0_uc3uCO3gw<-fG zga70K1;IqGaLPf@kW&`V3a#*ihKy-TJHXRxrqBz|TvZK|5LB>QG+(1qBj$ecOxqQq z>n02S5CZaq964g4PBo^vzFRYBpzE56X%+|&Jm8p9r5XQ?YmY0ATt-Yq98#oJMi1Ui z?50R-xX;s@|G;-`EI+PpTbieB!7Qx{1ycnCaLiAyzFTz+J_tcYhIe0d%|L;G12M&1 z5=9Fce3$I^p8Dw&Q-X$!=>mcob8VVIWt%ioL8OJx)0znP2a2dX_{hQ|Xvl>QGlPaq zL>HN_fBuNiqx=?!Ucgu?A{0%@^BJ?ZPmJI6e%KNft*$ArmH5i z0oF2e3o#-d5XFPvlg0A{jY5hf5fu=@1R{z-1xYr7ijgX?3?FHzzS|o#BH{N$qVkV6 zSZ2FG*Q48c?nJxEw(Evds8sdSd2ngVd^k(hM1m9uiNFxwY6A&O5 zlY@$x;Ir`^(Zn+UaQ#IksuuWVBrc#q;sP2ZE}%iot?d}#XTN-f8XBAF`i&d(*y2TW zwY!H#=Z&P&#Sc>1if3u%lgnt%*Jse;CClm8FaMm@Z+J~PFUK~5e)q~t6e}zv;4jwv zn1&A@MyKl<=qGE|(yv}xO_jUer@7ylMdvTH(!Tu%$u=UJ(%E}z&zx1ng^;nvGF`ah zol1J*sa5ocKmC<%Fe{us^)CAKNDZ4Wu2rnBuD+2yKTQvo%xCpL2le*$(SnDT&>y$H zL$SmX0@j>3MF$QZrnfh5q!r))o^mWHX()ZAU>v<$`45_UR}rNoC)1AIRW#o*Td~5| ze)BR_Y+)O>a`m`HR%w@2S)*y#HR>^!vAHQqe^E zYVj2M_`s)1*ZsKq5bb*ZL(0y|q?maIqlTElBWBomw=-w?9 z3#<`D(#I3+`6ioXdYkChjo{8nVN;-^9IR$v&P=m~Vg)P^H(wk_u?E5&TTj%mot2Yw ziSn35W*0N-%4Drf#C=NHEYxM99yU?mewa ztb&V)Ci;x`%>7<+Nk-gyO%KG9`cCmzT$a|4S!DX-u8GO#R-S; zLs$g+h&_3g;)Kd3+*3M!8|3i7ZBy?XxDB%RrqakG;+E(iq - kube-aws contains chaos to disrupt state of aws resources running part of kubernetes cluster - experiments: - - name: ec2-terminate-by-id - description: "" - - name: ec2-terminate-by-tag - description: "" - - name: ebs-loss-by-id - description: "" - - name: ebs-loss-by-tag - description: "" - - name: aws-az-chaos - description: "" - keywords: - - AWS - - EC2 - - EBS - - AZ - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - - name: oumkale - email: imkaleoum@gmail.com - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/kube-aws - - name: Source Code - url: https://github.com/litmuschaos/litmus-python/tree/master/experiments/aws_az - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - icon: - - url: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/icons/kube-aws.png - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kube-aws/experiments.yaml diff --git a/experiments/kube-aws/kube-aws.package.yaml b/experiments/kube-aws/kube-aws.package.yaml deleted file mode 100644 index db03f2ef3..000000000 --- a/experiments/kube-aws/kube-aws.package.yaml +++ /dev/null @@ -1,17 +0,0 @@ -packageName: kube-aws -experiments: - - name: ec2-terminate-by-id - CSV: ec2-terminate-by-id.chartserviceversion.yaml - desc: "ec2-terminate-by-id" - - name: ec2-terminate-by-tag - CSV: ec2-terminate-by-tag.chartserviceversion.yaml - desc: "ec2-terminate-by-tag" - - name: ebs-loss-by-id - CSV: ebs-loss-by-id.chartserviceversion.yaml - desc: "ebs-loss-by-id" - - name: ebs-loss-by-tag - CSV: ebs-loss-by-tag.chartserviceversion.yaml - desc: "ebs-loss-by-tag" - - name: aws-az-chaos - CSV: aws-az-chaos.chartserviceversion.yaml - desc: "aws-az-chaos" diff --git a/experiments/kube-aws/rbac-admin.yaml b/experiments/kube-aws/rbac-admin.yaml deleted file mode 100644 index f386c6c34..000000000 --- a/experiments/kube-aws/rbac-admin.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: chaos-admin - labels: - name: chaos-admin ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: chaos-admin - labels: - name: chaos-admin -rules: -- apiGroups: ["","apps","batch","extensions","litmuschaos.io","openebs.io","storage.k8s.io"] - resources: ["chaosengines","chaosexperiments","chaosresults","configmaps","cstorpools","cstorvolumereplicas","events","jobs","persistentvolumeclaims","persistentvolumes","pods","pods/exec","pods/log","secrets","storageclasses","chaosengines","chaosexperiments","chaosresults","configmaps","cstorpools","cstorvolumereplicas","daemonsets","deployments","events","jobs","persistentvolumeclaims","persistentvolumes","pods","pods/eviction","pods/exec","pods/log","replicasets","secrets","services","statefulsets","storageclasses"] - verbs: ["create","delete","get","list","patch","update"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: chaos-admin - labels: - name: chaos-admin -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: chaos-admin -subjects: -- kind: ServiceAccount - name: chaos-admin - namespace: default diff --git a/experiments/longhorn/experiments.yaml b/experiments/longhorn/experiments.yaml deleted file mode 100644 index e69de29bb..000000000 diff --git a/experiments/longhorn/icons/longhorn.png b/experiments/longhorn/icons/longhorn.png deleted file mode 100644 index d4fd9c11ce8211dbf8d2e36b52379c31c8c4ed0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2263 zcmbW3Sv-^t8;2j&_%z0ru}0ZqWGQQfmpl<;YiJtTrFRfgF-*u3Gn9Q|giLzuWM4j6 zvc}jAQAv>{hDf}VHRkR29d-Pj{O|jBU-!{<^nZ-8GU0)X!vO%`L7N)c000N(_nyXe z_;)Zt2aGR}9w99^jG*IHc1j7Xd8QgVqYzrcE+`P#PG=h((L*o8*eVz7O++yv~f~ zxBAglH#1+C^-eNoz7c3Gx?wNTrghmX(cB*Vumkrzg45KkZ@k^!QTqf zM&Aska=rrem}drvca7}*CF9m7X>&OduXSDO#b0;~DA>|>o7f>*bqnUJLL|;qejQH@ zqt9~hn10NLuqVdygNIWDK*z#e3zYk1Q7N8{ z&ZLXS_jmTTB!o-vti?=mC)}wR*9(t-{-UanclAg8`mc}+giG|!Yis1?kyU}YnmRzz zfOo`-FKVk2kPNq|-PiktU)XYDen|M9n7;T9l<2}Epj!@uA;cVHu=50^@AWtldUl>J zsO_Wj=CI|78}=$eYlf`rF)g~hN%DcyWZ$`Yzut$-6AIu_^s*sc@{OH-x=H@>?k9i9 zD%d~17B{F+_a*;CRt|rN+o|kyY6i z^7L+6TV*IWob|_ssv}wlm2LCFKMd4VktXQS8dx~-+0NO)@Oh2YXXTzj`jEeb$JuzV zgD`H(Nm3bnu*A@9URG|374_u8U&dWltz=HS1oP5K0WCZ;gE0$4&Z&&57n(6|{QPT7 zx9eWOy>mTecj5&9UPxm_(bR^8p^tMvs7!#a#s%<1ov6`8Kl>SR*)k>5{D$Db&~SdU zqcl<{<5^^7b_{wHt9ebpz+KIH=iY^p?L|ZAKXBHE_NvkHrV9DU0e(?@Q2GK(4N9CI zWQonlUyFFj+=!=&$zAYB9lf_m(!_r*kF#o{zdoldiS6yubEUe9^7lSGEg zY(B$AcI9OY1N~IvL7Mgu+}qM#W})$hwF9$<=@-qXlpl)hH-O8ccRFpqy|n3WG$=M= zRyC;)M3J*JCDjcyZY6rCE2B)D8DDlBP7 zz~1J1CR+YfBxs(?M$!x+h!ykgLpMGP=)qt#5z*B?k8h2 z)9Q~944So8-gJ?KqRKtCE1x9M7li^-RY7v4fffnpm@6oEsp-zJ$nrD~ZHk)~*cgXQ zX?cLr`G_$`NfUEzh#*xzP-?WVj;f9|O+bnhT0ohdyaa8ppmlWCeZbS z7T**C6YQuAOFnfyX)!^OI& zZ^qd4NmW658;;6VLK>AOw$-9)`zsPET-|3l^>3dB8$X(n?N7Zwb-a8i2a|t^r}9-- zL)?&?l&ieArX-(AlkXC%(6ML~r+#+AXGPoxAE$PplF7adWJXt-HVXl}Xh-95pi3YJoEogg&W0QCl*9@65wP+HgK@ z@)!F=01YX1CiOkL-lxJg)Ed^q{k7RRXR(M91Ll*yuhpt$#;@dJ6rqDvYKPUMXz(j} zs^hvgf5LA%rKxSH+sY589@`DTkDYh!mcSIHGV0xwQiTotAN_t1?tZng%th8-R>UhE zx7Z7okRY4E#{;V_yloYOg&&1R=b96u*E$@BnVW%JzhESFZ$(f_iGp4Am=Jl2az}Y)0AcSh z$l-3i7q)i9uI%b6_=nd&oc=%OU1_YJPHKtxMU|k z<%?39$;e<-Yu;&Xn>|7e6j{VY@^Z)+q~z|)*wa&jH@nRYu|{A}$S>TiKEyR%OS3pe zQ|egC2>PEks`-1ePx3oh;JSyx_GoDFB!*V1CuF{;0t3V=4YGAajMBmV`2 CQb5`O diff --git a/experiments/longhorn/longhorn.chartserviceversion.yaml b/experiments/longhorn/longhorn.chartserviceversion.yaml deleted file mode 100644 index c1ae23b2e..000000000 --- a/experiments/longhorn/longhorn.chartserviceversion.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-03-17T10:28:08Z - name: longhorn - version: 0.0.2 - annotations: - categories: longhorn - chartDescription: Injects chaos on longhorn components -spec: - displayName: Longhorn Chaos - categoryDescription: > - Longhorn is a distributed block storage system for Kubernetes - experiments: - keywords: - - Kubernetes - - Longhorn - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: Longhorn - url: https://rancher.com/project-longhorn-now-available-kubernetes/ - - name: Documentation - url: https://docs.rancher.cn/longhorn/#current-status - icon: - - url: - mediatype: - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/longhorn/experiments.yaml diff --git a/experiments/longhorn/longhorn.package.yaml b/experiments/longhorn/longhorn.package.yaml deleted file mode 100644 index e37fbdbcd..000000000 --- a/experiments/longhorn/longhorn.package.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packageName: longhorn -experiments: \ No newline at end of file diff --git a/experiments/mongodb/experiments.yaml b/experiments/mongodb/experiments.yaml deleted file mode 100644 index e69de29bb..000000000 diff --git a/experiments/mongodb/icons/mongodb.png b/experiments/mongodb/icons/mongodb.png deleted file mode 100644 index ab6378ff5096920216db042733a9f42976cb27e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23291 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 - MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. - experiments: - keywords: - - Kubernetes - - MongoDB - maintainers: - - name: Sanjay1611 - email: sanjay.nathani@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: MongoDB Website - url: https://www.mongodb.com/ - icon: - - url: - mediatype: - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/mongodb/experiments.yaml diff --git a/experiments/mongodb/mongodb.package.yaml b/experiments/mongodb/mongodb.package.yaml deleted file mode 100644 index 1ad30e836..000000000 --- a/experiments/mongodb/mongodb.package.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packageName: mongodb -experiments: diff --git a/experiments/mysql/experiments.yaml b/experiments/mysql/experiments.yaml deleted file mode 100644 index e69de29bb..000000000 diff --git a/experiments/mysql/icons/mysql.png b/experiments/mysql/icons/mysql.png deleted file mode 100644 index ee7382c8295ce611d260c2941cc404eaf4383c41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41430 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%0AFt(!RByU()w?vq7$x)TulDXt#z3C-2Cy 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 diff --git a/experiments/mysql/mysql.chartserviceversion.yaml b/experiments/mysql/mysql.chartserviceversion.yaml deleted file mode 100644 index 540382a68..000000000 --- a/experiments/mysql/mysql.chartserviceversion.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-03-17T10:28:08Z - name: mysql - version: 0.0.2 - annotations: - categories: mysql - chartDescription: Injects chaos on mysql components -spec: - displayName: MySQL Chaos - categoryDescription: > - MySQL is an open-source relational database management system. - experiments: - keywords: - - Kubernetes - - MySQL - maintainers: - - name: atulabhi - email: atul.abhishek@openebs.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: mysql Website - url: https://www.mysql.com/ - icon: - - url: - mediatype: - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/mysql/experiments.yaml diff --git a/experiments/mysql/mysql.package.yaml b/experiments/mysql/mysql.package.yaml deleted file mode 100644 index d844b9abd..000000000 --- a/experiments/mysql/mysql.package.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packageName: mysql -experiments: diff --git a/workflows/namespaced-scope-chaos/workflow.yaml b/experiments/namespaced-scope-chaos/experiment.yaml similarity index 100% rename from workflows/namespaced-scope-chaos/workflow.yaml rename to experiments/namespaced-scope-chaos/experiment.yaml diff --git a/workflows/namespaced-scope-chaos/workflow_cron.yaml b/experiments/namespaced-scope-chaos/experiment_cron.yaml similarity index 100% rename from workflows/namespaced-scope-chaos/workflow_cron.yaml rename to experiments/namespaced-scope-chaos/experiment_cron.yaml diff --git a/experiments/namespaced-scope-chaos/namespaced-scope-chaos.chartserviceversion.yaml b/experiments/namespaced-scope-chaos/namespaced-scope-chaos.chartserviceversion.yaml new file mode 100644 index 000000000..9dc9778f6 --- /dev/null +++ b/experiments/namespaced-scope-chaos/namespaced-scope-chaos.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: namespaced-scope-chaos + version: 0.1.0 + annotations: + categories: namespaced-scope-chaos + chartDescription: Performs the pod delete chaos experiment in namespaced scope mode +spec: + displayName: Namespaced Scope Chaos + categoryDescription: > + Performs the pod delete chaos experiment in namespaced scope mode + faults: + - name: pod-delete + description: Deletes a pod belonging to a deployment/statefulset/daemonset + keywords: + - Kubernetes + platforms: + - GKE + - Minikube + - Packet(Kubeadm) + - EKS + - AKS + icon: + - url: + mediatype: "" diff --git a/workflows/node-cpu-hog/workflow.yaml b/experiments/node-cpu-hog/experiment.yaml similarity index 100% rename from workflows/node-cpu-hog/workflow.yaml rename to experiments/node-cpu-hog/experiment.yaml diff --git a/workflows/node-cpu-hog/workflow_cron.yaml b/experiments/node-cpu-hog/experiment_cron.yaml similarity index 100% rename from workflows/node-cpu-hog/workflow_cron.yaml rename to experiments/node-cpu-hog/experiment_cron.yaml diff --git a/experiments/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml b/experiments/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml new file mode 100644 index 000000000..303180dcf --- /dev/null +++ b/experiments/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: node-cpu-hog + version: 0.1.0 + annotations: + categories: node-cpu-hog + chartDescription: Node CPU hog injects a CPU spike on a node where the application pod is scheduled. +spec: + displayName: Node CPU Hog + categoryDescription: > + Node CPU hog fault disrupts the state of Kubernetes resources. This fault injects a CPU spike on a node where the application pod is scheduled. + - CPU hog on a particular node where the application deployment is available. + - After test, the recovery should be manual for the application pod and node in case they are not in an appropriate state. + faults: + - name: node-cpu-hog + description: Node CPU hog injects a CPU spike on a node where the application pod is scheduled. + keywords: + - Kubernetes + platforms: + - GKE + - EKS + - AKS + - Kind + - Rancher + - OpenShift(OKD) + icon: + - url: + mediatype: "" diff --git a/workflows/node-memory-hog/workflow.yaml b/experiments/node-memory-hog/experiment.yaml similarity index 100% rename from workflows/node-memory-hog/workflow.yaml rename to experiments/node-memory-hog/experiment.yaml diff --git a/workflows/node-memory-hog/workflow_cron.yaml b/experiments/node-memory-hog/experiment_cron.yaml similarity index 100% rename from workflows/node-memory-hog/workflow_cron.yaml rename to experiments/node-memory-hog/experiment_cron.yaml diff --git a/experiments/node-memory-hog/node-memory-hog.chartserviceversion.yaml b/experiments/node-memory-hog/node-memory-hog.chartserviceversion.yaml new file mode 100644 index 000000000..0003413b4 --- /dev/null +++ b/experiments/node-memory-hog/node-memory-hog.chartserviceversion.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: node-memory-hog + version: 0.1.0 + annotations: + categories: node-memory-hog + chartDescription: Node memory hog injects a memory spike on a node where the application pod is scheduled. +spec: + displayName: Node Memory Hog + categoryDescription: > + Node memory hog fault disrupts the state of Kubernetes resources. This fault injects a memory spike on a node where the application pod is scheduled. + - Memory hog on a particular node where the application deployment is available. + - After the test, the recovery should be manual for the application pod and node in case they are not in an appropriate state. + faults: + - name: node-memory-hog + description: Node memory hog injects a memory spike on a node where the application pod is scheduled. + keywords: + - Kubernetes + platforms: + - GKE + - EKS + - AKS + - Kind + - Rancher + - OpenShift(OKD) + icon: + - url: + mediatype: "" diff --git a/experiments/openebs/experiments.yaml b/experiments/openebs/experiments.yaml deleted file mode 100644 index fa6f3c319..000000000 --- a/experiments/openebs/experiments.yaml +++ /dev/null @@ -1,1097 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Network loss to target pod belonging to a OpenEBS PVC -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-target-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-target-network-loss -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "storage.k8s.io" - resources: - - "jobs" - - "pods" - - "events" - - "services" - - "pods/log" - - "pods/exec" - - "configmaps" - - "secrets" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-target-network-loss/openebs_target_network_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' # in percentage - - - name: TOTAL_CHAOS_DURATION - value: '120' # in seconds - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-target-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-network-loss - # mountPath: /mnt - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill all openebs control plane pod and check if gets scheduled again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-control-plane-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-control-plane-chaos -spec: - definition: - scope: Namespaced - permissions: - - apiGroups: - - "" - - "litmuschaos.io" - - "batch" - - "apps" - resources: - - "pods" - - "pods/log" - - "deployments" - - "events" - - "jobs" - - "configmaps" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-control-plane-chaos/openebs_control_plane_chaos_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - ## Period to wait before injection of chaos - - name: RAMP_TIME - value: '' - - - name: FORCE - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus, powerfulseal - - name: LIB - value: 'litmus' - - labels: - name: openebs-control-plane-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Network loss to pool pod belonging to a OpenEBS PVC -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-network-loss -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "litmuschaos.io" - - "batch" - - "extensions" - - "storage.k8s.io" - - "openebs.io" - resources: - - "pods" - - "pods/log" - - "pods/exec" - - "events" - - "jobs" - - "configmaps" - - "services" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumeclaims" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - - "cstorpools" - - "cstorvolumereplicas" - - "replicasets" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-network-loss/openebs_pool_network_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' # in percentage - - - name: TOTAL_CHAOS_DURATION - value: '120' # in seconds - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-pool-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Network delay to pool pod belonging to a OpenEBS PVC - This experiment is using pumba lib for network chaos -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-network-delay - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-network-delay -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "litmuschaos.io" - - "batch" - - "extensions" - - "storage.k8s.io" - - "openebs.io" - resources: - - "pods" - - "pods/exec" - - "jobs" - - "pods/log" - - "events" - - "configmaps" - - "services" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - - "cstorpools" - - "cstorvolumereplicas" - - "replicasets" - verbs: - - "create" - - "get" - - "list" - - "patch" - - "update" - - "delete" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-network-delay/openebs_pool_network_delay_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - # in milliseconds - - name: NETWORK_DELAY - value: '60000' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-pool-network-delay - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the OpenEBS NFS provisioner container and check if pods consuming the NFS PVs continue to be available and volumes are writable (RWM mode) -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-nfs-provisioner-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-nfs-provisioner-kill -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "litmuschaos.io" - - "batch" - - "extensions" - - "storage.k8s.io" - resources: - - "pods" - - "pods/exec" - - "pods/log" - - "deployments" - - "events" - - "jobs" - - "configmaps" - - "services" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosexperiments" - - "chaosresults" - - "chaosengines" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-nfs-provisioner-kill/openebs_nfs_provisioner_kill_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - # NFS default container - - name: TARGET_CONTAINER - value: 'nfs-provisioner' - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - # It supports pumba and containerd - - name: LIB - value: 'pumba' - - # LIB_IMAGE can be - gaiaadm/pumba:0.6.5, gprasath/crictl:ci - # For pumba image use: gaiaadm/pumba:0.6.5 - # For containerd image use: gprasath/crictl:ci - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - labels: - name: openebs-nfs-provisioner-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - configmaps: - - name: openebs-nfs-provisioner-kill - mountPath: /mnt/ - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the cstor target/Jiva controller pod and check if gets created again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-target-pod-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-target-pod-failure -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "storage.k8s.io" - resources: - - "deployments" - - "jobs" - - "events" - - "pods" - - "pods/log" - - "pods/exec" - - "configmaps" - - "secrets" - - "services" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-target-pod-failure/openebs_target_pod_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: FORCE - value: 'true' - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # provide the kill count - - name: KILL_COUNT - value: '' - - - name: CHAOS_INTERVAL - value: '15' - - - name: DEPLOY_TYPE - value: 'deployment' - - labels: - name: openebs-target-pod-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-pod-failure - # mountPath: /mnt - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the pool pod and check if gets scheduled again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-pod-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-pod-failure -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "openebs.io" - - "storage.k8s.io" - resources: - - "deployments" - - "replicasets" - - "jobs" - - "pods/log" - - "events" - - "pods" - - "configmaps" - - "secrets" - - "storageclasses" - - "persistentvolumeclaims" - - "cstorvolumereplicas" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-pod-failure/openebs_pool_pod_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: default - - - name: OPENEBS_NS - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: CHAOS_ITERATIONS - value: '2' - - # provide the kill count - - name: KILL_COUNT - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-pool-pod-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-pool-pod-failure - # mountPath: /mnt - - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the pool container and check if gets scheduled again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-container-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-container-failure -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "openebs.io" - - "storage.k8s.io" - resources: - - "replicasets" - - "events" - - "jobs" - - "pods" - - "pods/log" - - "pods/exec" - - "configmaps" - - "secrets" - - "persistentvolumeclaims" - - "cstorvolumereplicas" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-container-failure/openebs_pool_container_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NS - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: LIVENESS_APP_LABEL - value: '' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - - name: DATA_PERSISTENCE - value: '' - - - name: CHAOS_ITERATIONS - value: '2' - - labels: - name: openebs-pool-container-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-pool-container-failure - # mountPath: /mnt - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the cstor target/Jiva controller container and check if gets created again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-target-container-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-target-container-failure -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "batch" - - "litmuschaos.io" - - "storage.k8s.io" - resources: - - "jobs" - - "pods" - - "events" - - "pods/exec" - - "pods/log" - - "configmaps" - - "secrets" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "delete" - - "get" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-target-container-failure/openebs_target_container_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - - name: APP_PVC - value: '' - - # LIB_IMAGE can be - gaiaadm/pumba:0.6.5, gprasath/crictl:ci - # For pumba image use : gaiaadm/pumba:0.6.5 - # For containerd image use : gprasath/crictl:ci - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - # Specify the container runtime used , to pick the relevant chaos util - - name: CONTAINER_RUNTIME - value: 'docker' - - # TARGET_CONTAINER values: cstor-volume-mgmt , cstor-istgt - # For cstor-volume-istgt container kill use : cstor-istgt - # For volume-mgmt-kill container use : cstor-volume-mgmt - - - name: TARGET_CONTAINER - value: 'cstor-volume-mgmt' - - - name: FORCE - value: 'true' - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - - name: DEPLOY_TYPE - value: 'deployment' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - - name: SOAK_TIME - value: '60' - - labels: - name: openebs-target-container-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-container-failure - # mountPath: /mnt - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Network delay to target pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-target-network-delay - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-target-network-delay -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "storage.k8s.io" - resources: - - "jobs" - - "pods" - - "services" - - "events" - - "pods/exec" - - "pods/log" - - "configmaps" - - "secrets" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-target-network-delay/openebs_target_network_delay_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - - name: NETWORK_DELAY - value: '60000' # in milliseconds - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-target-network-delay - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-network-delay - # mountPath: /mnt - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - OpenEBS Pool Disk Loss contains chaos to disrupt state of infra resources. Experiments can inject disk loss against openEBS pool. -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-disk-loss -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "litmuschaos.io" - - "batch" - - "extensions" - - "storage.k8s.io" - - "openebs.io" - resources: - - "pods" - - "jobs" - - "pods/log" - - "events" - - "pods/exec" - - "cstorpools" - - "configmaps" - - "secrets" - - "storageclasses" - - "persistentvolumes" - - "persistentvolumeclaims" - - "cstorvolumereplicas" - - "chaosexperiments" - - "chaosresults" - - "chaosengines" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-disk-loss/openebs_pool_disk_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - # GKE and AWS supported - - name: CLOUD_PLATFORM - value: 'GKE' - - - name: PROJECT_ID - value: '' - - - name: NODE_NAME - value: '' - - - name: DISK_NAME - value: '' - - - name: ZONE_NAME - value: '' - - - name: DEVICE_NAME - value: '' - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - labels: - name: openebs-pool-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - - configmaps: - - name: openebs-pool-disk-loss - mountPath: /mnt/ - - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- diff --git a/experiments/openebs/icons/openebs-control-plane-chaos.png b/experiments/openebs/icons/openebs-control-plane-chaos.png deleted file mode 100644 index db1d3e7b7c0fe8312c323ed3cdfcaedc292d5c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12575 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 O0F>p`<*H;X!u}5j!U327 diff --git a/experiments/openebs/icons/openebs-nfs-provisioner-kill.png b/experiments/openebs/icons/openebs-nfs-provisioner-kill.png deleted file mode 100644 index db1d3e7b7c0fe8312c323ed3cdfcaedc292d5c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12575 zcmZ{LcQ_p1_y6dfRT3M01+hY`76j4T>Z|t_y(PNnf@smQ2%=lPya}QcHG1!5MG1-M zy?^)f=kJf-%-p%p+_`6-^W1yxIj?)pnP^RQMKWSKVgLZhl$GQVm^%D_g%BHaU*(`V z#8kL;(rVHGP?JD%Yl(+>X0cX6r~$xx4gd(jbiT$kh3o);7YqRYS^&VSF91OM_G`12 zIOYYum5QPq@bJGgx2^ayriJLOlA#9xkWl@vU`?(B-C`OEJeAet3D&V_Nny17ehdcy z03%nHlh*NF+zRyjk|m#VA*y>;<+HbRlQEi|h+7NbQ*{ECWT8)9%6l>}KGC1nl3sp| z`yK1!#Jipe4MiJdlKg@&rJ&pbHV1@6nZ>_(>SnK{Lxl&;JQMimUzQYFq5b6YGJNSm zukGM!#&CBUssoqCQzp&>I8ir&FGQXpS*>iCWTEU4B5xHSxD5Y}xMU6ZV1*zhrK_zL zu~)|n+*Al{b6O2OvOq<+%+D{915t*pR(vaH3b;IVv;k|Lqz)VkRqln9;)3B&6f)>x zPS`czbid`{I!*H8-^!4vA~5vMh(lfcp>~M3`7amPUwm*w(tXY?`*P3i;@|wQN3pp` zhou=WuWz*6A_uiYcB5G&fRSfkhUim=;UAjtP=wOYS$*OAolLaRN!Ljf_*1{y(4;D* zjBl?MM^?7D$8X`F(_AE1O`R(-d%F@F%eFOL-G?Hea-OTlrms}$-6*A4DJ5Ch8Kg~zFS0n+zON9+$ z2q)^|VT@5@H8}VN2@L`zk6SN~sY|d6+8 zE|427o*B+WB!R>RX!5$^1$dW^H-j7fUxrW6Xz`O`_sv)9i+7W5jFb~r?&A~Szkd6h zYRQWTLN)&LqF6(u!)by5iJa!mO$IojpNnvm${H%1eSdf0S@zV%Hks&po$+Sh;>2mT zTFY7I7u9K^Po{Eye|s|JJ^nmO$?*my{D`h7bHVlZmZtli8glvP8N5&|EwFT+KlTv; zJE-5wzoljWYC&U2whanHVuy$Yd-~UC!c?_c`Ht^!PSSk79#I+%gL|cQWP+0pJ2?wK z1w3>P3;5(b_zea=iL8;c+TN{}d_QOEHqfm@M~Xtu@@Pn&TI6%F`zpze`~6mw6?5IZ zd1OgUB;^;Fmme3&P73!Qy{dcrIo#jm=bN(YJh1~E1OkqZ`^SYMM4@DUl@c(OlvVvk z)L0e4EM4bH4}=9)uE*TON%L8CC>@K$++93w)SHoy2%2u;AcDBC# zj@WK_^{PS%NyC4o{ERlkmM#KI{?mtVahh~AO^^P(K6CuLg+j#ddVBr5+IULQooSqa zAOw8><`GQY-4(guP|yf8KYqYDIwmA0&-0)W_+;Yt@bx52N5B_P_%XV{?__^(X?3%k zA*oMF4T=Yp=L9|mKv>dbqarx6%!hA1po0dGtn}L|t0CvVTWt9o%^eRb2f*40?&hmp z|LY$FD@tG*hF^V`w`?B4{YG>U^l!3t}ByLxT7z+X2K(vgYwJ+6-W5hh&1gW(vJLehY5qs)kKR@cO3Pj@PidqP<2f4DAxG3jh2mzD$0hkSD3b`J zE8-Q)lWvCVn$Q1X0ms6)kwu*sCkx!x_{2;-yI3F#9R+ZTPB^)`VJT~$d^dczmo-ibdYsfqi)QMAWSL zGeLAhlf6BWN&WhpjpaVa%slO;0z7C=8qJ&9ni)k_;ovpF#CK*?FYe zzjv^|+Tce``jMpIS>?jZs(U9}i_ZU?Nm~PM0_4GET2A74KvdoBt#x+x``91jW4n!2 zmKkukR7j^7yr5W0y8XB^P0A>4EYrHd5nfJqlv@7&)H3faD{* z(d6>!G+lxt4N&d1ox7-l{O>`<8j`Lzbq)<1griU!^^0BLFQ*bw=ik3i>94lu@H^?1YD#t6UIqDEd>8yT@eK#5GYxXZ z#uZi-SV148z%xeRSkk270nXYN!_D@~wgS7>V+RcLnP-4h8N_QIJ*CY>!)eXJo=_CO z&xk|}ySFs3P$crBpN|;*2SoZP_Qm(HjgGsHEk}^Zq6y$yF-rXky~7ikWIAxjFIOtO z;z+IG?Wwl53>72UbYvsP2mwPOH~v>D)p`7#5<@7kv$see31P(o_Vs@3d}EQtmu+UG zXA?*PMZH;t7I%SnIl)h1o{k=?UE19Jl$M-iVzqXRl)p*@JY{?Kz?{m2L;)Su#q@v_ z6c>aUGX2r)Y>Gm+XU!)+yi|%BIa1&da=)CmEdP|`C_t%^Q5LG0X@Y?B4Go_yN-QC_ z@KFdg*$*!+8Fn2T_@0=G35@LRRet91ix4-cn)yBjKS(O_pn0wXwd}W0I*7jCX972f z(r7`wehgnrnt8bYZa=8Hyv(P_6304Uao*YcE5nwHWR){|!N~{b)>O89l{EUP4k$cuJFoSaiuV*jFeuXv0)#KDl4;)kqq8jmXYyUU6OHiS?`w9p@L&P;dS8XR}6$wY5H1Qpof0(-9Pp})`C?n zP3%&$-{FZSwwfOAa|}URF?S6zXVdAP8T|Ngcp<{AGA>M0*`fJpuRO|JYHHB#+cR#H z9XZxV<65xD`i3YY?JV#8rYq-E%_1NxKOh#ldGKAyYJ}IRE@gw*L z2ibB4NagX7>m?h(@|?edZtLwL{^TPp*K)ij+)JY3!-#2K=Xf3UM%oO(K;DAQC)IjI zD&TW_g90S~lcg*sQW0U&r#S=22W&uw3$TbP)0s}rlboQzm#)#wMM4>o3F&eV}6Nv?OP0BP40up)ot0U~SkbNnM@B*ES337XnJEnMn6&p64h=iP|DWNR&y8 zi-bfR2>wTkqo5y&P)32-f&T(?2}h=UNNKP_v{+{nBX}PZo0ZBzv4BK`vM3#60q7A# zmp&&M>0oH$IVu{Cfb^hmlK}8}>5Ino7(|Vd6p>iQa$Q(TZ8F_QjZd7K90J#qICl}9 z7Nj8IgFhIjhX<_-`BNM?=skdkLa)_A!U6N}62SQg2$H!*s& ze3$cS9o`ec(&eT}ZQE{xaW5a>!Yo9%+IPw>7OIA1&5h!d{=nO=>)uj-TustbNs2HnE>vEIlTArLY5`aAj{4>1o|7rO(3Jvm&6#m_ax8nFNDS9N`nt1Z%-6+ zmg-wPSQzW~R)72m^~|yS^6?}JiHOwwb`8PHEuW<~HXdu;VJ*ou(7`5UlY<*Bjlcc7 zU`Iht3JdFsE}nhuNHdwt*j0%LK^|G9ZWCbTT3h6TBZ0$m^Si%)igU0-)}_qHa`un? zy*)y@8uWpXZTw?@pZ~IXo-^H>s_homJI#qy`O7%P^1kVWwA~vzGEGLvLK~?Q_6=!Q zj`)4nkro_TuMZ}N>J0RUEjs5JpNb{Exap_3`;(-I1SK0PR8`xKe8`HGw72!AVY(zG zPUP%hlTF}1fA8b-QxsTsAL2>1!D7k(>%T9Zr14bB^#(tCcdWv{?;>#MQ$^cWcc-jX z23d5Y3s`jQ1S=*}e_;HhY{k0>T*69IuWB}YR-!;jx&+>iYsZob11UT<*^Xp{6p$Hxi@o*Wop6eNjg_i zXhLogk9-9-NCf9c!sfl+sA|ePs0V{!BsCLU8AaMXzc6>vl4eF8VG*Yc{7O3nJ`$&_ zxz@VQNN}Th$uhNG&CmH@biYtTy>3zLz-0(l_v`hW*Z0wgypSkPcAs^xv4?6cC6(?4 z#ZXR=(n_wTN~4HL-OE#I_N}06MP_M>a4?b!0t#tX3gM=;e@4dgcR=+hXRy}kXKi%%>WHP`E1S!#Y2i$QVPZ@zjcED%WE zr4xHtOO`cuOO+-cH#VK9i(M>xy7AhO7J`aY;0r_)fw9Ldp45|`WiMZ&0GeE+yRG(9 zhGAFaRaH_+Y(EqdV4l?%!4j1WMy*Pe?(w<{KT&WhFwHb(?ocy$!Ggt}Zh7kE!|Q*b zOUA>4h&rN*eFqc_&n5)?dL>8mb=OM$SI?&(Rp&SDwwG7)`}Gr*yo6%$2o{;qlj*~% zZKXNAk6SPkvW&M`0(OkgM3}F#-mtM2;zCu1OU>>Q(+?8%4Cl_rzq92fXXLU`tv`y@ z6%t~;Uf#C&7yEA2+X5t02vVcwFuBaWIQ8=4>mEP*x~%qJ!25LxVL{0&90&552qnA* z%N<-=Y=b_{HI7161=eOyEi3@?p%>w=HWD`Q83+9=DheF_D@>VscjH}Rm=Ss8YL9=% z^leXvidBiFwL0fW(G>IDI$6WUVbcEW!!yi6$8P<7&HJ*h&KH$ziv@>NMq%dzUY0Ld ziJ?zZw~X|_xFa*Ae+`f%Pr`q_8yOke9(&sSl?XucLr45p|E2ye%An&VBxL2Z0rA(@ zU;(T}KT5F>O5J+Hz6Aj)(7`WNiDHog^%$#iDn<=YxBTaUtDr1}tu!e86*>7bPDcF@YCO=X1L*O$(Y%CClv0Iz4?V z2a(fN8%gLm*<)S}5P;y;xbLZ=A6wX?`AEYOUUZaHw=8*o4MdxNs++wwSBqw2neEHZ zqsi5==C`C*fRZjbIRaWan-v;8CcBjf_}=7+#CU049S`HuZC}?ogL*+>l0V6;xp|hqZ1JCm~;3 z&5zvX!zWFNrBNh+nyxbRk-Vx%gUF;`C(EHRhx+Y;k6WNiH@-^@*GT$cv20>uF;l== z68g5Nw36rWZo-$BkOk#jt&Szt!;jU;r)G*LL-daH1Gw+BPr;?`WAa{jPyR%tuQ-iW ziOmitVbXm3&4+3<;Ul!(q)rp`EK&}Vb~BdgTIOQE_Hjo2CP`<|A`a+bBmjngojVgF zaYY;^Mfn=XC%;?m3b zk$Kjh`BpR{s&AvZ!U&c5TYr9}a=M`$0UR#nJP1?Bu9WSAmAGsWMmghVQ;Bo*OkI;q z^vo%UNC#U2g1L@cs<^#i^yG%$4Kv_|efl{M1Vm1m8&WSGzm+#n;e zjFg7T%fX=naosI%;m|2TpVo6a9dS2ns0r!y(>mq2M6#^kEx(eaVYuS)bK~l?B7OX|@OvkWnCsR*fbng>H?G zEBgz93Eq=?fixO-(W%<=%%mp@K8pRPq8{zXcMtZ?E-MGynX^@QvmF5qPGi}NeSKQj z7I3I7IKo*EewCi-_S)&Hmmp}{-~4V6r{h}J)I)%Y#ZgIV&2Pf@HoiDJaxhE_!pFVo z-WzZ)B^mQXVY|vyg|}(*V@FGMO}#ELpXZM#qzoanCyrXZaig?YLt^(|TZ@lCx5%+7 zoUi+*9ltu;@d;YeZ}vDg1rg=}2}i#7#R77guISD0S1)dwo5{s1igALvVb8nMlLXH# zIPrk?gFls-NyP_WEIobxiDHmrRmWKiz!J`aM8K0kY~hG94Kl3GPv6l&`=~VUy@e6d zjl+CZ&a)VKTkv;ua0j_PD2ZPI$}UHtAtY{R9&n^4d0l;(laN6;_X+_Yr zB@S6L+}Rnoq0x9hYm6n8lP~^rF4Dt$4(+~st4(`xamrx!8i{Cf{%tIIXINI0>Jc=~ z>*VVTeqq#nS|A)y+EQS>IR{Gez$`h7xXd+1C2IRi0Ip@24+0CqwKhb$YUT=gkhX3|%*NPWA6p7i`<#x$&>cZ7BCH(K9#cv1*KF)?Ch;!SU3~^54u?vPHl*IMg zD+JO8hE09pvMMTm8`W{)sgW%Q?f$=@#cas~2I8yBleO0U8lT*J9_%_Sb-9>gdBf zQ)34sJ+HvF`x7y8QWPL%jv!oYk*{zQZDeX(>mqr$Je{iXUH&A;I$^(dqms&fwfRhv z2#9pRma;ZBUfLWms}VsIp7z#k->j*f+(E!@xM#|lA;)r0*^{{LzenLqVewI7f` z!dQTimi=ZDpbMr0caRtM*k7I`ge8K|CysP<8H>-%{P*g^PJCH^`7r@B$5#s;zn2et zc^$P2Wjk=TWP{@gLwT!SgQL^=RQbj}Zt}Z*xL;cCp?cnnSw7*7Kk=_lhOw@0pJs^dg|9{?(GXqv> zsBZT*#F3t!`EsV3=`!ab4+)2yo}1r<6a9CP8c);p&UC7lbV`-&GXVP3|1DiQgmNns z{v>i@W&sOO`}D~Xy_|y>{3Q3q(x8FyQ!ilA6;1@?%ASU}Ir&L}v;R5qfu~hFGqrnh4rw8rFFHBk- zAE7FSxuK{%k?M|XE`VF~L=~7nD3c#;Y7o9Mah?6QAYeC2Bl9J7rp9AiXz0bM#MnF2 zy*Il7E`cf}I?E|#G++Q&6CtO^!pFqw>5PmYPKv67w@-5BQm+=Bs_R|E(ngF@g^s^R z*&AX&@Immy&69Oz=0HKZ*c59T6mm~Q0yCXU4S`qX=8V7pyoPqUCthZ`1sgwX$0#!2 z6`zc4d{v|-s!E7vAs)?ADlBThXC#RXf=)H0TgEL*YQmKv8B0q!?+-)EM@0gAtrMO^ z9^J;411vd1N3iK=dAUu?FC%Z_#r7L9m-SSJP_@fED7ycG@4u)>hud|@U|8TFaxCcl z8_KH2fHUeB@k?m<{ic)o!*#9AP_vj=$9YY{>Sc67KNZn4stE`0kvkY+^32TjYVx4A z4I2(tr#C})Ex9WE1XkhXcpTGP9lXBr;Q0%W>$BO}I*Cf^i~9TtO*r}@a12N0b?}N8 z{Yz&cZD9jPBynYXxFTd;G zetljO+_q2h@b=u0x5{8*dRBpxapAMf2d%kj+>KvzGI$N9itY1~+!A7$>c;UNENn`I z>})wB{B-tOgSWm;-c~Q5; zyaB(uo};w~x6FL+uj1q5RbOS%gQJXX`x{)wstkUBRc2ctr)oU#8ML%*OJH2lCX!YT=ts>C79%q9-z>)u)Xw*5^Q-TJRhpJ+6p zX@37psm#frR?V^o@0;HvA1Q+|c^s31YNlrFs8gA$TYz#Snyu3I)l>HpN+dF_Ci1s! z)@mX=C4iZ-)J4C^RW#F`6M>+TIYqIjTsY-fS=e8dyE$?h4|N9{5@7*^QbeJ@rc4W< z@;dN8VVqe^FM?lXB)g9`QNQ!*5q|NE=lRwm7ariHHnP6+ygQFoA}A>lM*4Y1=z6xs zM-a0J63Z&Fe4Qpqqm&{agc11hS(H(s+d_49ogz&L&8A~@IUuT++E*|wnb8?6hYQj9 z*@ToONG4=Og;VBNAB(=^n+$SUDjaybgGi|~|&9ixZx6J(=+Rs^v|3#v7iy{n6xS zU&dw}5!r~Bu2#RT=ZK88TCPikb{h@5GyW(LX<*AC_s?`5mrB7pzY;;AJ-ru@n`s*YtYj^e*s-~65NJT05SYflC$GA+{F-rzFH7V^#mm7BlaiNXz$5j5~ zxNF&_k9!~FOR8iq1IQ>f?8r0j#(dK#tBheJp37UAjs6VujbQi=%hPRm9pcFe1MzK! z@x32-a>D(=FGvJF;|b0W_YH~)Nqb?aY5a&6d5hCeBV*7o_0o?jF6S&VW)TBha$P1j zy9oj*ER2W(J4~+LxXGcx0{)haVJhk0h5WoHLX$v!p)y@qj+v!u~ z#-BME_8;TCqF0R@gb)HUA;KR46Jmj@b*b0L*=Ko)_yv4(-l`j#Hg_K(5cUGW-;41! z*kQD|amlgjnJRx?2eK1EP*(4bhtmPg^yh2j@{e#ofPgQrob*^z=nRj9hbf0??;Kpn zJc{eLh}rijg>-uF5<8mx-Nr1cI4A|?wd4-qrHgW^(0V_Oxz$irFK#-IuO<`aG0oep zPTo*L#n%RFejc>h*pDR3>X>z3jE>jTZ8T49Gjv=x*(thavC906aLTkB&M`a2Ms-?D z*9UUDRLoPwF**#WchtFdmxC{gm>c>q~+5ZLGC-)W&X&$6dew zzH#FaMxnfa#GR*^txzV+Be;GvZHY8<-9HrUXSrX}$ye*pT`fi#9CvFcLWkV^W=*T-`pta}>}m8eIJ<0|mH^ngz9Vb@y*0 zqOzG^&gqSO8UMn21ti8aCse%OLa9|_+$W~vk%aLZt*w5$*IEAg4PKX?)Y8b@eZwnO zKqR$vH;^?cifTPpvaMx@00}}(|2Zl0fSf@yus@sX-?fVF36qcY zNSEgSO7lx5TjX1t$xvKW@OvBTIL>Y!;}}y3oYZ$BLwPhXxQBc-?`OrqK^_H}QJ4OK z&65`YYttnz-yo+zM+JZDm*$=f+bgtYgd3Fw7AABG*qu#jW_0)vfF++foNOk#;aX>a zf`}CxUK-O*af24e1`?sEKPg>(^^u9m%rqaQ&`R3(Lfc_<3cB1>?$U|ALB7Wo17;A( zyKw4^XR0Abvsy6nws9h?5KMfr&1<~}ktan+)bwRxRq3bZL}ELa=WMtwkc)dk9m=>8 z=sOS7n*_v zMLACy)Y}lmDRHMx_@mQ{Wtw{VAXg?q1NomvTkW5;lJ#Ksp=84vmbT5ko9I8$sG#~X z-VE1Y9TEx1op!-~y+U6dKFZap*?fY@fzcUksEp5UKNAzP`sn(}5te#!D_OA$C>81u zhk)c{;Hb&oSdCXs`@^9oX2r#xe^FdkE%*^J%+3;=pERuBv)i~>Zzvb%WbYrixs-$k zYNO&3?@cWC3uhlLHwnPjy;eyGILM1?3*!&);yKA}C5b4BR%G^j=VJbTyoRR~DP4N- z(X7;SD?Rr0!^QTwt^1Z-9wO$6t?S!dw+r%;=}&0Iwc*C$GIYSzP1R$QX|@6@wEx>j zA=1iY7T)LKztPKw6QbISD!uux#=Fh?e|eVn?}k)_qQSH`gdcUdtPEE^EHF!6KYOFP zTVhqSGe0XV>DgPHmNSz%uxFm0FI<3s^RbxGj;{E|nG-LBdbR%T`SM07A^Efjac6Fw zr14vxlk)`gz!m=&F^a6cRud%HQw^>+dmC-(0mC)tNAFVLy{r%CEzhvg-_^cpa^klK z|LD5%Svjnc?^pY?qrqI)N{r>ZmOw&H&h~!elW_b{&-H(Eg$`4b)s_90k90WLp#1?d{>q z#hEmdW_xKUVQp{nkNHqt86_o6u7)v5_Jw(DI3)fXS+!^08KD9TFl_X8y`leryp4)+ zL5Y};b2HsWyBqfhR-PTqj{iDAh1R_F?dsiFbwInUu$* zz`T4c-tkRRjfjs_R{06du^wA9dIBnAU(sMT_R6fn_rtRd*G8s}y@$;kf3hL1ZrV6b z_Ds8xU4xEh=Wbrlml|2kw&xUI2-e~B#|dGN6iY9?GvO_NrxpYt6$c#S^iX*es&21f;qVP;w_JLvpb z2QILXUB&Y}XSr>E3&EjA*8Lyj;IQy9>tC{n>cUNF5RzC)>ExY9LdV*qT%h(r1CPf2 zTBa*MUQ{kkNdEBfspn|R&Y+>4d0`>L1x;SjyM`wjl)J$XYm18e(R0Evlp{_=)+p7* zc=lA2lP2FlY9I>sZ~i~qi{`XzZ|Aex4>CKE%Cd?M$mHfM7dG9cfMuf3wAqx^PPid$ znX{Fbe>#klzPO&@!L_=FDNbLiX4Y@!NJ_5WqCfVbL!92P`Iz zF8vu8d@ed+Eu}UU-(yuzraR&i9r^oMSornXVTR(q z*SfMyi8qK-fcVe7T;P;nPKR=VNc-H6PlZPW)&_=t321NYs%o)}vXu2t@uAJnRrpqz z%PVud&gH2!jKtxqWdBz0j{`gQSMH4p%jhEILC}$lGo9~hM%Sgh)GM9GE+24P88N9y z;)QF^gYQ4ARJZ=?`5d{&$)3W{oQ}!ne4lOpQ(n8?gCCVN^H)=F?BD3d=Yq#%U@`zgxc>j2l0JFL)M}3oNbt+4?qITcK1@5z%wqpl4)EMY@M!}D;P|5*l_dzA#ibf<6!Ie|0j@0`elG2 O0F>p`<*H;X!u}5j!U327 diff --git a/experiments/openebs/icons/openebs-pool-container-failure.png b/experiments/openebs/icons/openebs-pool-container-failure.png deleted file mode 100644 index db1d3e7b7c0fe8312c323ed3cdfcaedc292d5c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12575 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 O0F>p`<*H;X!u}5j!U327 diff --git a/experiments/openebs/icons/openebs-pool-disk-loss.png b/experiments/openebs/icons/openebs-pool-disk-loss.png deleted file mode 100644 index db1d3e7b7c0fe8312c323ed3cdfcaedc292d5c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12575 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 O0F>p`<*H;X!u}5j!U327 diff --git a/experiments/openebs/icons/openebs-pool-network-delay.png b/experiments/openebs/icons/openebs-pool-network-delay.png deleted file mode 100644 index db1d3e7b7c0fe8312c323ed3cdfcaedc292d5c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12575 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 O0F>p`<*H;X!u}5j!U327 diff --git a/experiments/openebs/icons/openebs-pool-network-loss.png b/experiments/openebs/icons/openebs-pool-network-loss.png deleted file mode 100644 index db1d3e7b7c0fe8312c323ed3cdfcaedc292d5c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12575 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 O0F>p`<*H;X!u}5j!U327 diff --git a/experiments/openebs/icons/openebs-pool-pod-failure.png b/experiments/openebs/icons/openebs-pool-pod-failure.png deleted file mode 100644 index fdb3cd926062b9228fecd14846fb2381f23fd726..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1421 zcmV;81#ly*yK3u$C`VG|Qm14N36O==nw>>e<}n&_osy>Re^iF)C{dhlW}m5U}^ z6zR!e0p+mhL1P0Z(we5GAsAY_s}gpp!qOI6(onu{c4wKL&hF04V|cIa_eB@9w0ZyGwL-zI}IAKrsMrdt)3PM}zz$q&< zk8TneF87a&jnBZ3Km7*_3-_TCfyQds8*PC<#%JNm#GKda9IZSLX&em$;#S!@(`J;Di;PN4UD&S<0;I#SP$uAbv}yzPs+YdaRZ_$_hMp z{suT@Z%+#>%vY`+t1XWzV1!_Sg0MhASfC&*P!JX<2n!U%7lAc+GVZTfa~#k4O4H2tHj0dtTmHvA?;R^3ZTRa0wXCa1arM1q$L>;J`Q6^yDWi zArCHrg0MhASfC&*P!JX@C-fMyO8>OzUcVSuQ`DDj{&- ziz|>AOu70DNsPS}0oh1z0|&pJa4j$Qxk)&Q;${E$ax4v|Zm&a~` zETr8BPG4U>VaSk3@(hVYIeA3#>MY1YS_w=}&e$Hemc&Z(2y;{LxKXn!XT3Akz-FB} zHIOE-d6WHeBGxvqRA4a^jI0M)ND~-}G%h=47clGsihm_-buy5C8`JylGoFT}dSXH8@(4|p)hqRp8LXPd zD0C?(*c|+@9XdLdnC3A`0%_IWeV_;=lG;Y<>KVNi3KVqPLy^0yrw!`sm3b0zmINNc zH~qkPp-;=NT29rN*N%3_l%{E0tMG+ZqkRV$x5Vj1kHWMbGH#9mhm0M&KSt08If-Fl%;-&BzP1)9Im(t7No!1pq0CCZtDGsw{Yi|UF`dZA biy|HX?#@nMLaG`l00000NkvXXu0mjf4Ah7| diff --git a/experiments/openebs/icons/openebs-target-container-failure.png b/experiments/openebs/icons/openebs-target-container-failure.png deleted file mode 100644 index bdd874d4199c763a908c4b45d236c676f056f8fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3152 zcmV-W46pNvP)(HiT?K2phy~Vj4EFAPhr6rXVBKAf1tt&cq2Y3{FR=w6*r{1MRd=JeWTCWIO6Z zAFOpMh@I9!!I1}0XHe4t2c%M|I)pza0Yi2JCTq+;iNy0eyC?bX*>msSy>~a!;r^V< zZtgw1_nzPR{+;i9XAO}7ooqN2^X`5&uJw_k?&kKmmCsG>GFl!O^4qOy9JkL%OW#fkkSj{X5r-3Lp#Wa79t1W}0I#?+Bvg2u z0(eFd1@MJ{K%WQ*^oe5n8ldyi2qk()si*e~O2kKLWb_6lKO3{OiOeacNTirb!$nj- zzl@?)Vewi@(~W6!A|UPk4+p6I+#rn#!n`0X$Xv9roR%-Gm^Lz}l)#aZ8+7u$B%L^w z%t{)_fwalbiMH9=LqZ$Z&Xr_NC8mtPlmAW9+sFEhM8xV!sU{kx`9g}S#cSmpvt@}3 zHSbT3(Ip|hJ&953x;&E6W~zxSIDzQ!p(6?Ex@7GvNLzeIIV}?%Rg#t~U?)2-4O5#K z7?aI>a9b@^Mha`@3re6#>OdSM1dbq|c>jZe3?eZwxYu3ZjZmRbFapt;w&Q&hf5WD& zTO&HNGJ9wG1qq|VUXC#0tE)<=v^2Y5txSMN z?z%iI)iIvX8o1&C&7zrHue2iXt{sJ{^ zuBWP++`Bs+1ZLeLSC3nuHEjt#-*KE)q z*p56%+#w+$y5R>PWsp=D|8RJQJeN#fm+G7lfwl=wp4aU&d4(;3AN{Y79{a<)6Muui z#vjzuI&qi)hw=K+YvlBxhy&q~+s_YK&V#ho!qCS=7?aJpK+VsI&!0U%m@xqG=(wlu zd36#ue1Bfv9E+n3d}Q-csm>f5x5Q}2uNGU*Ayj$x`O6cw%S0a9yzpYTrPGj{=B6so z9@*qD?7|mLBE0iYchu!2#Ibd2kic2xGc(S&z1B^G8mS;gktf3xjl8%BdO@(oGm199 z`FYG&I0Kc%ckuh+9(W$ylLLbqOHcP;4xkD7fJFj9+PlXR)OMtsh6cxMKeYSLt0rtB zqyUZs!02y(pw{ATb;-lEt(&Ta0|*NmUr<52T31L9{nux@CLS8<$PKxPJe^<#IF`2KpJw&Q zkRsf}I4Ta07q->^qSf~@n zt3oo*q(d4z^4t=q!_L;}BraMwi?+7ZSla9pgR1W5*DE_Z5l$qeZspo2t=m{jy*p`}O0JME}?-wxf8oU|@;#*R_rGl*uW&UJ85H)gygXBKp4-z!z2`rr{!da;#$!gV+NMtG z5Qqa%$dMPZhI@=+v=Z zDV6V?xJK9du2boploaVIq?3mja8q-&>_l;K$njZ_?ppqx3K|<5r|v5$Pb-NKALAt8 zJ;)wS=Ms_4#%C39?qbKVd><13VQT0Fo~>uQ2xJvj-8Gkf@yDg~#J+oEu>JAbBz2!j z(7CrdDN%_w zs;at-S{_=f{BSsVd!`E*4T1P7e&EloO0W z;Blc&zFT+-#jyaSP@~0jm}bo^E2f$yx6+#XYH4oC4LbaCC;jd559puIoTqt<=27`A zWs>xJ)@G82ApOXJP8pNp0N}td12Rn`L1KG)TBk_js*FKW#3F;uufb6%JD3nzATM^% zlLU6K(TZt{Ih~g$udV&wJZcghe{x?VJt9;*MB^glNsSpguB&Zt&j{`Q6|)%yI1Y6!k+70f!<>pf^>YhP1SXSX>;Wf}ntb&P z(=HB9Y|Nl4u#ryWDWDBhoP*mlc`s&SO10HJJ@LSw-3z=C$mW|IoTRWeJ>qs#Cl@&K zQWv=eS8oMwi}?TpQ9j5cR-%-2nsSqF;H$JF>=1fXYO2j2+&CA$I6!V;B9MQlPDWWe zF)N>A^h?V%uPcHIL2Zmr_##lBmxjZWvk2X$I7tYwWV!ozFt%WJ#yNdClcWE$>tqM7 zwokzmfr>D~8$N zi9qfkbg#yZvK~$-bcuLOH|8Ma*6QplfM{b1sCha}CrO1b(j&8H?_r@!Br=5ra*wCS zPb#dzsO#YbpE{k<=BBe|7t`*)ta2m~*U(0XN*VyT2PdhM5vxn4Rqbbx7kDC&$9{Su z6pP*y*R+0+Tw0-@}YZ-Y((~^OLUewgZk{(`@seoq!QD>rX z_JTDb2?F_ghAw4#3LcV(bz?p0sY6z{rrUDKvrFkasWvB<_a#?&UYb{G4DV;k!(oY2 zE!^N?7cH1&31u47xj;oOItyuqH2PgsGG)CvxN74beirwAmACP=4cNWy+pIQd|0_Kc zbuez1A>G2RP*Y!vhU8%|Ih@wAbA_*|9PA2rCQvVq=BB7ciqNtCWM(NYR?N_mn2S&X zZLo?4hmnmuRkg*TOP}9bYTpHx`bvMca*AxV%Q65L!8uCVlw(nQL|_8!vM2b={#W9T zRS-JCex(n{ONA<5V>PKV?AQK-@q(4z!i;dI0Ik^mz-<{*I{uudwPG*G3xT?nnaDBO zI=@>I&I+1sy>whQn#ck*eH6 z3}@P`gU>@Pbv4f@uv|aSRk6Dp&e#*^11ah|C6fWR!WhEiyNSG=5Q#Z4Nq#a4gLmqqd$GPNx0bP->e)Z;FNY`d$I!-%Dm2e4`Au-z6e z?4iT@M#@%>8q0#GLh3lCe8;+5&ztLpYqePi#Q9w;&jr)C<$qXs>d&S6`QP$CJMY_P z-QsKU!#f}o$%D@HawnwIWHVE{HN#XRR6LpvXQms$FBkblP#fbD0f9ad5a<&iu!914 z#c2?DngV!5CkT9t0(ixNQ2JNP@guasZ%5~bj!-Ccdy)7Dzef8L3Xm&W@sISv_&sFt z@)QMdi$AHKgtu&s6zbe6ULK_YPIyX?w@dwD`kxW(q!ft_6o5mTy0o@Vz;<(Pn#dMP q5xIhHPIOQz%zINDd(!^Gg0BGOA}n&gNinwo0000P)BJfQgBTW*Yt`TSN9ESrpaDHL?WRX~Qs%7n)#vc!9+Gora@i%@A@)kac}1WKHf9 z5^paJy%6yV5hXiD8turvIOT!a7rG!gVIO(o7Jgs~NaA&3GHeCstRoRmTLRuk^(Kl+ z86jKpQP%r9A(TrUS&Ea$ZxAYFO)UZxx+5>%;>N8}T)#PrG(E0_rp8*VSk{2$KQy4Z zsn%}#N`pdp0s$cTAcNrtuiz%(#q$waTvu{VUgwzRG*BLRmxN;x-C}vG zeJLYZ*apeMvy2F+NPs#Kce@aa2z4W+2vinkxTU*8$t3mkH7cR0@nbU!+qG~Ofy%;H zuBP$owL4juvu~J0jC@@s9(dr$FlK{I|AtGxZo6LN7t*uTiP#}oSdqYZ;IC^#@Pfc) z;kl-&Lijo__mjDa2&jl85k*8mMMOYFL_kHfs{_YgzC~Ye68(J-@hp`wuSH@F2$RLv z#}NA5S(86kXeHpKvk%dIZ~)_D`E6NpaMZM`m!BZMVJX_zMW74Xgz%Z3VI1ClD^EQ3 zyw6&uJ#L)5^W?!hrqH^eg@8{VXV7zEaK`mjKZWr9%1>up?>;nOhPn=DAz)AU;Eb>> z#d!8UsRLRFIDD`C?x4T#5p=-SBy#Tjb386%DZS&*FU>JIRK9@EQq!M-oIK_1o|t;_ z1}%%`!A)HCKo*aGN$~oP6SJZJ>?5ph`zkMy6vW~CwS?x8eF8Uey^P_%u;p1!VS%ig zFBkSQ&deLPEu-;f-kfl3;nd@fzsh?*H__rAxVo*l0G5cWeqNM!JrZk#4rn1@dpv># z3yTK>i`dsQ{h`r<`dYJ~)&VU9Wbr!w`_}RN_y%g}TINFsv}xryjJduuYr-N$GJD?o z|G&d8ZC^kawCaW1<6*kjg{UhTGHXMtyx}Cn*?8?AVbs^_wf>>qY7B?w#%--pS>|0JJD$xKdAtX94elEX Skvo&>D#YzlOno>w@yA4gG@K6KYV)_D>J~e%-N&D0X>4Q&AV}0qr zv}px=F?P}F1Jow9Y*QNP9||E2D0X)xxI3%Dpscfs;Q8*%SH8^zTVgm>qlpL*MO~IJ( zWy#Spx+F(i$O&u{Ie~4WB?4=;OLDcL)iGrz@Lctx{C3Z2d3JwAt`;0U{#G<5j4dlN z5r`W+@#Gn)p1&x^j=z0XkO=ag+dmzR31iDjVkQFr@XTa%BMXpt^5qM%P%$+<8iOfw2 z96fZ_^LxPdZ`~rLV*FP@_Q6AErBeY*(t-rWf-x1HG1X=-MPqMssu9Qcp{qm;9EFCZ`)c{+g`~6gmy1PT28%?G((9DO@%MLJR=%Z0w;)VI9Cmv zAHvL$-7_$tD^-B7g#nF35VMZPf-z`qS%pU_8?lHHh~VL>3To1(Ypgyk4Y05gdcLEx zTNvOB!UBEdeD9b-4#?(qni+R#o!|>;c#)*P%8;y?Zhczxq5MH&=xMeC49+bK;GUX! z!j##fPMp%GZTHX=Pc!2ffv8ZpxO?@Dv0s|3%u0n)gLP};W{zO=BF&-8z1PP&rs2Zd z7v=S-T6ExjGpNxsV4mF9P>{IujwRmb6UzM9lMH0a#AphHid=+J9G(WE&9<%m5(0=i zuy0%r9yk*b=k;UdO)|9UQ?mBnvh?w!eN;wvzY-%a zy6364Wbe;U$|FDcryTs#8TA_Kbj(d)cd+=rADB)t9_HEKk2R#By5 zgh${c`9Dp8no3GM1q8CtW&>xA)h!w=rB zk_hsKcibMenQ4$V(+D~YO)R4-|$rRX+ z05egZ7ms|FAdncLAVKon>ntz(=GbiDK&j}fi^ZX#mPFu{1k#can8Xly7VxD^Afq-r zKgEoW-5WFQt570IPXhdtfGghQgpj~irfrS~Z!%ReIQzCABpBd16k>~aaB;r1r zNuqDsW`NLwn2XTv40Y44RLJ=wc0Fm+z>f=Bgbr;M)%Jw152Qjs zuzG;hC5;M!2e$Ob+CK5*Yx7pb%!+3ZOnaY;jXlvCj-^a-EP@1TD#Vis6&QF=AcDqx z)!?$?0oogQzX>vFH;eK*Gb3??P@%T{UjuxEHHrC-wprn(I7xpTq-_>mmtej?)4y0p zZU=L8fhZl?g^EIEIj~mzaRV+TWEHS3R$m$+G_^5pQ({u2?NsuB5P292lNXu>GEzAy zE!=lnq-_=Ods>9PFXcY(R0QJ5Ved0X+NYkGYUyumI|cTSgLu&^^p{u~Qin;HCi^{v z`^xmfRbinJKeuti&52Q$ktxq`BP|e`b1oEc0Rpb7S=42;^t~~NSlAQONvTRZfF)^l z&os!tc&ANt?ADHjf}FrMkrUV^ast}~2pp3ft>Op>JR&(-#W)E3tK?`E`wES3EytJ8 z=HDHi4P%8u;kGXG55A4|JCY+ScHy5W3gi2b&C6qwBQ1VxzY^Z7M;LS7WnLbZ97%Z0 zkoSH2LHo}Lc1oSZLCN7Fa&--BokJnix* diff --git a/experiments/openebs/icons/openebs-target-pod-failure.png b/experiments/openebs/icons/openebs-target-pod-failure.png deleted file mode 100644 index 344632ab68fa949bfd9185624fc7d291cbc38162..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2661 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 T>H#hb00000NkvXXu0mjf4;Js& diff --git a/experiments/openebs/icons/openebs.png b/experiments/openebs/icons/openebs.png deleted file mode 100644 index db1d3e7b7c0fe8312c323ed3cdfcaedc292d5c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12575 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 O0F>p`<*H;X!u}5j!U327 diff --git a/experiments/openebs/openebs-control-plane-chaos/engine.yaml b/experiments/openebs/openebs-control-plane-chaos/engine.yaml deleted file mode 100644 index 308982d73..000000000 --- a/experiments/openebs/openebs-control-plane-chaos/engine.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: control-plane-chaos - namespace: openebs -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'openebs' - applabel: 'name=maya-apiserver' - appkind: 'deployment' - chaosServiceAccount: control-plane-sa - experiments: - - name: openebs-control-plane-chaos - spec: - components: - env: - - name: FORCE - value: '' \ No newline at end of file diff --git a/experiments/openebs/openebs-control-plane-chaos/experiment.yaml b/experiments/openebs/openebs-control-plane-chaos/experiment.yaml deleted file mode 100644 index 805f39b5c..000000000 --- a/experiments/openebs/openebs-control-plane-chaos/experiment.yaml +++ /dev/null @@ -1,79 +0,0 @@ ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill all openebs control plane pod and check if gets scheduled again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-control-plane-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-control-plane-chaos -spec: - definition: - scope: Namespaced - permissions: - - apiGroups: - - "" - - "litmuschaos.io" - - "batch" - - "apps" - resources: - - "pods" - - "pods/log" - - "deployments" - - "events" - - "jobs" - - "configmaps" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-control-plane-chaos/openebs_control_plane_chaos_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - ## Period to wait before injection of chaos - - name: RAMP_TIME - value: '' - - - name: FORCE - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus, powerfulseal - - name: LIB - value: 'litmus' - - labels: - name: openebs-control-plane-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/openebs/openebs-control-plane-chaos/openebs-control-plane-chaos.chartserviceversion.yaml b/experiments/openebs/openebs-control-plane-chaos/openebs-control-plane-chaos.chartserviceversion.yaml deleted file mode 100644 index 418f48184..000000000 --- a/experiments/openebs/openebs-control-plane-chaos/openebs-control-plane-chaos.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: openebs-control-plane-chaos - version: 0.1.4 - annotations: - categories: OpenEBS - vendor: CNCF - support: https://slack.openebs.io/ -spec: - displayName: openebs-control-plane-chaos - categoryDescription: > - Kill all openebs control plane pods and check if gets scheduled again. - keywords: - - Kubernetes - - K8S - - OpenEBS - platforms: - - GKE - - EKS - maturity: alpha - chaosType: infra - maintainers: - - name: Raj Babu Das - email: raj.das@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-control-plane-chaos - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-control-plane-chaos/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-control-plane-chaos/experiment.yaml \ No newline at end of file diff --git a/experiments/openebs/openebs-control-plane-chaos/rbac.yaml b/experiments/openebs/openebs-control-plane-chaos/rbac.yaml deleted file mode 100644 index 6663ee059..000000000 --- a/experiments/openebs/openebs-control-plane-chaos/rbac.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: control-plane-sa - namespace: openebs - labels: - name: control-plane-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: control-plane-sa - namespace: openebs - labels: - name: control-plane-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","litmuschaos.io","batch","apps"] - resources: ["pods","deployments","pods/log","events","jobs","configmaps","chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: control-plane-sa - namespace: openebs - labels: - name: control-plane-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: control-plane-sa -subjects: -- kind: ServiceAccount - name: control-plane-sa - namespace: openebs diff --git a/experiments/openebs/openebs-nfs-provisioner-kill/engine.yaml b/experiments/openebs/openebs-nfs-provisioner-kill/engine.yaml deleted file mode 100644 index 012e6f926..000000000 --- a/experiments/openebs/openebs-nfs-provisioner-kill/engine.yaml +++ /dev/null @@ -1,40 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: nfs-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'minio' - applabel: 'app=minio' - appkind: 'deployment' - chaosServiceAccount: nfs-chaos-sa - experiments: - - name: openebs-nfs-provisioner-kill - spec: - components: - env: - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - - name: NFS_PROVISIONER_NAMESPACE - value: 'app-nfs-ns' - - - name: NFS_PROVISIONER_LABEL - value: 'app=nfs' - - - name: NFS_PVC - value: 'nfs-pvc-claim' - - - name: NFS_SVC - value: 'nfs-provisioner' - - - name: TARGET_CONTAINER - value: 'nfs-provisioner' - - # EXTERNAL_APP_CHECK can be true/false - - name: EXTERNAL_APP_CHECK - value: 'true' \ No newline at end of file diff --git a/experiments/openebs/openebs-nfs-provisioner-kill/experiment.yaml b/experiments/openebs/openebs-nfs-provisioner-kill/experiment.yaml deleted file mode 100644 index 99b2afb1a..000000000 --- a/experiments/openebs/openebs-nfs-provisioner-kill/experiment.yaml +++ /dev/null @@ -1,100 +0,0 @@ ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the OpenEBS NFS provisioner container and check if pods consuming the NFS PVs continue to be available and volumes are writable (RWM mode) -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-nfs-provisioner-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-nfs-provisioner-kill -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "litmuschaos.io" - - "batch" - - "extensions" - - "storage.k8s.io" - resources: - - "pods" - - "pods/exec" - - "pods/log" - - "deployments" - - "events" - - "jobs" - - "configmaps" - - "services" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosexperiments" - - "chaosresults" - - "chaosengines" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-nfs-provisioner-kill/openebs_nfs_provisioner_kill_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - # NFS default container - - name: TARGET_CONTAINER - value: 'nfs-provisioner' - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - # It supports pumba and containerd - - name: LIB - value: 'pumba' - - # LIB_IMAGE can be - gaiaadm/pumba:0.6.5, gprasath/crictl:ci - # For pumba image use: gaiaadm/pumba:0.6.5 - # For containerd image use: gprasath/crictl:ci - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - labels: - name: openebs-nfs-provisioner-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - configmaps: - - name: openebs-nfs-provisioner-kill - mountPath: /mnt/ diff --git a/experiments/openebs/openebs-nfs-provisioner-kill/openebs-nfs-provisioner-kill.chartserviceversion.yaml b/experiments/openebs/openebs-nfs-provisioner-kill/openebs-nfs-provisioner-kill.chartserviceversion.yaml deleted file mode 100644 index db7b923e2..000000000 --- a/experiments/openebs/openebs-nfs-provisioner-kill/openebs-nfs-provisioner-kill.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: openebs-nfs-provisioner-kill - version: 0.1.3 - annotations: - categories: OpenEBS - vendor: CNCF - support: https://slack.openebs.io/ -spec: - displayName: openebs-nfs-kill-chaos - categoryDescription: > - Kill the OpenEBS NFS provisioner container and check if pods consuming the NFS PVs continue to be available and volumes are writable (RWM mode) - keywords: - - Kubernetes - - K8S - - OpenEBS - - NFS - platforms: - - GKE - maturity: alpha - chaosType: infra - maintainers: - - name: Raj Babu Das - email: raj.das@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-nfs-provisioner-kill - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-nfs-provisioner-kill/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-nfs-provisioner-kill/experiment.yaml \ No newline at end of file diff --git a/experiments/openebs/openebs-nfs-provisioner-kill/rbac.yaml b/experiments/openebs/openebs-nfs-provisioner-kill/rbac.yaml deleted file mode 100644 index e8710efb7..000000000 --- a/experiments/openebs/openebs-nfs-provisioner-kill/rbac.yaml +++ /dev/null @@ -1,37 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: nfs-chaos-sa - namespace: default - labels: - name: nfs-chaos-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: nfs-chaos-sa - labels: - name: nfs-chaos-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io"] - resources: ["pods","pods/exec","pods/log", "deployments","events","jobs","configmaps","services","persistentvolumeclaims","storageclasses","persistentvolumes","chaosexperiments","chaosresults","chaosengines"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: nfs-chaos-sa - labels: - name: nfs-chaos-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: nfs-chaos-sa -subjects: -- kind: ServiceAccount - name: nfs-chaos-sa - namespace: default diff --git a/experiments/openebs/openebs-pool-container-failure/engine.yaml b/experiments/openebs/openebs-pool-container-failure/engine.yaml deleted file mode 100644 index 7fe9a33c7..000000000 --- a/experiments/openebs/openebs-pool-container-failure/engine.yaml +++ /dev/null @@ -1,29 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: pool-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pool-container-failure-sa - experiments: - - name: openebs-pool-container-failure - spec: - components: - env: - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - - name: APP_PVC - value: 'demo-nginx-claim' - - - name: DEPLOY_TYPE - value: 'deployment' \ No newline at end of file diff --git a/experiments/openebs/openebs-pool-container-failure/experiment.yaml b/experiments/openebs/openebs-pool-container-failure/experiment.yaml deleted file mode 100644 index 66f5bf962..000000000 --- a/experiments/openebs/openebs-pool-container-failure/experiment.yaml +++ /dev/null @@ -1,97 +0,0 @@ ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the pool container and check if gets scheduled again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-container-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-container-failure -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "openebs.io" - - "storage.k8s.io" - resources: - - "replicasets" - - "events" - - "jobs" - - "pods" - - "pods/log" - - "pods/exec" - - "configmaps" - - "secrets" - - "persistentvolumeclaims" - - "cstorvolumereplicas" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-container-failure/openebs_pool_container_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NS - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: LIVENESS_APP_LABEL - value: '' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - - name: DATA_PERSISTENCE - value: '' - - - name: CHAOS_ITERATIONS - value: '2' - - labels: - name: openebs-pool-container-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-pool-container-failure - # mountPath: /mnt diff --git a/experiments/openebs/openebs-pool-container-failure/openebs-pool-container-failure.chartserviceversion.yaml b/experiments/openebs/openebs-pool-container-failure/openebs-pool-container-failure.chartserviceversion.yaml deleted file mode 100644 index f8616d37d..000000000 --- a/experiments/openebs/openebs-pool-container-failure/openebs-pool-container-failure.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-11-13T10:28:08Z - name: openebs-pool-container-failure - version: 0.1.13 - annotations: - categories: OpenEBS - vendor: CNCF - support: https://slack.openebs.io/ -spec: - displayName: openebs-pool-container-failure - categoryDescription: > - Kill the pool container and check if gets scheduled again. - keywords: - - Kubernetes - - K8S - - Storage Pool - - OpenEBS - platforms: - - GKE - - EKS - - OpenShift - maturity: alpha - chaosType: infra - maintainers: - - name: shubham chaudhary - email: shubham.chaudhary@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-pool-container-failure - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-pool-container-failure/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-container-failure/experiment.yaml \ No newline at end of file diff --git a/experiments/openebs/openebs-pool-container-failure/rbac.yaml b/experiments/openebs/openebs-pool-container-failure/rbac.yaml deleted file mode 100644 index a8427af01..000000000 --- a/experiments/openebs/openebs-pool-container-failure/rbac.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pool-container-failure-sa - namespace: default - labels: - name: pool-container-failure-sa - app.kubernetes.io/part-of: litmus ---- -# Source: openebs/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pool-container-failure-sa - labels: - name: pool-container-failure-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io","openebs.io"] - resources: ["pods","jobs","events","pods/log","replicasets","pods/exec","configmaps","secrets","persistentvolumeclaims","cstorvolumereplicas","chaosexperiments","chaosresults","chaosengines"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pool-container-failure-sa - labels: - name: pool-container-failure-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pool-container-failure-sa -subjects: -- kind: ServiceAccount - name: pool-container-failure-sa - namespace: default diff --git a/experiments/openebs/openebs-pool-disk-loss/engine.yaml b/experiments/openebs/openebs-pool-disk-loss/engine.yaml deleted file mode 100644 index 39c7ef8dc..000000000 --- a/experiments/openebs/openebs-pool-disk-loss/engine.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: pool-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=busybox - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pool-disk-loss-sa - experiments: - - name: openebs-pool-disk-loss - spec: - components: - env: - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: APP_PVC - value: 'demo-nginx-claim' - - # GKE and AWS supported - - name: CLOUD_PLATFORM - value: 'GKE' - - # Enter the project id for gcp only - - name: PROJECT_ID - value: 'litmus-demo-123' - - # Enter the node name - - name: NODE_NAME - value: 'demo-node-123' - - # Enter the disk name - - name: DISK_NAME - value: 'demo-disk-123 ' - - # Enter the device name - - name: DEVICE_NAME - value: '/dev/sdb' - - # Enter the zone name - - name: ZONE_NAME - value: 'us-central1-a' - \ No newline at end of file diff --git a/experiments/openebs/openebs-pool-disk-loss/experiment.yaml b/experiments/openebs/openebs-pool-disk-loss/experiment.yaml deleted file mode 100644 index 622583e3b..000000000 --- a/experiments/openebs/openebs-pool-disk-loss/experiment.yaml +++ /dev/null @@ -1,111 +0,0 @@ ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - OpenEBS Pool Disk Loss contains chaos to disrupt state of infra resources. Experiments can inject disk loss against openEBS pool. -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-disk-loss -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "litmuschaos.io" - - "batch" - - "extensions" - - "storage.k8s.io" - - "openebs.io" - resources: - - "pods" - - "jobs" - - "pods/log" - - "events" - - "pods/exec" - - "cstorpools" - - "configmaps" - - "secrets" - - "storageclasses" - - "persistentvolumes" - - "persistentvolumeclaims" - - "cstorvolumereplicas" - - "chaosexperiments" - - "chaosresults" - - "chaosengines" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-disk-loss/openebs_pool_disk_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - # GKE and AWS supported - - name: CLOUD_PLATFORM - value: 'GKE' - - - name: PROJECT_ID - value: '' - - - name: NODE_NAME - value: '' - - - name: DISK_NAME - value: '' - - - name: ZONE_NAME - value: '' - - - name: DEVICE_NAME - value: '' - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - labels: - name: openebs-pool-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - - configmaps: - - name: openebs-pool-disk-loss - mountPath: /mnt/ - - secrets: - - name: cloud-secret - mountPath: /tmp/ diff --git a/experiments/openebs/openebs-pool-disk-loss/openebs-pool-disk-loss.chartserviceversion.yaml b/experiments/openebs/openebs-pool-disk-loss/openebs-pool-disk-loss.chartserviceversion.yaml deleted file mode 100644 index 33e310dae..000000000 --- a/experiments/openebs/openebs-pool-disk-loss/openebs-pool-disk-loss.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2020-03-13T10:28:08Z - name: openebs-pool-disk-loss - version: 0.1.3 - annotations: - categories: OpenEBS - vendor: CNCF - support: https://slack.openebs.io/ -spec: - displayName: openebs-pool-disk-loss - categoryDescription: > - OpenEBS Pool Disk Loss contains chaos to disrupt state of infra resources. Experiments can inject disk loss against openEBS pool. - - Causes (forced/graceful) disk loss from the node disk pool. - - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. - keywords: - - Kubernetes - - K8S - - Storage Pool - - OpenEBS - platforms: - - GKE - maturity: alpha - chaosType: infra - maintainers: - - name: Raj Babu Das - email: raj.das@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-pool-disk-loss - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-pool-disk-loss/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-disk-loss/experiment.yaml \ No newline at end of file diff --git a/experiments/openebs/openebs-pool-disk-loss/rbac.yaml b/experiments/openebs/openebs-pool-disk-loss/rbac.yaml deleted file mode 100644 index a7ce98369..000000000 --- a/experiments/openebs/openebs-pool-disk-loss/rbac.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pool-disk-loss-sa - namespace: default - labels: - name: pool-disk-loss-sa - app.kubernetes.io/part-of: litmus ---- -# Source: openebs/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pool-disk-loss-sa - labels: - name: pool-disk-loss-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io","openebs.io"] - resources: ["pods", "pods/log", "jobs", "events", "pods/exec", "cstorpools", "configmaps", "secrets", "storageclasses", "persistentvolumes", "persistentvolumeclaims", "cstorvolumereplicas", "chaosexperiments", "chaosresults", "chaosengines"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pool-disk-loss-sa - labels: - name: pool-disk-loss-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pool-disk-loss-sa -subjects: -- kind: ServiceAccount - name: pool-disk-loss-sa - namespace: default diff --git a/experiments/openebs/openebs-pool-network-delay/engine.yaml b/experiments/openebs/openebs-pool-network-delay/engine.yaml deleted file mode 100644 index 72aec3dc9..000000000 --- a/experiments/openebs/openebs-pool-network-delay/engine.yaml +++ /dev/null @@ -1,25 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: pool-chaos - namespace: default -spec: - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pool-network-delay-sa - experiments: - - name: openebs-pool-network-delay - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: APP_PVC - value: 'demo-nginx-claim' - - # in milliseconds - - name: NETWORK_DELAY - value: '60000' diff --git a/experiments/openebs/openebs-pool-network-delay/experiment.yaml b/experiments/openebs/openebs-pool-network-delay/experiment.yaml deleted file mode 100644 index f37baf4b3..000000000 --- a/experiments/openebs/openebs-pool-network-delay/experiment.yaml +++ /dev/null @@ -1,93 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Network delay to pool pod belonging to a OpenEBS PVC - This experiment is using pumba lib for network chaos -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-network-delay - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-network-delay -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "litmuschaos.io" - - "batch" - - "extensions" - - "storage.k8s.io" - - "openebs.io" - resources: - - "pods" - - "pods/exec" - - "jobs" - - "pods/log" - - "events" - - "configmaps" - - "services" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - - "cstorpools" - - "cstorvolumereplicas" - - "replicasets" - verbs: - - "create" - - "get" - - "list" - - "patch" - - "update" - - "delete" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-network-delay/openebs_pool_network_delay_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - # in milliseconds - - name: NETWORK_DELAY - value: '60000' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-pool-network-delay - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/openebs/openebs-pool-network-delay/openebs-pool-network-delay.chartserviceversion.yaml b/experiments/openebs/openebs-pool-network-delay/openebs-pool-network-delay.chartserviceversion.yaml deleted file mode 100644 index 631b6e3ca..000000000 --- a/experiments/openebs/openebs-pool-network-delay/openebs-pool-network-delay.chartserviceversion.yaml +++ /dev/null @@ -1,44 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: openebs-pool-network-delay - version: 0.1.4 - annotations: - categories: OpenEBS - vendor: CNCF - support: https://slack.openebs.io/ -spec: - displayName: openebs-pool-network-delay - categoryDescription: > - Network delay to pool pod belonging to a OpenEBS PVC - keywords: - - Kubernetes - - K8S - - Storage Pool - - OpenEBS - - Network - platforms: - - GKE - - EKS - maturity: alpha - chaosType: infra - maintainers: - - name: Raj Babu Das - email: raj.das@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-pool-network-delay - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-pool-network-delay/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-delay/experiment.yaml \ No newline at end of file diff --git a/experiments/openebs/openebs-pool-network-delay/rbac.yaml b/experiments/openebs/openebs-pool-network-delay/rbac.yaml deleted file mode 100644 index 8db3c741a..000000000 --- a/experiments/openebs/openebs-pool-network-delay/rbac.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pool-network-delay-sa - namespace: default - labels: - name: pool-network-delay-sa ---- -# Source: openebs/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pool-network-delay-sa - labels: - name: pool-network-delay-sa -rules: -- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io","openebs.io"] - resources: ["pods","pods/exec","pods/log","events","jobs","configmaps","services","persistentvolumeclaims","storageclasses","persistentvolumes","chaosengines","chaosexperiments","chaosresults","cstorpools","cstorvolumereplicas","replicasets"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pool-network-delay-sa - labels: - name: pool-network-delay-sa -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pool-network-delay-sa -subjects: -- kind: ServiceAccount - name: pool-network-delay-sa - namespace: default \ No newline at end of file diff --git a/experiments/openebs/openebs-pool-network-loss/engine.yaml b/experiments/openebs/openebs-pool-network-loss/engine.yaml deleted file mode 100644 index 8843b98cd..000000000 --- a/experiments/openebs/openebs-pool-network-loss/engine.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: pool-chaos - namespace: default -spec: - auxiliaryAppInfo: '' - # It can be active/stop - engineState: 'active' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pool-network-loss-sa - experiments: - - name: openebs-pool-network-loss - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '120' # in seconds - - - name: APP_PVC - value: 'demo-nginx-claim' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' diff --git a/experiments/openebs/openebs-pool-network-loss/experiment.yaml b/experiments/openebs/openebs-pool-network-loss/experiment.yaml deleted file mode 100644 index 6d896dd0d..000000000 --- a/experiments/openebs/openebs-pool-network-loss/experiment.yaml +++ /dev/null @@ -1,92 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Network loss to pool pod belonging to a OpenEBS PVC -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-network-loss -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "litmuschaos.io" - - "batch" - - "extensions" - - "storage.k8s.io" - - "openebs.io" - resources: - - "pods" - - "pods/log" - - "pods/exec" - - "events" - - "jobs" - - "configmaps" - - "services" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumeclaims" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - - "cstorpools" - - "cstorvolumereplicas" - - "replicasets" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-network-loss/openebs_pool_network_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' # in percentage - - - name: TOTAL_CHAOS_DURATION - value: '120' # in seconds - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-pool-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/openebs/openebs-pool-network-loss/openebs-pool-network-loss.chartserviceversion.yaml b/experiments/openebs/openebs-pool-network-loss/openebs-pool-network-loss.chartserviceversion.yaml deleted file mode 100644 index e1fe3ae45..000000000 --- a/experiments/openebs/openebs-pool-network-loss/openebs-pool-network-loss.chartserviceversion.yaml +++ /dev/null @@ -1,44 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - name: openebs-pool-network-loss - version: 0.1.3 - annotations: - categories: OpenEBS - vendor: CNCF - support: https://slack.openebs.io/ -spec: - displayName: openebs-pool-network-loss - categoryDescription: > - Network loss to pool pod belonging to a OpenEBS PVC - keywords: - - Kubernetes - - K8S - - Storage Pool - - OpenEBS - - Network - platforms: - - GKE - - EKS - maturity: alpha - chaosType: infra - maintainers: - - name: Raj Babu Das - email: raj.das@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-pool-network-loss - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-pool-network-loss/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-loss/experiment.yaml \ No newline at end of file diff --git a/experiments/openebs/openebs-pool-network-loss/rbac.yaml b/experiments/openebs/openebs-pool-network-loss/rbac.yaml deleted file mode 100644 index 20dcfc4d8..000000000 --- a/experiments/openebs/openebs-pool-network-loss/rbac.yaml +++ /dev/null @@ -1,35 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pool-network-loss-sa - namespace: default - labels: - name: pool-network-loss-sa ---- -# Source: openebs/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pool-network-loss-sa - labels: - name: pool-network-loss-sa -rules: -- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io","openebs.io"] - resources: ["pods","pods/exec","pods/log","events","jobs","configmaps","services","persistentvolumeclaims","storageclasses","persistentvolumes","chaosengines","chaosexperiments","chaosresults","cstorpools","cstorvolumereplicas","replicasets"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pool-network-loss-sa - labels: - name: pool-network-loss-sa -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pool-network-loss-sa -subjects: -- kind: ServiceAccount - name: pool-network-loss-sa - namespace: default diff --git a/experiments/openebs/openebs-pool-pod-failure/engine.yaml b/experiments/openebs/openebs-pool-pod-failure/engine.yaml deleted file mode 100644 index cfc1490da..000000000 --- a/experiments/openebs/openebs-pool-pod-failure/engine.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: pool-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pool-pod-failure-sa - experiments: - - name: openebs-pool-pod-failure - spec: - components: - env: - - name: CHAOS_ITERATIONS - value: '2' - - - name: APP_PVC - value: 'demo-nginx-claim' - - - name: DEPLOY_TYPE - value: 'deployment' \ No newline at end of file diff --git a/experiments/openebs/openebs-pool-pod-failure/experiment.yaml b/experiments/openebs/openebs-pool-pod-failure/experiment.yaml deleted file mode 100644 index 52b597bd7..000000000 --- a/experiments/openebs/openebs-pool-pod-failure/experiment.yaml +++ /dev/null @@ -1,97 +0,0 @@ ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the pool pod and check if gets scheduled again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-pool-pod-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-pool-pod-failure -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "openebs.io" - - "storage.k8s.io" - resources: - - "deployments" - - "replicasets" - - "jobs" - - "pods/log" - - "events" - - "pods" - - "configmaps" - - "secrets" - - "storageclasses" - - "persistentvolumeclaims" - - "cstorvolumereplicas" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-pool-pod-failure/openebs_pool_pod_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: default - - - name: OPENEBS_NS - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: CHAOS_ITERATIONS - value: '2' - - # provide the kill count - - name: KILL_COUNT - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-pool-pod-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-pool-pod-failure - # mountPath: /mnt - diff --git a/experiments/openebs/openebs-pool-pod-failure/openebs-pool-pod-failure.chartserviceversion.yaml b/experiments/openebs/openebs-pool-pod-failure/openebs-pool-pod-failure.chartserviceversion.yaml deleted file mode 100644 index 6c49ec159..000000000 --- a/experiments/openebs/openebs-pool-pod-failure/openebs-pool-pod-failure.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-11-12T10:28:08Z - name: openebs-pool-pod-failure - version: 0.1.12 - annotations: - categories: OpenEBS - vendor: CNCF - support: https://slack.openebs.io/ -spec: - displayName: openebs-pool-pod-failure - categoryDescription: > - Kill the pool pod and check if gets scheduled again. - keywords: - - Kubernetes - - K8S - - Storage Pool - - OpenEBS - platforms: - - GKE - - EKS - - OpenShift - maturity: alpha - chaosType: infra - maintainers: - - name: shubham chaudhary - email: shubham.chaudhary@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-pool-pod-failure - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-pool-pod-failure/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-pod-failure/experiment.yaml diff --git a/experiments/openebs/openebs-pool-pod-failure/rbac.yaml b/experiments/openebs/openebs-pool-pod-failure/rbac.yaml deleted file mode 100644 index 4b6ac65b7..000000000 --- a/experiments/openebs/openebs-pool-pod-failure/rbac.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pool-pod-failure-sa - namespace: default - labels: - name: pool-pod-failure-sa ---- -# Source: openebs/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pool-pod-failure-sa - labels: - name: pool-pod-failure-sa -rules: -- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io","openebs.io"] - resources: ["pods","jobs","deployments","pods/log","events","configmaps","secrets","replicasets","persistentvolumeclaims","storageclasses","cstorvolumereplicas","chaosexperiments","chaosresults","chaosengines"] - verbs: ["create","list","get","patch","update","delete"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pool-pod-failure-sa - labels: - name: pool-pod-failure-sa -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pool-pod-failure-sa -subjects: -- kind: ServiceAccount - name: pool-pod-failure-sa - namespace: default diff --git a/experiments/openebs/openebs-target-container-failure/engine.yaml b/experiments/openebs/openebs-target-container-failure/engine.yaml deleted file mode 100644 index f082c2a22..000000000 --- a/experiments/openebs/openebs-target-container-failure/engine.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: target-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: target-container-failure-sa - experiments: - - name: openebs-target-container-failure - spec: - components: - env: - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - - name: TARGET_CONTAINER - value: 'cstor-istgt' - - - name: APP_PVC - value: 'demo-nginx-claim' - - - name: DEPLOY_TYPE - value: 'deployment' \ No newline at end of file diff --git a/experiments/openebs/openebs-target-container-failure/experiment.yaml b/experiments/openebs/openebs-target-container-failure/experiment.yaml deleted file mode 100644 index ef432b56a..000000000 --- a/experiments/openebs/openebs-target-container-failure/experiment.yaml +++ /dev/null @@ -1,113 +0,0 @@ ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the cstor target/Jiva controller container and check if gets created again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-target-container-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-target-container-failure -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "apps" - - "batch" - - "litmuschaos.io" - - "storage.k8s.io" - resources: - - "jobs" - - "pods" - - "events" - - "pods/exec" - - "pods/log" - - "configmaps" - - "secrets" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "delete" - - "get" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-target-container-failure/openebs_target_container_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - - name: APP_PVC - value: '' - - # LIB_IMAGE can be - gaiaadm/pumba:0.6.5, gprasath/crictl:ci - # For pumba image use : gaiaadm/pumba:0.6.5 - # For containerd image use : gprasath/crictl:ci - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - # Specify the container runtime used , to pick the relevant chaos util - - name: CONTAINER_RUNTIME - value: 'docker' - - # TARGET_CONTAINER values: cstor-volume-mgmt , cstor-istgt - # For cstor-volume-istgt container kill use : cstor-istgt - # For volume-mgmt-kill container use : cstor-volume-mgmt - - - name: TARGET_CONTAINER - value: 'cstor-volume-mgmt' - - - name: FORCE - value: 'true' - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - - name: DEPLOY_TYPE - value: 'deployment' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - - name: SOAK_TIME - value: '60' - - labels: - name: openebs-target-container-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-container-failure - # mountPath: /mnt diff --git a/experiments/openebs/openebs-target-container-failure/openebs-target-container-failure.chartserviceversion.yaml b/experiments/openebs/openebs-target-container-failure/openebs-target-container-failure.chartserviceversion.yaml deleted file mode 100644 index f84c594b3..000000000 --- a/experiments/openebs/openebs-target-container-failure/openebs-target-container-failure.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-11-11T10:28:08Z - name: openebs-target-container-failure - version: 0.1.12 - annotations: - categories: OpenEBS - vendor: CNCF - support: https://slack.openebs.io/ -spec: - displayName: openebs-target-container-failure - categoryDescription: > - Kill the cstor target/Jiva controller container and check if gets created again - keywords: - - Kubernetes - - K8S - - Storage Controller - - OpenEBS - platforms: - - GKE - - EKS - - OpenShift - maturity: alpha - chaosType: infra - maintainers: - - name: shubham chaudhary - email: shubham.chaudhary@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-target-container-failure - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-target-container-failure/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-container-failure/experiment.yaml diff --git a/experiments/openebs/openebs-target-container-failure/rbac.yaml b/experiments/openebs/openebs-target-container-failure/rbac.yaml deleted file mode 100644 index d8d38fe00..000000000 --- a/experiments/openebs/openebs-target-container-failure/rbac.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: target-container-failure-sa - namespace: default - labels: - name: target-container-failure-sa - app.kubernetes.io/part-of: litmus ---- -# Source: openebs/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: target-container-failure-sa - labels: - name: target-container-failure-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","litmuschaos.io","batch","apps","storage.k8s.io"] - resources: ["pods","jobs","pods/log","pods/exec","events","configmaps","secrets","persistentvolumeclaims","storageclasses","persistentvolumes","chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: target-container-failure-sa - labels: - name: target-container-failure-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: target-container-failure-sa -subjects: -- kind: ServiceAccount - name: target-container-failure-sa - namespace: default diff --git a/experiments/openebs/openebs-target-network-delay/engine.yaml b/experiments/openebs/openebs-target-network-delay/engine.yaml deleted file mode 100644 index 46816013e..000000000 --- a/experiments/openebs/openebs-target-network-delay/engine.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: target-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: target-network-delay-sa - experiments: - - name: openebs-target-network-delay - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: TARGET_CONTAINER - value: 'cstor-istgt' - - - name: APP_PVC - value: 'demo-nginx-claim' - - - name: DEPLOY_TYPE - value: 'deployment' - - - name: NETWORK_DELAY - value: '30000' - \ No newline at end of file diff --git a/experiments/openebs/openebs-target-network-delay/experiment.yaml b/experiments/openebs/openebs-target-network-delay/experiment.yaml deleted file mode 100644 index 30f554d43..000000000 --- a/experiments/openebs/openebs-target-network-delay/experiment.yaml +++ /dev/null @@ -1,94 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Network delay to target pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-target-network-delay - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-target-network-delay -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "storage.k8s.io" - resources: - - "jobs" - - "pods" - - "services" - - "events" - - "pods/exec" - - "pods/log" - - "configmaps" - - "secrets" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-target-network-delay/openebs_target_network_delay_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - - name: NETWORK_DELAY - value: '60000' # in milliseconds - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-target-network-delay - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-network-delay - # mountPath: /mnt diff --git a/experiments/openebs/openebs-target-network-delay/openebs-target-network-delay.chartserviceversion.yaml b/experiments/openebs/openebs-target-network-delay/openebs-target-network-delay.chartserviceversion.yaml deleted file mode 100644 index 04578ed87..000000000 --- a/experiments/openebs/openebs-target-network-delay/openebs-target-network-delay.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-17T10:28:08Z - name: openebs-target-network-delay - version: 0.1.9 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: openebs-target-network-delay - categoryDescription: > - Network delay to Pod belonging to a OpenEBS PVC - keywords: - - OpenEBS - - Kubernetes - - K8S - - Network - platforms: - - GKE - - EKS - - OpenShift - maturity: alpha - chaosType: infra - maintainers: - - name: giri - email: giridhara.prasad@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-target-network-delay - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-target-network-delay/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-delay/experiment.yaml diff --git a/experiments/openebs/openebs-target-network-delay/rbac.yaml b/experiments/openebs/openebs-target-network-delay/rbac.yaml deleted file mode 100644 index efba9454c..000000000 --- a/experiments/openebs/openebs-target-network-delay/rbac.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: target-network-delay-sa - namespace: default - labels: - name: target-network-delay-sa - app.kubernetes.io/part-of: litmus ---- -# Source: openebs/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: target-network-delay-sa - labels: - name: target-network-delay-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io"] - resources: ["pods","pods/exec","pods/log","events","jobs","configmaps","secrets","services","persistentvolumeclaims","storageclasses","persistentvolumes","chaosexperiments","chaosresults","chaosengines"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: target-network-delay-sa - labels: - name: target-network-delay-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: target-network-delay-sa -subjects: -- kind: ServiceAccount - name: target-network-delay-sa - namespace: default diff --git a/experiments/openebs/openebs-target-network-loss/engine.yaml b/experiments/openebs/openebs-target-network-loss/engine.yaml deleted file mode 100644 index ba3b3f968..000000000 --- a/experiments/openebs/openebs-target-network-loss/engine.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: target-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: target-network-loss-sa - experiments: - - name: openebs-target-network-loss - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '120' # in seconds - - - name: TARGET_CONTAINER - value: 'cstor-istgt' - - - name: APP_PVC - value: 'demo-nginx-claim' - - - name: DEPLOY_TYPE - value: 'deployment' diff --git a/experiments/openebs/openebs-target-network-loss/experiment.yaml b/experiments/openebs/openebs-target-network-loss/experiment.yaml deleted file mode 100644 index 45876c630..000000000 --- a/experiments/openebs/openebs-target-network-loss/experiment.yaml +++ /dev/null @@ -1,94 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Network loss to target pod belonging to a OpenEBS PVC -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-target-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-target-network-loss -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "storage.k8s.io" - resources: - - "jobs" - - "pods" - - "events" - - "services" - - "pods/log" - - "pods/exec" - - "configmaps" - - "secrets" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-target-network-loss/openebs_target_network_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' # in percentage - - - name: TOTAL_CHAOS_DURATION - value: '120' # in seconds - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - labels: - name: openebs-target-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-network-loss - # mountPath: /mnt diff --git a/experiments/openebs/openebs-target-network-loss/openebs-target-network-loss.chartserviceversion.yaml b/experiments/openebs/openebs-target-network-loss/openebs-target-network-loss.chartserviceversion.yaml deleted file mode 100644 index bb98d32db..000000000 --- a/experiments/openebs/openebs-target-network-loss/openebs-target-network-loss.chartserviceversion.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-10-17T10:28:08Z - name: openebs-target-network-loss - version: 0.1.9 - annotations: - categories: Kubernetes - vendor: CNCF - support: https://slack.kubernetes.io/ -spec: - displayName: openebs-target-network-loss - categoryDescription: > - Network loss to the target pod belonging to an OpenEBS PVC - keywords: - - Kubernetes - - K8S - - OpenEBS - - Network - platforms: - - GKE - - EKS - - OpenShift - maturity: alpha - chaosType: infra - maintainers: - - name: giri - email: giridhara.prasad@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-target-network-loss - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-target-network-loss/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-loss/experiment.yaml diff --git a/experiments/openebs/openebs-target-network-loss/rbac.yaml b/experiments/openebs/openebs-target-network-loss/rbac.yaml deleted file mode 100644 index 1a29e6d77..000000000 --- a/experiments/openebs/openebs-target-network-loss/rbac.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: target-network-loss-sa - namespace: default - labels: - name: target-network-loss-sa - app.kubernetes.io/part-of: litmus ---- -# Source: openebs/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: target-network-loss-sa - labels: - name: target-network-loss-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io"] - resources: ["pods","pods/exec","pods/log","events","jobs","configmaps","secrets","services","persistentvolumeclaims","storageclasses","persistentvolumes","chaosexperiments","chaosresults","chaosengines"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: target-network-loss-sa - labels: - name: target-network-loss-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: target-network-loss-sa -subjects: -- kind: ServiceAccount - name: target-network-loss-sa - namespace: default diff --git a/experiments/openebs/openebs-target-pod-failure/engine.yaml b/experiments/openebs/openebs-target-pod-failure/engine.yaml deleted file mode 100644 index e014e9a5d..000000000 --- a/experiments/openebs/openebs-target-pod-failure/engine.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: target-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: target-pod-failure-sa - experiments: - - name: openebs-target-pod-failure - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: FORCE - value: 'true' - - - name: APP_PVC - value: 'demo-nginx-claim' - - - name: DEPLOY_TYPE - value: 'deployment' \ No newline at end of file diff --git a/experiments/openebs/openebs-target-pod-failure/experiment.yaml b/experiments/openebs/openebs-target-pod-failure/experiment.yaml deleted file mode 100644 index c2ef48346..000000000 --- a/experiments/openebs/openebs-target-pod-failure/experiment.yaml +++ /dev/null @@ -1,105 +0,0 @@ ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kill the cstor target/Jiva controller pod and check if gets created again -kind: ChaosExperiment -metadata: - labels: - litmuschaos.io/name: openebs - name: openebs-target-pod-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest - name: openebs-target-pod-failure -spec: - definition: - scope: Cluster - permissions: - - apiGroups: - - "" - - "extensions" - - "apps" - - "batch" - - "litmuschaos.io" - - "storage.k8s.io" - resources: - - "deployments" - - "jobs" - - "events" - - "pods" - - "pods/log" - - "pods/exec" - - "configmaps" - - "secrets" - - "services" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - verbs: - - "create" - - "get" - - "delete" - - "list" - - "patch" - - "update" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - image: "litmuschaos/ansible-runner:latest" - imagePullPolicy: Always - args: - - -c - - ansible-playbook ./experiments/openebs/openebs-target-pod-failure/openebs_target_pod_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 - command: - - /bin/bash - env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: OPENEBS_NAMESPACE - value: 'openebs' - - - name: APP_PVC - value: '' - - - name: FORCE - value: 'true' - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # provide the kill count - - name: KILL_COUNT - value: '' - - - name: CHAOS_INTERVAL - value: '15' - - - name: DEPLOY_TYPE - value: 'deployment' - - labels: - name: openebs-target-pod-failure - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-pod-failure - # mountPath: /mnt diff --git a/experiments/openebs/openebs-target-pod-failure/openebs-target-pod-failure.chartserviceversion.yaml b/experiments/openebs/openebs-target-pod-failure/openebs-target-pod-failure.chartserviceversion.yaml deleted file mode 100644 index c04aef491..000000000 --- a/experiments/openebs/openebs-target-pod-failure/openebs-target-pod-failure.chartserviceversion.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-11-11T10:28:08Z - name: openebs-target-pod-failure - version: 0.1.11 - annotations: - categories: OpenEBS - vendor: CNCF - support: https://slack.openebs.io/ -spec: - displayName: openebs-target-pod-failure - categoryDescription: > - Kill the cstor target/Jiva controller pod and check if gets created again - keywords: - - Kubernetes - - K8S - - Storage Controller - - OpenEBS - platforms: - - GKE - - EKS - - OpenShift - maturity: alpha - chaosType: infra - maintainers: - - name: shubham chaudhary - email: shubham.chaudhary@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/openebs/openebs-target-pod-failure - - name: Documentation - url: https://v1-docs.litmuschaos.io/docs/openebs-target-pod-failure/ - - name: Video - url: - icon: - - url: "" - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-pod-failure/experiment.yaml - diff --git a/experiments/openebs/openebs-target-pod-failure/rbac.yaml b/experiments/openebs/openebs-target-pod-failure/rbac.yaml deleted file mode 100644 index 79fa90bb1..000000000 --- a/experiments/openebs/openebs-target-pod-failure/rbac.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: target-pod-failure-sa - namespace: default - labels: - name: target-pod-failure-sa - app.kubernetes.io/part-of: litmus ---- -# Source: openebs/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: target-pod-failure-sa - labels: - name: target-pod-failure-sa - app.kubernetes.io/part-of: litmus -rules: -- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io"] - resources: ["pods","jobs","pods/log","deployments","pods/exec","events","chaosexperiments","chaosresults","chaosengines","configmaps","secrets","services","persistentvolumeclaims","storageclasses","persistentvolumes"] - verbs: ["create","list","get","patch","update","delete"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: target-pod-failure-sa - labels: - name: target-pod-failure-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: target-pod-failure-sa -subjects: -- kind: ServiceAccount - name: target-pod-failure-sa - namespace: default - diff --git a/experiments/openebs/openebs.chartserviceversion.yaml b/experiments/openebs/openebs.chartserviceversion.yaml deleted file mode 100644 index 6cdaf9418..000000000 --- a/experiments/openebs/openebs.chartserviceversion.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2019-08-27T10:28:08Z - name: openebs - version: 0.1.8 - annotations: - categories: OpenEBS - vendor: MayaData - support: https://slack.openebs.io/ - chartDescription: Injects generic openebs chaos -spec: - displayName: OpenEBS - categoryDescription: > - OpenEBS is the most active Container Attached Storage project. OpenEBS enables your DevOps teams to have their own storage policies for every workload and it is truly Kubernetes native and 100% in userspace. - - experiments: - - name: openebs-pool-pod-failure - description: "" - - name: openebs-pool-container-failure - description: "" - - name: openebs-target-pod-failure - description: "" - - name: openebs-target-container-failure - description: "" - - name: openebs-target-network-delay - description: "" - - name: openebs-target-network-loss - description: "" - - name: openebs-pool-network-delay - description: "" - - name: openebs-pool-network-loss - description: "" - - name: openebs-control-plane-chaos - description: "" - - name: openebs-pool-disk-loss - description: "" - - name: openebs-nfs-provisioner-kill - description: "" - keywords: - - Kubernetes - - K8S - - OpenEBS - - CAS - - Storage - - Network - - Pod - - Pool - maintainers: - - name: ksatchit - email: karthik.s@mayadata.io - minKubeVersion: 1.12.0 - provider: - name: Mayadata - links: - - name: OpenEBS Website - url: https://openebs.io - - name: Source Code - url: https://github.com/openebs/openebs - icon: - - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/icons/openebs.png - mediatype: image/png - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/experiments.yaml diff --git a/experiments/openebs/openebs.package.yaml b/experiments/openebs/openebs.package.yaml deleted file mode 100644 index 0f18e73cb..000000000 --- a/experiments/openebs/openebs.package.yaml +++ /dev/null @@ -1,35 +0,0 @@ -packageName: openebs -experiments: - - name: openebs-pool-pod-failure - CSV: openebs-pool-pod-failure.chartserviceversion.yaml - desc: "openebs-pool-pod-failure" - - name: openebs-pool-container-failure - CSV: openebs-pool-container-failure.chartserviceversion.yaml - desc: "openebs-pool-container-failure" - - name: openebs-target-pod-failure - CSV: openebs-target-pod-failure.chartserviceversion.yaml - desc: "openebs-target-pod-failure" - - name: openebs-target-container-failure - CSV: openebs-target-container-failure.chartserviceversion.yaml - desc: "openebs-target-container-failure" - - name: openebs-target-network-delay - CSV: openebs-target-network-delay.chartserviceversion.yaml - desc: "openebs-target-network-delay" - - name: openebs-target-network-loss - CSV: openebs-target-network-loss.chartserviceversion.yaml - desc: "openebs-target-network-loss" - - name: openebs-control-plane-chaos - CSV: openebs-control-plane-chaos.chartserviceversion.yaml - desc: "openebs-control-plane-chaos" - - name: openebs-pool-network-delay - CSV: openebs-pool-network-delay.chartserviceversion.yaml - desc: "openebs-pool-network-delay" - - name: openebs-pool-network-loss - CSV: openebs-pool-network-loss.chartserviceversion.yaml - desc: "openebs-pool-network-loss" - - name: openebs-pool-disk-loss - CSV: openebs-pool-disk-loss.chartserviceversion.yaml - desc: "openebs-pool-disk-loss" - - name: openebs-nfs-provisioner-kill - CSV: openebs-nfs-provisioner-kill.chartserviceversion.yaml - desc: "openebs-nfs-provisioner-kill" \ No newline at end of file diff --git a/experiments/openebs/sample_openebs_engine_with_data_persistency_enabled.yaml b/experiments/openebs/sample_openebs_engine_with_data_persistency_enabled.yaml deleted file mode 100644 index 7a59e6efe..000000000 --- a/experiments/openebs/sample_openebs_engine_with_data_persistency_enabled.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -kind: ChaosEngine -metadata: - name: openebs-chaos - namespace: default -spec: - # It can be active/stop - engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: -sa - experiments: - - name: - spec: - components: - env: - - name: TARGET_CONTAINER - value: 'cstor-istgt' - - name: APP_PVC - value: 'demo-nginx-claim' - configMaps: - - name: map1 - mountPath: '/mnt' - secrets: - - name: secret1 - mountPath: '/tmp' \ No newline at end of file diff --git a/workflows/pod-cpu-hog/workflow.yaml b/experiments/pod-cpu-hog/experiment.yaml similarity index 100% rename from workflows/pod-cpu-hog/workflow.yaml rename to experiments/pod-cpu-hog/experiment.yaml diff --git a/workflows/pod-cpu-hog/workflow_cron.yaml b/experiments/pod-cpu-hog/experiment_cron.yaml similarity index 100% rename from workflows/pod-cpu-hog/workflow_cron.yaml rename to experiments/pod-cpu-hog/experiment_cron.yaml diff --git a/experiments/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml b/experiments/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml new file mode 100644 index 000000000..19e69f9b6 --- /dev/null +++ b/experiments/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-cpu-hog + version: 0.1.0 + annotations: + categories: pod-cpu-hog + chartDescription: Pod CPU Hog fault consumes the CPU resources of specified containers in Kubernetes pods. +spec: + displayName: Pod CPU Hog + categoryDescription: > + Pod CPU Hog fault consumes the CPU resources of specified containers in Kubernetes pods. + - Causes CPU resource consumption on specified application containers using cgroups and litmus nsutil which consume CPU resources of the given target containers. + - It can test the application's resilience to potential slowness/unavailability of some replicas due to high CPU load. + - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. + faults: + - name: pod-cpu-hog + description: Pod CPU Hog fault consumes the CPU resources of specified containers in Kubernetes pods. + keywords: + - Kubernetes + platforms: + - GKE + - EKS + - AKS + - Kind + - Rancher + - OpenShift(OKD) + icon: + - url: + mediatype: "" diff --git a/workflows/pod-delete/workflow.yaml b/experiments/pod-delete/experiment.yaml similarity index 100% rename from workflows/pod-delete/workflow.yaml rename to experiments/pod-delete/experiment.yaml diff --git a/scenarios/pod-delete/workflow_cron.yaml b/experiments/pod-delete/experiment_cron.yaml similarity index 100% rename from scenarios/pod-delete/workflow_cron.yaml rename to experiments/pod-delete/experiment_cron.yaml diff --git a/experiments/pod-delete/pod-delete.chartserviceversion.yaml b/experiments/pod-delete/pod-delete.chartserviceversion.yaml new file mode 100644 index 000000000..0b25c7791 --- /dev/null +++ b/experiments/pod-delete/pod-delete.chartserviceversion.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-delete + version: 0.1.0 + annotations: + categories: pod-delete + chartDescription: Pod delete fault disrupts the state of Kubernetes resources. This fault injects random pod delete failures against specified application. +spec: + displayName: Pod Delete + categoryDescription: > + Pod delete fault disrupts the state of Kubernetes resources. This fault injects random pod delete failures against specified application. + - Causes (forced/graceful) pod failure of random replicas of an application deployment. + - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. + faults: + - name: pod-delete + description: Pod delete fault disrupts the state of Kubernetes resources. This fault injects random pod delete failures against specified application. + keywords: + - Kubernetes + platforms: + - GKE + - Konvoy + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + - Kind + - Rancher + - OpenShift(OKD) + icon: + - url: + mediatype: "" diff --git a/scenarios/pod-memory-hog/workflow.yaml b/experiments/pod-memory-hog/experiment.yaml similarity index 100% rename from scenarios/pod-memory-hog/workflow.yaml rename to experiments/pod-memory-hog/experiment.yaml diff --git a/workflows/pod-memory-hog/workflow_cron.yaml b/experiments/pod-memory-hog/experiment_cron.yaml similarity index 100% rename from workflows/pod-memory-hog/workflow_cron.yaml rename to experiments/pod-memory-hog/experiment_cron.yaml diff --git a/experiments/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml b/experiments/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml new file mode 100644 index 000000000..bd32ffbb9 --- /dev/null +++ b/experiments/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-memory-hog + version: 0.1.0 + annotations: + categories: pod-memory-hog + chartDescription: Pod memory hog fault consumes memory resources of specified containers in Kubernetes pods. +spec: + displayName: Pod Memory Hog + categoryDescription: > + Pod memory hog fault consumes memory resources of specified containers in Kubernetes pods. + - Causes memory resource consumption on specified application containers using cgroups and litmus nsutil that consume memory resources of the given target containers. + - It tests the application's resilience to potential slowness/unavailability of some replicas due to high memory load. + - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. + faults: + - name: pod-memory-hog + description: Pod memory hog fault consumes memory resources of specified containers in Kubernetes pods. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + - OpenShift(OKD) + icon: + - url: + mediatype: "" diff --git a/scenarios/podtato-head/workflow.yaml b/experiments/podtato-head/experiment.yaml similarity index 100% rename from scenarios/podtato-head/workflow.yaml rename to experiments/podtato-head/experiment.yaml diff --git a/scenarios/podtato-head/workflow_cron.yaml b/experiments/podtato-head/experiment_cron.yaml similarity index 100% rename from scenarios/podtato-head/workflow_cron.yaml rename to experiments/podtato-head/experiment_cron.yaml diff --git a/experiments/podtato-head/podtato-head.chartserviceversion.yaml b/experiments/podtato-head/podtato-head.chartserviceversion.yaml new file mode 100644 index 000000000..3df7dbf3d --- /dev/null +++ b/experiments/podtato-head/podtato-head.chartserviceversion.yaml @@ -0,0 +1,28 @@ +apiVersion: litmuchaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: podtato-head + version: 0.1.0 + annotations: + categories: podtato-head + chartDescription: Injects chaos on podtato-head application +spec: + displayName: Podtato-head Chaos + categoryDescription: > + It installs podtato-head application, inject chaos on the application, uninstall the application, and reverts the chaos + faults: + - name: pod-delete + description: Pod delete fault disrupts the state of Kubernetes resources. This fault injects random pod delete failures against specified application. + keywords: + - Kubernetes + - Podtato-head + - Pod + platforms: + - GKE + - Minikube + - Packet(Kubeadm) + - EKS + - AKS + icon: + - url: + mediatype: "" diff --git a/workflows/sock-shop-promProbe/workflow.yaml b/experiments/sock-shop-promProbe/experiment.yaml similarity index 97% rename from workflows/sock-shop-promProbe/workflow.yaml rename to experiments/sock-shop-promProbe/experiment.yaml index e8e2fd042..492158bac 100644 --- a/workflows/sock-shop-promProbe/workflow.yaml +++ b/experiments/sock-shop-promProbe/experiment.yaml @@ -25,7 +25,7 @@ spec: - - name: install-chaos-experiments template: install-chaos-experiments - name: load-test - template: load-test + template: load-test - - name: pod-cpu-hog template: pod-cpu-hog - - name: pod-delete @@ -35,7 +35,7 @@ spec: - - name: pod-memory-hog template: pod-memory-hog - - name: disk-fill - template: disk-fill + template: disk-fill - - name: revert-chaos template: revert-chaos # - name: delete-application @@ -55,7 +55,7 @@ spec: args: - "kubectl apply -f https://hub.litmuschaos.io/api/chaos/master?file=charts/generic/experiments.yaml -n {{workflow.parameters.adminModeNamespace}} ; sleep 30" - + - name: pod-cpu-hog inputs: artifacts: @@ -107,7 +107,7 @@ spec: criteria: ">=" #supports >=,<=,>,<,==,!= comparision value: "100" mode: "Edge" - runProperties: + runProperties: probeTimeout: 1000 interval: 1 attempt: 2 @@ -121,7 +121,7 @@ spec: value: '30' # in seconds - name: CHAOS_KILL_COMMAND value: "kill -9 $(ps afx | grep \"[md5sum] /dev/zero\" | awk '{print$1}' | tr '\n' ' ')" - + container: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] @@ -177,7 +177,7 @@ spec: criteria: ">=" #supports >=,<=,>,<,==,!= comparision value: "100" mode: "Edge" - runProperties: + runProperties: probeTimeout: 1000 interval: 1 attempt: 2 @@ -189,7 +189,7 @@ spec: value: '30' # in seconds - name: CHAOS_KILL_COMMAND value: "kill -9 $(ps afx | grep \"[dd] if /dev/zero\" | awk '{print $1}' | tr '\n' ' ')" - + container: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] @@ -248,7 +248,7 @@ spec: criteria: ">=" #supports >=,<=,>,<,==,!= comparision value: "100" mode: "Edge" - runProperties: + runProperties: probeTimeout: 1000 interval: 1 attempt: 2 @@ -264,8 +264,8 @@ spec: value: 'false' container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - + args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + - name: pod-network-loss inputs: artifacts: @@ -321,26 +321,26 @@ spec: criteria: ">=" #supports >=,<=,>,<,==,!= comparision value: "100" mode: "Edge" - runProperties: + runProperties: probeTimeout: 1000 interval: 1 attempt: 2 components: env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: '30' - name: NETWORK_INTERFACE value: 'eth0' - name: NETWORK_PACKET_LOSS_PERCENTAGE value: '100' - name: CONTAINER_RUNTIME - value: 'containerd' + value: 'containerd' - name: SOCKET_PATH value: '/run/containerd/containerd.sock' container: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - + - name: disk-fill inputs: artifacts: @@ -395,7 +395,7 @@ spec: criteria: ">=" #supports >=,<=,>,<,==,!= comparision value: "100" mode: "Edge" - runProperties: + runProperties: probeTimeout: 1000 interval: 1 attempt: 2 @@ -406,11 +406,11 @@ spec: - name: TARGET_CONTAINER value: '' - name: TOTAL_CHAOS_DURATION - value: '30' + value: '30' container: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - + - name: delete-application container: image: litmuschaos/litmus-app-deployer:latest @@ -425,12 +425,12 @@ spec: container: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=loadtest","-operation=delete", "-app=loadtest"] - + - name: revert-chaos container: image: litmuschaos/k8s:latest command: [sh, -c] - args: - [ + args: + [ "kubectl delete chaosengine pod-memory-hog-chaos pod-cpu-hog-chaos catalogue-pod-delete-chaos pod-network-loss-chaos -n {{workflow.parameters.adminModeNamespace}}", ] \ No newline at end of file diff --git a/workflows/sock-shop-promProbe/workflow_cron.yaml b/experiments/sock-shop-promProbe/experiment_cron.yaml similarity index 100% rename from workflows/sock-shop-promProbe/workflow_cron.yaml rename to experiments/sock-shop-promProbe/experiment_cron.yaml diff --git a/experiments/sock-shop-promProbe/sock-shop-promProbe.chartserviceversion.yaml b/experiments/sock-shop-promProbe/sock-shop-promProbe.chartserviceversion.yaml new file mode 100644 index 000000000..2e7259312 --- /dev/null +++ b/experiments/sock-shop-promProbe/sock-shop-promProbe.chartserviceversion.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: sock-shop-promProbe + version: 0.1.0 + annotations: + categories: sock-shop-promProbe + chartDescription: Injects chaos on Sock Shop application and uses a prom probe to validate frontend API endpoint availability. +spec: + displayName: Sock Shop PromProbe + categoryDescription: > + It installs Sock Shop application, injects chaos on the application, uninstalls the application, and reverts the chaos + faults: + - name: sock-shop + description: Injects chaos on Sock Shop application and uses a prom probe to validate frontend API endpoint availability. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + - OpenShift(OKD) + icon: + - url: + mediatype: "" diff --git a/workflows/sock-shop/workflow.yaml b/experiments/sock-shop/experiment.yaml similarity index 100% rename from workflows/sock-shop/workflow.yaml rename to experiments/sock-shop/experiment.yaml diff --git a/workflows/sock-shop/workflow_cron.yaml b/experiments/sock-shop/experiment_cron.yaml similarity index 100% rename from workflows/sock-shop/workflow_cron.yaml rename to experiments/sock-shop/experiment_cron.yaml diff --git a/experiments/sock-shop/sock-shop.chartserviceversion.yaml b/experiments/sock-shop/sock-shop.chartserviceversion.yaml new file mode 100644 index 000000000..f447d172a --- /dev/null +++ b/experiments/sock-shop/sock-shop.chartserviceversion.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: sock-shop + version: 0.1.0 + annotations: + categories: sock-shop + chartDescription: Injects chaos on Sock Shop application. +spec: + displayName: Sock Shop + categoryDescription: > + It installs Sock Shop application, injects chaos on the application, uninstalls the application, and reverts the chaos + faults: + - name: sock-shop + description: Injects chaos on Sock Shop application. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + - OpenShift(OKD) + icon: + - url: + mediatype: "" diff --git a/experiments/vmware/experiments.yaml b/experiments/vmware/experiments.yaml deleted file mode 100644 index 61882e354..000000000 --- a/experiments/vmware/experiments.yaml +++ /dev/null @@ -1,99 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops one or more VMs for a certain chaos duration. -kind: ChaosExperiment -metadata: - name: vm-poweroff - labels: - name: vm-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name vm-poweroff - command: - - /bin/bash - env: - - - name: VCENTERSERVER - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERSERVER - - - name: VCENTERUSER - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERUSER - - - name: VCENTERPASS - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERPASS - - # provide the VM MOIDs as comma separated values - - name: APP_VM_MOIDS - value: '' - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - - name: LIB - value: 'litmus' - - - name: RAMP_TIME - value: '' - - # parallel or sequence; the mode of chaos sequence, defaults to parallel - - name: SEQUENCE - value: 'parallel' - - labels: - experiment: vm-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- diff --git a/experiments/vmware/icons/vm-poweroff.png b/experiments/vmware/icons/vm-poweroff.png deleted file mode 100644 index 50807e52d29dd34e61cb79965092ada938a64a67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74909 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 ZwA;&cO|19@`9tudrJ;K@U(F)qzW`eC3Ge^_ diff --git a/experiments/vmware/icons/vmware.png b/experiments/vmware/icons/vmware.png deleted file mode 100644 index 50807e52d29dd34e61cb79965092ada938a64a67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74909 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 ZwA;&cO|19@`9tudrJ;K@U(F)qzW`eC3Ge^_ diff --git a/experiments/vmware/vm-poweroff/experiment.yaml b/experiments/vmware/vm-poweroff/experiment.yaml deleted file mode 100644 index 1562815ae..000000000 --- a/experiments/vmware/vm-poweroff/experiment.yaml +++ /dev/null @@ -1,97 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops one or more VMs for a certain chaos duration. -kind: ChaosExperiment -metadata: - name: vm-poweroff - labels: - name: vm-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name vm-poweroff - command: - - /bin/bash - env: - - - name: VCENTERSERVER - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERSERVER - - - name: VCENTERUSER - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERUSER - - - name: VCENTERPASS - valueFrom: - secretKeyRef: - name: vcenter-secret - key: VCENTERPASS - - # provide the VM MOIDs as comma separated values - - name: APP_VM_MOIDS - value: '' - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - - name: LIB - value: 'litmus' - - - name: RAMP_TIME - value: '' - - # parallel or sequence; the mode of chaos sequence, defaults to parallel - - name: SEQUENCE - value: 'parallel' - - labels: - experiment: vm-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest diff --git a/experiments/vmware/vm-poweroff/rbac.yaml b/experiments/vmware/vm-poweroff/rbac.yaml deleted file mode 100644 index 4bbd8eecb..000000000 --- a/experiments/vmware/vm-poweroff/rbac.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: vm-poweroff-sa - namespace: default - labels: - name: vm-poweroff-sa - app.kubernetes.io/part-of: litmus ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: vm-poweroff-sa - labels: - name: vm-poweroff-sa - app.kubernetes.io/part-of: litmus -rules: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: vm-poweroff-sa - labels: - name: vm-poweroff-sa - app.kubernetes.io/part-of: litmus -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: vm-poweroff-sa -subjects: -- kind: ServiceAccount - name: vm-poweroff-sa - namespace: default - diff --git a/experiments/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml b/experiments/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml deleted file mode 100644 index 0b2ad002d..000000000 --- a/experiments/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-04-29T10:28:08Z - name: vm-poweroff - annotations: - categories: vmware - vendor: Wipro, ChaosNative - support: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN -spec: - displayName: vm-poweroff - categoryDescription: | - This experiment causes power-off of target VMWare VM(s) for a certain chaos duration: - - Causes power-off of the VMWare VM(s) provided by the Moid(s) of the instance. - - It helps to check the performance of the application/services on the instance. - - Currently, the experiment is supported for vsphere version 6.X (Support for 7.X will be added soon). - - keywords: - - Vmware - - VM - platforms: - - vmware - maturity: alpha - maintainers: - - name: Delphine Joyneer, Neelanjan Manna - email: golkonda.joyneer@wipro.com, neelanjan@chaosnative.com - provider: - name: Wipro, ChaosNative - labels: - app.kubernetes.io/component: chartserviceversion - app.kubernetes.io/version: latest - links: - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/vmware/vm-poweroff - - name: Documentation - url: https://litmuschaos.github.io/litmus/experiments/categories/vmware/vm-poweroff/ - - name: Video - url: - icon: - - url: - mediatype: "" - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/vmware/vm-poweroff/experiment.yaml diff --git a/experiments/vmware/vmware.chartserviceversion.yaml b/experiments/vmware/vmware.chartserviceversion.yaml deleted file mode 100644 index 1d04eabf9..000000000 --- a/experiments/vmware/vmware.chartserviceversion.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-04-29T10:28:08Z - name: vmware - version: 0.1.0 - annotations: - categories: vmware - chartDescription: Injects chaos on VMWare components -spec: - displayName: VMWare Chaos - categoryDescription: > - Contains chaos to disrupt the state of VMWare resources - experiments: - - name: vm-poweroff - description: "" - keywords: - - vmware - - VM - maintainers: - - name: Delphine Joyneer, Neelanjan Manna - email: golkonda.joyneer@wipro.com, neelanjan@chaosnative.com - provider: - name: Wipro, ChaosNative - links: - - name: Kubernetes Website - url: https://kubernetes.io - - name: Source Code - url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/vmware - - name: Community Slack - url: https://app.slack.com/client/T09NY5SBT/CNXNB0ZTN - icon: - - url: - mediatype: - chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/vmware/experiments.yaml diff --git a/experiments/vmware/vmware.package.yaml b/experiments/vmware/vmware.package.yaml deleted file mode 100644 index 3fe0e4828..000000000 --- a/experiments/vmware/vmware.package.yaml +++ /dev/null @@ -1,5 +0,0 @@ -packageName: vmware -experiments: - - name: vm-poweroff - CSV: vm-poweroff.chartserviceversion.yaml - desc: "vm-poweroff" diff --git a/faults/aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml b/faults/aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml new file mode 100644 index 000000000..065a6ebed --- /dev/null +++ b/faults/aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml @@ -0,0 +1,32 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-26T10:28:08Z + name: aws-az-chaos + version: 0.1.0 + annotations: + categories: Kube AWS + vendor: Harness +spec: + displayName: AWS AZ Chaos + categoryDescription: | + Execute AWS AZ chaos to detach the target zones from the load balancer for a certain chaos duration. + keywords: + - AWS + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/kube-aws/aws-az-chaos/engine.yaml b/faults/aws/aws-az-chaos/engine.yaml old mode 100755 new mode 100644 similarity index 89% rename from charts/kube-aws/aws-az-chaos/engine.yaml rename to faults/aws/aws-az-chaos/engine.yaml index a7afbbcf9..c64d28846 --- a/charts/kube-aws/aws-az-chaos/engine.yaml +++ b/faults/aws/aws-az-chaos/engine.yaml @@ -1,11 +1,12 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: aws-az-chaos + name: az-chaos-engine + namespace: default spec: - # It can be active/stop engineState: 'active' - chaosServiceAccount: aws-az-chaos-sa + chaosServiceAccount: litmus-admin experiments: - name: aws-az-chaos spec: diff --git a/charts/kube-aws/aws-az-chaos/experiment.yaml b/faults/aws/aws-az-chaos/fault.yaml old mode 100755 new mode 100644 similarity index 73% rename from charts/kube-aws/aws-az-chaos/experiment.yaml rename to faults/aws/aws-az-chaos/fault.yaml index 921723b12..aa939b33e --- a/charts/kube-aws/aws-az-chaos/experiment.yaml +++ b/faults/aws/aws-az-chaos/fault.yaml @@ -1,7 +1,8 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Execute aws-az chaos to detach the target zones from the load balancer + It injects AZ chaos to detach the target zones from the load balancer. kind: ChaosExperiment metadata: name: aws-az-chaos @@ -9,7 +10,7 @@ metadata: name: aws-az-chaos app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -26,10 +27,10 @@ spec: - apiGroups: [""] resources: ["secrets","configmaps"] verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] + verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] resources: ["pods/exec"] @@ -45,32 +46,32 @@ spec: image: "litmuschaos/py-runner:latest" imagePullPolicy: Always args: - - -c - - python3 -u experiment -name aws-az-chaos + - -c + - python3 -u experiment -name aws-az-chaos command: - - /bin/bash + - /bin/bash env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - name: CHAOS_INTERVAL - value: '30' - - name: LIB - value: 'litmus' - - name: LOAD_BALANCER_NAME - value: '' - - name: LOAD_BALANCER_ZONES - value: '' - - name: LOAD_BALANCERNAME_ARN - value: 'na' - - name: AWS_SHARED_CREDENTIALS_FILE - value: "/tmp/cloud_config.yml" - - name: RAMP_TIME - value: '' + - name: TOTAL_CHAOS_DURATION + value: '30' + - name: CHAOS_INTERVAL + value: '30' + - name: LIB + value: 'litmus' + - name: LOAD_BALANCER_NAME + value: '' + - name: LOAD_BALANCER_ZONES + value: '' + - name: LOAD_BALANCERNAME_ARN + value: 'na' + - name: AWS_SHARED_CREDENTIALS_FILE + value: "/tmp/cloud_config.yml" + - name: RAMP_TIME + value: '' labels: name: aws-az-chaos app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest secrets: - - name: cloud-secret - mountPath: /tmp/ + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/aws/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml b/faults/aws/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml new file mode 100644 index 000000000..357c10918 --- /dev/null +++ b/faults/aws/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-27T10:28:08Z + name: aws-ssm-chaos-by-id + version: 0.1.0 + annotations: + categories: AWS + vendor: Harness +spec: + displayName: AWS SSM Chaos By ID + categoryDescription: | + AWS SSM Chaos By ID fault disrupts the state of infra resources. The fault induces chaos on AWS resources using Amazon SSM Run Command This is carried out by using SSM Docs that defines the actions performed by Systems Manager on your managed instances (having SSM agent installed) which let us perform chaos faults on resources. + - Causes chaos on AWS EC2 instances with given instance ID(s) using SSM docs for total chaos duration with the specified chaos interval. + - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the target application pod(if provided). + keywords: + - AWS + platforms: + - AWS + chaosType: infra + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/faults/aws/aws-ssm-chaos-by-id/engine.yaml b/faults/aws/aws-ssm-chaos-by-id/engine.yaml new file mode 100644 index 000000000..c00f6c9e1 --- /dev/null +++ b/faults/aws/aws-ssm-chaos-by-id/engine.yaml @@ -0,0 +1,39 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChaosEngine +metadata: + name: aws-chaos + namespace: default +spec: + engineState: 'active' + chaosServiceAccount: litmus-admin + experiments: + - name: aws-ssm-chaos-by-id + spec: + components: + env: + # set chaos duration (in sec) as desired + - name: TOTAL_CHAOS_DURATION + value: '60' + + # set chaos duration (in sec) as desired + - name: CHAOS_INTERVAL + value: '60' + + # Instance ID of the target EC2 instance + # Multiple IDs can also be provided as comma separated values ex: id1,id2 + - name: EC2_INSTANCE_ID + value: '' + + # provide the region name of the target instances + - name: REGION + value: '' + + # provide the percentage of available memory to stress + - name: MEMORY_PERCENTAGE + value: '80' + + # provide the CPU chores to be comsumed + # 0 will consume all the available CPU cores + - name: CPU_CORE + value: '0' diff --git a/faults/aws/aws-ssm-chaos-by-id/fault.yaml b/faults/aws/aws-ssm-chaos-by-id/fault.yaml new file mode 100644 index 000000000..4edce9e6a --- /dev/null +++ b/faults/aws/aws-ssm-chaos-by-id/fault.yaml @@ -0,0 +1,128 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Execute AWS SSM Chaos on given EC2 instance IDs +kind: ChaosExperiment +metadata: + name: aws-ssm-chaos-by-id + labels: + name: aws-ssm-chaos-by-id + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name aws-ssm-chaos-by-id + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '60' + + - name: CHAOS_INTERVAL + value: '60' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # Instance ID of the target EC2 instance + # Multiple IDs can also be provided as comma separated values ex: id1,id2 + - name: EC2_INSTANCE_ID + value: '' + + - name: REGION + value: '' + + # it defines the sequence of chaos execution for multiple target instances + # supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + # Provide the path of AWS credentials mounted from secret + - name: AWS_SHARED_CREDENTIALS_FILE + value: '/tmp/cloud_config.yml' + + # provide the number of workers for memory stress + - name: NUMBER_OF_WORKERS + value: '1' + + # provide the percentage of available memory to stress + - name: MEMORY_PERCENTAGE + value: '80' + + # provide the CPU chores to be consumed + # 0 will consume all the available CPU cores + - name: CPU_CORE + value: '0' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # Provide the name of SSM doc + # if not using the default stress docs + - name: DOCUMENT_NAME + value: 'LitmusChaos-AWS-SSM-Doc' + + # Provide the type of SSM doc + # if not using the default stress docs + - name: DOCUMENT_TYPE + value: 'Command' + + # Provide the format of SSM doc + # if not using the default stress docs + - name: DOCUMENT_FORMAT + value: 'YAML' + + # Provide the path of SSM doc + # if not using the default stress docs + - name: DOCUMENT_PATH + value: 'Litmus-AWS-SSM-Docs-For-EC2-CPU-Hog.yml' + + # if you want to install dependencies to run default SSM docs + - name: INSTALL_DEPENDENCIES + value: 'True' + + labels: + name: aws-ssm-chaos-by-id + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/aws/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml b/faults/aws/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml new file mode 100644 index 000000000..8537dc57e --- /dev/null +++ b/faults/aws/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-27T10:28:08Z + name: aws-ssm-chaos-by-tag + version: 0.1.0 + annotations: + categories: AWS + vendor: Harness +spec: + displayName: AWS SSM Chaos By Tag + categoryDescription: | + AWS SSM Chaos By Tag fault disrupts the state of infra resources. The fault induces chaos on AWS resources using Amazon SSM Run Command This is carried out by using SSM Docs that defines the actions performed by Systems Manager on your managed instances (having SSM agent installed) which let us perform chaos faults on resources. + - Causes chaos on AWS EC2 instances with given instance tag using SSM docs for total chaos duration with the specified chaos interval. + - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the target application pod(if provided). + keywords: + - AWS + platforms: + - AWS + chaosType: infra + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/faults/aws/aws-ssm-chaos-by-tag/engine.yaml b/faults/aws/aws-ssm-chaos-by-tag/engine.yaml new file mode 100644 index 000000000..d66dd36aa --- /dev/null +++ b/faults/aws/aws-ssm-chaos-by-tag/engine.yaml @@ -0,0 +1,39 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChaosEngine +metadata: + name: nginx-chaos + namespace: default +spec: + engineState: 'active' + chaosServiceAccount: litmus-admin + experiments: + - name: aws-ssm-chaos-by-tag + spec: + components: + env: + # set chaos duration (in sec) as desired + - name: TOTAL_CHAOS_DURATION + value: '60' + + # set chaos duration (in sec) as desired + - name: CHAOS_INTERVAL + value: '60' + + # provide tag of the target EC2 instances + # ex: team:devops (key:value) + - name: EC2_INSTANCE_TAG + value: '' + + # provide the region name of the target instances + - name: REGION + value: '' + + # provide the percentage of available memory to stress + - name: MEMORY_PERCENTAGE + value: '80' + + # provide the CPU chores to comsumed + # 0 will consume all the available CPU cores + - name: CPU_CORE + value: '0' diff --git a/faults/aws/aws-ssm-chaos-by-tag/fault.yaml b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml new file mode 100644 index 000000000..4fc35a54a --- /dev/null +++ b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml @@ -0,0 +1,132 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Execute AWS SSM Chaos on given EC2 instance Tag +kind: ChaosExperiment +metadata: + name: aws-ssm-chaos-by-tag + labels: + name: aws-ssm-chaos-by-tag + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name aws-ssm-chaos-by-tag + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '60' + + - name: CHAOS_INTERVAL + value: '60' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # provide tag of the target EC2 instances + # ex: team:devops (key:value) + - name: EC2_INSTANCE_TAG + value: '' + + - name: REGION + value: '' + + # it defines the sequence of chaos execution for multiple target instances + # supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + # Provide the path of AWS credentials mounted from secret + - name: AWS_SHARED_CREDENTIALS_FILE + value: '/tmp/cloud_config.yml' + + # percentage of total instance to target + - name: INSTANCE_AFFECTED_PERC + value: '' + + # provide the number of workers for memory stress + - name: NUMBER_OF_WORKERS + value: '1' + + # provide the percentage of available memory to stress + - name: MEMORY_PERCENTAGE + value: '80' + + # provide the CPU chores to comsumed + # 0 will consume all the available CPU cores + - name: CPU_CORE + value: '0' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # Provide the name of SSM doc + # if not using the default stress docs + - name: DOCUMENT_NAME + value: 'LitmusChaos-AWS-SSM-Doc' + + # Provide the type of SSM doc + # if not using the default stress docs + - name: DOCUMENT_TYPE + value: 'Command' + + # Provide the format of SSM doc + # if not using the default stress docs + - name: DOCUMENT_FORMAT + value: 'YAML' + + # Provide the path of SSM doc + # if not using the default stress docs + - name: DOCUMENT_PATH + value: 'Litmus-AWS-SSM-Docs-For-EC2-CPU-Hog.yml' + + # if you want to install dependencies to run default SSM docs + - name: INSTALL_DEPENDENCIES + value: 'True' + + labels: + name: aws-ssm-chaos-by-tag + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/aws/aws.chartserviceversion.yaml b/faults/aws/aws.chartserviceversion.yaml new file mode 100644 index 000000000..c24fccac2 --- /dev/null +++ b/faults/aws/aws.chartserviceversion.yaml @@ -0,0 +1,51 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: aws + version: 0.1.0 + annotations: + categories: AWS + chartDescription: Injects faults on AWS services + executionPlane: "kubernetes" +spec: + displayName: AWS + categoryDescription: > + AWS chaos contains different faults for AWS cloud provider to test the app/platform service availability. It uses AWS command to carry the fault logic in the instance. It will install all the faults which can be used to inject chaos into the AWS services like EC2, ECS, S3 and so on. + faults: + - name: alb-az-down + description: It injects AZ down chaos on ALB for a certain chaos duration. + displayName: "ALB AZ Down" + - name: aws-ssm-chaos-by-id + description: It allow to perform in-VM chaos using AWS SSM service and EC2 instance ID. + displayName: "AWS SSM Chaos By ID" + - name: aws-ssm-chaos-by-tag + description: It allow to perform in-VM chaos using AWS SSM service and EC2 instance tag. + displayName: "AWS SSM Chaos By Tag" + - name: ec2-terminate-by-id + description: It stops the AWS EC2 instance identified by ID for a certain chaos duration. + displayName: "EC2 Stop By ID" + - name: ec2-terminate-by-tag + description: It stops the AWS EC2 instance identified by Tag for a certain chaos duration. + displayName: "EC2 Stop By Tag" + - name: ebs-loss-by-id + description: It detach the EBS volume from AWS EC2 instance identified by ID for a certain chaos duration. + displayName: "EBS Loss By ID" + - name: ebs-loss-by-tag + description: It detach the EBS volume from AWS EC2 instance identified by Tag for a certain chaos duration. + displayName: "EBS Loss By Tag" + keywords: + - AWS + minKubeVersion: 1.12.0 + links: + - name: Kubernetes Website + url: https://kubernetes.io + - name: Source Code + url: https://github.com/kubernetes/kubernetes + - name: Kubernetes Slack + url: https://slack.kubernetes.io/ + - name: Documentation + url: "" + icon: + - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico + mediatype: image/png diff --git a/faults/aws/aws.package.yaml b/faults/aws/aws.package.yaml new file mode 100644 index 000000000..a063d0767 --- /dev/null +++ b/faults/aws/aws.package.yaml @@ -0,0 +1,24 @@ +--- +packageName: aws +faults: + - name: alb-az-down + CSV: alb-az-down.chartserviceversion.yaml + desc: "alb-az-down" + - name: aws-ssm-chaos-by-id + CSV: aws-ssm-chaos-by-id.chartserviceversion.yaml + desc: "aws-ssm-chaos-by-id" + - name: aws-ssm-chaos-by-tag + CSV: aws-ssm-chaos-by-tag.chartserviceversion.yaml + desc: "aws-ssm-chaos-by-tag" + - name: ec2-terminate-by-id + CSV: ec2-terminate-by-id.chartserviceversion.yaml + desc: "ec2-terminate-by-id" + - name: ec2-terminate-by-tag + CSV: ec2-terminate-by-tag.chartserviceversion.yaml + desc: "ec2-terminate-by-tag" + - name: ebs-loss-by-id + CSV: ebs-loss-by-id.chartserviceversion.yaml + desc: "ebs-loss-by-id" + - name: ebs-loss-by-tag + CSV: ebs-loss-by-tag.chartserviceversion.yaml + desc: "ebs-loss-by-tag" diff --git a/faults/aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml b/faults/aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml new file mode 100644 index 000000000..f479682a3 --- /dev/null +++ b/faults/aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-28T10:28:08Z + name: ebs-loss-by-id + version: 0.1.0 + annotations: + categories: AWS + vendor: Harness +spec: + displayName: EBS Loss By ID + categoryDescription: | + EBS Loss By ID fault disrupts state of infra resources. The fault induces EBS volume loss against specified application for the give EBS Volume(s). + - Causes EBS volume loss from node or EC2 instance for a certain chaos interval from total chaos duration. + - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. + keywords: + - AWS + platforms: + - AWS + chaosType: infra + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/kube-aws/ebs-loss-by-id/engine.yaml b/faults/aws/ebs-loss-by-id/engine.yaml similarity index 78% rename from charts/kube-aws/ebs-loss-by-id/engine.yaml rename to faults/aws/ebs-loss-by-id/engine.yaml index cdb30105a..5d96eb0dc 100644 --- a/charts/kube-aws/ebs-loss-by-id/engine.yaml +++ b/faults/aws/ebs-loss-by-id/engine.yaml @@ -1,25 +1,26 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: nginx-chaos + name: aws-chaos namespace: default spec: engineState: 'active' - chaosServiceAccount: ebs-loss-by-id-sa + chaosServiceAccount: litmus-admin experiments: - name: ebs-loss-by-id spec: components: - env: + env: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION value: '30' # set chaos duration (in sec) as desired - name: CHAOS_INTERVAL - value: '30' + value: '30' - # set target ebs volume ID + # set target EBS volume ID - name: EBS_VOLUME_ID value: '' diff --git a/faults/aws/ebs-loss-by-id/fault.yaml b/faults/aws/ebs-loss-by-id/fault.yaml new file mode 100644 index 000000000..eb0d2b55a --- /dev/null +++ b/faults/aws/ebs-loss-by-id/fault.yaml @@ -0,0 +1,87 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Detaching an EBS volume from EC2 instance for a certain chaos duration. +kind: ChaosExperiment +metadata: + name: ebs-loss-by-id + labels: + name: ebs-loss-by-id + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name ebs-loss-by-id + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '30' + + - name: CHAOS_INTERVAL + value: '30' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: EBS_VOLUME_ID + value: '' + + - name: REGION + value: '' + + - name: SEQUENCE + value: 'parallel' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # Provide the path of AWS credentials mounted from secret + - name: AWS_SHARED_CREDENTIALS_FILE + value: '/tmp/cloud_config.yml' + + labels: + name: ebs-loss-by-id + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml b/faults/aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml new file mode 100644 index 000000000..e9ec1c22b --- /dev/null +++ b/faults/aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-28T10:28:08Z + name: ebs-loss-by-tag + version: 0.1.0 + annotations: + categories: AWS + vendor: Harness +spec: + displayName: EBS Loss By Tag + categoryDescription: | + EBS Loss By Tag fault disrupts state of infra resources. The fault induces EBS volume loss against specified application for given volume tag. + - Causes EBS volume loss by tag from node or EC2 instance for certain chaos interval from total chaos duration. + - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. + keywords: + - AWS + platforms: + - AWS + chaosType: infra + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/kube-aws/ebs-loss-by-tag/engine.yaml b/faults/aws/ebs-loss-by-tag/engine.yaml similarity index 79% rename from charts/kube-aws/ebs-loss-by-tag/engine.yaml rename to faults/aws/ebs-loss-by-tag/engine.yaml index a9212ef24..43d12bcf0 100644 --- a/charts/kube-aws/ebs-loss-by-tag/engine.yaml +++ b/faults/aws/ebs-loss-by-tag/engine.yaml @@ -1,16 +1,17 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: nginx-chaos + name: aws-chaos namespace: default spec: engineState: 'active' - chaosServiceAccount: ebs-loss-by-tag-sa + chaosServiceAccount: litmus-admin experiments: - name: ebs-loss-by-tag spec: components: - env: + env: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION value: '30' @@ -21,12 +22,11 @@ spec: # provide EBS volume tag attached to the given instance # it'll be in form of key:value (ex: 'team:devops') - name: EBS_VOLUME_TAG - value: '' - + value: '' + # provide the region name of the instance - name: REGION value: '' - name: VOLUME_AFFECTED_PERC - value: '' - \ No newline at end of file + value: '' diff --git a/faults/aws/ebs-loss-by-tag/fault.yaml b/faults/aws/ebs-loss-by-tag/fault.yaml new file mode 100644 index 000000000..9f2d3dfe8 --- /dev/null +++ b/faults/aws/ebs-loss-by-tag/fault.yaml @@ -0,0 +1,89 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Detaching an EBS volume from EC2 instance. +kind: ChaosExperiment +metadata: + name: ebs-loss-by-tag + labels: + name: ebs-loss-by-tag + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name ebs-loss-by-tag + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '30' + + - name: CHAOS_INTERVAL + value: '30' + + - name: RAMP_TIME + value: '' + + - name: EBS_VOLUME_TAG + value: '' + + - name: REGION + value: '' + + - name: SEQUENCE + value: 'parallel' + + - name: VOLUME_AFFECTED_PERC + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # Provide the path of AWS credentials mounted from secret + - name: AWS_SHARED_CREDENTIALS_FILE + value: '/tmp/cloud_config.yml' + + labels: + name: ebs-loss-by-tag + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/aws/ec2-stop-by-tag/ec2-stop-by-tag.chartserviceversion.yaml b/faults/aws/ec2-stop-by-tag/ec2-stop-by-tag.chartserviceversion.yaml new file mode 100644 index 000000000..061ab11c6 --- /dev/null +++ b/faults/aws/ec2-stop-by-tag/ec2-stop-by-tag.chartserviceversion.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-27T10:28:08Z + name: ec2-stop-by-tag + version: 0.1.0 + annotations: + categories: AWS + vendor: Harness +spec: + displayName: EC2 Stop By Tag + categoryDescription: | + This fault causes termination of an EC2 instance for a certain chaos duration. + - Causes termination of an EC2 instance using instance tags before bringing it back to running state after the specified chaos duration. + - It helps to check the performance of the application on the EC2 instance. + keywords: + - AWS + platforms: + - AWS + chaosType: infra + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/kube-aws/ec2-terminate-by-tag/engine.yaml b/faults/aws/ec2-stop-by-tag/engine.yaml similarity index 75% rename from charts/kube-aws/ec2-terminate-by-tag/engine.yaml rename to faults/aws/ec2-stop-by-tag/engine.yaml index 6ed309da6..909409c37 100644 --- a/charts/kube-aws/ec2-terminate-by-tag/engine.yaml +++ b/faults/aws/ec2-stop-by-tag/engine.yaml @@ -1,29 +1,30 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: nginx-chaos + name: aws-chaos namespace: default spec: engineState: 'active' - chaosServiceAccount: ec2-terminate-by-tag-sa + chaosServiceAccount: litmus-admin experiments: - - name: ec2-terminate-by-tag + - name: ec2-stop-by-tag spec: components: - env: + env: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION value: '30' # set interval duration (in sec) as desired - name: CHAOS_INTERVAL - value: '30' + value: '30' - # Instance Tag of the target ec2 instances + # Instance Tag of the target EC2 instances # ex: team:devops (key:value) - - name: INSTANCE_TAG + - name: EC2_INSTANCE_TAG value: '' - + # provide the region name of the instance - name: REGION value: '' @@ -31,7 +32,7 @@ spec: # enable it if the target instance is a part of self-managed nodegroup. - name: MANAGED_NODEGROUP value: 'disable' - + # Target the percentage of instance filtered from tag - name: INSTANCE_AFFECTED_PERC value: '' diff --git a/faults/aws/ec2-stop-by-tag/fault.yaml b/faults/aws/ec2-stop-by-tag/fault.yaml new file mode 100644 index 000000000..c63d8fe8f --- /dev/null +++ b/faults/aws/ec2-stop-by-tag/fault.yaml @@ -0,0 +1,103 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Stopping an EC2 instance identified by tag. +kind: ChaosExperiment +metadata: + name: ec2-stop-by-tag + labels: + name: ec2-stop-by-tag + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name ec2-stop-by-tag + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '30' + + - name: CHAOS_INTERVAL + value: '30' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # Provide a common tag to target ec2 instances + - name: EC2_INSTANCE_TAG + value: '' + + # enable it if the target instance is a part of self-managed nodegroup. + - name: MANAGED_NODEGROUP + value: 'disable' + + - name: REGION + value: '' + + # Target the percentage of instance filtered from tag + - name: INSTANCE_AFFECTED_PERC + value: '' + + - name: SEQUENCE + value: 'parallel' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # Provide the path of AWS credentials mounted from secret + - name: AWS_SHARED_CREDENTIALS_FILE + value: '/tmp/cloud_config.yml' + + - name: SEQUENCE + value: 'parallel' + + labels: + name: ec2-stop-by-tag + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml b/faults/aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml new file mode 100644 index 000000000..c79b62716 --- /dev/null +++ b/faults/aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-27T10:28:08Z + name: ec2-terminate-by-id + version: 0.1.0 + annotations: + categories: AWS + vendor: Harness +spec: + displayName: EC2 Terminate By ID + categoryDescription: | + This fault causes termination of an EC2 instance for a certain chaos duration. + - Causes termination of an EC2 instance provided by instance ID before bringing it back to running state after the specified chaos duration. + - It helps to check the performance of the application on the EC2 instances. + keywords: + - AWS + platforms: + - AWS + chaosType: infra + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/experiments/kube-aws/ec2-terminate-by-id/engine.yaml b/faults/aws/ec2-terminate-by-id/engine.yaml similarity index 80% rename from experiments/kube-aws/ec2-terminate-by-id/engine.yaml rename to faults/aws/ec2-terminate-by-id/engine.yaml index efceae8c9..9ae94f2a1 100644 --- a/experiments/kube-aws/ec2-terminate-by-id/engine.yaml +++ b/faults/aws/ec2-terminate-by-id/engine.yaml @@ -1,16 +1,17 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: nginx-chaos + name: aws-chaos namespace: default spec: engineState: 'active' - chaosServiceAccount: ec2-terminate-by-id-sa + chaosServiceAccount: litmus-admin experiments: - name: ec2-terminate-by-id spec: components: - env: + env: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION value: '30' @@ -19,15 +20,15 @@ spec: - name: CHAOS_INTERVAL value: '30' - # Instance ID of the target ec2 instance + # Instance ID of the target EC2 instance # Multiple IDs can also be provided as comma separated values ex: id1,id2 - name: EC2_INSTANCE_ID value: '' - + # provide the region name of the instance - name: REGION value: '' # enable it if the target instance is a part of self-managed nodegroup. - name: MANAGED_NODEGROUP - value: 'disable' \ No newline at end of file + value: 'disable' diff --git a/faults/aws/ec2-terminate-by-id/fault.yaml b/faults/aws/ec2-terminate-by-id/fault.yaml new file mode 100644 index 000000000..ff839d0e2 --- /dev/null +++ b/faults/aws/ec2-terminate-by-id/fault.yaml @@ -0,0 +1,97 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Stopping an EC2 instance identified by ID. +kind: ChaosExperiment +metadata: + name: ec2-terminate-by-id + labels: + name: ec2-terminate-by-id + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name ec2-terminate-by-id + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '30' + + - name: CHAOS_INTERVAL + value: '30' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # enable it if the target instance is a part of self-managed nodegroup. + - name: MANAGED_NODEGROUP + value: 'disable' + + # Instance ID of the target EC2 instance + # Multiple IDs can also be provided as comma separated values ex: id1,id2 + - name: EC2_INSTANCE_ID + value: '' + + - name: REGION + value: '' + + - name: SEQUENCE + value: 'parallel' + + # Provide the path of AWS credentials mounted from secret + - name: AWS_SHARED_CREDENTIALS_FILE + value: '/tmp/cloud_config.yml' + + labels: + name: ec2-terminate-by-id + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/aws/icons/alb-az-down.png b/faults/aws/icons/alb-az-down.png new file mode 100644 index 0000000000000000000000000000000000000000..f28852318fac43573f9cb1bd641bff6b3474df53 GIT binary patch literal 62023 zcmeFZWmjC=5-!}(Sa2tS;O-6~SmW;QgkZtlJ%W31cX#(DxVvj`ch|SG_u2Q{bH{l9 z!T!*LH72W9)vP&J&8nxK>R?5A2^2(pL;wJQA|)xR3;+O0{(KPNAR|k5aORLdP>#wH z!hrJ8_xk_<2|!9zNYzdMXvH&1Rl|q+?(}qdxRhJLpCT&L4FO%UaAw>?DZpu-sKvU$ zb9S??!1MiKUt`14rnx6C6_x3WQ}+vdO$}B^8tRyn#I5YSexPT|+|A-DzFRshz{~m(;*AEJT0P275lkOoD%FtuA9Mco7$}6L|FH?p`oG4580uf+{k!x2 zeQp2sdH)_5{~j3sb1eUR+GhS6s{9-0{Tn3zn_>JLB>$V9{r}~*uIN!lRd2n|I_Vsr zADRja`nGDh*OZ7PMhR1#RAt*4cv8lauEy+n2Gy1`a<0bQQxZif%w}?Z)Avof7bQ8% z6Z_@)XH_u?b~#5&ic}HtC1UTdPLcG2OlsNOH-CgDFu0RwwLMfb#!0^cq!lr|@c*5g z8`h7t+3V0Y?&^tIt@7_?BQzC_afg?(zHz`;%kXvdmWt6NAdTrY8c2jvWQ22{m)_yf$%xXG zs9H79D^5FUhCfhLeLsMe3@khbay-|BV3X`&W!~JncF4jGDuxAF+|QEdl^Th2#9)vQ z1cjuP#tG&pcclKjoJ-gm7RBD*3c=YPP%gsehW$pJ_a_baug6V1X@WO&zjiP1KH(_{ zScT}1WIxuVZ+?Bxy_*o^c@mDVn&C?E~D*kL4vw z4Z0zK4T*w?&CK7)__H}eQ$&QckLV@gWU&0_Awm^T7mi6L3ezHteJSj;>}JvKa%J)_ z0O%4z#3|}JKXMdM<_S_`&JCMdPXo@Nz2of>AFQzRE7tZ!_r@y>`$?G;2|6?2V4Ou^t;~ zWQQXeQM7(_T($qUX^Iv}!Ea+M(#@pS=}=XT2!1|*jw<5k4cG>#1NXjQR1*LM{5G^d z#wZ{1VD8}n@XFQ$%pF!i<<042L1`@a<>%)Y^LHCZq!0X4YX)>-%(SB3pS!*&@=Uf( zmt_f&zrOc&qtuI4p}AVf$})O)*R}*4#{Ht7WnlXGko_c0)>m>{oVU~x@4kdQ-m=WA z*586Zeu#Xg&iS_Vr??l9ZN*sm;kL07*MJmo7hcRKGiz60QZ!{+ks-*ue&rbw*OiAnmHz zRz1hMg5k1FyM-bv*tB}K)wrO294tn)J;a=5OqSc#$u4p`Uz@z>aPi>PNtK_d8bG}1 zel1NN;Kc0=Ro86)bwFqTbtB7cgr)d0+Iy$Z?-bh=C>lnK+X`l1|lz3 z)2gx1L4*p+d$BW-*#Qw2sl>f+1&ly!b31y^%YFQ@D@v&b_)>Xz(N4YijKP`o4C8Y_ z4_H!@08!2my%zLnR{y3?S=^$>D4aXZnvTbCEQ=8tu}!msd=V8U??iVcm9=6HK^cch zfzc-AL|IhN$l6sWeP;oJkqvXyqCd#@C@Jp1E;|By20tcTG|4NyA8&p+Yc1-4rU^=J zf(`2m%kfyz8h10lm*UMZ0#2->F(TYK%6QxJ1Vq+jkU%hvZUsqDaj9W-mzNbviJ`yw zkU_X2jANHXhx{gsDGaU)MY@?;_SJAkv&9G67^Tq0MF<}GH)nvw1!;1E%dMuVC7WYf zmLjDNrh)%x}8+h{^@LevQq8; zYE)UxHMv%{FMQ#oCqW-(H{22~=e^m-4r2^`kWcb?W0W0uCCe-LiXYGmthGwuC5+Wzpu5^}n$#`Lt*{tFm~3L5n$2EuX)34hL$zM#W>`!7H|EwnK&ouOlL zax?4?w8aIg%l(p9KAu-s>Yk$$daL=pPo;%Nuvb;J)Z=3%Ctgxw^3V_D{>UM65ehB} z`t5diXNeg@<}=F0*VKAD`t-3&;mHytE(O9|o)4`B*9Bk{yr3W?5J`pbl?3|ZLwN4y zdkJCFwfYA^HQgT$O~jbiz$^RjM`z3I88<

rur|?(!EE*rjbwr9ClD%K{spx&<<+ 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 Axc~qF literal 0 HcmV?d00001 diff --git a/faults/aws/icons/aws-ssm-chaos-by-id.png b/faults/aws/icons/aws-ssm-chaos-by-id.png new file mode 100644 index 0000000000000000000000000000000000000000..f28852318fac43573f9cb1bd641bff6b3474df53 GIT binary patch literal 62023 zcmeFZWmjC=5-!}(Sa2tS;O-6~SmW;QgkZtlJ%W31cX#(DxVvj`ch|SG_u2Q{bH{l9 z!T!*LH72W9)vP&J&8nxK>R?5A2^2(pL;wJQA|)xR3;+O0{(KPNAR|k5aORLdP>#wH z!hrJ8_xk_<2|!9zNYzdMXvH&1Rl|q+?(}qdxRhJLpCT&L4FO%UaAw>?DZpu-sKvU$ zb9S??!1MiKUt`14rnx6C6_x3WQ}+vdO$}B^8tRyn#I5YSexPT|+|A-DzFRshz{~m(;*AEJT0P275lkOoD%FtuA9Mco7$}6L|FH?p`oG4580uf+{k!x2 zeQp2sdH)_5{~j3sb1eUR+GhS6s{9-0{Tn3zn_>JLB>$V9{r}~*uIN!lRd2n|I_Vsr zADRja`nGDh*OZ7PMhR1#RAt*4cv8lauEy+n2Gy1`a<0bQQxZif%w}?Z)Avof7bQ8% z6Z_@)XH_u?b~#5&ic}HtC1UTdPLcG2OlsNOH-CgDFu0RwwLMfb#!0^cq!lr|@c*5g z8`h7t+3V0Y?&^tIt@7_?BQzC_afg?(zHz`;%kXvdmWt6NAdTrY8c2jvWQ22{m)_yf$%xXG zs9H79D^5FUhCfhLeLsMe3@khbay-|BV3X`&W!~JncF4jGDuxAF+|QEdl^Th2#9)vQ z1cjuP#tG&pcclKjoJ-gm7RBD*3c=YPP%gsehW$pJ_a_baug6V1X@WO&zjiP1KH(_{ zScT}1WIxuVZ+?Bxy_*o^c@mDVn&C?E~D*kL4vw z4Z0zK4T*w?&CK7)__H}eQ$&QckLV@gWU&0_Awm^T7mi6L3ezHteJSj;>}JvKa%J)_ z0O%4z#3|}JKXMdM<_S_`&JCMdPXo@Nz2of>AFQzRE7tZ!_r@y>`$?G;2|6?2V4Ou^t;~ zWQQXeQM7(_T($qUX^Iv}!Ea+M(#@pS=}=XT2!1|*jw<5k4cG>#1NXjQR1*LM{5G^d z#wZ{1VD8}n@XFQ$%pF!i<<042L1`@a<>%)Y^LHCZq!0X4YX)>-%(SB3pS!*&@=Uf( zmt_f&zrOc&qtuI4p}AVf$})O)*R}*4#{Ht7WnlXGko_c0)>m>{oVU~x@4kdQ-m=WA z*586Zeu#Xg&iS_Vr??l9ZN*sm;kL07*MJmo7hcRKGiz60QZ!{+ks-*ue&rbw*OiAnmHz zRz1hMg5k1FyM-bv*tB}K)wrO294tn)J;a=5OqSc#$u4p`Uz@z>aPi>PNtK_d8bG}1 zel1NN;Kc0=Ro86)bwFqTbtB7cgr)d0+Iy$Z?-bh=C>lnK+X`l1|lz3 z)2gx1L4*p+d$BW-*#Qw2sl>f+1&ly!b31y^%YFQ@D@v&b_)>Xz(N4YijKP`o4C8Y_ z4_H!@08!2my%zLnR{y3?S=^$>D4aXZnvTbCEQ=8tu}!msd=V8U??iVcm9=6HK^cch zfzc-AL|IhN$l6sWeP;oJkqvXyqCd#@C@Jp1E;|By20tcTG|4NyA8&p+Yc1-4rU^=J zf(`2m%kfyz8h10lm*UMZ0#2->F(TYK%6QxJ1Vq+jkU%hvZUsqDaj9W-mzNbviJ`yw zkU_X2jANHXhx{gsDGaU)MY@?;_SJAkv&9G67^Tq0MF<}GH)nvw1!;1E%dMuVC7WYf zmLjDNrh)%x}8+h{^@LevQq8; zYE)UxHMv%{FMQ#oCqW-(H{22~=e^m-4r2^`kWcb?W0W0uCCe-LiXYGmthGwuC5+Wzpu5^}n$#`Lt*{tFm~3L5n$2EuX)34hL$zM#W>`!7H|EwnK&ouOlL zax?4?w8aIg%l(p9KAu-s>Yk$$daL=pPo;%Nuvb;J)Z=3%Ctgxw^3V_D{>UM65ehB} z`t5diXNeg@<}=F0*VKAD`t-3&;mHytE(O9|o)4`B*9Bk{yr3W?5J`pbl?3|ZLwN4y zdkJCFwfYA^HQgT$O~jbiz$^RjM`z3I88<

rur|?(!EE*rjbwr9ClD%K{spx&<<+ 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 Axc~qF literal 0 HcmV?d00001 diff --git a/faults/aws/icons/aws-ssm-chaos-by-tag.png b/faults/aws/icons/aws-ssm-chaos-by-tag.png new file mode 100644 index 0000000000000000000000000000000000000000..f28852318fac43573f9cb1bd641bff6b3474df53 GIT binary patch literal 62023 zcmeFZWmjC=5-!}(Sa2tS;O-6~SmW;QgkZtlJ%W31cX#(DxVvj`ch|SG_u2Q{bH{l9 z!T!*LH72W9)vP&J&8nxK>R?5A2^2(pL;wJQA|)xR3;+O0{(KPNAR|k5aORLdP>#wH z!hrJ8_xk_<2|!9zNYzdMXvH&1Rl|q+?(}qdxRhJLpCT&L4FO%UaAw>?DZpu-sKvU$ zb9S??!1MiKUt`14rnx6C6_x3WQ}+vdO$}B^8tRyn#I5YSexPT|+|A-DzFRshz{~m(;*AEJT0P275lkOoD%FtuA9Mco7$}6L|FH?p`oG4580uf+{k!x2 zeQp2sdH)_5{~j3sb1eUR+GhS6s{9-0{Tn3zn_>JLB>$V9{r}~*uIN!lRd2n|I_Vsr zADRja`nGDh*OZ7PMhR1#RAt*4cv8lauEy+n2Gy1`a<0bQQxZif%w}?Z)Avof7bQ8% z6Z_@)XH_u?b~#5&ic}HtC1UTdPLcG2OlsNOH-CgDFu0RwwLMfb#!0^cq!lr|@c*5g z8`h7t+3V0Y?&^tIt@7_?BQzC_afg?(zHz`;%kXvdmWt6NAdTrY8c2jvWQ22{m)_yf$%xXG zs9H79D^5FUhCfhLeLsMe3@khbay-|BV3X`&W!~JncF4jGDuxAF+|QEdl^Th2#9)vQ z1cjuP#tG&pcclKjoJ-gm7RBD*3c=YPP%gsehW$pJ_a_baug6V1X@WO&zjiP1KH(_{ zScT}1WIxuVZ+?Bxy_*o^c@mDVn&C?E~D*kL4vw z4Z0zK4T*w?&CK7)__H}eQ$&QckLV@gWU&0_Awm^T7mi6L3ezHteJSj;>}JvKa%J)_ z0O%4z#3|}JKXMdM<_S_`&JCMdPXo@Nz2of>AFQzRE7tZ!_r@y>`$?G;2|6?2V4Ou^t;~ zWQQXeQM7(_T($qUX^Iv}!Ea+M(#@pS=}=XT2!1|*jw<5k4cG>#1NXjQR1*LM{5G^d z#wZ{1VD8}n@XFQ$%pF!i<<042L1`@a<>%)Y^LHCZq!0X4YX)>-%(SB3pS!*&@=Uf( zmt_f&zrOc&qtuI4p}AVf$})O)*R}*4#{Ht7WnlXGko_c0)>m>{oVU~x@4kdQ-m=WA z*586Zeu#Xg&iS_Vr??l9ZN*sm;kL07*MJmo7hcRKGiz60QZ!{+ks-*ue&rbw*OiAnmHz zRz1hMg5k1FyM-bv*tB}K)wrO294tn)J;a=5OqSc#$u4p`Uz@z>aPi>PNtK_d8bG}1 zel1NN;Kc0=Ro86)bwFqTbtB7cgr)d0+Iy$Z?-bh=C>lnK+X`l1|lz3 z)2gx1L4*p+d$BW-*#Qw2sl>f+1&ly!b31y^%YFQ@D@v&b_)>Xz(N4YijKP`o4C8Y_ z4_H!@08!2my%zLnR{y3?S=^$>D4aXZnvTbCEQ=8tu}!msd=V8U??iVcm9=6HK^cch zfzc-AL|IhN$l6sWeP;oJkqvXyqCd#@C@Jp1E;|By20tcTG|4NyA8&p+Yc1-4rU^=J zf(`2m%kfyz8h10lm*UMZ0#2->F(TYK%6QxJ1Vq+jkU%hvZUsqDaj9W-mzNbviJ`yw zkU_X2jANHXhx{gsDGaU)MY@?;_SJAkv&9G67^Tq0MF<}GH)nvw1!;1E%dMuVC7WYf zmLjDNrh)%x}8+h{^@LevQq8; zYE)UxHMv%{FMQ#oCqW-(H{22~=e^m-4r2^`kWcb?W0W0uCCe-LiXYGmthGwuC5+Wzpu5^}n$#`Lt*{tFm~3L5n$2EuX)34hL$zM#W>`!7H|EwnK&ouOlL zax?4?w8aIg%l(p9KAu-s>Yk$$daL=pPo;%Nuvb;J)Z=3%Ctgxw^3V_D{>UM65ehB} z`t5diXNeg@<}=F0*VKAD`t-3&;mHytE(O9|o)4`B*9Bk{yr3W?5J`pbl?3|ZLwN4y zdkJCFwfYA^HQgT$O~jbiz$^RjM`z3I88<

rur|?(!EE*rjbwr9ClD%K{spx&<<+ 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 Axc~qF literal 0 HcmV?d00001 diff --git a/faults/aws/icons/ebs-loss-by-id.png b/faults/aws/icons/ebs-loss-by-id.png new file mode 100644 index 0000000000000000000000000000000000000000..f28852318fac43573f9cb1bd641bff6b3474df53 GIT binary patch literal 62023 zcmeFZWmjC=5-!}(Sa2tS;O-6~SmW;QgkZtlJ%W31cX#(DxVvj`ch|SG_u2Q{bH{l9 z!T!*LH72W9)vP&J&8nxK>R?5A2^2(pL;wJQA|)xR3;+O0{(KPNAR|k5aORLdP>#wH z!hrJ8_xk_<2|!9zNYzdMXvH&1Rl|q+?(}qdxRhJLpCT&L4FO%UaAw>?DZpu-sKvU$ zb9S??!1MiKUt`14rnx6C6_x3WQ}+vdO$}B^8tRyn#I5YSexPT|+|A-DzFRshz{~m(;*AEJT0P275lkOoD%FtuA9Mco7$}6L|FH?p`oG4580uf+{k!x2 zeQp2sdH)_5{~j3sb1eUR+GhS6s{9-0{Tn3zn_>JLB>$V9{r}~*uIN!lRd2n|I_Vsr zADRja`nGDh*OZ7PMhR1#RAt*4cv8lauEy+n2Gy1`a<0bQQxZif%w}?Z)Avof7bQ8% z6Z_@)XH_u?b~#5&ic}HtC1UTdPLcG2OlsNOH-CgDFu0RwwLMfb#!0^cq!lr|@c*5g z8`h7t+3V0Y?&^tIt@7_?BQzC_afg?(zHz`;%kXvdmWt6NAdTrY8c2jvWQ22{m)_yf$%xXG zs9H79D^5FUhCfhLeLsMe3@khbay-|BV3X`&W!~JncF4jGDuxAF+|QEdl^Th2#9)vQ z1cjuP#tG&pcclKjoJ-gm7RBD*3c=YPP%gsehW$pJ_a_baug6V1X@WO&zjiP1KH(_{ zScT}1WIxuVZ+?Bxy_*o^c@mDVn&C?E~D*kL4vw z4Z0zK4T*w?&CK7)__H}eQ$&QckLV@gWU&0_Awm^T7mi6L3ezHteJSj;>}JvKa%J)_ z0O%4z#3|}JKXMdM<_S_`&JCMdPXo@Nz2of>AFQzRE7tZ!_r@y>`$?G;2|6?2V4Ou^t;~ zWQQXeQM7(_T($qUX^Iv}!Ea+M(#@pS=}=XT2!1|*jw<5k4cG>#1NXjQR1*LM{5G^d z#wZ{1VD8}n@XFQ$%pF!i<<042L1`@a<>%)Y^LHCZq!0X4YX)>-%(SB3pS!*&@=Uf( zmt_f&zrOc&qtuI4p}AVf$})O)*R}*4#{Ht7WnlXGko_c0)>m>{oVU~x@4kdQ-m=WA z*586Zeu#Xg&iS_Vr??l9ZN*sm;kL07*MJmo7hcRKGiz60QZ!{+ks-*ue&rbw*OiAnmHz zRz1hMg5k1FyM-bv*tB}K)wrO294tn)J;a=5OqSc#$u4p`Uz@z>aPi>PNtK_d8bG}1 zel1NN;Kc0=Ro86)bwFqTbtB7cgr)d0+Iy$Z?-bh=C>lnK+X`l1|lz3 z)2gx1L4*p+d$BW-*#Qw2sl>f+1&ly!b31y^%YFQ@D@v&b_)>Xz(N4YijKP`o4C8Y_ z4_H!@08!2my%zLnR{y3?S=^$>D4aXZnvTbCEQ=8tu}!msd=V8U??iVcm9=6HK^cch zfzc-AL|IhN$l6sWeP;oJkqvXyqCd#@C@Jp1E;|By20tcTG|4NyA8&p+Yc1-4rU^=J zf(`2m%kfyz8h10lm*UMZ0#2->F(TYK%6QxJ1Vq+jkU%hvZUsqDaj9W-mzNbviJ`yw zkU_X2jANHXhx{gsDGaU)MY@?;_SJAkv&9G67^Tq0MF<}GH)nvw1!;1E%dMuVC7WYf zmLjDNrh)%x}8+h{^@LevQq8; zYE)UxHMv%{FMQ#oCqW-(H{22~=e^m-4r2^`kWcb?W0W0uCCe-LiXYGmthGwuC5+Wzpu5^}n$#`Lt*{tFm~3L5n$2EuX)34hL$zM#W>`!7H|EwnK&ouOlL zax?4?w8aIg%l(p9KAu-s>Yk$$daL=pPo;%Nuvb;J)Z=3%Ctgxw^3V_D{>UM65ehB} z`t5diXNeg@<}=F0*VKAD`t-3&;mHytE(O9|o)4`B*9Bk{yr3W?5J`pbl?3|ZLwN4y zdkJCFwfYA^HQgT$O~jbiz$^RjM`z3I88<

rur|?(!EE*rjbwr9ClD%K{spx&<<+ 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 Axc~qF literal 0 HcmV?d00001 diff --git a/faults/aws/icons/ebs-loss-by-tag.png b/faults/aws/icons/ebs-loss-by-tag.png new file mode 100644 index 0000000000000000000000000000000000000000..f28852318fac43573f9cb1bd641bff6b3474df53 GIT binary patch literal 62023 zcmeFZWmjC=5-!}(Sa2tS;O-6~SmW;QgkZtlJ%W31cX#(DxVvj`ch|SG_u2Q{bH{l9 z!T!*LH72W9)vP&J&8nxK>R?5A2^2(pL;wJQA|)xR3;+O0{(KPNAR|k5aORLdP>#wH z!hrJ8_xk_<2|!9zNYzdMXvH&1Rl|q+?(}qdxRhJLpCT&L4FO%UaAw>?DZpu-sKvU$ zb9S??!1MiKUt`14rnx6C6_x3WQ}+vdO$}B^8tRyn#I5YSexPT|+|A-DzFRshz{~m(;*AEJT0P275lkOoD%FtuA9Mco7$}6L|FH?p`oG4580uf+{k!x2 zeQp2sdH)_5{~j3sb1eUR+GhS6s{9-0{Tn3zn_>JLB>$V9{r}~*uIN!lRd2n|I_Vsr zADRja`nGDh*OZ7PMhR1#RAt*4cv8lauEy+n2Gy1`a<0bQQxZif%w}?Z)Avof7bQ8% z6Z_@)XH_u?b~#5&ic}HtC1UTdPLcG2OlsNOH-CgDFu0RwwLMfb#!0^cq!lr|@c*5g z8`h7t+3V0Y?&^tIt@7_?BQzC_afg?(zHz`;%kXvdmWt6NAdTrY8c2jvWQ22{m)_yf$%xXG zs9H79D^5FUhCfhLeLsMe3@khbay-|BV3X`&W!~JncF4jGDuxAF+|QEdl^Th2#9)vQ z1cjuP#tG&pcclKjoJ-gm7RBD*3c=YPP%gsehW$pJ_a_baug6V1X@WO&zjiP1KH(_{ zScT}1WIxuVZ+?Bxy_*o^c@mDVn&C?E~D*kL4vw z4Z0zK4T*w?&CK7)__H}eQ$&QckLV@gWU&0_Awm^T7mi6L3ezHteJSj;>}JvKa%J)_ z0O%4z#3|}JKXMdM<_S_`&JCMdPXo@Nz2of>AFQzRE7tZ!_r@y>`$?G;2|6?2V4Ou^t;~ zWQQXeQM7(_T($qUX^Iv}!Ea+M(#@pS=}=XT2!1|*jw<5k4cG>#1NXjQR1*LM{5G^d z#wZ{1VD8}n@XFQ$%pF!i<<042L1`@a<>%)Y^LHCZq!0X4YX)>-%(SB3pS!*&@=Uf( zmt_f&zrOc&qtuI4p}AVf$})O)*R}*4#{Ht7WnlXGko_c0)>m>{oVU~x@4kdQ-m=WA z*586Zeu#Xg&iS_Vr??l9ZN*sm;kL07*MJmo7hcRKGiz60QZ!{+ks-*ue&rbw*OiAnmHz zRz1hMg5k1FyM-bv*tB}K)wrO294tn)J;a=5OqSc#$u4p`Uz@z>aPi>PNtK_d8bG}1 zel1NN;Kc0=Ro86)bwFqTbtB7cgr)d0+Iy$Z?-bh=C>lnK+X`l1|lz3 z)2gx1L4*p+d$BW-*#Qw2sl>f+1&ly!b31y^%YFQ@D@v&b_)>Xz(N4YijKP`o4C8Y_ z4_H!@08!2my%zLnR{y3?S=^$>D4aXZnvTbCEQ=8tu}!msd=V8U??iVcm9=6HK^cch zfzc-AL|IhN$l6sWeP;oJkqvXyqCd#@C@Jp1E;|By20tcTG|4NyA8&p+Yc1-4rU^=J zf(`2m%kfyz8h10lm*UMZ0#2->F(TYK%6QxJ1Vq+jkU%hvZUsqDaj9W-mzNbviJ`yw zkU_X2jANHXhx{gsDGaU)MY@?;_SJAkv&9G67^Tq0MF<}GH)nvw1!;1E%dMuVC7WYf zmLjDNrh)%x}8+h{^@LevQq8; zYE)UxHMv%{FMQ#oCqW-(H{22~=e^m-4r2^`kWcb?W0W0uCCe-LiXYGmthGwuC5+Wzpu5^}n$#`Lt*{tFm~3L5n$2EuX)34hL$zM#W>`!7H|EwnK&ouOlL zax?4?w8aIg%l(p9KAu-s>Yk$$daL=pPo;%Nuvb;J)Z=3%Ctgxw^3V_D{>UM65ehB} z`t5diXNeg@<}=F0*VKAD`t-3&;mHytE(O9|o)4`B*9Bk{yr3W?5J`pbl?3|ZLwN4y zdkJCFwfYA^HQgT$O~jbiz$^RjM`z3I88<

rur|?(!EE*rjbwr9ClD%K{spx&<<+ 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 Axc~qF literal 0 HcmV?d00001 diff --git a/faults/aws/icons/ec2-terminate-by-id.png b/faults/aws/icons/ec2-terminate-by-id.png new file mode 100644 index 0000000000000000000000000000000000000000..f28852318fac43573f9cb1bd641bff6b3474df53 GIT binary patch literal 62023 zcmeFZWmjC=5-!}(Sa2tS;O-6~SmW;QgkZtlJ%W31cX#(DxVvj`ch|SG_u2Q{bH{l9 z!T!*LH72W9)vP&J&8nxK>R?5A2^2(pL;wJQA|)xR3;+O0{(KPNAR|k5aORLdP>#wH z!hrJ8_xk_<2|!9zNYzdMXvH&1Rl|q+?(}qdxRhJLpCT&L4FO%UaAw>?DZpu-sKvU$ zb9S??!1MiKUt`14rnx6C6_x3WQ}+vdO$}B^8tRyn#I5YSexPT|+|A-DzFRshz{~m(;*AEJT0P275lkOoD%FtuA9Mco7$}6L|FH?p`oG4580uf+{k!x2 zeQp2sdH)_5{~j3sb1eUR+GhS6s{9-0{Tn3zn_>JLB>$V9{r}~*uIN!lRd2n|I_Vsr zADRja`nGDh*OZ7PMhR1#RAt*4cv8lauEy+n2Gy1`a<0bQQxZif%w}?Z)Avof7bQ8% z6Z_@)XH_u?b~#5&ic}HtC1UTdPLcG2OlsNOH-CgDFu0RwwLMfb#!0^cq!lr|@c*5g z8`h7t+3V0Y?&^tIt@7_?BQzC_afg?(zHz`;%kXvdmWt6NAdTrY8c2jvWQ22{m)_yf$%xXG zs9H79D^5FUhCfhLeLsMe3@khbay-|BV3X`&W!~JncF4jGDuxAF+|QEdl^Th2#9)vQ z1cjuP#tG&pcclKjoJ-gm7RBD*3c=YPP%gsehW$pJ_a_baug6V1X@WO&zjiP1KH(_{ zScT}1WIxuVZ+?Bxy_*o^c@mDVn&C?E~D*kL4vw z4Z0zK4T*w?&CK7)__H}eQ$&QckLV@gWU&0_Awm^T7mi6L3ezHteJSj;>}JvKa%J)_ z0O%4z#3|}JKXMdM<_S_`&JCMdPXo@Nz2of>AFQzRE7tZ!_r@y>`$?G;2|6?2V4Ou^t;~ zWQQXeQM7(_T($qUX^Iv}!Ea+M(#@pS=}=XT2!1|*jw<5k4cG>#1NXjQR1*LM{5G^d z#wZ{1VD8}n@XFQ$%pF!i<<042L1`@a<>%)Y^LHCZq!0X4YX)>-%(SB3pS!*&@=Uf( zmt_f&zrOc&qtuI4p}AVf$})O)*R}*4#{Ht7WnlXGko_c0)>m>{oVU~x@4kdQ-m=WA z*586Zeu#Xg&iS_Vr??l9ZN*sm;kL07*MJmo7hcRKGiz60QZ!{+ks-*ue&rbw*OiAnmHz zRz1hMg5k1FyM-bv*tB}K)wrO294tn)J;a=5OqSc#$u4p`Uz@z>aPi>PNtK_d8bG}1 zel1NN;Kc0=Ro86)bwFqTbtB7cgr)d0+Iy$Z?-bh=C>lnK+X`l1|lz3 z)2gx1L4*p+d$BW-*#Qw2sl>f+1&ly!b31y^%YFQ@D@v&b_)>Xz(N4YijKP`o4C8Y_ z4_H!@08!2my%zLnR{y3?S=^$>D4aXZnvTbCEQ=8tu}!msd=V8U??iVcm9=6HK^cch zfzc-AL|IhN$l6sWeP;oJkqvXyqCd#@C@Jp1E;|By20tcTG|4NyA8&p+Yc1-4rU^=J zf(`2m%kfyz8h10lm*UMZ0#2->F(TYK%6QxJ1Vq+jkU%hvZUsqDaj9W-mzNbviJ`yw zkU_X2jANHXhx{gsDGaU)MY@?;_SJAkv&9G67^Tq0MF<}GH)nvw1!;1E%dMuVC7WYf zmLjDNrh)%x}8+h{^@LevQq8; zYE)UxHMv%{FMQ#oCqW-(H{22~=e^m-4r2^`kWcb?W0W0uCCe-LiXYGmthGwuC5+Wzpu5^}n$#`Lt*{tFm~3L5n$2EuX)34hL$zM#W>`!7H|EwnK&ouOlL zax?4?w8aIg%l(p9KAu-s>Yk$$daL=pPo;%Nuvb;J)Z=3%Ctgxw^3V_D{>UM65ehB} z`t5diXNeg@<}=F0*VKAD`t-3&;mHytE(O9|o)4`B*9Bk{yr3W?5J`pbl?3|ZLwN4y zdkJCFwfYA^HQgT$O~jbiz$^RjM`z3I88<

rur|?(!EE*rjbwr9ClD%K{spx&<<+ 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 Axc~qF literal 0 HcmV?d00001 diff --git a/faults/aws/icons/ec2-terminate-by-tag.png b/faults/aws/icons/ec2-terminate-by-tag.png new file mode 100644 index 0000000000000000000000000000000000000000..f28852318fac43573f9cb1bd641bff6b3474df53 GIT binary patch literal 62023 zcmeFZWmjC=5-!}(Sa2tS;O-6~SmW;QgkZtlJ%W31cX#(DxVvj`ch|SG_u2Q{bH{l9 z!T!*LH72W9)vP&J&8nxK>R?5A2^2(pL;wJQA|)xR3;+O0{(KPNAR|k5aORLdP>#wH z!hrJ8_xk_<2|!9zNYzdMXvH&1Rl|q+?(}qdxRhJLpCT&L4FO%UaAw>?DZpu-sKvU$ zb9S??!1MiKUt`14rnx6C6_x3WQ}+vdO$}B^8tRyn#I5YSexPT|+|A-DzFRshz{~m(;*AEJT0P275lkOoD%FtuA9Mco7$}6L|FH?p`oG4580uf+{k!x2 zeQp2sdH)_5{~j3sb1eUR+GhS6s{9-0{Tn3zn_>JLB>$V9{r}~*uIN!lRd2n|I_Vsr zADRja`nGDh*OZ7PMhR1#RAt*4cv8lauEy+n2Gy1`a<0bQQxZif%w}?Z)Avof7bQ8% z6Z_@)XH_u?b~#5&ic}HtC1UTdPLcG2OlsNOH-CgDFu0RwwLMfb#!0^cq!lr|@c*5g z8`h7t+3V0Y?&^tIt@7_?BQzC_afg?(zHz`;%kXvdmWt6NAdTrY8c2jvWQ22{m)_yf$%xXG zs9H79D^5FUhCfhLeLsMe3@khbay-|BV3X`&W!~JncF4jGDuxAF+|QEdl^Th2#9)vQ z1cjuP#tG&pcclKjoJ-gm7RBD*3c=YPP%gsehW$pJ_a_baug6V1X@WO&zjiP1KH(_{ zScT}1WIxuVZ+?Bxy_*o^c@mDVn&C?E~D*kL4vw z4Z0zK4T*w?&CK7)__H}eQ$&QckLV@gWU&0_Awm^T7mi6L3ezHteJSj;>}JvKa%J)_ z0O%4z#3|}JKXMdM<_S_`&JCMdPXo@Nz2of>AFQzRE7tZ!_r@y>`$?G;2|6?2V4Ou^t;~ zWQQXeQM7(_T($qUX^Iv}!Ea+M(#@pS=}=XT2!1|*jw<5k4cG>#1NXjQR1*LM{5G^d z#wZ{1VD8}n@XFQ$%pF!i<<042L1`@a<>%)Y^LHCZq!0X4YX)>-%(SB3pS!*&@=Uf( zmt_f&zrOc&qtuI4p}AVf$})O)*R}*4#{Ht7WnlXGko_c0)>m>{oVU~x@4kdQ-m=WA z*586Zeu#Xg&iS_Vr??l9ZN*sm;kL07*MJmo7hcRKGiz60QZ!{+ks-*ue&rbw*OiAnmHz zRz1hMg5k1FyM-bv*tB}K)wrO294tn)J;a=5OqSc#$u4p`Uz@z>aPi>PNtK_d8bG}1 zel1NN;Kc0=Ro86)bwFqTbtB7cgr)d0+Iy$Z?-bh=C>lnK+X`l1|lz3 z)2gx1L4*p+d$BW-*#Qw2sl>f+1&ly!b31y^%YFQ@D@v&b_)>Xz(N4YijKP`o4C8Y_ z4_H!@08!2my%zLnR{y3?S=^$>D4aXZnvTbCEQ=8tu}!msd=V8U??iVcm9=6HK^cch zfzc-AL|IhN$l6sWeP;oJkqvXyqCd#@C@Jp1E;|By20tcTG|4NyA8&p+Yc1-4rU^=J zf(`2m%kfyz8h10lm*UMZ0#2->F(TYK%6QxJ1Vq+jkU%hvZUsqDaj9W-mzNbviJ`yw zkU_X2jANHXhx{gsDGaU)MY@?;_SJAkv&9G67^Tq0MF<}GH)nvw1!;1E%dMuVC7WYf zmLjDNrh)%x}8+h{^@LevQq8; zYE)UxHMv%{FMQ#oCqW-(H{22~=e^m-4r2^`kWcb?W0W0uCCe-LiXYGmthGwuC5+Wzpu5^}n$#`Lt*{tFm~3L5n$2EuX)34hL$zM#W>`!7H|EwnK&ouOlL zax?4?w8aIg%l(p9KAu-s>Yk$$daL=pPo;%Nuvb;J)Z=3%Ctgxw^3V_D{>UM65ehB} z`t5diXNeg@<}=F0*VKAD`t-3&;mHytE(O9|o)4`B*9Bk{yr3W?5J`pbl?3|ZLwN4y zdkJCFwfYA^HQgT$O~jbiz$^RjM`z3I88<

rur|?(!EE*rjbwr9ClD%K{spx&<<+ z7NHDNDCVI%o5enE2rl)y&FyB;3G@et{frJ{n)p5Oxi4ZRp31kr=d4j30>)2TaL#@^ zY+F$Iad8n6PYg2*H&+9c>;PD*O@X@dz{iSlOx%$;m3n@SVT7Uifo4!w4P#l(g5M-E zZO+rvzfWu)k5B2G@<_ODOQ}5`qVu8T9{PR6GvrQa$RD*yi%|6*3tDHHZinf)ELijS zJ*+EVKOa#xmvNkYR||fML|;)W6HGW*9NKMr;8CLZQctuFmpKP;N6Ge${z|kV*?*+7 z-D?fBsomV2UZ+)CIhx(RKT3LSl+aaxzHo&`?yVvc@Z4DczOW{CBe5#50fiS8Y6X~f zF1-?(Xp@w9GSlI4^?oT@|B26oA$D`@AhyQudeu`>!_OLNX$^^*%Jh6MTOPD$BPg33 zTosS zYHZujPFih8`v@$@`iL?$!u6Q6wfZn3^TBg-VXXxi^1|1-N<5!tQey*}a5bnZ97S_! zPdZb7LP@fy{XP{w(Bh>Fxz4Wcx!!5yB($3<6V(vzzSgcWD;Q8?qb!MEdOw)=fe&eq zwdx|DqG_%!#y5DN`X)DHo^fogH8}?xg%Dr{q8++O+%65zXl?e1>Uv$6FO{RiE z{iogZvgE`uktsm;%!)TVl;^{vW$_1;Ok)^dr-!}u!}LMx0VBx7!dQV8*9D~W$@XY% zI#Ew_r6++szP#QW>%mc<4#)a5uSqc$@+|5dyK~MtT`upbCCy+8dpI$4)%SRfw$!i| zxOvDX-EN~s`vDZWi{_JcvI%t}VqA!ouylv~Bj+}gg!Lm|rieWK+hI8+M6b&z%vR-U z9g1)~0w5I<3lxz^;6(yRIl!g0S8Tt*SHIX&P*$OJ3EBYq%&M1vr@_F`+Byg|Wd7An zgcsF;;_$>jw{BurmxOj)VXl3t<|(F?qSzKxXPmQ~k>P#`*3r@*b~2fhhzKj#E;?lwz5KKi&N_8OZo3hJsh9G&w!0So+;)0p+$d=P@D(A z{tZVTuSy^;P3!FE$V0%7tPiL;uZ9jDjek^54N$ANkb&lho_NOn{Q?*)_FmO}oX{g; z8DCRgFADP!WW=QzBpOe^{On%m(dqisJ83z`!bgGx zC}d2lni|+h9Iefk?DaaWBk0A8ytf!}27Be=q^?dTRX{G7cQ9M-KC+4jC*h`{q}R2Z zKOS=LS#{x2kQiDPFUH6>YgZlwCHcX5qLTji``I5#rru=S+&3aL@(tn&ir4-&EwTJ$ z51dMT1i#QSX)UecpxkYwra9+PA2B$J?FG)}rz~?QJcO|y0Z+(&f%wiRa2b7N(Z!6W zvuAkh+;=->A6G`|yjdQ*2W^F?DgFETWU^$cq1J6Nl9a#g<+(=u9363D7IP>V#ij#&6y+$P>&D_ljdjWRIZl&Yb82kC-}&#Q zXDnbdpA>HY;R4Kg7;CY+GCgiuX*r0By>f&cU6xf+vGEO@{n;IE&TPB%#b!+*6diJ< z&r(62cXp_Usia-LBGzl@@9V*@SX!6TL5@b;0#92a>e*w$xd?HF9@8Reh%wGJI=6dZ zrmDMYbC%Hf0`lM5=`9@bBTKhOLH-8PK;QnZItp?vu8N1=80I%;&S9?a``OCeo_Ug7 zd6P;Opc2Ol2L+(G0$J2JhC(dDt4$EVK5thdX>QR(D&m$i?kzq+&LKu!_iLF7v!=-p z9@1GEUyZ1DE9-@NR$Y)(X4z8l)`Jk?L{hO@+|ADYVFpwrtuVj}Gn1O82Be)#KStv7 zeILQGba#5(&}3kTpoX-=U8hamAxGD86ka$YmAwjK6Ji*G^#isg4bHOSb$2!Q(J(Ri znq|$pm(*HT7m;mhfIWeAvuqTTjOLD|Np)FqJdL-e+L*9nfcWe6a1~I{BDiEnOr9PL z$VI`Icr6HdmfRrziqjC}M4b6-ZKu=veIGV}=#5s(ad2FdmrZD4WBNQZ=-m8m9IZy? z0WM2?nB2?O^f}%d!e%pDbBJOM)krs~n^fi))VUAgF+LGKo!szMJlCryEpF(<_{^XU z#T_Dvr-sW>|~#J1hl>&y=K+Rl-fft5gQORCOpY6=ceI<(=Txzh?8fM~w! zjpwx~2eG8}_}f|AwZ{(>_u;khD%~R{&b&#NGx^Y2k>5%e>PlK#CL74Aq?FV;5Z8lQ ziiP_!9p2GVevVlabiVqo@vE`is+?@PREpgK0afHmhl~b?%AWL)6P8`yHWuw4aAhv` z917I2Pf&#kv|Hl)^$51IK_ zb>S92xPJjCM4rCm5t=SeeP6>HW0CPcNOkL>C%f?NqN?~-`Pm9A7&QNtEALa;f^usC zJF)E)hZev`YsN$o@s%=wJL|3-kQXd{a`!#E8e3`^4c zG*HBi%5Y!|4VB+E>QwyM8*wj4{zy6HsX2G5d`qCrv}L1Y8}_YVtryO$jo%*yD1cG8 z<*hrq51s(HPnBz;JH)e$>;*D;$}u*u@tueMed+oHloMFlOzZ?caA1*ly1mpPTRtRe zF^1e>saes}HT1!IK5F+auLsM&8J65K!;ePy z;n~WMpsY>D7NyL&T@{l-=CoB}gf> z>NAG0Ks}?c`;g24jQiL#s<2?TYaz=?w7e;IDtmGKk z|LCxC4T;uu49^_3^_FUpz{#bDLEGHQkV%ts*6`s0qZqF7G`WCLu+a5~ORyFA{SD-j zQq)vq9hakM6=wD&zp149Z{U@2o$W1?7&G{p(>8z;394suU+>m8meDBYJs>eElARQE z*vrZSw}IQ7M2hPg_g*hs^c_2*7X~<%^eAu=>{(G!CZ&oVTKvdP5(B~znWP|K@4$u& zc(1y$6RLhiKS znVSU7&JeHRmFrbR*$RVnLXf#xQtM=|1K*w%gJ1AO9Sm7d;4$s^A#OGUN_$Yu?Q(^j z*^A{cSr6?0ycBv%OBYG-8E*POL8Ov1>RA!jPNSi*(r3ZjA{#L2wb zZNV!5K}G3+IN48O z*qS4g3i0!K6T<|uZJIM$L!$tDlzMjzk#as9^Bui>(rI+M*Zfl36kf78;eT?$#kpf9 zwjzJ_@Yc^WMaQOVR3E9Z4m#1kP(Em{QCJuBJ3aCwNt5szD87PEb8D-D1e%5=3c;B0 z0I`Vx$dvsu6(&L5+f;bBws?MxVh?S8PGEjP9CrlWsEza_D1PpDejKISCSGI^7oq_c z4zcZ|)oi$4H>5aj!g!|?^k_tgF^|#c8~T`C_a!pI0=tFTAjeeQ@?EJWo~BbU1yiFR z7+ZCUc~0QFy+Nxt^s(AZdo8tOW$Va~gF~$q=xsD$SlII1F`-Up zCEc2h^hi_WVEK83DhjG&MK&YrTzm~#juO=TRykR+m>LV+zV{r}y%hbVG4kJ!BRCGE z{{hDh-8IML;7BelOrY9>p(Op{*p_4su}<@f!d+pQiCE+8xTWJ!L!d9B2c1~L9s|}@u<2U z5Geql*G(1&3{8Q>>SWZKNhaUSGl6tZ6_AF*pGAjw$kbmnF;(bxhfdRZA2wzd>dVB5 z@Q!}ChB^sG0dB(+Z5?@$B(2MYHmu7!y_oAKPLV2zYLXTkO=Zs0%e|^+v=d~ZUR7Zu zITo8ccS~H*)g;)&moF7RRRkvwG2H=<#0JFhO6TeK9a&-yE6*joP4~^&V;QHX@Th~G zbR(_JR0|m}ib@^EdUyr7P4fO=8M~%|Al@gwKYOQ<-_+$J97)mybL%>wz;LCG8oroV z%O1%uClZ3?VaPV7r%(vJ|EHFN_gBfq@&3G4f|`5rlSFd@)kL6%X`DP)lUd$XIEsY* zsqtbLmPWIz1VxhrMU$7715VYwu9$<;x75Qolaeh_iFst2d6j4(MrF;zv~)HGFt-Z$ ziQfddZ?LQn!U_e@dVDN%h*Np&*ROu*tSpZ~e6G{Zrgex@*RX*)$`1UmY>4Lrdz0_1 z78ak{@%L2xI`GkaYM7!%O;0=x);{4REdof(1=>L-BMSHsb$wt!HO<6_FmdoaD%EKMV{O4Y5l9(&cn5%l0xLb z7u)vF%j$@(9yZNMFmJZ>l}a7RDQyN*GIpteQBef9y5-?e{kpZ#yj&#!Q9n(8DG=4N zml^_goME5qEd7AvFBpS&P(C|HQiDX514Qbtg*E=njp zQ;MKEl9GBn&xGWQHk?Fnqit@|X5McYc|Faky4}i24<@+$Dryn6lZ=C3?y}P?i$lr_4?89JFt6mxF+x3oVC-v5YAEvpF<>ECY zq=(z~9kF(N=G+U6G~Nt51gU4Fd`UhPAEtqvjPuFECsxRy>KX&Pfp_wq4qbi3Ap18l zH^TZ(ZPDs>q*3XqO^f;bg47b?hz{fj2Xs!Z3xjSNWceDhwb*pGoqHazTv7py=%q+k zLavYAfmOJXGfh z2ai5+t8)fJAC!O!=T|v!YhWX{(vL|w?BR^9s#y?Bm=?L zcDu8dVIr)w0hWlV@OGWBB(obve-(b_L-={7)OsP1rr!dIdINMdY%&~~rH*mcre)>5vBx{mjlUKFR z;4;^gCX{u9719M?F5-B6#D@3n5?t`u?rBLJ7M2Cj`s;bpGVkFvxPPdn;_hM4L`cSX z>d`mdR?8wzJ}s5U+c|FOROzeMgN(bN&9E5`wn*C#M$CASL0%TzjSOfil?UX6r(eFs z_8w@dIcmWsKydW8>|t-QV%^!xu@VcnSSFGoGg2RBBqt|S%A!_34i)7R-lA1IvWa$z zv<2P~;2bGrZ*4nPbnFF4oK~#ohZ)*mXU+i+KDAY8ls?e|fTXhDbwDDzKLsVBS6??x zFz!8!vnMruwhq2`1+Ji-<+sfWR^NX5dWV-;tw72Plx=zZ3nKCFx721ei_tat;F|N9 zVW@Ubt|V$nL6_iOKZf2lf$<@1h7u`NsZx^ned|o(Z2*K;O>L{|AC3qzCE6b+<#hN3 zfqpL%OgNhB-+I{PmlUNC=m*+3+B2OWHU6#j&)-S7T3j{bH?MbYa+!}+ zjAM+!&2TA6WdkPa3KAFP>MrD+8i0mVc=aypTs&||z0~?6A|wu8OL>nPN1v>P`wJjB zDbqL<7BFJtBsyK5Od2}Nsn#e;M@fE{GbI6UfVRErMtBJUli36tNLFXSw3@Dj`$1|I z+oIwQX-%x}%4D0v-XA}SSmzHq^G8AAwa;{DjVmr?Jxpo~)ZiWTg4)LL5>b0497;8> z%eKw0fo9Eprcd5(Uqq@3J;vv3JdI44GM32b#6azUo}7`wUF6ZG!s;a0##f2!dnkTC zgta|`Xu;`WE4gdp>i=YC;upf&k4id7muomTuo#}T**nXaghc!e50ToDQJR=wo7x7+$*-Q_t_+;(gZ?BbU zre+sHPFPdXOuLZgB7Bae=%o!qQ2ZDI!-*L)0Qadu2JQ*?A&8T$#@79k_oB1!wse4U zzU+-I;G)J3Nn~k#+wY)B4DWU1Kh;3`gz-J1R>v|Y|b&H+G_IoL=GJ<>xLeY z8;2`M!+8Y$3f=IPgZjdOw=CEy{tU>QuCLTTL{&HOP_#g;r|kub7hb=)ECyXSf?hvj zJ_VJJ6r*(PngBNDS~~MaJXtpw-TTF^e}<$g^}xU1PZYtK*=ckUJ3lBi;?kL*CVgOs zwnDR_$eo>H4xHX=xU77vxr0V?LsUe!G~OA%*m2(LB?KN~eop@`=bHO!Pl6J!^IF#r zF+F$OgtP7&pY{A+QQWTu5va{|XmXzXjm~4qy7DeUl?pf+NHkI9<@e~kG?J(hi{&cT z^;Ffg&dvWRaxJ}cc2XFDV3IiE&UyH(Hq>sCR{{>_NfQIVaGJUD=vp&=LIt^A^x`#s z>H~jPKNk!(Bq96-6CX?luY{Cn-=Gl~6j2g1WW>n?rUclQ94wWk2DYBZT=H&?L>ER3 ze&(vq2;3-Il2HM5QtlmfJ{mO#?P~^YX;oW7%OW)t_K*MH-Ji$3;+{Oec)ZocqZJ zOu0^J8)}484~5mEk-sgPJgpc<_? z5cy!mDF@0`an+ETRfAL%yAdO1n&14J*i(FB=E!hM1-ACQii+i72Fmcpym&r|GNK1r zla%87()>q;z0X-&1!$B6>gFmm<2#T3Fnrf#O2n69(IZw+QWE&vUXSjrrX9t2?e=|s zDHcz**fc+)o~1d`79V`yk>{ODJN>$yo;6it8k6xiMS=h!^(LMRmeImw)nWazC)P4edA9d7W85R61*!$lQmQfe|gNC zbR-Eaa{K)pReTB`V;x^<%Bj|1uh#^$fX4(0uUxVWDswLF;z+kHQC$;_-L?*5~aQ&EDA@lV&zd~o?E9^L# zU({@Xn;wTpi=Cf})TGStM;Xl;?Tuu{9?y@L=Um(-umJ|@J>(;F^v*CwuvA$G0ebKR z_la~q0 zZX~3HbqJT9;v!J<5qE*qzBzh_`PXs7&;63)SPkRip+=16xGTOzZ{2U~iGeQ+k|bX=@m7fdhsUuay2oO6wNMQ1aXQ z%wK$Q5}>??tb-DO?YHu=u3I-N>cGWU^4K~wG=X+AIi^k3&Q@MZJ6A7Fjr&+pBEm$dd8tMCXng!N{bbbwsh4v{MqC!Iz z2%=;c2!1URVxQLclrPf!4NFq-^Qp`Oujtr9IE%MLB#r?vd>L zPnieZ2}+Xt%jNSRU7G731evB!P(5uj*>v3TQP1QSlOHv@!%s@O(5Y3xsr1Un1+OcH zcH9H9CABL?-FnK%(GTG4gs!e0_22V5)_fTg%X?mePgnIH>fO1K(?tDp(wm5gEFRz+ zh(H}HN{r#Wubd)iLRAueZfc`}#JjP1q+pt%c`p}q0*4O8g2a2-x|TNZBOl@n^$fho zVFMr#8K!aFS@xn7_!T?x-4%2aJ@GnP$;~2Kx9^yHGZzTwF+BNoW@~dZi2)zCm12C? z&#fcE1qBTyj!OIfk)jnum_%WTz=ZTx0;GNaxyKR>1ldD?IIxVltv@m@)EEqYude&6 zV3e6d5o5V^dYW(4eZDeCa>L?{H3PXWB2$vug=q@IxM9{qy&5Z715eNA_q1mH*< zH#R!48}%UliAylB$qehSf$L!^l~mY`J1#7^J+G`zR%d~7RE>xGKxt;}j#1hCM2=?E zC;0XTri}(HLR*>BJ7tmv1yX~r8%5%4n;g5Ap${$Z{P>!0l`N0(R`7|K_rnS*a%Br> z*Z}8O`=3~`&nO_obS#cgtybtiDAQ0j^&Qj3OcC4vakw&hF-vvYHHCTMXoB}qaeFo8 zW>|Czph~XL!$f6Mh~LGvi0Vwe*NGu0?GSuDnJM`maX4@X$TR@5tbdkp%6(*CH^DPZ z>HbqygkO$WVSKzu>#_1Ew2I|`;f6&*FcQp*x1Mi36JrJgj3>CEpgD9hJ38i*loZaK z8r0LIp^%Fwd^=Pp_x@XRf6!8Y@Ce|iE>|I5#!xyx?}xxX1QnL$d@{~)CW5_VtQmaK9| z%=D@m5I;a1jTJn$c{?Z(a&X2lnvaz0t*peg;{?lv6hEi|6gWDhPt=9$RpjuUPuuZs z6&miAZpjWFd`O^w!rV1L;yqNZ!RcLhwtge7sbj+b1wW?<@b7OS8KyPY#BF`oO4TTEI_@5|z*+s*vAew10O}d8h|DfuN_|#$ASPRSfGPdYIDpY|>PM{MRQX$r1q+ae58jW2oeJ zc~0N@4S6}10A*^ov36Q>R7m%Ak}+hN1_A3+NLJ14&und$+PkH*ceNJJGgaOSdMz@P z2~drzFEJtaYh$hM>)-S13%S)f3_YLTUf5B8-gr(GYzzA1Xd zD7gbJGSxppKuu!=?@xDe)r>%+j=Bl7(bNxiAEOR8OcY7XA%cZ8(3s29VAv!>KVq$6 zU_5_TVvNg5x?R41`OSwVUvfhITd?eWWoq@0)Vy0qsaOQi3oOawQ!aD*4py|O=VU_G zKiq<0V}m%rtxECNJShBb)Z(pnZqt!ybzMh}&0A8mOwdI;GD}Z+$Z&a-jv)j#0|YNgV}<@Mu1R{ zB@Jz^e$*%asO}*s^Zc;!W$7R42ZOKM2uB@_Oi4=|;ou8# zgF((KgB@dYhK%)VqyQEkR!;|R?i6N?=bKf)6)&B32>toMWuHNNOi$0W#N?0bUj3?z z3PtBHrVihER!kWcA5YQwh(*vOa=u>J*gY;LC3dWdF-dqQDb`^Hni$~N}#odkc7+$*J05YmKvk) zitMdF6d}v-O`E;7ydGJcg6laTxceQ1=@D8#d^D)hMe z@kgHSeOA0zsd8W$SaR)+U53}iVnY*a&pU=FQR|I!2`2)<0N7fR5on&xWsc!v7O-(T zWuU!LgKiJa=V~8G?hM{XYCks}cFnP_+Gj#!L4v%T`iXQR&^Ozwihg3cIB6;8$i5@} zce1Rhha>vmHwbaw2dtl7R!THd8JB|6_aKX8}7q44EkWU zPpypB1@hG}nEgLQi2fsOBQ6P8EI%Zsu8p^%w>mwytGq5}=3HbA@!E1bq=IjxZh?PT z6r{RyKP?NxQ#S}PR&0?`MeKhqKJkS8&Ve9$qK0!rLs=jyh{Iv~WR?}G^hdY_|4&*P zmGXMZo7jHCt`45-D6_=vqyMFhn9X6<@X#gF1_h|l-T5#1u~fh1b9Opwvl6vo0yDb$_#{KoWcWW88VoI5%gh5N!e#mWBB z?1vg@4Zf8;*msSvx6dq&J^IjF&h{$Rss`0Ys~DE$D**8(E@M+ZqKQAL`C@~OyO}@a zHx!agzE4j^-Slq}sa^6yzw75(8d>%+AG=^8@JYPo7;{7&F4h{ga;=sS?Vt)VYn!$t zA=n>L{r%2n-fdR~$@xIrZVionhGF?<$?wJ9d}^_yl)p%FPf%cb8YTHZCC60k2nqi(Trf`<<^7LEqEXpCJ-ahpzPET`|mPhcI zgW{gob^Oq+#-y(cVK{Iix~&~HOJF7pFD)1`oMmRv>2mw0R^l{yEhlmZM0XsE$ddkd zYF<%T?`X;2>1B82^hFRl5)fR7`Pbt?fU6s|VFF|^$g(b5kR@7ihd2qML&2#HbH|IP z2_lmc?o&fYN!$upls%JSiv{t)>e9dCL*n}K9wyeuW7N`f=cdVKdSa;o&vU4E zIfaBt_*jGEk#KX@$&y<_6voEv9s|TAbj`7h%}7oS@cj5UmV#v8?JUnd^p(~Q9wOEX z_pi{`*k&9`PD+ZIZ~7VJRY90|2=V1}A8&z8m%AiiIr*l%N!H-bxasCILv_h*8t+7_pTgaQJ5he1sF>Fj4WnQp0v`#IH4Co1Fqqb34Ogh zY?F4L=`28q)OVRR{XMjhK-cE_~25N=?5Srhw<Xse0Y05R=KA5=(+}uIHziBVOWqZ9bdjO``f5+9 z2=x#12Bu8bKK^~pV@tF_?bKjcP6u4|QP7ol-GE)L%TI_h*gH$?5FZ}%h8IaM?9U$4 zJ={mDaZHFw3!d=JFAr3y!~kFLWE7FwA~@QY-_`*`hWy&MUHV6%);xFTJ98X2w|z)d z+Sqiv96jsu25?o+T8sJ2db7Whnsz*h0wxWPM7iUOC_G{AGO`|iCOn($%-bJIgsL~DRK!l8uUQ>5S7N%ex;folyzs{Fka zlR><$n3aG=bn1viul<&_5oUC%TI`D!xutACs`yMt#tEgAk@YuC%uSCooAxkGf}&m= zti0E?|EvA%?~)}iwKd;l8^?eFVU$*td5#>rS z?c>8Q`pcG_-u9u#MSnQ!qg`*oC|G#;@Un)7h1sLUnH9Z#o#^@8!eRs1Gf_wB=0~l= z$CbkW(z51Q*VyL%=3Jp9{LmI9DlLOgI^7rcG2o;pwnG7n1?kI5h{NozBx5)q^Hq0o z^#%>)#~lub515-cIIuyurG9M2Zu&Z(|Ab$&v1Tb`XXn_-zx5NB*`%DLVq*1k_G<92 zrLw)V>(R!Yq{II-uEj256Cl~YcHn70Kkk#G+w+U&zPuUah!Jkw zEy-r|SJzq9;9EMj@_b7psZm+cX!-vb!kdq+KiR1dDXm&aN6OFF^I&g%{pqBz>U43> z{n&3w5(T_Q#+HXLA#?hkHZ5h0@O}*q1}XU?SB7Wmi0AD8QQC&z2@4`D9O8`Mmc+wtYQiRXs4x))J&qsg)~q;W!?s73Mdu-ZYB<0 zD?j-}eW`$jX?zc>5Q*jEB!B{i?@v42yQqNtmZg0Eem#9{T(I?t(-LYm+nc?@Mi2#m znk=31G|DHWqaYb?ngFFkX!M481!Gx5n;@xP&Iu`uG|-Wd2P=7)Lv%TW=C%0}Wes zljmdHZ6O4fhTz;1e0|JnG|0Ry98?Zsg6+?~Z4Hk*aM#uzN==rt9w}m+LBxA7ewJcZ|^A^I9U@MNLGwK<6XK1dUn z=lF+!uxBMM3z2@BgFT2H_b@|mhmgJ2FCx=bZ?}I@HM#e6Qp$RIuqJSpi|E6h=CLu` zCmA~xMW+wDr4y8`EYalP)Bc#H%AFkMgBd`UIR>zsGEKhGHh)+*)zhR=K^Bo?=hwMC zh8#TQLzAniqP#r^%rsj`R&!w^H-iM8%hc6hn)bCrq%d?wD^TSl?qTQ{1wYtZ|eG&q;`6BQx+OD>nNgzLAM)@%F zA$QV^5&zO|8~hIg2_5?I9^cCCF6kPb4~dnDK3+z*Dr=u@a^ap^4A;Yhu68G|Uy|_d?_o+TpRB=r!tU zbJ7pspLt|^N@94}Y3Tc^<`T{@KpWAnXUE&2lt%)W+|A zACcoeVGz2gv@9oMfhrnHDQtj65VLHi51c?7$A)05ZEN^Bg@9ZtaNmHIZC^N&I{zWP zLY0=wRrLR24l1Jif0+?2f7@k{#M`c}>_6<(@0B^v{{Sk=uT@99Lpo)fV(?-|zO7k= z@H+Q_1q7_eZx1z1!WV!&6`?xQYxsnQa?ebUZZL{e%gq?7u7(|?c7#^Mkztylp*)>p zD7D+_iDK@IOqY1bx^$YYEiFcL+g=SZSV?;#4W{47$&WS8wbn3zQKgn7;0s$D>{)*I47ppqsFBJ8ABGC7i8!0{#$u-? zB~-8r)JDE~-7f@*oVr659g%P!Jq!6-T246S2VX@lc-|Cp+QjMR@W8w53%$vZT! zD*Xp|nB55KA5@SCbSsc7u){qs^X0}$BOIF~C?>tpM|=h?H*LzY%$mFU`@bRd&NN4G z@RyM7F8^eNyw^X|sAb@D?y~{KXNnEYXV2JbtMHZ2iMA-Pmyk3If-&zN-)Otr3fIQJyZu;{S;Wciu5%3!-%n zq5qUMYWF=T1KN(&5HjppcT#AWE4MKr6hPUQyXG#84l+qzz>>QmMm-iM;oK*G2NOz& zm;Tj@3*kvA2}um~udOFXYnfj}DM0evPdT9HQ0^}>_;YWz0LsB$Vh zzw-L@!pI4ctSK8Je+Jb|TZmU4=`-T`UHzAmddCUK7=&j2X(ioWL(OUN8o6{h?2G@K zMZ8j2ig~5fV`QVo-7;w=qAs_gl?#3Wwx;N`gA_x;)!u&kdK^hq-neg zH2Y|Nt^I#ly9aC&&fIlUT;{Kl3NR$;b2s0rbJ|WZN?U5f6U4R-ql2YC-$$3=p%S|+ zL@(~DL3EW90B}YI8~KrwA{DPXi5mDzNnuqO9?f!+f7o_0j3j$>Y0CaX?K4XD`_7EG z%mm3RSnGlx@TyXjO^zILT-Zg^m3wSJ#6w<6S4PF5=qGjC&{1@Y|0$he*z)?WRn=Dy z<*TM?Z?K|U?m=>&&!%<6lC!*vW-I~Dylsa`F7KY;NFS~RrY?V3ajByGF0mAtQzU*P zMe_e~^_2lpzuVR`!wlUm2n;1D2qK_#cT0DJv~+hjA|NSJ(%p@8cXxMpzT^L%bMCqC zm-#r)esb@<*4q2mSk$#6ya~%N;YJhp#P>a{-wfU?R={z6mLvL(BjJZ)T`bNW8r$-c z(aeDnx6yFI-MW&fKE=Tg0Q0X~0;mA&;_|pIAWQ}HzN|l#?mWCkAGs~&D2t7_jDkBV z*FtB#am&3AEnQxtFR;{9o!=9wlMbZMX%8fLm}>!mryy}GXfi+?6d4Xh1VKk5c?(!q zY&MLQKa9z+H54?^zc1WR#0oK~e7|yb*Uas8;_Ui^m_bF4HDjc)qxHMP&0cC`RKXtj zGtm6g`lZ7=t1$ffj7@Z`3n(~cU@jnaD~pRKYbus4jX#_oN?da?Z%}+=9SKEXV%~?*;g{_Exjfxlm6sHFa!^HmW)Lj*e-6irA@i49I??H8~eD~(KwE; z5$i(_EvBs|>d^|lddD_AwU6X$3EBk>J}AXT=6B!i?x9hP{z4X4Qd|5J@t zHb_*{_nD->? zZhs8;*Fr;bIX*RWt)F-3n8X0HA~E8DrriAM-ypvV<{KZRubHbHA+&`uhhmCX{Mfze zlZP0N+h0H0Y<@XY2)M;=%QK{(ocrAMr3CV-6=E^0nbi!dCAK&_ zoD1<&Z4oKp2Yt%;#IdxV$u(oU2qulhLqW*v>%N)Ng~ObIKX)vUxmSP95&DRMwslX_ zwag$&ieFCVKj2;B$TKfLj*_ZaNDtjIFZDj%OT&FQ0d8VnEk)In_Ie66)@+NvY-cBJJQYE;La>3F^ix()P0U z#8!CsiImxN$D+HRxpr=G^}ZfH-3MZEEst$SV)+Y7JbpPkDt`@6aN`V=f-LiZD#sK_ zf9W+gFmZs-w8Bmap)-grNT;q0*D>8eZ0XKKnx7$5k&5~D(s%=6W`~CGw{`;YGNP4Q zQ+<_3%ocVKDhS!vG3?L-xFtut%0k8ZX9SGUSiZrwW2@Y7VbI)Aa8`jhUL( zrfY@Y9d*ZEq5R|QKghHH1 z4@KEX3@e;Ek40vwT83(90o9wY&WydfSEMt;18*6@7}OL2NxZvSWtKK}dgf+-QbRmm zwQb0xmFg+_SU}HlABTHSpLbH`bYZ6+>VmY&vFdtPB6!vjii04U@_uBNVRqz0-!F(sO=H2 z9sZEUd*ZZT!@=qKmKW73{V%H{)Y67R^>Yq74=9R@_EkB zXE6#UQyHzFp=?j>gjki3%q406Y6>-L+HjFsxC-Jj9)LEHuII}nQ*i|fZ4mim34i*K z%eFA52~#0;wo{UMlOSFUn`BNui;OBKhe@s49XRAI3DJdumwdSkmqUP&gXuoI5p3Hf zptKJ)&L&#sG912rC#7iTNe920Uh9tj_Z&+WKLMbMfJ>?UM3{j{Rk}EjB7+U% zdI6&BHJajB2+dPu8R=j&RtZwJ1e8M*l7;F*!!SI)`$&~!Jb z1dU9RQ$Eh72<+_iq#P)6oP-w*$^M?i!a68Ugla*Orzk3jRwWe^#=63O8)uW|kCX+p zo%@i1OIz-?+nx8#rAs9+V25*@GQ2>H_30-{6Ak3tT-dc=v!TOv3uyn%r_j$0(kTKg z#hiu&M8y$ScG%^a5wggV`+h*=Hoz`}jH3tzu}s7j<@RTObpLZS?7KtU z=(mSBK87J0gt5Qb>qe#Kn}@3 z^SmZ*_rbIA$wZYu^uc`6i{GL;D8b>R4!i-p4q>DR?W}Lb@->hWtd}FEyEH$g*X)+0#dU z8AQZzn9zDnI@~BD#iJ1ei?-fURqa7#xSk2Yy0i>r&W#AF;nI|DK5aSIU?#t>v2B_L zF6arSV2@w}8={d2$~LNqGIw(KZ{J12rvrF+^0pCq zGbD@+3@B|DIZxCzL#91lZdlPHbZ`8g>2}-#f6f{j_m#Z%70FL^M$#P3z4 z9Y~+bP%_mmdwES2GJ7e;nF#bG`o2;OKx0o%So4Z7ccpSLY*T2V{{Hoivjjy1;jdA7 z5mtqemM~=O)FtUTiDjJVQlvzY>gc<$Q=3`V?#X06$KW(9DXv&m+1Y+|U>iu$f%UVf z?NJwn<`R=OzBS4p)wBW^Y88b*W-Qo?x%#V`eEU#*921&6->|LlT+O%Sc3S3mIaap= zl!4~t@388&y%+dYk{bh zJ8rSf)5wruda?lhUM5q8vx+VeBfEMO_6SBA14@W6Ky_`l-r?;pz1YfMZFH15i)Z0L z2O9d;YX$xW2^$u-+;sfa0cg5(=lW#!&!f7DiEg~ld^7XWTuY~yoXIK}RA={OyH`RW2J(fQ+wD2SR=}#w$oQEKpqAuCdaal5|$`-8rtL);&ZP4-RYuap0B)r950u>WRi<4* zGd$&nZzkTeC=h1EwAdP4wDFT?j096N=Y1yIVx%32to(g>^-A~ty*5rwl4Amn+607b z31~STaQb%kq<)F1cET72II8wal180()3{cJfbk%wg8MG%h)?ZJgN zuQ_EtF$RzU%UL8(5{LgB2`}RI;`!}}*dhn@ME2T6&#mcfv@RhhM2TjmJp=aA8hWsa z>0Ge=$n4F(5l@L}A5}$y6qBDCiW{9{ZYe@jF>fl2Ji{)``hy<|hUyy|-?ys(ze0H_ z{SZ>P^0#Rfr=sc&^qZJCGIFi)LA}K=?%Muj+B1{66wb4(>@{s_gEx>W zY`_dwa7k9LSaOSe0ELJ}Oq$aV(A^{3fnIgMgMQhJ%eLw-vqtFkqElJKVfnbrt%!sp$6P6{@tM=8T1iaW5TMXz6 zu}}1*Oam4{%?}XvL-73~tBddEiEH;jw5e!mi{ovXyTY_5mHbN<9oc#{D1^tXQ6g++ z9>LlAyy)i7&q6(BE?`md_b$)~A40DH;yJ97+CO<3!ECxtI=~l0ZG7nyJvA4dx+oRB z%dCjFs@N1Uxen_pnVX)@n>?nbv+fHHY|LmUbp)7`-S@%2p|&=57Aebg=`cjV<8VEfkZ28IbLXWfS0evW$z1t$Fe7?AZp`2S<)6D+rAUtL_F|3d ztXlWJxW+F0uLhf{09Wp9^1;KBA>5d-69+64jJJFk{aK+#f4-a|JT?S7o&4+~pkwK( zVN>%haE_#r$H=B*;XY$fd>@Kpix^*O481#Gci*d+mig^0k$c|I-<@z7EG0QdIMmOj zY7jksoi`WQs4`5QXw&~5_kw`+nB>)~K0Ke&hC>^->?D{wqr)F|I25zdul0S51IXpF zq3PnHik^Q&A!v!6(f=f|nuFHZBMl@M8E|FI`{5fO%W*FRUX$OF+^^XuquW@Y7Wi~l(tdkh70NO| zGEn)QdzzvrwzukxYPP~4r@K2OtW_L0{Z*+Tc+1}cq6zRY=o-zAMGksZ4 z`c?tcJ;32u^|(DYmon_mr&oYwJ429;bjFXrz=x`t|C^I5kO)UA#z#tBNh@Yw8>8g8 z?=yQPk^ZhO&X`2URC->DroE6p9n1_#7%+6#EG8kR>cwS z%j5)V+Xcx(_&MLv$^n24i5?kddpCPuu453z2!Gj(#>s=J>><}uMchG*Zy_koK!E0j z+|iwLf-A=lhwahb;>auVF3FobA7bPs8p%oNJL^05$GSJz!w3lBK>C5B{~BNZrrnJw zz8U<&wudpDjeHyHg6G%jKz961t+(b1 zTERZkolJ_pBZ#AiUcCR(`O2;beUQ{XOX~-_)k-}Dw3fwoPxI~@Ac&~lbeJ8S2y`8) zKfGJa`z<;f&+sJCV1s7aTXwL~?~|<7<2Gim_~O zGx;&vZM$S9JDK0;mFo_PLv&D=$g7R3dP|LIeAUpi)RYaCpjlJ{ZOL!TgAi41bfxA) zUQSL}@K0N|=^4C}boZ9hZO&Vo7Kc{Unbgst4n0*>Kvq3t zMW_lsP)PaEx+fsCP0l(j=8@s{+XNb1>|>L1+|S=DL9*F(%2U%oD{EZC->~axA5{&L zGHBgs_8k>MASPj-6d+Wj`bG2QS+%vCWo%XYvcfH>&>t{D{}B+e@SU-kYx}J67yFwa z8sGc3l{RG%y0){$;&~|zL{v01V;fsLZ+snZD65{?3}-mv+uHD160r95U*xJP!Zph7 zHThP`C3UHU-S}HN*rBJ*=!C6@o}%4b^40O9XWv&N$1@JjQ_MfVFT5!0&UD^NnyeyA zK4Sw_^C;@GhW33v^Q(BI+63S<0`HK0mXPjPnScM(eI#4v6z$dR5aRvT*W`3=>sgKw zsWWQFU;v6xuvG|YBJ_AV9D52r_@QJ}5A=Sun$D@MPP7G58%e!Nz9xTXg@rUIRCP|+ zTMSYcvQ>F<`A|9ndYBi%v_S ze3QJ*b)G2mE?8^q4Wtg9LazNJ0`Y!ZV=P~dtu;cKa3mAN&h4j$MQq+{WtdX0q>Nd=M*goN`UO; z-*&7vlg688*tK+=rp(xndD~I zFobh+lZFA7p-2vIm$KWOZ?FGQ%Oah5CQ|oQ&U)|9dZ_}nqv?@;gA}QM!>85QEgU;$ zhVnjt#r42tTJbCr^DGA=WoNwgw8a?-IjtS4bB4+!41xE3qccb^a5aE`au!UJo`eRLKfK^Qpa=2+Z6{{DGmd`(dN#;Y89=$UOv zL1JcRMt>Z~Jq>4UB}FT`Fi|ouDT!N?00~Iemxnm z?Bf`$0|`iR?qh9p;1WEncOLgE`**e?O&@ZEWT3kZ)bu7jr12Q3FlfC5nu+wXw^)d< zQnc+QLmwnpiK{|M!jq=}X6G)m=Lw1S**3>Ir0WUD&Xo-T1VeA(=qUK6CfxVNW4#^l z&3P1sVVD6flHpKtp4;q9Yv--f$Bt)MskI_&Qy4>^4&0sRReq5ieNGbi0!z(Ky^I%G zSiqx?#Hz#xkdtOVLBRdRml<#?PBB;Zr3eArd45hsLh}c|#`=FT0R;?o$$F?6CUnxr z=JR$ujc!uf8`=ZKERE1xNQ0YHegO^zGs>-ZxHzvS;&Aidi1L%HI9)~=%*|lSk26s^ z^V^~MO)x#+we#_KTD~yQbxgAgsXwd^%cNg<5jx<<^upAbW9_xgAjMxPs|fnAWtxJk zw=tWk0oF_`uSwNTcm6Y2C8P({}3B0F-Ph-ol3m?`2$>i zbWKy{wYw+Qc1l3r8|!ewmiUSRO^nV&nM&8E$@O`*Qgz}TEy77nra`RDHF9yRr^q%s z%zq^c;#zP{cMqn8h9W@V2p}Fv5#xehJD0H^wO!Yj1#I&5hQOO@O6+O0+rPaHSXNK4 zP8n?5>(59_;ciPX-G!Jv)*cx~bV6#~kBV`SKGWw)wWT6@GtqxeipqL3VE-v-Q9bLg z3ForqAVt-8CSjww2DIfTmLnVo=nDLCvf=b?gb)Ie7=reh5z-a!Tc=+VdI-(A7>9QW zN|i6^KCdklM^jO(GEoYtDyq&WeQ+AvbJu?s<@oy3gnh51iFfosabGODv`qbe>SqLszd2lgUa;jueX0od<87vP)qtZ_D7wZ3>-3 z`%XsSYUX{Q=Fs;K2 zSe(%ZQ4m=v@c9g+D^dETS0Z>Sl*1^&l!S7yvHuYD{2vBGIZbkb3N34RWM1!Ptp{QEFvAHAa>*tE0y>0k_q(2T>@aG!4YnqSiCA)i)A~ zS9}GIXBKZLtu&Fcnfj1_B8&GY!k$Dr?3lklqHw|IEeD8cHn)k0oCH5NqiHRongFp) zv8V2NI_}Gm@|vSqev;51j5{!9(FamRZP+-?Q{|5Ewnbb(HpCt2lEZOK#WjNp*0g_~ z3PGkTJJOlm_qK9!Xh0J$#uba&9R~dOoo9?S{%f$fpEkE1m36|gS+cm!}N4{4UKki;m5M~k{cJgCC_VHi&!1Od2> z_zd>RyaRl=Jh?c`?s?IVOc+eYZT;o6qxS@^NE}j2pwbCkWk%Yh34cDTmEB&k+HIKX zj_1b%W80Fa*?j)*abRyxEFhUJ9&N$ds(ku^P55g-r+j<;ekg3fxH^W#MF`IZ>|*Z~ zNg&Z)I-{OP@wv}kK4~XV{)<9uwysQM!r194@B;0IO8yi8E2@dYTmXDujr!1U&^Tj- zV^tx3%%`8#ZPW)f$IAli;YQND2UG9&Xd&5gXbkN}fEg$!TEC8;x7+>fvuf&Z?AiYr zt&VM3K|lQOXlOcdltz5!-Z!}pBy~-oZ%N;^i|>1U)APamG_Ygvbol8?5*CG0-A&R% zeR9`|P1C3n*{kNqoDx8axp8_e_bGs7pb;6jhn21Qc1$4xD`(O{ShZix{~@>vwcnX@ zGMD>#+fTwt3}0ne@7HDPAMFytnotKKhfFhDq}LITSI|Sz+GmqQ6^nd!BejACR`+Ct&p0t|pz2Se~t7cE*>-|K9CR23u z?FK{T+2xF7s{>yu0uL@5TaPBcvE@(6{K$BiOPn%yVK7Eh1SDAw8jsui^bP-L{%xa* zYdSZ4L;ubr79iyt=|sfyPLzcB)H`CHq(}^IyVjf=iFcCWkDMV>k;jJV*Cvy2?YsOo z&TnQlm{zY|VG+=-3}!v9Np426tbB5GSQ#_9p5Cp&u~jdWUaKKvJ45J73|2CBTNS;S zxsGo;LZmW9N);m2Xl1-YQHGtvP}(kJaVdO8DUB-Yyd~sk)17TO130a*DhHCWI8yDj)0DCW%?VLzV#|{ z3i=XVsk1pJ0oLU@lYU)z+Y2a`M&J_AJGo%;zQn>&HP!706(O6)0!9y==I(isYKa_$ z-6V~9cmr0s_pP_QojYaXfa`xkdo(?WPm9}(N#qR4KS_-)ZGXy6G>?0A_ra9|_2@fL zs5)pTz1>Rt4KcgEm0A1W2l!n__lKBIINJ|O2fbU!AtF6;uQ9*Y)Lj#X$AX4M(V5qD{l0G#S&Xra zHgl)Ge2V}@Mp}m^tO%RX>WjC`7j9s<-PXst8Gf&oI}>fXq_D)3PPTcmoTr4()s7e&?*r=JJawe%D^OWZ zYn-U^_xV=5*0WKXK{>opd=YjXrEe#P121PoLW%vP#DEO!)Jr`4CpT;en|ncDrKBTD zC+?3p)wkTjV_T0Y1n)u=&!%2>JeVWHD{g`3rN{*LeU?}rJ?_>X zu@Q1>jOfJvUgh@^J2rOs7S`bh-WTVMHE}b4G{m8FHI4|j2j$}0hV&I-kdRRQvmXnC z5cp%rQyd_gy}a=*Qn}JuTY7V-paYb{$=~MTNG8r0Os;c z=@UTaX$-hs4*M1nF;U&z+`zveXM^3YFW zq#L>VJA<)eIXC!vBI)Iin@N(unHSb!)P%80rS6nl-of1v)#~`r1Fy5sETx|uO`3I! z(zil3rS73GFc)bOTb#A@!6JQMU-t!jB*Q}k+A6pj`o=qEl3j8=9&^RHr6;}XS*hnb zqqx|&hKsAhBej*32}y7+B!&xeZbLh}JeYPUs$`k?b5o@PC z|9+q?7w+E{bkta*cHl`wF>If;C&9Lzq2$i9vz=jcke&%Uh(;W2mrCmAqA#3poRKXLD>?u+3y_qVXEj}q%#6it9$ zNq+Votx-j7{X)$%Hx*RywAE6xe<#7-J|Wf(_HK0MLVcrI>yFkh&Xl=&dgxHLrs2YO zjQNALO&rEM#fGXVskTWlix|^u+>d&pd_;+Z;fbnx*dzoII{i-6JZsn{O;?D2@-)WI zS(>@IE`52@*nXPsn*&==*ZY$2dMczoQ-yNwi&f?P+C%n2-rONy^mjq_(!o8Y7EDFi z2Y_$7W1EYX3|zi=@W^KHva!WCw|6~hlRo9k`?a*;=H;?>wF`jLV!BFotRq{7>-n7` zo!{1WANs8lAabW;5418A-D{Iy2kG2)+^MEFkM7o6xJQ!1oV6h*d%^edsAaBpbVXj~ z4xap31=VkJBs7C z2J+n#jduJaD_eR$QRk+Lx5bB+@IuzME@u{#nDYDsroVGXODbU>1H-sLHsHQsiZnf! z9NGpiQtyg@kqzN_mpu)7lk%VHV)rjhJIvk)OFTMd9Sq42j9WzpRoi^)}$-7H#%Cv5lDCsQy+=mMhy8 zmJolF{?KaZxsU~Gh{7cI_SY8uN)lQ^MW7!L+fZ=v=PHqpg^pQ?8m_2JuBicQD$xum zGSYjt4viD$J>PjG#mI%PO1ulx)f~TF{_;iPzvWXg?5hqPM#am^4IORS7_;#t7J)MhhDK|#s@-^ z$od=8d8A?0n0m!yip)L=IowFKe=`{SZ`G=Jr0ED~xOitRm5~rFD+} zd5hSa=5Qilfa1dom(Q$jkL3?y2NRc-0kkiwDdyOJ`4_Mg`B2GxYGWf8jwRmCgtUh!7=tOh z`Hhw)i(~qmaspVd`qRO^8T52>LETUeb=b_H^jjeQP$xeh`DVKH(&I5K&}M zmAOXkSOb}4Mc>Kx2jJ<@*r_uPx4)-}oW&un{L|d+t!XIorIm;NL|~j735(#O9Iwp) z`c~pACrFPu;xKUMWuO=1{MeaCQTi`hguH{Vn!!``$W04VhZ6BQWRcKdk09NWgxnx^ zpDn|@IBTFebY@*7_d#ZF}xnW-qbEBk`uLE1))-X@kcXIZk3w!az% zG#-lZ8&>uqN5>NrOrGrRd{!KZeYi&N3ssqvwP*I2;;2z_RBPlV-{SWxHj}Kz#n7N_ zaq8*7byN~DC=QJ?Q18(ijjc>+YX!xmC_Rx*-g8bNeo)?l!G`p9@d!$HfbB^ptcyah zbKc}sUd4ukV2F26uK>lxd9UsB5t~7=lk|6tasExOI4!!8!mDy z9}v$eZtv$d9xzm$jl(mhKHX?~{-j)SaUJTiyn|5~W{vkeeJ1Y<PmM`Xuv^Ym zL;i^y{dyZ5ZN6VpNHqhLz@oqi>^k7;ukNrxxw2ogDa#$6P5ice9qUMZF@+Y>ml3sorB>9XQsY#(|JDL{{002iSqqDP_PUK) zI)2xNICMcaeow?)ekuCA%PYQm6AshAz`pAOTiY+1GzzB`|CL|Y&sQ&v)tn3Un6!pX z@7^P1c(nzzx7w)>2YCDjvLMt(;*lRNAR1#=eParr7S{I=yzdAdf`bcGaf$x08WdF# z*?fWCAogdSV&ofMb}RZcFI8tr#eg!=ivRG&`X^u0-7|})T~}G{L!vSw12dT74Wa|Wv(JdJgSZ)HmAjl3!~}>Fyh_v|I+Qs<-cmp3lMTy0E{( z!VmOyK@Cey2ed_@$K1fEq0)i!%4FnlOUg2@D~o9^4AZ&s zR|=gcMglv3XmbnFi^f5L+$l14;?9&Wxz?P z{YgkaI*m%xXd|wf(A}+ZJMarraMeG_Mn##pP8{s@U0=_x3r7n$LH{k26i%(Cn_`Ln zj#i07^{gU%UG0zJQhg)Bm6`{Org8|61_>%tIx9c2oZACx@?7ey&Blh~_)9RkF=96i zZh!48WSP%Oly*9)vE0D>xtkBV1vtG&n-+E5lKCud4)9x!KfdgwevXnhP2%SXt=pW# zY8gACZ*?lx(>+>`769f?I?{nmKoqc3ln{fn1--WLX+k@t2nnBF|0Sn|DqND;i^RO! zFemBwE%z-6EhC+zesN~4hMz5-`67JYz^O|qAiV!9imw0bl`o!>)2nTJ(4#Ky3BM*) zd;WE|ng0b04JpTD5YVfsEnDFClJKF?-279gMI$^Mw_P^c;%32n4Pxb3LLUc&D=8`c zSYL(u1^$qh68Mc1Ua{PE>u9rhX_OZDXI3y#H(PF=k=seLS24489#N$}xCk<%)S2U; z^~yfR`!0~+Z3~+TM`5qcf595PJN~#UOem!D`^C}B7w?}hoVkj)yF?&84F@`f`>C+;q4#zJ>a(9yz31mcohd0tcY3)BX zZ9$-Ej9A$kV|KZG54kVPMd59*GII~ijgG;4SCOtVja-J@;YgQn#+$)S?|sti*E`i= z9{6_|tK%gxaQ}tp+ghucqk>Xo%Fox{qn{>+Xw`opYgBXZK7xkQBvqD3ttCN($2 zsqil|Z}v%;k^osG356_@uDOwTSt>WWaS*-+qA}F!q-Eh8$d)2DMJvp zk)%&neen7Cf8)TTKsTLFe>o`hkBfG=f9qH%GVfSI>N*0V0d;whAkPC#({01xI=?`I zu3ls0l6nL-{qCjX*egsId|w)D+{hi?fV}7kG#QxeFT(CciQ7UNamDY6)F|KaSP6Dl zHzgfQIU(S2We=haeL6IHNF)}_I>58$QSdw`MBo0%xLHdQSg>wi5H z4d;3}0}{y7is3Ab0!F4UZ>Bx zG3t0bEsESbf~chW%9A&&@}fLij7z)?*Qfu_0#8|*MLQw6A!dYPCy!Y!26?4kd?@9; zeC^MNJ<_spS~V(R406&w>A8-z=VQuGBiDezPRqTdp`5BLSPFc*qHXOK`@3xVIzG9D zYp9b1Vj89OmNyJj7j)|ouJ(GT?xlZE)3>R7tyY%A`+C=dh^U}VrL-M0_>%9g) z@W(45zuo4oBI0A+v!|DYcNIwh@;1!lrr+|va048y>MY|7a~+0Cu;R(9b)5AD*7S^+E<<^y1_%g`@sLOIUIEdURwpLatjLQ>)|c zsY^B5uInBJENyMrwCfo|wf6jq*TU5lA5~G)eZeG1cDHA!+4$XspiGf4Swb}_CFwp-3=kHvaHP9 zZB+8g`u|tP&^oZ`ZszX>CHVn1DEU6ojVyl7A!QK>J%<8fY3_FNbUnAlEzoquxKjSA zk*nSuH^OSm505oS1i#{+yCU)~3jR6S%p?syeZiVFjc`C42x!K|E9u`FI(Hsj8dx_J zJq;H;mNXs&+P%X6^YgIU&nANeCZb6T{K%Qq81C8bR^HpbY7gL@jJv>Vf^kcyO&+S5 zE^D2kaI#p|4_RpYzOVpEQzf4sYUMqk!qwjE&o6j<<-a<`v2rLKu2)^AvBs^;uOT40 z#iCMi8PUIqUcSbRsc_iF!-W1TFn0_|sMx6SE18Fl(CuS!LUe3w6AF7OuLg8LoeqQd z-;ljLSDw9Bk7xl>uSZ!sz6@ozvVzag*)fp=p3w4O~aC(_ElgCE5^$x zv!jCnI~E(wc6-bd=0T%vTN<7b4NW&^(q>qd9Q6{d)X0y6z$w~Q7N22}O&rkjjK+l7 z!Ol2#U>%l}LvIcL8BK5-jdx}S^ z_s1k5jMkOY+HQBumPY?5(on3iS!p^l!Yc-=Co|_tVRs-OvM|}6U^w?o+W8*1S;mpj zJSs6#ncE>#XQ#}MjnB`s^f$3?oCQkp(j{cztttRua^{(dbe)NJAiRMd9yh3h9${KZiZ1~ zz^ToJO_*n~s8%>|>Q0>?Z_Y)S$_5y2pQkxnDrRgIWzm08ozAk4tek$RVgN{ngx7u* zY0_BTJtet3hds|qjlzSa*o#Y&dlFn9+~>47RERq-tJ>aEdI}Y(@dnId%&S@lY421o zi`{Ql#bD)wDlpxUbh$X=8^z>3z?-tjyzmB6DN_g%Nw$tlE9<`;AQY6K7TVRDrqIK} z>f3@`&Ve~ctdBbt(fmz(pWZi}Z0+|}U8@(??o7J~oW}1kLfd+PmR~|&?V-C-<+f)o z$swLuFr~5jQtO4Qg@k7LJO;|23$Spy{zXkS43<8a$NYx~WqP3GLunV1*_TX_0RpQ% zviT8N&;;;elK45Yh<6(N|5u+eXL2Qw>|6ZGO2x10{}eN+gqMDCt4y^6x9Jehp^UsF z#*%F=omhF-&88kpmnr{p!@i9`B()5bI6!xkkUSurZ}!L6&8|vDA<==}xu>6OX zzbTXIMawUu8G|n}m1#GwY=|=Jc|{YsDuVLBhky4}I)js~-S?F}D3pdeo*7BYGe+3Z zUGjo53iA>D>9qde$jT8-KgRIyKtrS;;GM-;?2Sm2;}>9~N}<_`YaeNWd)Vi6SWl~4 zLrf1~>;TI#{HUfjiknI@(qhH27@fjwMVtr|e=7-2PmKnpC+mQ69GN*~+kq$-6<2;Z-`L$H40*>Hszf8C z@nS^fr6q{B2#)_<;bd9Eo}3Bmeg?2y8Il8 zU;*cwNFi&hozD!vD+xXV_*{^3X9iK!uBO~>VYsL0$_o$s!LV75~6PJ<~Z z?+>!qv>S%l-uL&5RGF@?{p3P~_r6bID>C$6rk=1@SSxP&`TT)mxVHhh(mk^hX8SIs z#l#dDUV)-+;GnNh-waOhC^5okqk$fu4F!ql%On#DImG8IU>)sjJLU&nVHLu2 z5cq?mdh7)u_-LflNV5YB|E?<%|u#o?BRRnYKTZ(fg z{M@s*{)#Xr8~IPF*pB70)_U8KHFT-4ROfhOLilJwXRHtVbg%Na?T;2-U$szmFFo9= zz8Uat8#G?Gr=@TYkilp5&mU)*T7BCrYct_$eD1Myc}wso3sw@W@q#B6f>sBYz$dIH zPN*&jZ%~1&`azaw4-RaiF)K2R`4t>P0Cm~Ev_Kf4tsMUA?TKMZe;kVL1^SpJFqs_8 zyeYaw=P$Man*vhk?gk^#Vcyk0cnkc=`j-L)^)b5-egAQhR59bLhuH|z#?oi#?}H(w!MYaDpK42F8`vR9eK(7v5j2C8%ZnXHiyrG5v)Tp_HQ;UpA`LaQw*1*oZjRa%DN z0WqdkDPc~_AFloaYj6JrTh08~Dwxg}p3@!HVlEPGH)hWocs@r0o)lJRs_(2g(I5-F z!@hXL=Zs8ZVm`^fsklwTdi)jBsMs*!7Lc%FWOg1XooP5uJyMIT@y~o@L;eHKB&9Q7 zWJ=www0?m{xR?{ff6`v+GG_0j4=X|#QW50U@{;|+-n*Hj)}M>$D$yo{nQkzxg%YO3 zG1-ycWE=O|7pB@AkIp~Qbh0JGP0EwtrKKqB?Io%pG>b)Ums$T{bq4JQM*J<0pU5V` zkNv}Y=l0%^XFFxO>QR^!VNg!A53)b-{HvVwqP^wM3Iof>gbIY8_Q8!D)CrxEJjtdK z7d?a{+@RZQk^SK#Z|I%G#DLO_B=%r>TM1l4BJSGDVg9i9I4=oz$y{Y-%+Ih9V)@y@}@2*lpBSAIRV0E?vi zJh@KdH4X!ME71Rg-e$#OQ8eMg&pA7K)+Pz3aBIOpa#YU9Ayp@^{;j^oXT>X~|Hs~2 zhQ+lsZKJpacXthL!6iXv2o_-D8r8kFouDVOQ8*K(}hBkCR;!CcDJfkuKg6^mV@rVeCyP6TDN*7U{ zjj4K(i#?6sq3~2umHmFcvvJz z51Be_0bgYy@Dbrdn5|yGCJd^qf}e*}tG#Oy8QEOCsj=bBLESi}GAx)F(^Kg1Dm&rPv(8<9Ljvqy90Z zziWi9KTf5fn_5Uw284k4#Wt&=l*3;=6A&`wT4#uL442>68#D?>Knkh@&h#3gA9$c! z&;2_qn5=s1qg=FB4)5>nj0IvJ&I~rlPMv-+OBs0=#qId%)_fK3S!L{>raz{x5L;69 zaPt*CSo;Dh!bsz0gdi;LD*BN2v{iQmufFwp(mJVF_;tgc;&c85_9!Bf%iqV?ILlZS zP|mO*myW>&y&9xc%89>Z*1X#^Ns_(O_a!~bED2t->am#|R+BIBGL|7$GFwrA$>;^XWWp%7s;&4ox=7>b~Y zKR$jOsU?jNkkWQRs_M&{K-$tv;NqzKUR(*O4(Ek#3mL= zPf<9Wp^0vQMR2_(CmWqO?4m@W<+oFC{=05E!B>R9YQ!9d z?cl3X*Qr3MG+9W;=?D*&a;&D_lS~}XeSJ86*d$|$!_uoDtO~k7qY!+>U75S4r!RSZs(WUc& zo!_bN`^Lmb?W`Lts}qD%AH{0q%sJgj606I!{3oa0N0h8kDV(J;p7&$VS+^%Ut6@EkXup;coS zhi|PPql+ylwNZ;Ljxlkf5VG}EDM~PUGDNefx&!V>0b}Y-a zCw5S0ecHA;!LjNqZgX=i#rCM@EMqgUtsLFF*`+=$==)J=#72 z)tIDYL7Rqq{Z=#ZR>V4A6(4E|i-ccX??VY+Aq_M0Ee9m4A-eIKad9wKwoS!f6aG*XhD$94+rYk$MgqsIpVAA(;mnd@H8XshNBv3p zvI^t+HIOFhdYRFIjjwqflvqUAg&?>2a=nr>nVe`Pvd&Sj83|;)aMfvu7lx84({&z)4%{VO@Hna4u zs@+DU$Gv;zsb;%rbp`V=D}QAJ{ZiIckIn$1OGn4fgG*1_4qn45ft~vwbGHbUX zt-Ac`l)s%MlV@6vDf)tc}bg&h!9rOC|qd>}&^i8tezu2Ffn#J1Bg5N^D@E=DKk%cd{gJwAb zHK{G&fy7QQc&rt@bxSI<=7U=viq1>@lkU3SH-|l(cR_6tuWfVL5ahJn^?B$br~Db8 zlQUun5L$K<=UNr@wZ82GK%vW=tVQZZQCWx!E8y^CDe2DZApJw7;Bg#YA-yz1173JO z2k8F$^dg=KiUQUk#&5m z6~w9cF8;&9Z-S5CdP?7n_77M8c|;hU06ebwFqQbfU%Wz| zb19Eq`|lTDLboXY*Q1y8&wxUi?nna(&Hwq`m$D@I#>oHU=fFSRkLAQOuN*-C`^6`u zLWln*_4qz)2FR=sQrYi;A7}KxM*tXXod5NR<^Lb-{~A-Pn}_XxYXN@G*#D;o{wp0K zVsw6ZXP+4#Y6Oq(;m@C}FP9+<*aC;i91qT~li%W9)Ma&b00?e>vjRjA&iI1sMKl7# zNBqJkqz~9}?cpr+lR{OS-RgjFT|yj^{%as?sgRDf4i7mj`C_@Q$50EX5dB}tvStd5qCTyDI#eH8UpRZrt>o zh<``;r!XmBFO?vFjUvDNu9cp8CJra$J>!a%Fl* zE3E-nYpi4MIE&u;^wGgO$UHAxM*?3AJ!dbNd1dEBNKCzRaL6MoTyW@EAOIp@QM*KZ zdU1nBe|L83h{awIiUfRgfS(ZeWdi3Eh~<m|2IqKW_F>1Id=*t+alB`rLj>OjpwOe1DnY?<86L^wu;unl zL6#J%*-qlk#%|(?ZE}w;C}dCc8zRg*NBcnOPq&Hnx(Of&mlsR1gXki1DHISUZi8Tw!Ft9< z@DPD=^FWCK!Kd!p%8by>uvGbvmU(3CzLcUPsA?ri>(@j{(pco7rvwvP9RGAY6se1J zYyTz5+n*_mjYCUDw9?BJgQDQL9VMgr5l18CPMnUhoH5(Ap+0s?fiH#eyM1nirS2b@ zk2nn^D_00*nO|z;Ffd?n*hwo{qs$jtvp-+3ljgus0b{DHOs_F2zfV1>__zT6N4CzB)X(x zDqG`F>h8}pVJ5?DO6258v89S0L%#*s{eO!0a_cd`W=YB+R)6kbhip1d& zb$w;RSpr|l5aO$oi6M{hCs4-(*oG~R?6b{{y5AB9e1v_#GGdrGdJ0#B|1y%#bLZ}p z)(pVZxf7ty&MmD?FCI$FDS|7&Gl*}=eKSdu447)g43LwDo36P2WuZVbY=2)HeP-CP zrIN|}Q`V*dBk-syW=2S_nf{=VWSv zIcv=M?NUlL!sYwQvf!XkQ{>4uUb^s0>TVLpR1eBfM{~v&2cFd??~#Q!1?n3A%tqK5 zN-VlNLQNFu%`uM-cjX88N23XXPV@zpxNKY3V(S*23Xtyb1<^9gksTo(BHK9KhCe|P zEef`*zpTN1@_yFfWiMH#D&7We4(-27M|SzK%}!qwiuLg?-DM{NWjagJBDK^S^8|Eb z7}aVmI%mVaacurM-J2d#7?SVy*WYsIRXtM|LD+u%rG+A?#eMmEkS-J=H#ybbZfY39BKXks6Y)$#@TJWmk)(3dpQpU_z?2-4A4G0!f2TBg1n7+I? z90HrHW0(L-6)$ys*jL4aGo~fXba01DE4Ytg3OUb7q|8siW$f9o+ceTS!j9Y@0Wf1g z*!E=4hv_GZOu%ss#7+o=X{Ws7mmF9GXl3kqJFf$qMO?;q#v*`|W%0m0Y@!{^RVYg@ zBbHH@k}t-1kn!E8htNhf4o?<7p)un7C1R?%hk0zPdqj52{bzk+h$gP%TZDUvH8#dF zUhGCwCe15BDSQ)J^b-!BupSAZj=rcwyqfofp)}Ch-l{skpOFM|Jdg$`Dlh{!x^&IH_Dp_* z8DSajXqJiU#WEXIOn&c~d^OPMrBq%XQ7rXHK728L7#oxz$Osi=R?~D1?^b8O#Et2* zJ#uW$uam<5zw<$bMI6$lVE|1GZ$LU2Qm!<|)R`5n&S)3>_F+J8=^Y}BwR9Mv7`<_& z%1;F6o()EkoZ#p&y`6cbf-4J;>QDz$+vH_5br5T*lv)g(xl;URY8Nke3}y0a$0++HLkt^O z610-x*FS~GGb3Y}S}U#kdv3!Bh_=oNZu+S0E{+XbBCj?C#%dLm^$*ibtks{A zW~gir?~QEp8X=76%v1jHGl5Pk?ndGDm|uNk0d8Fv&G~)NQQMVMe9EF<)YRg^Hj>m7 znf;>znZE6!s(pulrI{2-`Xxy6Xv2xgQNx_+YPuzqZbg{)7vP%v8jUzrubmL%zKdM_ z;zQU*tZXq}lB{w;r$2x>i2St0Q*R%a6Q@YQkRL%9MMz4%tf84~VBeYe(^_pup|tq{ z+7hlGYLDWxI*MZ&(OYrg%J%HQ81hg@gvv{1k?%t-+PADR%f&F7mpA&7-m&3*C*G}b z5?@9=V$sMh87CycoC*hCcz^UYxm}p*DZ$S4ou@s~ibuH*1l^j0y?vkh=s;nKi>-|g z6xY2F+t<^ck)(fpyHxcJvB}RPFmcE3)tam$dQ6P7#pdNj?bt~oKjsfWEr#H51#CMV z$9M%A9JN&M=2?W3ak%590P3nmhVNRkyj1ItnWzBP;IM@4u?=8_ zvrX(lgF^}fA&0z{T%-adb$i$fYz|}nU{3+!l#=MAnZu7nuH6?acvb9$)7| z)P*uX^k0#L^-9)#bsr3EtQ@A6u&vIpmOzLJwamLqMovJ@U?kh1V|8n6{oB$MS4|W5 z)k;8al0Y)W{cD8Uelb3TSrnrNR_1SOxud972M9~bE9t5^`!CfwB))WUz%z=W7E?vc zvx+kPKtPpzXK7xE7 zzD^?_3LUP|SSF-6DX}L=Aa>E0D;O~j9E~4Zz1#v53#^E7k&{(N!T}ZabH%O)SxlAu zIc(nUP@TQeLl%;JjIKE=$1K1g!+L}vD5)Odu?x?kNa0o~R@eSL>}Ci^i*sXJ{JrL1GUT?m@78s2e{zHIdj>;}Gh{+0h|U z?!|p)L&+W!Z`bH`1h{?%5?DQ|;TP)6f5i>#1RZp#+vl za$^G8^mlW09_Yw{26#`9iQlfhd>V`Z*{Wdaf zvi!WqSK_|*+MQ%MulC}7Un5T4wR~q?NjKYLWD-oGpOVeqnA@Gr;DROujR&t-VdcH0 z4!w11PNF-#5&mjCYJ)Hy1=+KHfwh!HMf!I(yZcvKj=!HfHrOZ@zYgFi&AxV}^yN-9pfg&W!(SrfVpgm}E4r@GLzm^e^Q zv^tgUr}3xx9(bo)9k`ZW`N5Wa))}DJ*cfBXV%B}&Zl!?Dp%W#z6VF6HE6kta4#)c zB&fFA%pzE(76O{=jp3eM&t~Qt^UZ8O4e@Qpo-8xcyBP*f&8UdE`p$ST-R9W8XuV_W ziKl}j*3zO$7@=}4TFtSgSA3cXvVRUE091^clRzL-C!xyk2*pV!uc(VUX;fU(yM{cN zVj7Y!onSk}=uL`a{}1g^LQ}h?n1d~3In}5BzGOLEGoLQJp+6d@(NaU5^LHop|feb#w>3{G(St85LZ5E?Mm^oqPAyOz3fiRIT{pUfScz zW(D#G@wwox{ee(aL0})UsFvf{(ITOfcjZr~*-gZl#@8?<%3M5kf}sBz(?Z!JI}=dc z#RS|r)+miuxG6$r;NH=+xLRIl<2rP;wh1c|bB1TVls!*<9Q3jX zIHoyyJayWK^aU9WbFK2Le!F;pr-RQf-OnxLQ3r$*MFO`2EVd?H%HWuU4>q{6lz}pf zT~(28538ad5y7Z+-)s}iJ>~Cc;3Aw$6|e0Si{U*ixsz14-SJ>lUX-ZcrVel(+MW>S zuagY9+n9u-wyUq4x8c=ZW72(qFR!!c;RNSN%kRdn|LOOgKUjna$z?R*$rBU7f|2bV zkcW#gIE$z@eL0_qM~1ADNl(!i$SBOI{CFz6qi(&5ky_`oVXO!o-7geRJ`=UpRV-SSsy3( zWt`~#AMY+7={-7q42MC^Kt0`|?zVK>;^@uit|n~R zNYTL_epdI=c*pF2qukcK?|uJq zyYGm}UmzSmLVsM@`)7-Nc-MY1UZNR@FpQyN3{SNKZHDla)eb>1gqXXkpKL;xBt%9l z0%Ut^h`Z!g%`$vLSMst_Zt41^-{B$?SW>k1`!cC8OKcf>^s3P zvf3qX9|6XiAQwx;yb)ohb0YoG;RDX!u>(GDq{Wg|3A>HBW#vxl6KZScOof^EE?o}j zr`+w{II`bVW*&&*U$rNnIaj6<#FT>rp*a%e^XisTB7elNV+PYxWE5iK(srq2eL}b! zXGFd6?5muuye-f~n?KM5hA6Dm=jJUj^nLdYyDzdUi7Ubk&Mx`dWwz+WuRD3zFpl~- zoW*B!?#-7!K5oH_uoZHgeY5b4nPFU9zENp2Jk%&VH>sGry+H`ex(NL!?#V^qk-kYM zmyhO};+w}+8|F?D7}d?j;hQOD0)CJ@!20#?7~Fk#Zcpy6-`n#m3b>X*+DCAJ6o*o{r>AK2$m@Hf{Vg&WtWEVa zq4H6qBG2z%Mu zSq}#g-F(vXLf(>wjHtB@{C4)~hb)i*$W7HjIVIQf`MZZ0Dy4F@Ne0s`sSDeYIDD(R zvZBu|V?PhohFx^_zVlQMSCLY(k45c9?L|_dw8}pmNn?6u1U4K~GO0xT|Ue~pd5@exevJS`+AuqbmdKQ_xDq5S@AHP-Ow|UTjb@{=LVmLQ2ZQafjd)> z^@@(a^Utw3aM#xA6z_5nwpc4Du3eq)>jNPo3U9t1F&_RNPx0P`Pcs2De-L(=>;=v+ za3Ts&pSL=;f}m>hywi!VxXUfo1%-Vs8_%R-RhZ;|N1)da9P$w!O*~z~CAqIC|0eqXfzzF`= zwcftO%7;Hn$q;{wXM1Tl1zP+xJWAn6r*suF&Nv8d!X`RA zLIE<{|B@laH2Uz3DYpM2d1kuuDB7{l9-wlxJuIdKJ9=t|0) zud5|2L}{fmY@zROlKF=s^*R8@vB6&FSyS!4t0!IlRnN#BEH-r48znZKSn+%0I^4rJ zPxqo3kMAeF9do3ANj@NR(-y)(+g;t?Zi6J6LmpII0pB0>aHK6aa63j^xv%Kcy%urc zEX#^v>N6nxxD1vIcx*j=)u5g+g`}nm28LckF&;-L?DdoK*@hyRDzb&dVldGDsZI#i zEeOt#707nS!1l~PoKvdpa(Si?W%`}_(N&ZZv?71g)U)y!XDs{y`E7bv1F^#yR@ntfjPs6biXBgLoX%P5O7w3zj3Ckb>jb|= zZ_k1(Aak&11zlvO!J?XMPV6Ssfi-s2m4w^bfh_;QXOGq{qOk!(S}oZ(y1R6uHP8n? z;>UIl8vVTMx0V)51r2>6Jo`gZ_#(53;P;jCUtH6_INce^D#;{wcnl_0Bbk0%n7^35 zSNJu;G`x@O4g6XbcIHvnskY}ehEe-Q(or9H9)2#tH@D?-wl_O^Z2VBU_bsJ;WFLYE z8!k?6<3`SqI1a|I_;952_lLPrB)ci5n_Mjc3zuQB;+gQD)M<=N{W&!Q4amg zBxdl3ZQMlD2Zl!uTF0+`o6ax|k}cY^Kn!dqUMsDT(I?N;F+7G0YGh7S2%*=@_y`KlS@Z4?6x;&|=wKz8FZt zVI$^TToO2Ycqt%8 z71Zh&)khWT7^S}em-5tVK7rD@e3xA> z8oc$nqz8h_iY1%Za!H;SWjJnU_hx`YU-502sYStw8@EBL*@gLNz9W17tz(g9_cQjB z5gvn#&|{|c=9Jp@Xh_QQrT`OQtrtuoIarIsNs=?PX_(hvoVa67eX-Jih2falldiM z3yJB-a$zZJ#onK9cZ8n;Fo=n#Izf*KXd))xuvvt1R0*| z8`6de7$Qu@scMb9yKH5%LuSqCO?Du65FhX2`PO4tnGV12jCgS_xy8NHkgL5J^Rhk% zb9Sko!9f)QNpTC}4_E|dumc0raaEmPJIc z(^%+)uw1W`U=Vf_!rZ3bX`>{m5@$1Um$Uake6I7O{_y+(Yh@Ia#Z4wjO?B`e%sxjiD1HY$bQ1$$aO2QlZ>Q~?z@sy| zBk{yJ=+= z_Va#BJi!OK9~P`d?3vnh*T;+h0fu!@;DpZPMh96Z6ceO80M(z|&YyyAt99Awrn7H(m>{%L9|iGN(

dI}^L&vp!3JB9NeB8&o;;2)j}N+LIBq)1jE!oX^S zw#hhEH~-cG82^Z!OGc~e4{&bqeG-GA$cTTWhtDp^6k`_)UHBz{s#OdPP&}oKVO1S% z$fj?Tjnn!n3Y`1Zbs4tb{b-@Q$hO+*+9X^KC?#IB)!s!p2PTRvRDOgFR(dCBgN`fI z9ifo(3L{&SLu1PBZ(nUhJKnyAzSarMa$q3K1sz@8Fg)OlKQJ9>!&kq$vt0}bNZz%l zj7b$C!nQ_+VaEC*BvM^C#0yHP4Qr!ol@&k$OnAGvZMKOcZq6X*W6FiH%yUlO3Gw$K z1t8aV$0omQAh5TA84#PujLdJ|mUU~=>VR~GdO3&{MmO~^Wcm4Nqfl234VG^OJ6@o* z=4SLC8ziwEpEqmljKPn9803w;E$B$!`E}yOH{|4&`H+y)6aRrWR;#_f{8E{fojb{< zO#^)3X5z{3b+Q-emjN@w%u&bwGu=*NPu{tcox$R}@phYU3-)I#?>a`l1s@^rn~%IB zR%sAqA;^I?783>RmPn7m%>ySXJU7H`-+-X(2J`Z{X!2X3RE}}0v zZDg0`mM9MLJ2i|56u0}jG)bSX zE;+3)zqst;oIlW_(MOzBOwPvrlV0O#pCBHrHo;kV-bu5cUSE>&LSN$DvGh(|lQZ)# z&_M1t9?fTx@d(W6j!i97>7RmX0s6JS=`WJwZE%4cAyf+Ms1hyuiD?aS%g<9H(l877 z2QKtG>k~XH`eG3*4_i#VB->P0T*P1(Mst!gx*rf>W2T**>q*Yq%q6&y9hevQSf709d>oBB3B1IzR#jq#WM14Ca^$dO5iE4 z&(F5bth74!b=wizFeOzY9z=qo*#cUh(KUzxu>~M`Ue1Z(skO#ilTAZymbJ6M?NGoA zIrE-wHjA_@xX&{}M7?INw#EUa+^8x$u*#FImk}(%hhCKDSS?lxA`^OrBndd& zSkwz~h11wdKT^1MYbUqm2$dVH{UEI>N2u0XD2$KvI?zy>gG4{h3?}AuHrn^|Xg{IA zbr5|9pX-tX=pD8$ysCzms%+$M6QsolMjhQHQp9CsKTG!o@FtW zxHqYmQ^djN7)Am~pkSSOE*M3TF*`ZpF8}j_*5GP0U{~HNI=pPL#Gbyc!PAG+7tKAl z?;>;4aJ$P7y{ASjw)5b3=S^_X=;gwzPO29dYc=;j273iGls8PQaPOxJr|I_oYH{S= z8<(Egmm}PHtNuq(x zqVJVthZFM>Xho{2T`whKCYU;RF0*O^u4S}Ab$+*n?r^XPWIGoJKn6qyYlA){kCk9H<dLHNGV;a9 zvb52iF{5U9e6(cLO&MAr6&%vw8*DSO5!m64{Hb24TP=k`>Xa(oDUVBBXm0V2f^|0K zVVO*VP_aG1M34%7kI!V=p(ynzS|oyzGbk&Zh&fn54Hz!AZ?+d@F#o_e-Nr#n<*e6% zw^H1+ANxhdTjjZDTCG;k z2I3=Wddsqxj}!9raFv76ANqhR5Ylb>?0m}38k?&oXciP!nEbA^Wg2#pDx#mvLKh3wQt_Co;R)21|MCg+cO6*-?rFwSw>4%z5qwKwZRVn$WcQ z4+k#Oj+wLMGv!Xdx^uJMYIU3xFMPhyAWRwuP{s3=<%VGm$z&hp7D#xD(n9Kv{Ede^ zL9h_TE!N@mEd^M!juMcisl1{U7P_9km9%mSmev9YQydBQj-~(qWH;!be7H<1SyY z9jR3)LRx2(m_qis+Mmi~&ytsL@H&uE-XdH+J7gw;W{My-bu^up%7@lEC9b$Mrd%0$ z()Mf~AUp3&4EHELU1mJui)r6H@EaHTa?RY*IRRws@rR=D)C+DB!TQDb29(g=c-Y}a z(cdW|>HHiS&Z=WW`f0T`O4JGxpSCU4%qIg*1(ceOE%WR)hI9TBEyJysH&b9;r5-lQ zC3whooVMnw9OEmhSu}l~8xPtQCC~QjCf!Q>)D*=@%XAx^fKQWL6f5)!bzdPm%g2eY`FZKzh8QzaVZ|ABj2~t zL^Yh5HrPLHr%vnM_%A3S6w$YybpHRDaz%$PbhFj!;` z`n>hICIj=F=kp_TdnU+(&Y$X(CoDQFgnXY~oUn`bVDp~fXM8)6xcK7=Q6#5@O!pmk zR8Z$G{@wOGRXyeM+IxuF3H8&jP0G-}xc7a7i1Y-Rkg6PAFe!u?YtjnF8lFpyiDGaa z?9#S4jx9+yV#^jr3nC>K0#fz-<*5LqFy*0T_jT=MQL307KB5Nni-BK5rQe1J+a+=n z6%>-@=KJ>ah_Yoq<^dPyqg{2X^^&oDE4E@GgtrJLlW#u#x%KO@_nMWHqPfq0=@{%e zZ0R=0LFii4gURR1q#&(^C2h~f1a(!HHT7c2G`b)9AscgWnR<(9PqwNIBCUB|yE5HK zC9NDW;2|=$$+@VS4aZ|ZA>H%fh4E54Bg2+g`Ns7f$0Pez9m$z4(-~>?tlTRex8q5& zO!jJwhtcIqC|pN5m(bb`=3kmC(bYu@6`bjQ#zSFokhCwG{#&bFH&!{LezRL%HJk@L z^}%RNv{WERpB4irMHKcU0+&Le`BtIwG4ktpyj>)nQC}g^VXjTlp%QUN(9&Wc>yb0% z0y?yn*M(V;UiZ+4Sdusl+$__6wZ<tOc581J3;{Sj>7Y-fusZ z?iW@$L^JT)o(y@PP3W>$y?Qlui+1jaoE$dhzw!mOnIZ+iT9IY8u2QHCDZceB*4k23 z7Gfr)ozpLRi|bIz79eGH%DPu~0?LGt)R9W#qh;NJ;xy&X!ic~hg!~Nz zxTXP_3rrh*okM)iRT+CvJ~rDTDGrI7sXUj(l_bQ8r7qyQ*OQ9Skml*-0Lqu-WHaKY zw$B`Zj?MB&_c(A|vK2#bCg>bMa?hinQrWcoQ~~RMhgc~B#t;yg~pE<`LZCB@-YdR znW>xBcZ{nj+nlQHy<}Uhz5T)%pgHxme7dn*GNg3F>bp;az-o11_c}#1P#*L{v)DPZ z@HQCb*^~~p|GDJDOGH6hDqn44yy_^iN^60OyGy#z<(ZBN-2hw9$dI(~sM*fVarBtI zcqv6N;Hkc0?NX*F52Z-yy!JmIKuxzc5bpv-mh3Vv_ZM@uR==mntmlEILiFz>@7fmM zQ$(#ZaSh9sW0#B96I(@^|BMdtk=PF&&Db znX7`k8}rWNHA?-6GQ$X#9UXbWo~SyO@&-n7ovOqOFCq-*<}cfDMa7$ae!l-5)yLK- zF!}=KaSqN2X9M5HllDP26}*o$bFY0Jy=i0B-Pu(48GynAk%oX($6HU-Q3O*YTI;;3 zLzXaL+9}Bmk;SaJARTC?- zo*_%gT^1++Xi{|5gckqA@C?DHH4~}ZwIb79mx38CWK9?S$wHcI?6_{gG=M66ilwY`4{tVIQ-%Z z9+!|>Y=#ge(!b?1I2}9ezN%_CrMG8Z%$3eIir(1-6bWJ{PamTb(oeXCeTi@1p~;l= zjJhL?!#S4imZ82!2q0TGi3Fp-dvzt~>j;~jA$62+(?WRJ`OQoLJek%RL4eseiYDkk zX=PPU-TXn+ZS*kRchPgnBYim5@`@qStuG#gP4+_IQGx-n_q01ciBB_-d1KiIg&h-B7A_bnySzZoviVr0WxjDr)08X3rvvNJ+6dZ zO%mFTom(htRRPQpqm9y++x3YC%*6TU&hJbn-!;;@vkte~1Y8U&I4^GCr#>N@-Qhcm zq?0yx!S8kNu0c|A$@QYV#BRK=M4+j3C(Q?j_lKQ z@9I7F$Dei)`zh({TJ7)a&%2GcvH@{spRh@vx>!dLSEs#u=RHkC_6oPBw8#m6quuAz zAvF5;?h<-5C_1}&lLItUMH#TOsn{PsN#IgXAEW79ReO!#PGTGrm={e=LS>7-wzP5f zBjKWBeahX?$7syit}wA)O~6zjupz)wp`7INPtLy$bpVOQ;;Pt-&PpU5UF!{t*|c>X zpG*8@V?&fXIvn_yj4CqC7=mR1G|wmuHH`B|th_~+6!ZD4Znthcped?Z!qh;!99SQf zpbPtdnM`>TODcCxG(q5x8#MI4LRt23q?>Ng7WJ2uIzf*rDcHE<3@26Fk(*Bgimnagm zeTde6csTd*j4oX*b7TFM3i(MOaNwdeofJXRa0Iq&uk{z`_dV9{stWm|K?>(^g zDP?x+;b%aeERRuS6QLv};vHwnmjuF8T=m?4Wr9Y-<_;&oLE&}FauChG4~6iz zE;|LyE~353@RcA6#BfJr_P0`qlu3jI8o@lCEF-oJOD?~p8+rb*?-?Oby{eeHUEzoa z=nSG=E4IhIA@^18nCUIHPDy}c0L&8;Qkjjo!ELSav|BnR4}TvErIDq~gk-OgxT0hG z4!=1PDzmg~#D%-yuo1dD+o1vc%Xvv&|2!jzMtub|bi$P(nkt}V&)O;>$16X8IAdZecLBViZK+tG#KKn)S~TS_P-(MbrhvpDdyeRKe!xBy$0 zQqpQ~#6NcR4hVf7<;hgFDI#%tk7aGjR#L=-pII*{asEgevYQPysAa|-wr?;ehAYr_Ce$c~POl+SYhcY> z53Ko-c$GD}v)@6sdL(P{FK6CDsEV2Z`^=?1ahhg;=o!o{4@UN3?p-!9HWd)+YAcqNa=NGgBqYtk?08uYVr(0;u&ioPpDWp z3Pz#yp#G2&H|JJXPBClEi{t_d`-v%^?3PEmsg&d7l5#WQ9g@h-C%w0?-IYxZ z(lPrB;6>4j6^e_B##PNIIKD>GQBT~o3`Su-IwOE7fAxOnuE<==l#AyxNqI=^=a1S8 zE+}6It7!3|8+|nULgOi)l$a4(N8AJgIhI{NG06GQqkrQWKgJdC84LSyc4e#cbiy=% z_!tGpj-ogJm`S*{YvW?r9S~gx@4<_Wn%650ik^KiNkZx(VRsNC9ILsejxilup}@*3 zO^HZ^1rLp{X)aBE0;2VqugU7px5@Xr#hQ_dfV922AW^IB zlwZ{Wd*W#?2AGy6qrtI(&R!1K@XCNeV)%*J1b>&1MCJ;0My9zq&0uF-)T8qJ5{ekj zi;YU$2$YA4v5NHvQ~Etw27DS%eIO@LOUJklWGJG6ePUKP{kXdlE1W7}8pL{eKcjbh zsZo!v%q6OQAu!kO+ArNlx69mW`h)zj6WhWZd?tV(tO}c&R3Nrv$;Ep&I5>GeF&P` zh3ZQPX`WlZ?L<&R=5lE$>Uyc7iDh1r;a+kf;n1k%9~g zJ)ujNf1q!<5BK4&bMHFCKHvWK+2=cVJMr3(2%ck3-C*Kn-1MO{uN4;IDrLyZqA(o9e^ymPv(PDD0H-Y!ppBXRiC{9A~Uu8%$_((r(i}- zE-VRI6Bj71h-D0C4qpj2)&7JjLBOJbLXce zX@cid_W2TD&r)@?2%@(T=?>ZCXge$+ zt9E-Jdl}@4Lt2L_fVsN@_)?2?3S6b^xsT-W12$BJg?mgweJ~s~yKmxLSz%5P=1)Yb zn2Kxkl7~twu?U)v=kZ>ZIFGh)Yb21CjjpGnMP>LJoMql(Bo6h^A?od1Skc4w9tJt% z>6>~@UsARleUIAQgDG#mh9h;z>r6>#tS4g4dXoF^h&pAa)`lY`1^|E4g$3w70?U-@ zD@y&Q9;W}DR(-uVuE*LMru_T19%6 z#mqy%Nd}i#AlW-^kiCP>g5ux2}RNL%oY*lZhQeanP{;2KlJDUQ@WeZ+;2N57U5Li;VCJq zat=XA7go5J>)Z2fdut6+tW65r_W}_Hfly>M%B<8dGH;wd|05s2yySJ&hi1^ELHHE| zqle|vv~9)^J2!)sjJ9IFFBzJiQkug^AEQ_fkC(wyP&LrY_lMg(;BuAEv>Sx$kZ6^s zO{HIkK%h6V?ydoe={^}yS7BMm@6bmL@}=YMazRbzXB{#YAKp8#AWIDEM5)x%Ah_TY&^8 zkpA{EoaPR6nNw(?6VozhnHGaXEI1rA$!z2E9dxUKnz1Vg$KwZH%Ik%vy=aX&+RD+; zYq8-$G1=^tb$a$QT2j~@Y6)lq)EagM{fbS`joV;Z%rBr772clHF$bAI5#-Mm=_W}H z4EDk1X}R>JnWlV~oz0Gs?YYfLaWXWuHla$g)&;=m_+Yyo1k9F+5dRz8_YdsZc|KO3 zax5CvlV)p|gZLTFc|=BQ;pIWMW9NAFxj*Ifn?qWp4PV-?1X6<+yHXwp!q8|mqLJ{ zV-AZ04PPFeRnk-g0tEH9Cq5SfCA$dCkSm=vla2pv6JL2*@i|4`DGWt1D-?*LfKP?5 zP&mdf3_?LF6bwp17Zp@n5mzXJC`H8hzed|j@iXDGALom-OCaFFdic2Caw8@D3q&jJ Axc~qF literal 0 HcmV?d00001 diff --git a/faults/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml b/faults/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml new file mode 100644 index 000000000..a67c238c2 --- /dev/null +++ b/faults/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml @@ -0,0 +1,24 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-18T10:28:08Z + name: azure-disk-loss + version: 0.1.0 + annotations: + categories: Azure + vendor: Harness +spec: + displayName: Azure Disk Loss + categoryDescription: | + This fault causes the detachment of the disk from the VM for a certain chaos duration. + - Causes detachment of the disk from the VM and then re-attachment of the disk to the VM. + - It helps to check the performance of the application on the instance. + keywords: + - Azure + platforms: + - Azure + minKubeVersion: 1.12.0 + icon: + - url: + mediatype: "" diff --git a/experiments/azure/azure-disk-loss/engine.yaml b/faults/azure/azure-disk-loss/engine.yaml similarity index 86% rename from experiments/azure/azure-disk-loss/engine.yaml rename to faults/azure/azure-disk-loss/engine.yaml index 18d029f3c..f753c17e1 100644 --- a/experiments/azure/azure-disk-loss/engine.yaml +++ b/faults/azure/azure-disk-loss/engine.yaml @@ -1,11 +1,12 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: nginx-chaos + name: azure-chaos spec: # It can be active/stop engineState: 'active' - chaosServiceAccount: azure-disk-loss-sa + chaosServiceAccount: litmus-admin experiments: - name: azure-disk-loss spec: @@ -18,15 +19,15 @@ spec: # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '30' - + # provide the resource group of the instance - name: RESOURCE_GROUP value: '' - + # accepts enable/disable, default is disable - name: SCALE_SET value: '' - + # provide the virtual disk names (comma separated if multiple) - name: VIRTUAL_DISK_NAMES - value: '' \ No newline at end of file + value: '' diff --git a/faults/azure/azure-disk-loss/fault.yaml b/faults/azure/azure-disk-loss/fault.yaml new file mode 100644 index 000000000..7310d2363 --- /dev/null +++ b/faults/azure/azure-disk-loss/fault.yaml @@ -0,0 +1,94 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Detaches disk from the VM and then re-attaches disk to the VM +kind: ChaosExperiment +metadata: + name: azure-disk-loss + labels: + name: azure-disk-loss + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name azure-disk-loss + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '30' + + - name: CHAOS_INTERVAL + value: '30' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # provide the resource group of the instance + - name: RESOURCE_GROUP + value: '' + + # accepts enable/disable, default is disable + - name: SCALE_SET + value: '' + + # provide the virtual disk names (comma separated if multiple) + - name: VIRTUAL_DISK_NAMES + value: '' + + # provide the sequence type for the run. Options: serial/parallel + - name: SEQUENCE + value: 'parallel' + + # provide the path to aks credentials mounted from secret + - name: AZURE_AUTH_LOCATION + value: '/tmp/azure.auth' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + labels: + name: azure-disk-loss + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml b/faults/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml new file mode 100644 index 000000000..ef0e8749f --- /dev/null +++ b/faults/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml @@ -0,0 +1,26 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-18T10:28:08Z + name: azure-instance-stop + version: 0.1.0 + annotations: + categories: Azure + vendor: Harness +spec: + displayName: Azure Instance Stop + categoryDescription: | + Azure instance stop fault disrupts the state of Azure instance. This fault injects Azure instances stop for a certain chaos duration. + - It helps to check the performance of the application/processes running on the Azure instance when subject to instance stop. + keywords: + - Azure + platforms: + - Azure + minKubeVersion: 1.12.0 + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/azure/azure-instance-stop/engine.yaml b/faults/azure/azure-instance-stop/engine.yaml similarity index 87% rename from charts/azure/azure-instance-stop/engine.yaml rename to faults/azure/azure-instance-stop/engine.yaml index 13d3e49ea..9370956b3 100644 --- a/charts/azure/azure-instance-stop/engine.yaml +++ b/faults/azure/azure-instance-stop/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -5,19 +6,19 @@ metadata: namespace: default spec: engineState: 'active' - chaosServiceAccount: azure-instance-stop-sa + chaosServiceAccount: litmus-admin experiments: - name: azure-instance-stop spec: components: - env: + env: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION value: '30' # set chaos intreval (in sec) as desired - name: CHAOS_INTERVAL - value: '30' + value: '30' # provide the target instance name(s) (comma separated if multiple) - name: AZURE_INSTANCE_NAMES @@ -26,8 +27,7 @@ spec: # provide the resource group of the instance - name: RESOURCE_GROUP value: '' - + # accepts enable/disable, default is disable - name: SCALE_SET value: '' - diff --git a/faults/azure/azure-instance-stop/fault.yaml b/faults/azure/azure-instance-stop/fault.yaml new file mode 100644 index 000000000..6d2187f30 --- /dev/null +++ b/faults/azure/azure-instance-stop/fault.yaml @@ -0,0 +1,93 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Stops an Azure instance for a certain chaos duration +kind: ChaosExperiment +metadata: + name: azure-instance-stop + labels: + name: azure-instance-stop + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name azure-instance-stop + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '30' + + - name: CHAOS_INTERVAL + value: '30' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # provide the target instance name(s) (comma separated if multiple) + - name: AZURE_INSTANCE_NAMES + value: '' + + # provide the resource group of the instance + - name: RESOURCE_GROUP + value: '' + + # accepts enable/disable, default is disable + - name: SCALE_SET + value: '' + + # Provide the path of aks credentials mounted from secret + - name: AZURE_AUTH_LOCATION + value: '/tmp/azure.auth' + + - name: SEQUENCE + value: 'parallel' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + labels: + name: azure-instance-stop + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/azure/azure.chartserviceversion.yaml b/faults/azure/azure.chartserviceversion.yaml new file mode 100644 index 000000000..41aac6cf5 --- /dev/null +++ b/faults/azure/azure.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: azure + version: 0.1.0 + annotations: + categories: Azure + chartDescription: Injects faults on Azure services + executionPlane: "kubernetes" +spec: + displayName: Azure + categoryDescription: > + Azure chaos contains different chaos experiments for Azure cloud provider to test the app/platform service availability. It uses Azure RunCommand to carry out the fault logic in the instance. It will install all the experiments which can be used to inject chaos into the Azure services like VMs, and so on. + faults: + - name: azure-disk-loss + description: It injects Azure disk loss fault from an Azure VM instance for a certain chaos duration. + displayName: "Azure Disk Loss" + - name: azure-instance-stop + description: It injects the Azure VM instance stop fault for a certain chaos duration. + displayName: "Azure Instance Stop" + keywords: + - Azure + minKubeVersion: 1.12.0 + icon: + - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico + mediatype: image/png diff --git a/charts/azure/azure.package.yaml b/faults/azure/azure.package.yaml similarity index 60% rename from charts/azure/azure.package.yaml rename to faults/azure/azure.package.yaml index 904710a36..7910f3255 100644 --- a/charts/azure/azure.package.yaml +++ b/faults/azure/azure.package.yaml @@ -1,10 +1,9 @@ -packageName: azure -experiments: - - name: azure-instance-stop - CSV: azure-instance-stop.chartserviceversion.yaml - desc: "azure-instance-stop" - +--- +packageName: azure +faults: - name: azure-disk-loss CSV: azure-disk-loss.chartserviceversion.yaml desc: "azure-disk-loss" - + - name: azure-instance-stop + CSV: azure-instance-stop.chartserviceversion.yaml + desc: "azure-instance-stop" \ No newline at end of file diff --git a/charts/azure/icons/azure-disk-loss.png b/faults/azure/icons/azure-disk-loss.png similarity index 100% rename from charts/azure/icons/azure-disk-loss.png rename to faults/azure/icons/azure-disk-loss.png diff --git a/charts/azure/icons/azure-instance-stop.png b/faults/azure/icons/azure-instance-stop.png similarity index 100% rename from charts/azure/icons/azure-instance-stop.png rename to faults/azure/icons/azure-instance-stop.png diff --git a/charts/gcp/gcp-vm-disk-loss-by-label/engine.yaml b/faults/gcp/gcp-vm-disk-loss-by-label/engine.yaml similarity index 87% rename from charts/gcp/gcp-vm-disk-loss-by-label/engine.yaml rename to faults/gcp/gcp-vm-disk-loss-by-label/engine.yaml index 93854d801..11b9845be 100644 --- a/charts/gcp/gcp-vm-disk-loss-by-label/engine.yaml +++ b/faults/gcp/gcp-vm-disk-loss-by-label/engine.yaml @@ -1,10 +1,11 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: gcp-disk-chaos + name: gcp-chaos spec: engineState: 'active' - chaosServiceAccount: gcp-vm-disk-loss-by-label-sa + chaosServiceAccount: litmus-admin experiments: - name: gcp-vm-disk-loss-by-label spec: @@ -17,13 +18,13 @@ spec: # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '30' - + # set the GCP project id - name: GCP_PROJECT_ID value: '' # set the zone in which all the disks are created - # all the disks must exist in the same zone + # all the disks must exist in the same zone - name: ZONES value: '' @@ -31,7 +32,7 @@ spec: - name: DISK_VOLUME_LABEL value: '' - # set the percentage value of the disks with the given label + # set the percentage value of the disks with the given label # which should be targeted as part of the chaos injection - name: DISK_AFFECTED_PERC value: '' diff --git a/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml new file mode 100644 index 000000000..08b756692 --- /dev/null +++ b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml @@ -0,0 +1,89 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back +kind: ChaosExperiment +metadata: + name: gcp-vm-disk-loss-by-label + labels: + name: gcp-vm-disk-loss-by-label + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name gcp-vm-disk-loss-by-label + command: + - /bin/bash + env: + # set chaos duration (in sec) as desired + - name: TOTAL_CHAOS_DURATION + value: '30' + + # set chaos interval (in sec) as desired + - name: CHAOS_INTERVAL + value: '30' + + # set the GCP project id + - name: GCP_PROJECT_ID + value: '' + + # set the zone in which all the disks are created + # all the disks must exist in the same zone + - name: ZONES + value: '' + + # set the label of the target disk volumes + - name: DISK_VOLUME_LABEL + value: '' + + # set the percentage value of the disks with the given label + # which should be targeted as part of the chaos injection + - name: DISK_AFFECTED_PERC + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + - name: SEQUENCE + value: 'parallel' + + labels: + name: gcp-vm-disk-loss-by-label + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml b/faults/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml new file mode 100644 index 000000000..d7765e0e2 --- /dev/null +++ b/faults/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: gcp-vm-disk-loss-by-label + version: 0.1.0 + annotations: + categories: GCP + vendor: Harness + +spec: + displayName: GCP VM Disk Loss By Label + categoryDescription: > + Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back. + keywords: + - GCP + platforms: + - "Minikube" + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/gcp/gcp-vm-disk-loss/engine.yaml b/faults/gcp/gcp-vm-disk-loss/engine.yaml similarity index 87% rename from charts/gcp/gcp-vm-disk-loss/engine.yaml rename to faults/gcp/gcp-vm-disk-loss/engine.yaml index 8b7ca42b2..4010cb083 100644 --- a/charts/gcp/gcp-vm-disk-loss/engine.yaml +++ b/faults/gcp/gcp-vm-disk-loss/engine.yaml @@ -1,12 +1,13 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: gcp-disk-chaos + name: gcp-chaos namespace: default spec: # It can be active/stop engineState: 'active' - chaosServiceAccount: gcp-vm-disk-loss-sa + chaosServiceAccount: litmus-admin experiments: - name: gcp-vm-disk-loss spec: @@ -24,13 +25,13 @@ spec: - name: GCP_PROJECT_ID value: '' - # set the disk volume name(s) as comma seperated values + # set the disk volume name(s) as comma seperated values # eg. volume1,volume2,... - name: DISK_VOLUME_NAMES value: '' - - # set the disk zone(s) as comma seperated values in the corresponding - # order of DISK_VOLUME_NAME + + # set the disk zone(s) as comma seperated values in the corresponding + # order of DISK_VOLUME_NAME # eg. zone1,zone2,... - name: ZONES value: '' diff --git a/faults/gcp/gcp-vm-disk-loss/fault.yaml b/faults/gcp/gcp-vm-disk-loss/fault.yaml new file mode 100644 index 000000000..538025870 --- /dev/null +++ b/faults/gcp/gcp-vm-disk-loss/fault.yaml @@ -0,0 +1,93 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back +kind: ChaosExperiment +metadata: + name: gcp-vm-disk-loss + labels: + name: gcp-vm-disk-loss + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name gcp-vm-disk-loss + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '30' + + - name: CHAOS_INTERVAL + value: '30' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # parallel or serial; determines how chaos is injected + - name: SEQUENCE + value: 'parallel' + + # set the GCP project id + - name: GCP_PROJECT_ID + value: '' + + # set the disk volume name(s) as comma seperated values + # eg. volume1,volume2,... + - name: DISK_VOLUME_NAMES + value: '' + + # set the disk zone(s) as comma seperated values in the corresponding + # order of DISK_VOLUME_NAME + # eg. zone1,zone2,... + - name: ZONES + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # parallel or serial; determines how chaos is injected + - name: SEQUENCE + value: 'parallel' + + labels: + name: gcp-vm-disk-loss + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml b/faults/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml new file mode 100644 index 000000000..5a8953dd8 --- /dev/null +++ b/faults/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: gcp-vm-disk-loss + version: 0.1.0 + annotations: + categories: GCP + vendor: Harness +spec: + displayName: GCP VM Disk Loss + categoryDescription: > + Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back. + keywords: + - GCP + platforms: + - GCP + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/gcp/gcp-vm-instance-stop-by-label/engine.yaml b/faults/gcp/gcp-vm-instance-stop-by-label/engine.yaml similarity index 78% rename from charts/gcp/gcp-vm-instance-stop-by-label/engine.yaml rename to faults/gcp/gcp-vm-instance-stop-by-label/engine.yaml index 1351f9378..72b3793df 100644 --- a/charts/gcp/gcp-vm-instance-stop-by-label/engine.yaml +++ b/faults/gcp/gcp-vm-instance-stop-by-label/engine.yaml @@ -1,11 +1,12 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: gcp-vm-chaos + name: gcp-chaos spec: # It can be active/stop engineState: 'active' - chaosServiceAccount: gcp-vm-instance-stop-by-label-sa + chaosServiceAccount: litmus-admin # It can be delete/retain experiments: - name: gcp-vm-instance-stop-by-label @@ -19,19 +20,19 @@ spec: # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '30' - + - name: SEQUENCE value: 'parallel' - # GCP project ID to which the vm instances belong + # GCP project ID to which the VM instances belong - name: GCP_PROJECT_ID value: '' - # Label of the target vm instance(s) + # Label of the target VM instance(s) - name: INSTANCE_LABEL value: '' - # Zone in which the target vm instance(s) filtered by the label exist + # Zone in which the target VM instance(s) filtered by the label exist # all the instances should lie in a single zone - name: ZONES value: '' @@ -40,7 +41,7 @@ spec: - name: MANAGED_INSTANCE_GROUP value: 'disable' - # set the percentage value of the instances with the given label + # set the percentage value of the instances with the given label # which should be targeted as part of the chaos injection - name: INSTANCE_AFFECTED_PERC - value: '' \ No newline at end of file + value: '' diff --git a/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml new file mode 100644 index 000000000..3cd3b2c2e --- /dev/null +++ b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml @@ -0,0 +1,97 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them +kind: ChaosExperiment +metadata: + name: gcp-vm-instance-stop-by-label + labels: + name: gcp-vm-instance-stop-by-label + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name gcp-vm-instance-stop-by-label + command: + - /bin/bash + env: + # set chaos duration (in sec) as desired + - name: TOTAL_CHAOS_DURATION + value: '30' + + # set chaos interval (in sec) as desired + - name: CHAOS_INTERVAL + value: '30' + + - name: SEQUENCE + value: 'parallel' + + # GCP project ID to which the VM instances belong + - name: GCP_PROJECT_ID + value: '' + + # Label of the target VM instance(s) + - name: INSTANCE_LABEL + value: '' + + # Zone in which the target VM instance(s) filtered by the label exist + # all the instances should lie in a single zone + - name: ZONES + value: '' + + # enable it if the target instance is a part of a managed instance group + - name: MANAGED_INSTANCE_GROUP + value: 'disable' + + # set the percentage value of the instances with the given label + # which should be targeted as part of the chaos injection + - name: INSTANCE_AFFECTED_PERC + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + labels: + name: gcp-vm-instance-stop-by-label + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml b/faults/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml new file mode 100644 index 000000000..14491d403 --- /dev/null +++ b/faults/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: gcp-vm-instance-stop-by-label + version: 0.1.0 + annotations: + categories: GCP + vendor: Harness +spec: + displayName: GCP VM Instance Stop By Label + categoryDescription: > + Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them. + keywords: + - GCP + platforms: + - "Minikube" + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/gcp/gcp-vm-instance-stop/engine.yaml b/faults/gcp/gcp-vm-instance-stop/engine.yaml similarity index 83% rename from charts/gcp/gcp-vm-instance-stop/engine.yaml rename to faults/gcp/gcp-vm-instance-stop/engine.yaml index a279fa233..67875676c 100644 --- a/charts/gcp/gcp-vm-instance-stop/engine.yaml +++ b/faults/gcp/gcp-vm-instance-stop/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -17,18 +18,18 @@ spec: # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '30' - - # Instance name of the target vm instance(s) + + # Instance name of the target VM instance(s) # Multiple instance names can be provided as comma separated values ex: instance1,instance2 - name: VM_INSTANCE_NAMES value: '' - - # GCP project ID to which the vm instances belong + + # GCP project ID to which the VM instances belong - name: GCP_PROJECT_ID value: '' - # Instance zone(s) of the target vm instance(s) - # If more than one instance is targetted, provide zone for each in the order of their + # Instance zone(s) of the target VM instance(s) + # If more than one instance is targetted, provide zone for each in the order of their # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 - name: ZONES value: '' diff --git a/faults/gcp/gcp-vm-instance-stop/fault.yaml b/faults/gcp/gcp-vm-instance-stop/fault.yaml new file mode 100644 index 000000000..163ec4af2 --- /dev/null +++ b/faults/gcp/gcp-vm-instance-stop/fault.yaml @@ -0,0 +1,101 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Stops GCP VM instances and GKE nodes for a specified duration and later restarts them +kind: ChaosExperiment +metadata: + name: gcp-vm-instance-stop + labels: + name: gcp-vm-instance-stop + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name gcp-vm-instance-stop + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '30' + + - name: CHAOS_INTERVAL + value: '30' + + # parallel or serial; determines how the VM instances are terminated, all at once or one at a time + - name: SEQUENCE + value: 'parallel' + + # period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # enable or disable; shall be set to enable if the target instances are a part of a managed instance group + - name: MANAGED_INSTANCE_GROUP + value: 'disable' + + # Instance name of the target VM instance(s) + # Multiple instance names can be provided as comma separated values ex: instance1,instance2 + - name: VM_INSTANCE_NAMES + value: '' + + # GCP project ID to which the VM instances belong + - name: GCP_PROJECT_ID + value: '' + + # Instance zone(s) of the target VM instance(s) + # If more than one instance is targetted, provide zone for each in the order of their + # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 + - name: ZONES + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # parallel or serial; determines how chaos is injected + - name: SEQUENCE + value: 'parallel' + + labels: + name: gcp-vm-instance-stop + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci + secrets: + - name: cloud-secret + mountPath: /tmp/ diff --git a/faults/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml b/faults/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml new file mode 100644 index 000000000..e4bb20577 --- /dev/null +++ b/faults/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml @@ -0,0 +1,26 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: gcp-vm-instance-stop + version: 0.1.0 + annotations: + categories: gcp +spec: + displayName: GCP VM Instance Stop + categoryDescription: > + Stops GCP VM instances and GKE nodes for a specified duration and later restarts them. + keywords: + - GCP + platforms: + - GCP + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/faults/gcp/gcp.chartserviceversion.yaml b/faults/gcp/gcp.chartserviceversion.yaml new file mode 100644 index 000000000..d7425b9a5 --- /dev/null +++ b/faults/gcp/gcp.chartserviceversion.yaml @@ -0,0 +1,42 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: gcp + version: 0.1.0 + annotations: + categories: GCP + chartDescription: Injects faults on GCP services + executionPlane: "kubernetes" +spec: + displayName: GCP + categoryDescription: > + GCP fault disrupts state of GCP resources running part of the GCP services + faults: + - name: gcp-vm-instance-stop + description: It injects gcp-vm-instance-stop fault into GCP VMs. + displayName: "GCP VM Instance Stop" + - name: gcp-vm-instance-stop-by-label + description: It injects gcp-vm-instance-stop-by-label fault into GCP VMs. + displayName: "GCP VM Instance Stop By Label" + - name: gcp-vm-disk-loss-by-label + description: It injects gcp-vm-disk-loss-by-label fault into GCP VMs. + displayName: "GCP VM Disk Loss By Label" + - name: gcp-vm-disk-loss + description: It injects gcp-vm-disk-loss fault into GCP VMs. + displayName: "GCP VM Disk Loss" + keywords: + - GCP + minKubeVersion: 1.12.0 + links: + - name: Kubernetes Website + url: https://kubernetes.io + - name: Source Code + url: https://github.com/kubernetes/kubernetes + - name: Kubernetes Slack + url: https://slack.kubernetes.io/ + - name: Documentation + url: "" + icon: + - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico + mediatype: image/png diff --git a/charts/gcp/gcp.package.yaml b/faults/gcp/gcp.package.yaml similarity index 97% rename from charts/gcp/gcp.package.yaml rename to faults/gcp/gcp.package.yaml index 28c1b33e7..abe7781c0 100644 --- a/charts/gcp/gcp.package.yaml +++ b/faults/gcp/gcp.package.yaml @@ -1,14 +1,15 @@ +--- packageName: gcp -experiments: +faults: - name: gcp-vm-instance-stop CSV: gcp-vm-instance-stop.chartserviceversion.yaml desc: "gcp-vm-instance-stop" - - name: gcp-vm-disk-loss - CSV: gcp-vm-disk-loss.chartserviceversion.yaml - desc: "gcp-vm-disk-loss" - name: gcp-vm-instance-stop-by-label CSV: gcp-vm-instance-stop-by-label.chartserviceversion.yaml desc: "gcp-vm-instance-stop-by-label" - name: gcp-vm-disk-loss-by-label CSV: gcp-vm-disk-loss-by-label.chartserviceversion.yaml desc: "gcp-vm-disk-loss-by-label" + - name: gcp-vm-disk-loss + CSV: gcp-vm-disk-loss.chartserviceversion.yaml + desc: "gcp-vm-disk-loss" diff --git a/charts/gcp/icons/gcp-vm-disk-loss-by-label.png b/faults/gcp/icons/gcp-vm-disk-loss-by-label.png similarity index 100% rename from charts/gcp/icons/gcp-vm-disk-loss-by-label.png rename to faults/gcp/icons/gcp-vm-disk-loss-by-label.png diff --git a/charts/gcp/icons/gcp-vm-disk-loss.png b/faults/gcp/icons/gcp-vm-disk-loss.png similarity index 100% rename from charts/gcp/icons/gcp-vm-disk-loss.png rename to faults/gcp/icons/gcp-vm-disk-loss.png diff --git a/charts/gcp/icons/gcp-vm-instance-stop-by-label.png b/faults/gcp/icons/gcp-vm-instance-stop-by-label.png similarity index 100% rename from charts/gcp/icons/gcp-vm-instance-stop-by-label.png rename to faults/gcp/icons/gcp-vm-instance-stop-by-label.png diff --git a/charts/gcp/icons/gcp-vm-instance-stop.png b/faults/gcp/icons/gcp-vm-instance-stop.png similarity index 100% rename from charts/gcp/icons/gcp-vm-instance-stop.png rename to faults/gcp/icons/gcp-vm-instance-stop.png diff --git a/faults/kubernetes/container-kill/container-kill.chartserviceversion.yaml b/faults/kubernetes/container-kill/container-kill.chartserviceversion.yaml new file mode 100644 index 000000000..4b1250259 --- /dev/null +++ b/faults/kubernetes/container-kill/container-kill.chartserviceversion.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: container-kill + version: 0.1.0 + annotations: + categories: "Kubernetes" + vendor: "Harness" +spec: + displayName: Container Kill + categoryDescription: | + Container kill fault disrupts state of kubernetes resources. This fault injects random container delete failures against specified application. + - Executes SIGKILL on containers of random replicas of an application deployment. + - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. + keywords: + - Kubernetes + platforms: + - GKE + - Minikube + - Packet(Kubeadm) + - EKS + - AKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/experiments/generic/container-kill/engine.yaml b/faults/kubernetes/container-kill/engine.yaml similarity index 81% rename from experiments/generic/container-kill/engine.yaml rename to faults/kubernetes/container-kill/engine.yaml index 399084cdc..038051bfa 100644 --- a/experiments/generic/container-kill/engine.yaml +++ b/faults/kubernetes/container-kill/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -7,9 +8,9 @@ spec: # It can be active/stop engineState: 'active' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: container-kill-sa experiments: - name: container-kill @@ -25,8 +26,7 @@ spec: value: '10' # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only + # it supports docker, containerd, crio - name: CONTAINER_RUNTIME value: 'containerd' @@ -39,4 +39,3 @@ spec: - name: TARGET_CONTAINER value: '' - \ No newline at end of file diff --git a/experiments/generic/pod-dns-spoof/experiment.yaml b/faults/kubernetes/container-kill/fault.yaml similarity index 57% rename from experiments/generic/pod-dns-spoof/experiment.yaml rename to faults/kubernetes/container-kill/fault.yaml index 0e6cf5ada..f36b39179 100644 --- a/experiments/generic/pod-dns-spoof/experiment.yaml +++ b/faults/kubernetes/container-kill/fault.yaml @@ -1,15 +1,15 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: - message: | - Pod DNS Spoof can spoof particular dns requests in target pod container to desired target hostnames + message: "Kills a container belonging to an application pod \n" kind: ChaosExperiment metadata: - name: pod-dns-spoof + name: container-kill labels: - name: pod-dns-spoof + name: container-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -17,95 +17,107 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always args: - -c - - ./experiments -name pod-dns-spoof + - ./experiments -name container-kill command: - /bin/bash env: - name: TARGET_CONTAINER - value: "" - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" + value: '' - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds - - # Time period to wait before and after injection of chaos in sec + # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: "" - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: "" + value: '' - name: TARGET_PODS - value: "" + value: '' - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' + # provide the chaos interval + - name: CHAOS_INTERVAL + value: '10' + + - name: SIGNAL + value: 'SIGKILL' # provide the socket file path - name: SOCKET_PATH value: '/run/containerd/containerd.sock' + # provide the name of container runtime + # it supports docker, containerd, crio + - name: CONTAINER_RUNTIME + value: 'containerd' + + # provide the total chaos duration + - name: TOTAL_CHAOS_DURATION + value: '20' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: "parallel" - - # map of the target hostnames eg. '{"abc.com":"spoofabc.com"}' . If empty no queries will be spoofed - - name: SPOOF_MAP - value: "" + value: 'parallel' labels: - experiment: pod-dns-spoof + name: container-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/disk-fill/disk-fill.chartserviceversion.yaml b/faults/kubernetes/disk-fill/disk-fill.chartserviceversion.yaml new file mode 100644 index 000000000..39fcc5068 --- /dev/null +++ b/faults/kubernetes/disk-fill/disk-fill.chartserviceversion.yaml @@ -0,0 +1,37 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: disk-fill + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness + support: https://slack.kubernetes.io/ +spec: + displayName: Disk Fill + categoryDescription: | + Disk fill fault disrupts state of kubernetes resources. + - Causes (forced/graceful) Disk Stress by filling up the Ephemeral Storage of the Pod using one of it containers. + - Causes Pod to get Evicted if the Pod exceeds it Ephemeral Storage Limit. + - Tests the Ephemeral Storage Limits, to ensure those parameters are sufficient. + keywords: + - Kubernetes + platforms: + - GKE + - EKS + - AKS + experiments: + - sock-shop + - sock-shop-promProbe + chaosType: infra + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/experiments/generic/disk-fill/engine.yaml b/faults/kubernetes/disk-fill/engine.yaml similarity index 63% rename from experiments/generic/disk-fill/engine.yaml rename to faults/kubernetes/disk-fill/engine.yaml index 5245c8618..d4ad97d0c 100644 --- a/experiments/generic/disk-fill/engine.yaml +++ b/faults/kubernetes/disk-fill/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -9,9 +10,9 @@ spec: #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: disk-fill-sa experiments: - name: disk-fill @@ -28,10 +29,8 @@ spec: - name: PODS_AFFECTED_PERC value: '' - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' + # Provide the container runtime path + # Default set to docker container path + - name: CONTAINER_PATH + value: '/var/lib/docker/containers' - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' diff --git a/faults/kubernetes/disk-fill/fault.yaml b/faults/kubernetes/disk-fill/fault.yaml new file mode 100644 index 000000000..c4d403977 --- /dev/null +++ b/faults/kubernetes/disk-fill/fault.yaml @@ -0,0 +1,123 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Fillup Ephemeral Storage of a Resource +kind: ChaosExperiment +metadata: + name: disk-fill + labels: + name: disk-fill + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get", "list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list", "get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name disk-fill + command: + - /bin/bash + env: + - name: TARGET_CONTAINER + value: '' + + - name: FILL_PERCENTAGE + value: '80' + + - name: TOTAL_CHAOS_DURATION + value: '60' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # provide the data block size + # supported unit is KB + - name: DATA_BLOCK_SIZE + value: '256' + + - name: TARGET_PODS + value: '' + + - name: EPHEMERAL_STORAGE_MEBIBYTES + value: '' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + # Provide the container runtime path + # Default set to docker container path + - name: CONTAINER_PATH + value: '/var/lib/docker/containers' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: disk-fill + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/host-path-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/docker-service-kill/docker-service-kill.chartserviceversion.yaml b/faults/kubernetes/docker-service-kill/docker-service-kill.chartserviceversion.yaml new file mode 100644 index 000000000..617d7ffcc --- /dev/null +++ b/faults/kubernetes/docker-service-kill/docker-service-kill.chartserviceversion.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: docker-service-kill + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Docker Service Kill + categoryDescription: | + docker-service-kill fault kills the Docker service gracefully for a certain chaos duration. + - Causes replicas to be evicted or become unreachable on account of nodes turning unschedulable (Not Ready) due to Docker service kill. + - The application node should be healthy once the chaos is stopped and the services are re-accessable. + keywords: + - Kubernetes + platforms: + - GKE + - AKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/generic/docker-service-kill/engine.yaml b/faults/kubernetes/docker-service-kill/engine.yaml similarity index 82% rename from charts/generic/docker-service-kill/engine.yaml rename to faults/kubernetes/docker-service-kill/engine.yaml index cfc1d1aea..a13662a8d 100644 --- a/charts/generic/docker-service-kill/engine.yaml +++ b/faults/kubernetes/docker-service-kill/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -12,12 +13,15 @@ spec: - name: docker-service-kill spec: components: - # nodeSelector: + # nodeSelector: # # provide the node labels # kubernetes.io/hostname: 'node02' env: - name: TOTAL_CHAOS_DURATION value: '90' # in seconds - + - name: TARGET_NODE - value: '' \ No newline at end of file + value: '' + + - name: NODE_LABEL + value: "" diff --git a/charts/generic/docker-service-kill/experiment.yaml b/faults/kubernetes/docker-service-kill/fault.yaml similarity index 54% rename from charts/generic/docker-service-kill/experiment.yaml rename to faults/kubernetes/docker-service-kill/fault.yaml index 1d8d0ef5a..ce399135b 100644 --- a/charts/generic/docker-service-kill/experiment.yaml +++ b/faults/kubernetes/docker-service-kill/fault.yaml @@ -1,7 +1,8 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kills the docker service on the application node to check the resiliency. + Kills the Docker service on the application node to check the resiliency. kind: ChaosExperiment metadata: name: docker-service-kill @@ -9,7 +10,7 @@ metadata: name: docker-service-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Cluster @@ -17,66 +18,67 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] # for experiment to perform node status checks - apiGroups: [""] resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name docker-service-kill + - -c + - ./experiments -name docker-service-kill command: - - /bin/bash + - /bin/bash env: - - - name: TOTAL_CHAOS_DURATION - value: '90' # in seconds + - name: TOTAL_CHAOS_DURATION + value: '90' # in seconds - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' + # Period to wait before injection of chaos in sec + - name: RAMP_TIME + value: '' - - name: NODE_LABEL - value: '' + - name: NODE_LABEL + value: '' - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' + # provide lib image + - name: LIB_IMAGE + value: 'ubuntu:16.04' + + # provide the target node name + - name: TARGET_NODE + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' labels: name: docker-service-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/service-kill: "true" - app.kubernetes.io/version: latest - + app.kubernetes.io/version: ci diff --git a/charts/generic/icons/container-kill.png b/faults/kubernetes/icons/container-kill.png similarity index 100% rename from charts/generic/icons/container-kill.png rename to faults/kubernetes/icons/container-kill.png diff --git a/charts/generic/icons/disk-fill.png b/faults/kubernetes/icons/disk-fill.png similarity index 100% rename from charts/generic/icons/disk-fill.png rename to faults/kubernetes/icons/disk-fill.png diff --git a/charts/generic/icons/docker-service-kill.png b/faults/kubernetes/icons/docker-service-kill.png similarity index 100% rename from charts/generic/icons/docker-service-kill.png rename to faults/kubernetes/icons/docker-service-kill.png diff --git a/charts/generic/icons/kubelet-service-kill.png b/faults/kubernetes/icons/kubelet-service-kill.png similarity index 100% rename from charts/generic/icons/kubelet-service-kill.png rename to faults/kubernetes/icons/kubelet-service-kill.png diff --git a/charts/generic/icons/node-cpu-hog.png b/faults/kubernetes/icons/node-cpu-hog.png similarity index 100% rename from charts/generic/icons/node-cpu-hog.png rename to faults/kubernetes/icons/node-cpu-hog.png diff --git a/charts/generic/icons/node-drain.png b/faults/kubernetes/icons/node-drain.png similarity index 100% rename from charts/generic/icons/node-drain.png rename to faults/kubernetes/icons/node-drain.png diff --git a/charts/generic/icons/node-io-stress.png b/faults/kubernetes/icons/node-io-stress.png similarity index 100% rename from charts/generic/icons/node-io-stress.png rename to faults/kubernetes/icons/node-io-stress.png diff --git a/charts/generic/icons/node-memory-hog.png b/faults/kubernetes/icons/node-memory-hog.png similarity index 100% rename from charts/generic/icons/node-memory-hog.png rename to faults/kubernetes/icons/node-memory-hog.png diff --git a/charts/generic/icons/generic.png b/faults/kubernetes/icons/node-poweroff.png similarity index 100% rename from charts/generic/icons/generic.png rename to faults/kubernetes/icons/node-poweroff.png diff --git a/charts/generic/icons/node-restart.png b/faults/kubernetes/icons/node-restart.png similarity index 100% rename from charts/generic/icons/node-restart.png rename to faults/kubernetes/icons/node-restart.png diff --git a/charts/generic/icons/node-taint.png b/faults/kubernetes/icons/node-taint.png similarity index 100% rename from charts/generic/icons/node-taint.png rename to faults/kubernetes/icons/node-taint.png diff --git a/charts/generic/icons/pod-autoscaler.png b/faults/kubernetes/icons/pod-autoscaler.png similarity index 100% rename from charts/generic/icons/pod-autoscaler.png rename to faults/kubernetes/icons/pod-autoscaler.png diff --git a/charts/generic/icons/pod-cpu-hog-exec.png b/faults/kubernetes/icons/pod-cpu-hog-exec.png similarity index 100% rename from charts/generic/icons/pod-cpu-hog-exec.png rename to faults/kubernetes/icons/pod-cpu-hog-exec.png diff --git a/charts/generic/icons/pod-cpu-hog.png b/faults/kubernetes/icons/pod-cpu-hog.png similarity index 100% rename from charts/generic/icons/pod-cpu-hog.png rename to faults/kubernetes/icons/pod-cpu-hog.png diff --git a/charts/generic/icons/pod-delete.png b/faults/kubernetes/icons/pod-delete.png similarity index 100% rename from charts/generic/icons/pod-delete.png rename to faults/kubernetes/icons/pod-delete.png diff --git a/charts/generic/icons/pod-dns-error.png b/faults/kubernetes/icons/pod-dns-error.png similarity index 100% rename from charts/generic/icons/pod-dns-error.png rename to faults/kubernetes/icons/pod-dns-error.png diff --git a/charts/generic/icons/pod-dns-spoof.png b/faults/kubernetes/icons/pod-dns-spoof.png similarity index 100% rename from charts/generic/icons/pod-dns-spoof.png rename to faults/kubernetes/icons/pod-dns-spoof.png diff --git a/charts/generic/icons/pod-http-latency.png b/faults/kubernetes/icons/pod-http-latency.png similarity index 100% rename from charts/generic/icons/pod-http-latency.png rename to faults/kubernetes/icons/pod-http-latency.png diff --git a/charts/generic/icons/pod-http-modify-body.png b/faults/kubernetes/icons/pod-http-modify-body.png similarity index 100% rename from charts/generic/icons/pod-http-modify-body.png rename to faults/kubernetes/icons/pod-http-modify-body.png diff --git a/charts/generic/icons/pod-http-modify-header.png b/faults/kubernetes/icons/pod-http-modify-header.png similarity index 100% rename from charts/generic/icons/pod-http-modify-header.png rename to faults/kubernetes/icons/pod-http-modify-header.png diff --git a/charts/generic/icons/pod-http-reset-peer.png b/faults/kubernetes/icons/pod-http-reset-peer.png similarity index 100% rename from charts/generic/icons/pod-http-reset-peer.png rename to faults/kubernetes/icons/pod-http-reset-peer.png diff --git a/charts/generic/icons/pod-http-status-code.png b/faults/kubernetes/icons/pod-http-status-code.png similarity index 100% rename from charts/generic/icons/pod-http-status-code.png rename to faults/kubernetes/icons/pod-http-status-code.png diff --git a/charts/generic/icons/pod-io-stress.png b/faults/kubernetes/icons/pod-io-stress.png similarity index 100% rename from charts/generic/icons/pod-io-stress.png rename to faults/kubernetes/icons/pod-io-stress.png diff --git a/charts/generic/icons/pod-memory-hog-exec.png b/faults/kubernetes/icons/pod-memory-hog-exec.png similarity index 100% rename from charts/generic/icons/pod-memory-hog-exec.png rename to faults/kubernetes/icons/pod-memory-hog-exec.png diff --git a/charts/generic/icons/pod-memory-hog.png b/faults/kubernetes/icons/pod-memory-hog.png similarity index 100% rename from charts/generic/icons/pod-memory-hog.png rename to faults/kubernetes/icons/pod-memory-hog.png diff --git a/charts/generic/icons/pod-network-corruption.png b/faults/kubernetes/icons/pod-network-corruption.png similarity index 100% rename from charts/generic/icons/pod-network-corruption.png rename to faults/kubernetes/icons/pod-network-corruption.png diff --git a/charts/generic/icons/pod-network-duplication.png b/faults/kubernetes/icons/pod-network-duplication.png similarity index 100% rename from charts/generic/icons/pod-network-duplication.png rename to faults/kubernetes/icons/pod-network-duplication.png diff --git a/charts/generic/icons/pod-network-latency.png b/faults/kubernetes/icons/pod-network-latency.png similarity index 100% rename from charts/generic/icons/pod-network-latency.png rename to faults/kubernetes/icons/pod-network-latency.png diff --git a/charts/generic/icons/pod-network-loss.png b/faults/kubernetes/icons/pod-network-loss.png similarity index 100% rename from charts/generic/icons/pod-network-loss.png rename to faults/kubernetes/icons/pod-network-loss.png diff --git a/charts/generic/icons/pod-network-partition.png b/faults/kubernetes/icons/pod-network-partition.png similarity index 100% rename from charts/generic/icons/pod-network-partition.png rename to faults/kubernetes/icons/pod-network-partition.png diff --git a/charts/generic/kubelet-service-kill/engine.yaml b/faults/kubernetes/kubelet-service-kill/engine.yaml similarity index 79% rename from charts/generic/kubelet-service-kill/engine.yaml rename to faults/kubernetes/kubelet-service-kill/engine.yaml index 5ebc548d5..c20042fd1 100644 --- a/charts/generic/kubelet-service-kill/engine.yaml +++ b/faults/kubernetes/kubelet-service-kill/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,20 +7,20 @@ metadata: spec: # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx + #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' chaosServiceAccount: kubelet-service-kill-sa experiments: - name: kubelet-service-kill spec: components: - # nodeSelector: + # nodeSelector: # # provide the node labels - # kubernetes.io/hostname: 'node02' + # kubernetes.io/hostname: 'node02' env: - name: TOTAL_CHAOS_DURATION value: '60' # in seconds - + # provide the target node name - name: TARGET_NODE value: '' diff --git a/experiments/generic/kubelet-service-kill/experiment.yaml b/faults/kubernetes/kubelet-service-kill/fault.yaml similarity index 54% rename from experiments/generic/kubelet-service-kill/experiment.yaml rename to faults/kubernetes/kubelet-service-kill/fault.yaml index 5f86d7457..0326bd22e 100644 --- a/experiments/generic/kubelet-service-kill/experiment.yaml +++ b/faults/kubernetes/kubelet-service-kill/fault.yaml @@ -1,7 +1,8 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kills the kubelet service on the application node to check the resiliency. + Kills the Kubelet service on the application node to check the resiliency. kind: ChaosExperiment metadata: name: kubelet-service-kill @@ -9,7 +10,7 @@ metadata: name: kubelet-service-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Cluster @@ -17,68 +18,67 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] # for experiment to perform node status checks - apiGroups: [""] resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name kubelet-service-kill + - -c + - ./experiments -name kubelet-service-kill command: - - /bin/bash + - /bin/bash env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' - - name: LIB - value: 'litmus' + - name: NODE_LABEL + value: '' - - name: NODE_LABEL - value: '' + # provide lib image + - name: LIB_IMAGE + value: 'ubuntu:16.04' - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' + # provide the target node name + - name: TARGET_NODE + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' labels: name: kubelet-service-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/service-kill: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml b/faults/kubernetes/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml new file mode 100644 index 000000000..8f41c5346 --- /dev/null +++ b/faults/kubernetes/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: kubelet-service-kill + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Kubelet Service Kill + categoryDescription: | + kubelet-service-kill fault kills the Kubelet service gracefully for a certain chaos duration. + - Replicas may be evicted or become unreachable on account on nodes turning unschedulable (Not Ready) due to Kubelet service kill. + - The application node should be healthy once chaos is stopped and the services are reaccessable. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/faults/kubernetes/kubernetes.chartserviceversion.yaml b/faults/kubernetes/kubernetes.chartserviceversion.yaml new file mode 100644 index 000000000..32e403004 --- /dev/null +++ b/faults/kubernetes/kubernetes.chartserviceversion.yaml @@ -0,0 +1,120 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: kubernetes + version: 0.1.0 + annotations: + categories: Kubernetes + chartDescription: Injects kubernetes chaos experiment + executionPlane: "kubernetes" +spec: + displayName: Kubernetes + categoryDescription: > + Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. It groups containers that make up an application into logical units for easier management and discovery. It will install all the experiments which can be used to inject chaos into containerized applications. + faults: + - name: pod-delete + description: It injects pod-delete chaos in a Kubernetes pod. + displayName: "Pod Delete" + - name: container-kill + description: It injects container-kill chaos in a Kubernetes pod . + displayName: "Container Kill" + - name: pod-cpu-hog + description: It injects cpu-hog chaos in a Kubernetes pod. + displayName: "Pod CPU Hog" + - name: pod-network-loss + description: It injects network-loss chaos in a Kubernetes pod. + displayName: "Pod Network Loss" + - name: pod-network-latency + description: It injects network-latency chaos in a Kubernetes pod. + displayName: "Pod Network Latency" + - name: pod-network-corruption + description: It injects network-corruption chaos in a Kubernetes pod. + displayName: "Pod Network Corruption" + - name: node-drain + description: It injects node-drain chaos in a Kubernetes node. + displayName: "Node Drain" + - name: node-cpu-hog + description: It injects node-cpu-hog chaos in a Kubernetes node. + displayName: "Node CPU Hog" + - name: node-restart + description: It injects node-restart chaos in a Kubernetes node. + displayName: "Node Restart" + - name: disk-fill + description: It injects disk-fill chaos in a Kubernetes node. + displayName: "Disk Fill" + - name: node-memory-hog + description: It injects node-memory-hog chaos in a Kubernetes node. + displayName: "Node Memory Hog" + - name: node-poweroff + description: Node poweroff contains chaos experiment to poweroff a node via SSH. + displayName: "Node Poweroff" + - name: pod-memory-hog + description: It injects pod-memory-hog chaos in a Kubernetes pod. + displayName: "Pod Memory Hog" + - name: kubelet-service-kill + description: It injects kubelet-service-kill chaos in a Kubernetes node. + displayName: "Kubelet Service Kill" + - name: pod-network-duplication + description: It injects pod-network-duplication chaos in a Kubernetes pod. + displayName: "Pod Network Duplication" + - name: node-taint + description: It injects node-taint chaos in a Kubernetes node. + displayName: "Node Taint" + - name: docker-service-kill + description: It injects docker-service-kill chaos in a Kubernetes pod. + displayName: "Docker Service Kill" + - name: pod-autoscaler + description: It injects pod-autoscaler chaos in a Kubernetes pod. + displayName: "Pod Autoscaler" + - name: node-io-stress + description: It injects node-io-stress chaos in a Kubernetes node. + displayName: "Node IO Stress" + - name: pod-io-stress + description: It injects pod-io-stress chaos in a Kubernetes pod. + displayName: "Pod IO Stress" + - name: pod-dns-error + description: It injects pod-dns-error chaos in a Kubernetes pod. + displayName: "Pod DNS Error" + - name: pod-dns-spoof + description: It injects pod-dns-spoof chaos in a Kubernetes pod. + displayName: "Pod DNS Spoof" + - name: pod-cpu-hog-exec + description: It injects pod-cpu-hog-exec chaos in a Kubernetes pod. + displayName: "Pod CPU Hog Exec" + - name: pod-memory-hog-exec + description: It injects pod-memory-hog-exec chaos in a Kubernetes pod. + displayName: "Pod Memory Hog Exec" + - name: pod-network-partition + description: It injects pod-network-partition chaos in a Kubernetes pod. + displayName: "Pod Network Partition" + - name: pod-http-latency + description: It injects pod-http-latency chaos in a Kubernetes pod. + displayName: "Pod HTTP Latency" + - name: pod-http-status-code + description: It injects pod-http-status-code chaos in a Kubernetes pod. + displayName: "Pod HTTP Status Code" + - name: pod-http-modify-header + description: It injects pod-http-modify-header chaos in a Kubernetes pod. + displayName: "Pod HTTP Modify Header" + - name: pod-http-modify-body + description: It injects pod-http-modify-body chaos in a Kubernetes pod. + displayName: "Pod HTTP Modify Body" + - name: pod-http-reset-peer + description: It injects pod-http-reset-peer chaos in a Kubernetes pod. + displayName: "Pod HTTP Reset Peer" + keywords: + - Kubernetes + minKubeVersion: 1.12.0 + links: + - name: Kubernetes Website + url: https://kubernetes.io + - name: Source Code + url: https://github.com/kubernetes/kubernetes + - name: Kubernetes Slack + url: https://slack.kubernetes.io/ + - name: Documentation + url: https://litmuschaos.github.io/litmus/experiments/categories/contents/#kubernetes + icon: + - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico + mediatype: image/png diff --git a/experiments/generic/generic.package.yaml b/faults/kubernetes/kubernetes.package.yaml similarity index 86% rename from experiments/generic/generic.package.yaml rename to faults/kubernetes/kubernetes.package.yaml index e816034a4..9a24956d7 100644 --- a/experiments/generic/generic.package.yaml +++ b/faults/kubernetes/kubernetes.package.yaml @@ -1,5 +1,6 @@ -packageName: generic -experiments: +--- +packageName: kubernetes +faults: - name: pod-delete CSV: pod-delete.chartserviceversion.yaml desc: "pod-delete" @@ -8,7 +9,7 @@ experiments: desc: "container-kill" - name: pod-network-loss CSV: pod-network-loss.chartserviceversion.yaml - desc: "Pod-network-loss" + desc: "pod-network-loss" - name: pod-network-latency CSV: pod-network-latency.chartserviceversion.yaml desc: "pod-network-latency" @@ -30,6 +31,12 @@ experiments: - name: node-memory-hog CSV: node-memory-hog.chartserviceversion.yaml desc: "node-memory-hog" + - name: node-poweroff + CSV: node-poweroff.chartserviceversion.yaml + desc: "node-poweroff" + - name: node-restart + CSV: node-restart.chartserviceversion.yaml + desc: "node-restart" - name: pod-memory-hog CSV: pod-memory-hog.chartserviceversion.yaml desc: "pod-memory-hog" @@ -54,9 +61,6 @@ experiments: - name: pod-io-stress CSV: pod-io-stress.chartserviceversion.yaml desc: "pod-io-stress" - - name: node-restart - CSV: node-restart.chartserviceversion.yaml - desc: "node-restart" - name: pod-dns-error CSV: pod-dns-error.chartserviceversion.yaml desc: "pod-dns-error" @@ -75,15 +79,24 @@ experiments: - name: pod-http-latency CSV: pod-http-latency.chartserviceversion.yaml desc: "pod-http-latency" + - name: pod-http-status-code + CSV: pod-http-status-code.chartserviceversion.yaml + desc: "pod-http-status-code" + - name: pod-http-modify-header + CSV: pod-http-modify-header.chartserviceversion.yaml + desc: "pod-http-modify-header" - name: pod-http-modify-body CSV: pod-http-modify-body.chartserviceversion.yaml desc: "pod-http-modify-body" - name: pod-http-reset-peer CSV: pod-http-reset-peer.chartserviceversion.yaml desc: "pod-http-reset-peer" - - name: pod-http-modify-header - CSV: pod-http-modify-header.chartserviceversion.yaml - desc: "pod-http-modify-header" - - name: pod-http-status-code - CSV: pod-http-status-code.chartserviceversion.yaml - desc: "pod-http-status-code" + - name: node-network-latency + CSV: node-network-latency.chartserviceversion.yaml + desc: "node-network-latency" + - name: node-network-loss + CSV: node-network-loss.chartserviceversion.yaml + desc: "node-network-loss" + - name: time-chaos + CSV: time-chaos.chartserviceversion.yaml + desc: "time-chaos" diff --git a/charts/generic/node-cpu-hog/engine.yaml b/faults/kubernetes/node-cpu-hog/engine.yaml similarity index 90% rename from charts/generic/node-cpu-hog/engine.yaml rename to faults/kubernetes/node-cpu-hog/engine.yaml index 85f754f78..abbf6af3b 100644 --- a/charts/generic/node-cpu-hog/engine.yaml +++ b/faults/kubernetes/node-cpu-hog/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,7 +7,7 @@ metadata: spec: # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx + #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' chaosServiceAccount: node-cpu-hog-sa experiments: @@ -17,17 +18,17 @@ spec: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION value: '60' - + ## ENTER THE NUMBER OF CORES OF CPU FOR CPU HOGGING - ## OPTIONAL VALUE IN CASE OF EMPTY VALUE IT WILL TAKE NODE CPU CAPACITY + ## OPTIONAL VALUE IN CASE OF EMPTY VALUE IT WILL TAKE NODE CPU CAPACITY - name: NODE_CPU_CORE value: '1' - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. + ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - name: CPU_LOAD value: '0' - + ## percentage of total nodes to target - name: NODES_AFFECTED_PERC value: '' diff --git a/faults/kubernetes/node-cpu-hog/fault.yaml b/faults/kubernetes/node-cpu-hog/fault.yaml new file mode 100644 index 000000000..c62cdd01a --- /dev/null +++ b/faults/kubernetes/node-cpu-hog/fault.yaml @@ -0,0 +1,102 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Give a CPU spike on a node belonging to a deployment +kind: ChaosExperiment +metadata: + name: node-cpu-hog + labels: + name: node-cpu-hog + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name node-cpu-hog + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '60' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + ## ENTER THE NUMBER OF CORES OF CPU FOR CPU HOGGING + ## OPTIONAL VALUE IN CASE OF EMPTY VALUE IT WILL TAKE NODE CPU CAPACITY + - name: NODE_CPU_CORE + value: '' + + ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. + ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING + - name: CPU_LOAD + value: '100' + + # ENTER THE COMMA SEPARATED TARGET NODES NAME + - name: TARGET_NODES + value: '' + + - name: NODE_LABEL + value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + ## percentage of total nodes to target + - name: NODES_AFFECTED_PERC + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + ## it defines the sequence of chaos execution for multiple target nodes + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: node-cpu-hog + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml b/faults/kubernetes/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml new file mode 100644 index 000000000..4cdd61efc --- /dev/null +++ b/faults/kubernetes/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml @@ -0,0 +1,37 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: node-cpu-hog + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Node CPU Hog + categoryDescription: | + Node CPU hog fault disrupts the state of Kubernetes resources. This fault injects a CPU spike on a node where the application pod is scheduled. + - CPU hog on a particular node where the application deployment is available. + - After test, the recovery should be manual for the application pod and node in case they are not in an appropriate state. + keywords: + - Kubernetes + platforms: + - GKE + - EKS + - AKS + - Kind + - Rancher + - OpenShift(OKD) + experiments: + - node-cpu-hog + chaosType: infra + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/experiments/generic/node-drain/engine.yaml b/faults/kubernetes/node-drain/engine.yaml similarity index 76% rename from experiments/generic/node-drain/engine.yaml rename to faults/kubernetes/node-drain/engine.yaml index 65a4216d5..6c5be2a6d 100644 --- a/experiments/generic/node-drain/engine.yaml +++ b/faults/kubernetes/node-drain/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,21 +7,20 @@ metadata: spec: # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx + #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' chaosServiceAccount: node-drain-sa experiments: - name: node-drain spec: components: - # nodeSelector: + # nodeSelector: # # provide the node labels - # kubernetes.io/hostname: 'node02' + # kubernetes.io/hostname: 'node02' env: - name: TOTAL_CHAOS_DURATION value: '60' - + # enter the target node name - name: TARGET_NODE value: '' - \ No newline at end of file diff --git a/charts/generic/node-drain/experiment.yaml b/faults/kubernetes/node-drain/fault.yaml similarity index 57% rename from charts/generic/node-drain/experiment.yaml rename to faults/kubernetes/node-drain/fault.yaml index c32290791..023d37e85 100644 --- a/charts/generic/node-drain/experiment.yaml +++ b/faults/kubernetes/node-drain/fault.yaml @@ -10,7 +10,7 @@ metadata: name: node-drain app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Cluster @@ -18,63 +18,65 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] + resources: ["pods/exec", "pods/eviction"] + verbs: ["get", "list", "create"] # ignore daemonsets while draining the node - apiGroups: ["apps"] resources: ["daemonsets"] - verbs: ["list","get","delete"] + verbs: ["list", "get", "delete"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] # for experiment to perform node status checks - apiGroups: [""] resources: ["nodes"] - verbs: ["get","list","patch"] - image: "litmuschaos/go-runner:latest" + verbs: ["get", "list", "patch"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name node-drain + - -c + - ./experiments -name node-drain command: - - /bin/bash + - /bin/bash env: - - - name: TARGET_NODE - value: '' + - name: TARGET_NODE + value: '' - - name: NODE_LABEL - value: '' + - name: NODE_LABEL + value: '' - - name: TOTAL_CHAOS_DURATION - value: '60' + - name: TOTAL_CHAOS_DURATION + value: '60' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - labels: name: node-drain app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/node-drain/node-drain.chartserviceversion.yaml b/faults/kubernetes/node-drain/node-drain.chartserviceversion.yaml new file mode 100644 index 000000000..28b4e7320 --- /dev/null +++ b/faults/kubernetes/node-drain/node-drain.chartserviceversion.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: node-drain + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Node Drain + categoryDescription: > + Drain the node where application pod is scheduled. + keywords: + - Kubernetes + platforms: + - GKE + - AWS(KOPS) + - Packet(Kubeadm) + - Konvoy + - EKS + - AKS + chaosType: infra + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: "" + mediatype: "" diff --git a/charts/generic/node-io-stress/engine.yaml b/faults/kubernetes/node-io-stress/engine.yaml similarity index 89% rename from charts/generic/node-io-stress/engine.yaml rename to faults/kubernetes/node-io-stress/engine.yaml index 938949fdd..138be7376 100644 --- a/charts/generic/node-io-stress/engine.yaml +++ b/faults/kubernetes/node-io-stress/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,7 +7,7 @@ metadata: spec: # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx + #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' chaosServiceAccount: node-io-stress-sa experiments: @@ -28,8 +29,8 @@ spec: ## Total number of workers default value is 4 - name: NUMBER_OF_WORKERS - value: '4' - + value: '4' + ## percentage of total nodes to target - name: NODES_AFFECTED_PERC value: '' diff --git a/faults/kubernetes/node-io-stress/fault.yaml b/faults/kubernetes/node-io-stress/fault.yaml new file mode 100644 index 000000000..1ba10079b --- /dev/null +++ b/faults/kubernetes/node-io-stress/fault.yaml @@ -0,0 +1,114 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Give IO disk stress on a node belonging to a deployment +kind: ChaosExperiment +metadata: + name: node-io-stress + labels: + name: node-io-stress + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name node-io-stress + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '120' + + ## specify the size as percentage of free space on the file system + ## default value 90 (in percentage) + - name: FILESYSTEM_UTILIZATION_PERCENTAGE + value: '10' + + ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space + ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty + - name: FILESYSTEM_UTILIZATION_BYTES + value: '' + + ## Number of core of CPU + - name: CPU + value: '1' + + ## Total number of workers default value is 4 + - name: NUMBER_OF_WORKERS + value: '4' + + ## Total number of VM workers + - name: VM_WORKERS + value: '1' + + ## enter the comma separated target nodes name + - name: TARGET_NODES + value: '' + + - name: NODE_LABEL + value: '' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + ## percentage of total nodes to target + - name: NODES_AFFECTED_PERC + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + ## it defines the sequence of chaos execution for multiple target nodes + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: node-io-stress + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/node-io-stress/node-io-stress.chartserviceversion.yaml b/faults/kubernetes/node-io-stress/node-io-stress.chartserviceversion.yaml new file mode 100644 index 000000000..31925f9c4 --- /dev/null +++ b/faults/kubernetes/node-io-stress/node-io-stress.chartserviceversion.yaml @@ -0,0 +1,32 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: node-io-stress + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Node IO Stress + categoryDescription: | + This fault causes disk stress on the Kubernetes node. This fault aims to verify the resiliency of applications that share this disk resource for ephemeral or persistent storage purposes.. + - Disk stress on a particular node filesystem where the application deployment is available. + - The amount of disk stress can be either specifed as the size in percentage of the total free space on the file system or simply in Gigabytes(GB) + keywords: + - Kubernetes + platforms: + - GKE + - EKS + - AKS + chaosType: infra + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: "" + mediatype: "" diff --git a/charts/generic/node-memory-hog/engine.yaml b/faults/kubernetes/node-memory-hog/engine.yaml similarity index 93% rename from charts/generic/node-memory-hog/engine.yaml rename to faults/kubernetes/node-memory-hog/engine.yaml index 8e6b01ce9..48d79647a 100644 --- a/charts/generic/node-memory-hog/engine.yaml +++ b/faults/kubernetes/node-memory-hog/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,7 +7,7 @@ metadata: spec: # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx + #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' chaosServiceAccount: node-memory-hog-sa experiments: @@ -25,12 +26,12 @@ spec: # provide the comma separated target node names - name: TARGET_NODES value: '' - + ## Specify the size as percent of total node capacity Ex: '30' ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty - name: MEMORY_CONSUMPTION_PERCENTAGE value: '0' - + ## Specify the amount of memory to be consumed in mebibytes ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty - name: MEMORY_CONSUMPTION_MEBIBYTES diff --git a/faults/kubernetes/node-memory-hog/fault.yaml b/faults/kubernetes/node-memory-hog/fault.yaml new file mode 100644 index 000000000..3af297677 --- /dev/null +++ b/faults/kubernetes/node-memory-hog/fault.yaml @@ -0,0 +1,105 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Give a memory hog on a node belonging to a deployment +kind: ChaosExperiment +metadata: + name: node-memory-hog + labels: + name: node-memory-hog + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name node-memory-hog + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '120' + + ## Specify the size as percent of total node capacity Ex: '30' + ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty + - name: MEMORY_CONSUMPTION_PERCENTAGE + value: '' + + ## Specify the amount of memory to be consumed in mebibytes + ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty + - name: MEMORY_CONSUMPTION_MEBIBYTES + value: '' + + - name: NUMBER_OF_WORKERS + value: '1' + + # ENTER THE COMMA SEPARATED TARGET NODES NAME + - name: TARGET_NODES + value: '' + + - name: NODE_LABEL + value: '' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + ## percentage of total nodes to target + - name: NODES_AFFECTED_PERC + value: '' + + ## it defines the sequence of chaos execution for multiple target nodes + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: node-memory-hog + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/node-memory-hog/node-memory-hog.chartserviceversion.yaml b/faults/kubernetes/node-memory-hog/node-memory-hog.chartserviceversion.yaml new file mode 100644 index 000000000..cc32f6e10 --- /dev/null +++ b/faults/kubernetes/node-memory-hog/node-memory-hog.chartserviceversion.yaml @@ -0,0 +1,37 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: node-memory-hog + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Node Memory Hog + categoryDescription: | + Kubernetes Node memory hog fault disrupts the state of Kubernetes resources. This fault injects a memory spike on a node where the application pod is scheduled. + - Memory hog on a particular node where the application deployment is available. + - After the test, the recovery should be manual for the application pod and node in case they are not in an appropriate state. + keywords: + - Kubernetes + platforms: + - GKE + - EKS + - AKS + - Kind + - Rancher + - OpenShift(OKD) + experiments: + - node-memory-hog + chaosType: infra + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: "" + mediatype: "" diff --git a/experiments/generic/node-poweroff/engine.yaml b/faults/kubernetes/node-poweroff/engine.yaml similarity index 85% rename from experiments/generic/node-poweroff/engine.yaml rename to faults/kubernetes/node-poweroff/engine.yaml index 68ac3a7b5..8374ba79f 100644 --- a/experiments/generic/node-poweroff/engine.yaml +++ b/faults/kubernetes/node-poweroff/engine.yaml @@ -6,16 +6,16 @@ metadata: spec: # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx + #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' chaosServiceAccount: node-poweroff-sa experiments: - name: node-poweroff spec: components: - # nodeSelector: + # nodeSelector: # # provide the node labels - # kubernetes.io/hostname: 'node02' + # kubernetes.io/hostname: 'node02' env: - name: TOTAL_CHAOS_DURATION value: '60' diff --git a/charts/generic/node-poweroff/experiment.yaml b/faults/kubernetes/node-poweroff/fault.yaml similarity index 97% rename from charts/generic/node-poweroff/experiment.yaml rename to faults/kubernetes/node-poweroff/fault.yaml index 35080e3c9..fb7fc3f63 100644 --- a/charts/generic/node-poweroff/experiment.yaml +++ b/faults/kubernetes/node-poweroff/fault.yaml @@ -1,7 +1,8 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | - poweroff node + Poweroff a node in the cluster kind: ChaosExperiment metadata: name: node-poweroff @@ -26,10 +27,10 @@ spec: - apiGroups: [""] resources: ["configmaps","secrets"] verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] + verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] resources: ["pods/exec"] diff --git a/faults/kubernetes/node-poweroff/node-poweroff.chartserviceversion.yaml b/faults/kubernetes/node-poweroff/node-poweroff.chartserviceversion.yaml new file mode 100644 index 000000000..d8aca6f4e --- /dev/null +++ b/faults/kubernetes/node-poweroff/node-poweroff.chartserviceversion.yaml @@ -0,0 +1,29 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: node-poweroff + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Node Poweroff + categoryDescription: | + Node poweroff contains chaos experiment to poweroff a node via SSH. + keywords: + - Kubernetes + platforms: + - KVM/LibVirt based K8s + - EKS + chaosType: infra + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: "" + mediatype: "" diff --git a/experiments/generic/node-restart/engine.yaml b/faults/kubernetes/node-restart/engine.yaml similarity index 73% rename from experiments/generic/node-restart/engine.yaml rename to faults/kubernetes/node-restart/engine.yaml index 71e3d7047..0489d5e3c 100644 --- a/experiments/generic/node-restart/engine.yaml +++ b/faults/kubernetes/node-restart/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,16 +7,16 @@ metadata: spec: # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx + #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' - chaosServiceAccount: node-restart-sa + chaosServiceAccount: litmus-admin experiments: - name: node-restart spec: components: - # nodeSelector: + # nodeSelector: # # provide the node labels - # kubernetes.io/hostname: 'node02' + # kubernetes.io/hostname: 'node02' env: - name: TOTAL_CHAOS_DURATION value: '60' @@ -31,3 +32,6 @@ spec: # ENTER THE USER TO BE USED FOR SSH AUTH - name: SSH_USER value: 'root' + + - name: REBOOT_COMMAND + value: 'sudo systemctl reboot; true' diff --git a/charts/generic/node-restart/experiment.yaml b/faults/kubernetes/node-restart/fault.yaml similarity index 50% rename from charts/generic/node-restart/experiment.yaml rename to faults/kubernetes/node-restart/fault.yaml index 427ae0b87..4791de415 100644 --- a/charts/generic/node-restart/experiment.yaml +++ b/faults/kubernetes/node-restart/fault.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | @@ -9,7 +10,7 @@ metadata: name: node-restart app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Cluster @@ -17,73 +18,78 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + resources: ["configmaps", "secrets"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] # for experiment to perform node status checks - apiGroups: [""] resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" + verbs: ["get", "list"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name node-restart + - -c + - ./experiments -name node-restart command: - - /bin/bash + - /bin/bash env: - - name: SSH_USER - value: 'root' + - name: SSH_USER + value: 'root' + - name: REBOOT_COMMAND + value: 'sudo systemctl reboot; true' - - name: TOTAL_CHAOS_DURATION - value: '60' + - name: TOTAL_CHAOS_DURATION + value: '60' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" + # provide lib image + - name: LIB_IMAGE + value: "chaosnative/go-runner:ci" - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' + # ENTER THE TARGET NODE NAME + - name: TARGET_NODE + value: '' - - name: NODE_LABEL - value: '' + - name: NODE_LABEL + value: '' - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' + # ENTER THE TARGET NODE IP + - name: TARGET_NODE_IP + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' labels: name: node-restart app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci secrets: - name: id-rsa mountPath: /mnt/ diff --git a/faults/kubernetes/node-restart/node-restart.chartserviceversion.yaml b/faults/kubernetes/node-restart/node-restart.chartserviceversion.yaml new file mode 100644 index 000000000..4f2fec93e --- /dev/null +++ b/faults/kubernetes/node-restart/node-restart.chartserviceversion.yaml @@ -0,0 +1,25 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: node-restart + version: 0.1.0 + annotations: + categories: Kubernetes +spec: + displayName: Node Restart + categoryDescription: | + Node restart fault restarts a target node via SSH. + keywords: + - Kubernetes + platforms: + - KVM/LibVirt based K8s + - EKS + chaosType: infra + minKubeVersion: 1.12.0 + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/generic/node-taint/engine.yaml b/faults/kubernetes/node-taint/engine.yaml similarity index 72% rename from charts/generic/node-taint/engine.yaml rename to faults/kubernetes/node-taint/engine.yaml index 44cfc24de..1a192c04f 100644 --- a/charts/generic/node-taint/engine.yaml +++ b/faults/kubernetes/node-taint/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,26 +7,25 @@ metadata: spec: # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx + #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' chaosServiceAccount: node-taint-sa experiments: - name: node-taint spec: components: - # nodeSelector: + # nodeSelector: # # provide the node labels - # kubernetes.io/hostname: 'node02' + # kubernetes.io/hostname: 'node02' env: - name: TOTAL_CHAOS_DURATION value: '60' - + # set target node name - name: TARGET_NODE value: '' - + # set taint label & effect # key=value:effect or key:effect - name: TAINTS - value: 'node.kubernetes.io/unreachable:NoExecute' - \ No newline at end of file + value: 'app.hce.io/chaos=true:NoSchedule' diff --git a/experiments/generic/node-taint/experiment.yaml b/faults/kubernetes/node-taint/fault.yaml similarity index 54% rename from experiments/generic/node-taint/experiment.yaml rename to faults/kubernetes/node-taint/fault.yaml index 6845d0298..f89bbd9ad 100644 --- a/experiments/generic/node-taint/experiment.yaml +++ b/faults/kubernetes/node-taint/fault.yaml @@ -10,7 +10,7 @@ metadata: name: node-taint app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Cluster @@ -18,73 +18,70 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] + resources: ["pods/exec", "pods/eviction"] + verbs: ["get", "list", "create"] # ignore daemonsets while draining the node - apiGroups: ["apps"] resources: ["daemonsets"] - verbs: ["list","get","delete"] + verbs: ["list", "get", "delete"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] # for experiment to perform node status checks - apiGroups: [""] resources: ["nodes"] - verbs: ["get","list","patch","update"] - image: "litmuschaos/go-runner:latest" + verbs: ["get", "list", "patch", "update"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name node-taint + - -c + - ./experiments -name node-taint command: - - /bin/bash + - /bin/bash env: + - name: TARGET_NODE + value: '' - - name: TARGET_NODE - value: '' + - name: NODE_LABEL + value: '' - - name: NODE_LABEL - value: '' + - name: TOTAL_CHAOS_DURATION + value: '60' - - name: TOTAL_CHAOS_DURATION - value: '60' + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' + # set taint label & effect + # key=value:effect or key:effect + - name: TAINTS + value: '' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # set taint label & effect - # key=value:effect or key:effect - - name: TAINTS - value: '' + - name: DEFAULT_HEALTH_CHECK + value: 'false' labels: name: node-taint app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/node-taint/node-taint.chartserviceversion.yaml b/faults/kubernetes/node-taint/node-taint.chartserviceversion.yaml new file mode 100644 index 000000000..6e3b33368 --- /dev/null +++ b/faults/kubernetes/node-taint/node-taint.chartserviceversion.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: node-taint + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Node Taint + categoryDescription: > + Taint the node where application pod is scheduled. + keywords: + - Kubernetes + platforms: + - GKE + - AWS(KOPS) + - Packet(Kubeadm) + - Konvoy + - EKS + - AKS + chaosType: infra + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: "" + mediatype: "" diff --git a/charts/generic/pod-autoscaler/engine.yaml b/faults/kubernetes/pod-autoscaler/engine.yaml similarity index 80% rename from charts/generic/pod-autoscaler/engine.yaml rename to faults/kubernetes/pod-autoscaler/engine.yaml index 65dfbf16d..521580914 100644 --- a/charts/generic/pod-autoscaler/engine.yaml +++ b/faults/kubernetes/pod-autoscaler/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,12 +7,12 @@ metadata: spec: # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx + #ex. values: ns1:name=percona,ns2:run=nginx auxiliaryAppInfo: '' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: pod-autoscaler-sa experiments: - name: pod-autoscaler @@ -25,4 +26,4 @@ spec: # number of replicas to scale - name: REPLICA_COUNT value: '5' - \ No newline at end of file + diff --git a/experiments/generic/pod-autoscaler/experiment.yaml b/faults/kubernetes/pod-autoscaler/fault.yaml similarity index 56% rename from experiments/generic/pod-autoscaler/experiment.yaml rename to faults/kubernetes/pod-autoscaler/fault.yaml index 3950980da..207843b45 100644 --- a/experiments/generic/pod-autoscaler/experiment.yaml +++ b/faults/kubernetes/pod-autoscaler/fault.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | @@ -9,7 +10,7 @@ metadata: name: pod-autoscaler app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Cluster @@ -17,62 +18,59 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # performs CRUD operations on the deployments and statefulsets - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] + resources: ["deployments", "statefulsets"] + verbs: ["list", "get", "patch", "update"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name pod-autoscaler + - -c + - ./experiments -name pod-autoscaler command: - - /bin/bash + - /bin/bash env: + - name: TOTAL_CHAOS_DURATION + value: '60' - - name: TOTAL_CHAOS_DURATION - value: '60' + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' + # Number of replicas to scale + - name: REPLICA_COUNT + value: '5' - # Number of replicas to scale - - name: REPLICA_COUNT - value: '5' + - name: DEFAULT_HEALTH_CHECK + value: 'false' - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED - - name: LIB - value: 'litmus' - labels: name: pod-autoscaler app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml b/faults/kubernetes/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml new file mode 100644 index 000000000..9734c91ee --- /dev/null +++ b/faults/kubernetes/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml @@ -0,0 +1,32 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-autoscaler + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod Autoscaler + categoryDescription: | + This fault aims to check the ability of nodes to accommodate the number of replicas a given application pod. + It can be used for other cases as well, such as for checking the Node auto-scaling feature. For example, check if the pods are successfully rescheduled within a specified period in cases where the existing nodes are already running at the specified limits. + keywords: + - Kubernetes + platforms: + - GKE + - EKS + - Minikube + - AKS + chaosType: infra + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/experiments/generic/pod-cpu-hog-exec/engine.yaml b/faults/kubernetes/pod-cpu-hog-exec/engine.yaml similarity index 77% rename from experiments/generic/pod-cpu-hog-exec/engine.yaml rename to faults/kubernetes/pod-cpu-hog-exec/engine.yaml index c7934107f..e79c65dc5 100644 --- a/experiments/generic/pod-cpu-hog-exec/engine.yaml +++ b/faults/kubernetes/pod-cpu-hog-exec/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -7,9 +8,9 @@ spec: # It can be active/stop engineState: 'active' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: pod-cpu-hog-exec-sa experiments: - name: pod-cpu-hog-exec @@ -19,12 +20,12 @@ spec: - name: TOTAL_CHAOS_DURATION value: '60' # in seconds - #number of cpu cores to be consumed + #number of CPU cores to be consumed #verify the resources the app has been launched with - name: CPU_CORES value: '1' ## Percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' - \ No newline at end of file + value: '' + diff --git a/experiments/generic/pod-memory-hog-exec/experiment.yaml b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml similarity index 59% rename from experiments/generic/pod-memory-hog-exec/experiment.yaml rename to faults/kubernetes/pod-cpu-hog-exec/fault.yaml index 3f29e6153..525dfaedc 100644 --- a/experiments/generic/pod-memory-hog-exec/experiment.yaml +++ b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml @@ -2,15 +2,15 @@ apiVersion: litmuschaos.io/v1alpha1 description: message: | - Injects memory consumption on pods belonging to an app deployment + Injects CPU consumption on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-memory-hog-exec + name: pod-cpu-hog-exec labels: - name: pod-memory-hog-exec + name: pod-cpu-hog-exec app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -18,89 +18,90 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name pod-memory-hog-exec + - -c + - ./experiments -name pod-cpu-hog-exec command: - - /bin/bash + - /bin/bash env: - name: TOTAL_CHAOS_DURATION value: '60' - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' + ## Number of CPU cores to stress + - name: CPU_CORES + value: '1' - ## percentage of total pods to target + ## Percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' ## Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: '' - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus - - name: LIB - value: 'litmus' - # The command to kill the chaos process - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/dd' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}' | head -n 1)" - + value: "kill $(find /proc -name exe -lname '*/md5sum' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}')" + + - name: TARGET_CONTAINER + value: '' + + - name: TARGET_PODS + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' - - name: TARGET_PODS - value: '' - labels: - name: pod-memory-hog-exec + name: pod-cpu-hog-exec app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml b/faults/kubernetes/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml new file mode 100644 index 000000000..e5f3549de --- /dev/null +++ b/faults/kubernetes/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml @@ -0,0 +1,34 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-cpu-hog-exec + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod CPU Hog Exec + categoryDescription: | + pod-cpu-hog-exec fault consumes CPU resources of specified containers in Kubernetes pods. + - Causes high CPU resource consumption utilizing one or more cores by triggering md5sum commands. + - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + - Kind + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/experiments/generic/pod-cpu-hog/engine.yaml b/faults/kubernetes/pod-cpu-hog/engine.yaml similarity index 73% rename from experiments/generic/pod-cpu-hog/engine.yaml rename to faults/kubernetes/pod-cpu-hog/engine.yaml index dfa9bbb3e..90f5da029 100644 --- a/experiments/generic/pod-cpu-hog/engine.yaml +++ b/faults/kubernetes/pod-cpu-hog/engine.yaml @@ -1,4 +1,4 @@ - +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -8,9 +8,9 @@ spec: # It can be active/stop engineState: 'active' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: pod-cpu-hog-sa experiments: - name: pod-cpu-hog @@ -21,16 +21,16 @@ spec: value: '60' # in seconds - name: CPU_CORES - value: '1' + value: '1' ## Percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: '' ## provide the cluster runtime - name: CONTAINER_RUNTIME - value: 'containerd' + value: 'containerd' # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: '/run/containerd/containerd.sock' diff --git a/experiments/generic/pod-memory-hog/experiment.yaml b/faults/kubernetes/pod-cpu-hog/fault.yaml similarity index 58% rename from experiments/generic/pod-memory-hog/experiment.yaml rename to faults/kubernetes/pod-cpu-hog/fault.yaml index a8dccabe3..0d47dca35 100644 --- a/experiments/generic/pod-memory-hog/experiment.yaml +++ b/faults/kubernetes/pod-cpu-hog/fault.yaml @@ -2,15 +2,15 @@ apiVersion: litmuschaos.io/v1alpha1 description: message: | - Injects memory consumption on pods belonging to an app deployment + Injects CPU consumption on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-memory-hog + name: pod-cpu-hog labels: - name: pod-memory-hog + name: pod-cpu-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -18,110 +18,112 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name pod-memory-hog + - -c + - ./experiments -name pod-cpu-hog command: - - /bin/bash + - /bin/bash env: - name: TOTAL_CHAOS_DURATION value: '60' - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## Number of workers to perform stress - - name: NUMBER_OF_WORKERS - value: '1' + ## Number of CPU cores to stress + - name: CPU_CORES + value: '1' + + ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. + ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING + - name: CPU_LOAD + value: '100' - ## percentage of total pods to target + ## Percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' ## Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus, pumba - - name: LIB - value: 'litmus' + value: '' - ## It is used in pumba lib only + ## It is used in pumba lib only - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + value: 'chaosnative/go-runner:ci' - ## It is used in pumba lib only + ## It is used in pumba lib only - name: STRESS_IMAGE value: 'alexeiled/stress-ng:latest-ubuntu' ## provide the cluster runtime - name: CONTAINER_RUNTIME - value: 'containerd' + value: 'containerd' # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' + value: '/run/containerd/containerd.sock' + + - name: TARGET_CONTAINER + value: '' - name: TARGET_PODS value: '' + - name: DEFAULT_HEALTH_CHECK + value: 'false' + # To select pods on specific node(s) - name: NODE_LABEL value: '' + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + labels: - name: pod-memory-hog + name: pod-cpu-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml b/faults/kubernetes/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml new file mode 100644 index 000000000..6698a186e --- /dev/null +++ b/faults/kubernetes/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml @@ -0,0 +1,39 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-cpu-hog + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod CPU Hog + categoryDescription: | + Pod-CPU-Hog fault consumes the CPU resources of specified containers in Kubernetes pods. + - Causes CPU resource consumption on specified application containers using cgroups and litmus nsutil which consume CPU resources of the given target containers. + - It can test the application's resilience to potential slowness/unavailability of some replicas due to high CPU load. + - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + - Kind + experiments: + - pod-cpu-hog + - sock-shop + - sock-shop-promProbe + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/generic/pod-delete/python/engine.yaml b/faults/kubernetes/pod-delete/engine.yaml similarity index 89% rename from charts/generic/pod-delete/python/engine.yaml rename to faults/kubernetes/pod-delete/engine.yaml index c211c7320..047908d44 100644 --- a/charts/generic/pod-delete/python/engine.yaml +++ b/faults/kubernetes/pod-delete/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -5,9 +6,9 @@ metadata: namespace: default spec: appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' # It can be active/stop engineState: 'active' chaosServiceAccount: pod-delete-sa @@ -23,7 +24,7 @@ spec: # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '10' - + # pod failures without '--force' & default terminationGracePeriodSeconds - name: FORCE value: 'false' @@ -31,3 +32,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' + diff --git a/faults/kubernetes/pod-delete/fault.yaml b/faults/kubernetes/pod-delete/fault.yaml new file mode 100644 index 000000000..67d6e56b2 --- /dev/null +++ b/faults/kubernetes/pod-delete/fault.yaml @@ -0,0 +1,109 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Deletes a pod belonging to a deployment/statefulset/daemonset +kind: ChaosExperiment +metadata: + name: pod-delete + labels: + name: pod-delete + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get", "list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list", "get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-delete + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '15' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: FORCE + value: 'true' + + - name: CHAOS_INTERVAL + value: '5' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + - name: TARGET_CONTAINER + value: '' + + - name: TARGET_PODS + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: pod-delete + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-delete/pod-delete.chartserviceversion.yaml b/faults/kubernetes/pod-delete/pod-delete.chartserviceversion.yaml new file mode 100644 index 000000000..2f30ef27f --- /dev/null +++ b/faults/kubernetes/pod-delete/pod-delete.chartserviceversion.yaml @@ -0,0 +1,42 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-delete + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod Delete + categoryDescription: | + Pod delete fault disrupts the state of Kubernetes resources. This fault injects random pod delete failures against specified application. + - Causes (forced/graceful) pod failure of random replicas of an application deployment. + - Tests deployment sanity (replica availability & uninterrupted service) and recovery workflows of the application pod. + keywords: + - Kubernetes + platforms: + - GKE + - Konvoy + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + - Kind + - Rancher + - OpenShift(OKD) + experiments: + - pod-delete + - podtato-head + - sock-shop + - sock-shop-promProbe + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/charts/generic/pod-dns-error/engine.yaml b/faults/kubernetes/pod-dns-error/engine.yaml similarity index 89% rename from charts/generic/pod-dns-error/engine.yaml rename to faults/kubernetes/pod-dns-error/engine.yaml index 83fd6bb97..c92773804 100644 --- a/charts/generic/pod-dns-error/engine.yaml +++ b/faults/kubernetes/pod-dns-error/engine.yaml @@ -1,12 +1,13 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: nginx-chaos spec: appinfo: - appns: "default" - applabel: "app=nginx" - appkind: "deployment" + appns: "" + applabel: "" + appkind: "" # It can be active/stop engineState: "active" #ex. values: ns1:name=percona,ns2:run=nginx @@ -24,7 +25,7 @@ spec: - name: TARGET_HOSTNAMES value: "" - # can be either exact or substring, determines whether the dns query has to match exactly with one of the targets or can have any of the targets as substring + # can be either exact or substring, determines whether the DNS query has to match exactly with one of the targets or can have any of the targets as substring - name: MATCH_SCHEME value: "exact" @@ -39,3 +40,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: "" + diff --git a/charts/generic/pod-dns-error/experiment.yaml b/faults/kubernetes/pod-dns-error/fault.yaml similarity index 72% rename from charts/generic/pod-dns-error/experiment.yaml rename to faults/kubernetes/pod-dns-error/fault.yaml index fc2180857..21524ad7e 100644 --- a/charts/generic/pod-dns-error/experiment.yaml +++ b/faults/kubernetes/pod-dns-error/fault.yaml @@ -1,7 +1,8 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Pod DNS Error injects dns failure/error in target pod containers + Pod DNS Error injects DNS failure/error in target pod containers kind: ChaosExperiment metadata: name: pod-dns-error @@ -9,7 +10,7 @@ metadata: name: pod-dns-error app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -17,48 +18,48 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" args: - -c - ./experiments -name pod-dns-error @@ -70,7 +71,10 @@ spec: # provide lib image - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" + value: "chaosnative/go-runner:ci" + + - name: DEFAULT_HEALTH_CHECK + value: 'false' - name: TOTAL_CHAOS_DURATION value: "60" # in seconds @@ -103,7 +107,7 @@ spec: - name: TARGET_HOSTNAMES value: "" - # can be either exact or substring, determines whether the dns query has to match exactly with one of the targets or can have any of the targets as substring + # can be either exact or substring, determines whether the DNS query has to match exactly with one of the targets or can have any of the targets as substring - name: MATCH_SCHEME value: "exact" @@ -111,5 +115,5 @@ spec: experiment: pod-dns-error app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-dns-error/pod-dns-error.chartserviceversion.yaml b/faults/kubernetes/pod-dns-error/pod-dns-error.chartserviceversion.yaml new file mode 100644 index 000000000..8bd22fe71 --- /dev/null +++ b/faults/kubernetes/pod-dns-error/pod-dns-error.chartserviceversion.yaml @@ -0,0 +1,24 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-dns-error + version: 0.1.0 + annotations: + categories: kubernetes +spec: + displayName: Pod DNS Error + categoryDescription: > + Pod DNS Error fault injects DNS failure/error in target pod containers. + keywords: + - Kubernetes + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/generic/pod-dns-spoof/engine.yaml b/faults/kubernetes/pod-dns-spoof/engine.yaml similarity index 93% rename from charts/generic/pod-dns-spoof/engine.yaml rename to faults/kubernetes/pod-dns-spoof/engine.yaml index a468d883f..f6b1f5f53 100644 --- a/charts/generic/pod-dns-spoof/engine.yaml +++ b/faults/kubernetes/pod-dns-spoof/engine.yaml @@ -1,12 +1,13 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: nginx-chaos spec: appinfo: - appns: "default" - applabel: "app=nginx" - appkind: "deployment" + appns: "" + applabel: "" + appkind: "" # It can be active/stop engineState: "active" #ex. values: ns1:name=percona,ns2:run=nginx @@ -35,3 +36,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: "" + diff --git a/charts/generic/pod-dns-spoof/experiment.yaml b/faults/kubernetes/pod-dns-spoof/fault.yaml similarity index 73% rename from charts/generic/pod-dns-spoof/experiment.yaml rename to faults/kubernetes/pod-dns-spoof/fault.yaml index 0e6cf5ada..2fcfb41ea 100644 --- a/charts/generic/pod-dns-spoof/experiment.yaml +++ b/faults/kubernetes/pod-dns-spoof/fault.yaml @@ -1,7 +1,8 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Pod DNS Spoof can spoof particular dns requests in target pod container to desired target hostnames + Pod DNS Spoof can spoof particular DNS requests in target pod container to desired target hostnames kind: ChaosExperiment metadata: name: pod-dns-spoof @@ -9,7 +10,7 @@ metadata: name: pod-dns-spoof app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -17,48 +18,48 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" args: - -c - ./experiments -name pod-dns-spoof @@ -70,7 +71,10 @@ spec: # provide lib image - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" + value: "chaosnative/go-runner:ci" + + - name: DEFAULT_HEALTH_CHECK + value: 'false' - name: TOTAL_CHAOS_DURATION value: "60" # in seconds @@ -107,5 +111,5 @@ spec: experiment: pod-dns-spoof app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml b/faults/kubernetes/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml new file mode 100644 index 000000000..e612f8179 --- /dev/null +++ b/faults/kubernetes/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml @@ -0,0 +1,24 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-dns-spoof + version: 0.1.0 + annotations: + categories: kubernetes +spec: + displayName: Pod DNS Spoof + categoryDescription: > + Pod DNS Spoof fault spoofs particular DNS requests in a target pod container to desired target hostnames. + keywords: + - Kubernetes + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/experiments/generic/pod-http-latency/engine.yaml b/faults/kubernetes/pod-http-latency/engine.yaml similarity index 90% rename from experiments/generic/pod-http-latency/engine.yaml rename to faults/kubernetes/pod-http-latency/engine.yaml index ed00d91fb..a3c47acf7 100644 --- a/experiments/generic/pod-http-latency/engine.yaml +++ b/faults/kubernetes/pod-http-latency/engine.yaml @@ -1,16 +1,17 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: nginx-http-chaos namespace: default -spec: +spec: # It can be active/stop engineState: 'active' - appinfo: - appns: 'default' + appinfo: + appns: '' # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' + applabel: '' + appkind: '' chaosServiceAccount: pod-http-latency-sa experiments: - name: pod-http-latency @@ -19,7 +20,7 @@ spec: env: - name: TOTAL_CHAOS_DURATION value: '60' # in seconds - + - name: LATENCY value: '2000' #in ms @@ -39,3 +40,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' + diff --git a/faults/kubernetes/pod-http-latency/fault.yaml b/faults/kubernetes/pod-http-latency/fault.yaml new file mode 100644 index 000000000..61084e926 --- /dev/null +++ b/faults/kubernetes/pod-http-latency/fault.yaml @@ -0,0 +1,139 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Injects HTTP request latency on pods belonging to an app deployment +kind: ChaosExperiment +metadata: + name: pod-http-latency + labels: + name: pod-http-latency + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get", "list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list", "get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-http-latency + command: + - /bin/bash + env: + - name: TARGET_CONTAINER + value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + - name: LATENCY + value: '2000' #in ms + + # port of the target service + - name: TARGET_SERVICE_PORT + value: "80" + + # toxicity is the probability of the request to be affected + # provide the percentage value in the range of 0-100 + # 0 means no request will be affected and 100 means all request will be affected + - name: TOXICITY + value: "100" + + # port on which the proxy will listen + - name: PROXY_PORT + value: "20000" + + # network interface on which the proxy will listen + - name: NETWORK_INTERFACE + value: "eth0" + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # Time period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + - name: TARGET_PODS + value: '' + + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'containerd' + + # provide the socket file path + - name: SOCKET_PATH + value: '/run/containerd/containerd.sock' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: pod-http-latency + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-http-latency/pod-http-latency.chartserviceversion.yaml b/faults/kubernetes/pod-http-latency/pod-http-latency.chartserviceversion.yaml new file mode 100644 index 000000000..4f8ff4edb --- /dev/null +++ b/faults/kubernetes/pod-http-latency/pod-http-latency.chartserviceversion.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-http-latency + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod HTTP Latency + categoryDescription: | + Pod-http-latency fault disrupts HTTP requests of kubernetes pods. This fault can inject random HTTP response delays on the app replica pods. + - Causes flaky access to application replica by injecting HTTP response delay using toxiproxy. + - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Minikube + - EKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/experiments/generic/pod-http-modify-body/engine.yaml b/faults/kubernetes/pod-http-modify-body/engine.yaml similarity index 93% rename from experiments/generic/pod-http-modify-body/engine.yaml rename to faults/kubernetes/pod-http-modify-body/engine.yaml index 918ae076e..36fc8f9ff 100644 --- a/experiments/generic/pod-http-modify-body/engine.yaml +++ b/faults/kubernetes/pod-http-modify-body/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,9 +7,9 @@ spec: # It can be active/stop engineState: 'active' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: pod-http-modify-body-sa experiments: - name: pod-http-modify-body @@ -39,3 +40,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' + diff --git a/faults/kubernetes/pod-http-modify-body/fault.yaml b/faults/kubernetes/pod-http-modify-body/fault.yaml new file mode 100644 index 000000000..b9e383858 --- /dev/null +++ b/faults/kubernetes/pod-http-modify-body/fault.yaml @@ -0,0 +1,150 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + It injects the chaos inside the pod which modifies the body of the response from the provided application server to the body string provided by the user and reverts after a specified duration +kind: ChaosExperiment +metadata: + name: pod-http-modify-body + labels: + name: pod-http-modify-body + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get", "list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list", "get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-http-modify-body + command: + - /bin/bash + env: + - name: TARGET_CONTAINER + value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + # provide the body string to overwrite the response body + # if no value is provided, response will be an empty body. + - name: RESPONSE_BODY + value: '' + + # provide the encoding type for the response body + # currently supported value are gzip, deflate + # if empty no encoding will be applied + - name: CONTENT_ENCODING + value: '' + + # provide the content type for the response body + - name: CONTENT_TYPE + value: 'text/plain' + + # port of the target service + - name: TARGET_SERVICE_PORT + value: "80" + + # toxicity is the probability of the request to be affected + # provide the percentage value in the range of 0-100 + # 0 means no request will be affected and 100 means all request will be affected + - name: TOXICITY + value: "100" + + # port on which the proxy will listen + - name: PROXY_PORT + value: "20000" + + # network interface on which the proxy will listen + - name: NETWORK_INTERFACE + value: "eth0" + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # Time period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + - name: TARGET_PODS + value: '' + + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'containerd' + + # provide the socket file path + - name: SOCKET_PATH + value: '/run/containerd/containerd.sock' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: pod-http-modify-body + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml b/faults/kubernetes/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml new file mode 100644 index 000000000..3cbface9d --- /dev/null +++ b/faults/kubernetes/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-http-modify-body + version: 0.1.0 + annotations: + categories: kubernetes +spec: + displayName: Pod HTTP Modify Body + categoryDescription: > + Pod-http-modify-body fault disrupts HTTP requests of kubernetes pods. This fault can modify the body of the response from the service targetted. + - Causes modification of response body of the HTTP request. + - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. + keywords: + - kubernetes + platforms: + - "Minikube" + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/experiments/generic/pod-http-modify-header/engine.yaml b/faults/kubernetes/pod-http-modify-header/engine.yaml similarity index 92% rename from experiments/generic/pod-http-modify-header/engine.yaml rename to faults/kubernetes/pod-http-modify-header/engine.yaml index 84ee27810..d9233e36a 100644 --- a/experiments/generic/pod-http-modify-header/engine.yaml +++ b/faults/kubernetes/pod-http-modify-header/engine.yaml @@ -1,16 +1,17 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: nginx-http-chaos namespace: default -spec: +spec: # It can be active/stop engineState: 'active' - appinfo: - appns: 'default' + appinfo: + appns: '' # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' + applabel: '' + appkind: '' chaosServiceAccount: pod-http-modify-header-sa experiments: - name: pod-http-modify-header @@ -19,11 +20,11 @@ spec: env: - name: TOTAL_CHAOS_DURATION value: '60' # in seconds - + # port of the target service - name: TARGET_SERVICE_PORT value: "80" - + # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} - name: HEADERS_MAP @@ -45,3 +46,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' + diff --git a/faults/kubernetes/pod-http-modify-header/fault.yaml b/faults/kubernetes/pod-http-modify-header/fault.yaml new file mode 100644 index 000000000..fca5bbb77 --- /dev/null +++ b/faults/kubernetes/pod-http-modify-header/fault.yaml @@ -0,0 +1,145 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + It injects the chaos inside the pod which modifies the header of the request/response from the provided application server to the headers provided by the user and reverts after a specified duration +kind: ChaosExperiment +metadata: + name: pod-http-modify-header + labels: + name: pod-http-modify-header + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get", "list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list", "get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-http-modify-header + command: + - /bin/bash + env: + - name: TARGET_CONTAINER + value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} + # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} + - name: HEADERS_MAP + value: '{}' + + # whether to modify response headers or request headers. Accepted values: request, response + - name: HEADER_MODE + value: 'response' + + # port of the target service + - name: TARGET_SERVICE_PORT + value: "80" + + # toxicity is the probability of the request to be affected + # provide the percentage value in the range of 0-100 + # 0 means no request will be affected and 100 means all request will be affected + - name: TOXICITY + value: "100" + + # port on which the proxy will listen + - name: PROXY_PORT + value: "20000" + + # network interface on which the proxy will listen + - name: NETWORK_INTERFACE + value: "eth0" + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # Time period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + - name: TARGET_PODS + value: '' + + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'containerd' + + # provide the socket file path + - name: SOCKET_PATH + value: '/run/containerd/containerd.sock' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: pod-http-modify-header + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml b/faults/kubernetes/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml new file mode 100644 index 000000000..c80fef805 --- /dev/null +++ b/faults/kubernetes/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-http-modify-header + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: CNCF +spec: + displayName: Pod HTTP Modify Header + categoryDescription: | + Pod-http-modify-header fault disrupts HTTP requests of kubernetes pods. This fault can modify headers of incoming requests or the response from the service targetted. + - Causes modification of request/response headers of the HTTP request. + - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Minikube + - EKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + icon: + - base64data: "" + mediatype: "" + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category diff --git a/charts/generic/pod-http-reset-peer/engine.yaml b/faults/kubernetes/pod-http-reset-peer/engine.yaml similarity index 92% rename from charts/generic/pod-http-reset-peer/engine.yaml rename to faults/kubernetes/pod-http-reset-peer/engine.yaml index a05236882..2c234cf0e 100644 --- a/charts/generic/pod-http-reset-peer/engine.yaml +++ b/faults/kubernetes/pod-http-reset-peer/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -7,10 +8,10 @@ spec: # It can be active/stop engineState: 'active' appinfo: - appns: 'default' + appns: '' # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' + applabel: '' + appkind: '' chaosServiceAccount: pod-http-reset-peer-sa experiments: - name: pod-http-reset-peer @@ -20,7 +21,7 @@ spec: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION value: '60' # in seconds - + # reset timeout specifies after how much duration to reset the connection - name: RESET_TIMEOUT value: '0' #in ms @@ -45,4 +46,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file + diff --git a/faults/kubernetes/pod-http-reset-peer/fault.yaml b/faults/kubernetes/pod-http-reset-peer/fault.yaml new file mode 100644 index 000000000..0d8535b82 --- /dev/null +++ b/faults/kubernetes/pod-http-reset-peer/fault.yaml @@ -0,0 +1,139 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + it injects chaos into the pod which stops outgoing HTTP requests by resetting the TCP connection and then reverts back to the original state after a specified duration +kind: ChaosExperiment +metadata: + name: pod-http-reset-peer + labels: + name: pod-http-reset-peer + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get", "list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list", "get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-http-reset-peer + command: + - /bin/bash + env: + - name: TARGET_CONTAINER + value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + # reset timeout specifies after how much duration to reset the connection + - name: RESET_TIMEOUT + value: '0' #in ms + + # port of the target service + - name: TARGET_SERVICE_PORT + value: "80" + + # toxicity is the probability of the request to be affected + # provide the percentage value in the range of 0-100 + # 0 means no request will be affected and 100 means all request will be affected + - name: TOXICITY + value: "100" + + # port on which the proxy will listen + - name: PROXY_PORT + value: "20000" + + # network interface on which the proxy will listen + - name: NETWORK_INTERFACE + value: "eth0" + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # Time period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + - name: TARGET_PODS + value: '' + + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'containerd' + + # provide the socket file path + - name: SOCKET_PATH + value: '/run/containerd/containerd.sock' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: pod-http-reset-peer + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml b/faults/kubernetes/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml new file mode 100644 index 000000000..9f83a0964 --- /dev/null +++ b/faults/kubernetes/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-http-reset-peer + version: 0.1.0 + annotations: + categories: kubernetes +spec: + displayName: Pod HTTP Reset Peer + categoryDescription: > + pod-http-reset-peer fault disrupts HTTP requests of kubernetes pods. This fault can stop outgoing HTTP requests by resetting the TCP connection on the service targetted. + - Causes connection failure (connection reset by peer) of the HTTP request. + - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. + keywords: + - kubernetes + platforms: + - "Minikube" + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/generic/pod-http-status-code/engine.yaml b/faults/kubernetes/pod-http-status-code/engine.yaml similarity index 90% rename from charts/generic/pod-http-status-code/engine.yaml rename to faults/kubernetes/pod-http-status-code/engine.yaml index 95f368e99..f819c01c7 100644 --- a/charts/generic/pod-http-status-code/engine.yaml +++ b/faults/kubernetes/pod-http-status-code/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,9 +7,9 @@ spec: # It can be active/stop engineState: 'active' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: pod-http-status-code-sa experiments: - name: pod-http-status-code @@ -22,8 +23,8 @@ spec: # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '10' - - # modified status code for the http response + + # modified status code for the HTTP response # if no value is provided, a random status code from the supported code list will selected # if an invalid status code is provided, the experiment will fail # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504 @@ -33,7 +34,7 @@ spec: # whether to modify the body as per the status code provided - name: "MODIFY_RESPONSE_BODY" value: "true" - + # port of the target service - name: TARGET_SERVICE_PORT value: "80" @@ -51,4 +52,3 @@ spec: - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file diff --git a/faults/kubernetes/pod-http-status-code/fault.yaml b/faults/kubernetes/pod-http-status-code/fault.yaml new file mode 100644 index 000000000..6e58693df --- /dev/null +++ b/faults/kubernetes/pod-http-status-code/fault.yaml @@ -0,0 +1,160 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + It injects chaos inside the pod which modifies the status code of the response from the provided application server to desired status code provided by the user and reverts after a specified duration +kind: ChaosExperiment +metadata: + name: pod-http-status-code + labels: + name: pod-http-status-code + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get", "list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list", "get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-http-status-code + command: + - /bin/bash + env: + - name: TARGET_CONTAINER + value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + # modified status code for the HTTP response + # if no value is provided, a random status code from the supported code list will selected + # if an invalid status code is provided, the experiment will fail + # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504] + - name: STATUS_CODE + value: '' + + # whether to modify the body as per the status code provided + - name: "MODIFY_RESPONSE_BODY" + value: "true" + + # provide the body string to overwrite the response body. This will be used only if MODIFY_RESPONSE_BODY is set to true + - name: RESPONSE_BODY + value: '' + + # provide the encoding type for the response body + # currently supported value are gzip, deflate + # if empty no encoding will be applied + - name: CONTENT_ENCODING + value: '' + + # provide the content type for the response body + - name: CONTENT_TYPE + value: 'text/plain' + + # port of the target service + - name: TARGET_SERVICE_PORT + value: "80" + + # toxicity is the probability of the request to be affected + # provide the percentage value in the range of 0-100 + # 0 means no request will be affected and 100 means all request will be affected + - name: TOXICITY + value: "100" + + # port on which the proxy will listen + - name: PROXY_PORT + value: "20000" + + # network interface on which the proxy will listen + - name: NETWORK_INTERFACE + value: "eth0" + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # Time period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + - name: TARGET_PODS + value: '' + + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'containerd' + + # provide the socket file path + - name: SOCKET_PATH + value: '/run/containerd/containerd.sock' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: pod-http-status-code + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml b/faults/kubernetes/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml new file mode 100644 index 000000000..05cb06207 --- /dev/null +++ b/faults/kubernetes/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-http-status-code + version: 0.1.0 + annotations: + categories: kubernetes +spec: + displayName: Pod HTTP Status Code + categoryDescription: > + pod-http-status-code fault disrupts HTTP requests of kubernetes pods. This fault can modify the status code of the response on the service targetted. + - Causes modification of status code of the HTTP request. + - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. + keywords: + - kubernetes + platforms: + - "Minikube" + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/generic/pod-io-stress/engine.yaml b/faults/kubernetes/pod-io-stress/engine.yaml similarity index 83% rename from charts/generic/pod-io-stress/engine.yaml rename to faults/kubernetes/pod-io-stress/engine.yaml index 4b49e1d2a..c9de57f6f 100644 --- a/charts/generic/pod-io-stress/engine.yaml +++ b/faults/kubernetes/pod-io-stress/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -7,9 +8,9 @@ spec: # It can be active/stop engineState: 'active' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: pod-io-stress-sa experiments: - name: pod-io-stress @@ -30,8 +31,9 @@ spec: ## provide the cluster runtime - name: CONTAINER_RUNTIME - value: 'containerd' + value: 'containerd' # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: '/run/containerd/containerd.sock' + diff --git a/charts/generic/pod-io-stress/experiment.yaml b/faults/kubernetes/pod-io-stress/fault.yaml similarity index 72% rename from charts/generic/pod-io-stress/experiment.yaml rename to faults/kubernetes/pod-io-stress/fault.yaml index ea3703681..1ec5864ce 100644 --- a/charts/generic/pod-io-stress/experiment.yaml +++ b/faults/kubernetes/pod-io-stress/fault.yaml @@ -10,7 +10,7 @@ metadata: name: pod-io-stress app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -18,54 +18,54 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name pod-io-stress + - -c + - ./experiments -name pod-io-stress command: - - /bin/bash + - /bin/bash env: - name: TOTAL_CHAOS_DURATION value: '120' @@ -82,23 +82,26 @@ spec: ## Total number of workers default value is 4 - name: NUMBER_OF_WORKERS - value: '4' + value: '4' ## Percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: '' # provide volume mount path - name: VOLUME_MOUNT_PATH value: '' + - name: TARGET_CONTAINER + value: '' + ## specify the comma separated target pods - name: TARGET_PODS value: '' # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: '' # Period to wait before and after injection of chaos in sec - name: RAMP_TIME @@ -106,15 +109,18 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + value: 'chaosnative/go-runner:ci' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' ## provide the cluster runtime - name: CONTAINER_RUNTIME - value: 'containerd' + value: 'containerd' # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: '/run/containerd/containerd.sock' ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel @@ -125,5 +131,5 @@ spec: name: pod-io-stress app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-io-stress/pod-io-stress.chartserviceversion.yaml b/faults/kubernetes/pod-io-stress/pod-io-stress.chartserviceversion.yaml new file mode 100644 index 000000000..445e8c425 --- /dev/null +++ b/faults/kubernetes/pod-io-stress/pod-io-stress.chartserviceversion.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-io-stress + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod IO Stress + categoryDescription: | + This fault causes disk IO stress on the application pod. It aims to verify the resiliency of applications that share this disk resource for ephemeral or persistent storage purposes. + - Consumes the disk available by executing filesystem IO stress as available memory or by providing the value in GB. + - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/experiments/generic/pod-memory-hog-exec/engine.yaml b/faults/kubernetes/pod-memory-hog-exec/engine.yaml similarity index 87% rename from experiments/generic/pod-memory-hog-exec/engine.yaml rename to faults/kubernetes/pod-memory-hog-exec/engine.yaml index 5bc6b0dde..a7ec8507a 100644 --- a/experiments/generic/pod-memory-hog-exec/engine.yaml +++ b/faults/kubernetes/pod-memory-hog-exec/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -7,9 +8,9 @@ spec: # It can be active/stop engineState: 'active' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: pod-memory-hog-exec-sa experiments: - name: pod-memory-hog-exec @@ -26,4 +27,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file + diff --git a/charts/generic/pod-memory-hog-exec/experiment.yaml b/faults/kubernetes/pod-memory-hog-exec/fault.yaml similarity index 72% rename from charts/generic/pod-memory-hog-exec/experiment.yaml rename to faults/kubernetes/pod-memory-hog-exec/fault.yaml index 6f2210157..0e8d1cc6b 100644 --- a/charts/generic/pod-memory-hog-exec/experiment.yaml +++ b/faults/kubernetes/pod-memory-hog-exec/fault.yaml @@ -10,7 +10,7 @@ metadata: name: pod-memory-hog-exec app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -18,54 +18,54 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name pod-memory-hog-exec + - -c + - ./experiments -name pod-memory-hog-exec command: - - /bin/bash + - /bin/bash env: - name: TOTAL_CHAOS_DURATION value: '60' @@ -80,17 +80,23 @@ spec: ## Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' - + value: '' + # The command to kill the chaos process - name: CHAOS_KILL_COMMAND value: "kill $(find /proc -name exe -lname '*/dd' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}' | head -n 1)" - + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + - name: TARGET_CONTAINER + value: '' + - name: TARGET_PODS value: '' @@ -98,4 +104,4 @@ spec: name: pod-memory-hog-exec app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml b/faults/kubernetes/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml new file mode 100644 index 000000000..01cbf41ca --- /dev/null +++ b/faults/kubernetes/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml @@ -0,0 +1,34 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-memory-hog-exec + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod Memory Hog Exec + categoryDescription: | + pod-memory-hog-exec fault consumes memory resources of specified containers in Kubernetes pods. + - Consumes the memory specified by executing a dd command against special files /dev/zero(input) and /dev/null(output). + - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + - OpenShift(OKD) + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/experiments/generic/pod-memory-hog/engine.yaml b/faults/kubernetes/pod-memory-hog/engine.yaml similarity index 79% rename from experiments/generic/pod-memory-hog/engine.yaml rename to faults/kubernetes/pod-memory-hog/engine.yaml index d039deedb..799d50253 100644 --- a/experiments/generic/pod-memory-hog/engine.yaml +++ b/faults/kubernetes/pod-memory-hog/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -7,9 +8,9 @@ spec: # It can be active/stop engineState: 'active' appinfo: - appns: 'default' - applabel: 'app=nginx' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' chaosServiceAccount: pod-memory-hog-sa experiments: - name: pod-memory-hog @@ -25,12 +26,13 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: '' ## provide the cluster runtime - name: CONTAINER_RUNTIME - value: 'containerd' + value: 'containerd' # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: '/run/containerd/containerd.sock' + diff --git a/charts/generic/pod-memory-hog/experiment.yaml b/faults/kubernetes/pod-memory-hog/fault.yaml similarity index 68% rename from charts/generic/pod-memory-hog/experiment.yaml rename to faults/kubernetes/pod-memory-hog/fault.yaml index 2c7afff03..d46102088 100644 --- a/charts/generic/pod-memory-hog/experiment.yaml +++ b/faults/kubernetes/pod-memory-hog/fault.yaml @@ -10,7 +10,7 @@ metadata: name: pod-memory-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -18,54 +18,54 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name pod-memory-hog + - -c + - ./experiments -name pod-memory-hog command: - - /bin/bash + - /bin/bash env: - name: TOTAL_CHAOS_DURATION value: '60' @@ -73,10 +73,10 @@ spec: ## enter the amount of memory in megabytes to be consumed by the application pod - name: MEMORY_CONSUMPTION value: '500' - + ## Number of workers to perform stress - name: NUMBER_OF_WORKERS - value: '1' + value: '1' ## percentage of total pods to target - name: PODS_AFFECTED_PERC @@ -84,29 +84,35 @@ spec: ## Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: '' - ## It is used in pumba lib only + ## It is used in pumba lib only - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + value: 'chaosnative/go-runner:ci' - ## It is used in pumba lib only + ## It is used in pumba lib only - name: STRESS_IMAGE value: 'alexeiled/stress-ng:latest-ubuntu' ## provide the cluster runtime - name: CONTAINER_RUNTIME - value: 'containerd' + value: 'containerd' # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - + value: '/run/containerd/containerd.sock' + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + - name: TARGET_CONTAINER + value: '' + - name: TARGET_PODS value: '' @@ -118,5 +124,5 @@ spec: name: pod-memory-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml b/faults/kubernetes/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml new file mode 100644 index 000000000..06977404c --- /dev/null +++ b/faults/kubernetes/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml @@ -0,0 +1,39 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-memory-hog + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod Memory Hog + categoryDescription: | + Pod-Memory-Hog fault consumes memory resources of specified containers in Kubernetes pods. + - Causes memory resource consumption on specified application containers using cgroups and litmus nsutil that consume memory resources of the given target containers. + - It tests the application's resilience to potential slowness/unavailability of some replicas due to high memory load. + - The application pod should be healthy once chaos is stopped. Expectation is that service-requests should be served despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + - OpenShift(OKD) + experiments: + - pod-memory-hog + - sock-shop + - sock-shop-promProbe + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/generic/pod-network-corruption/engine.yaml b/faults/kubernetes/pod-network-corruption/engine.yaml similarity index 92% rename from charts/generic/pod-network-corruption/engine.yaml rename to faults/kubernetes/pod-network-corruption/engine.yaml index 63570eadb..2b9310eac 100644 --- a/charts/generic/pod-network-corruption/engine.yaml +++ b/faults/kubernetes/pod-network-corruption/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,11 +7,11 @@ metadata: spec: # It can be active/stop engineState: 'active' - appinfo: - appns: 'default' + appinfo: + appns: '' # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' + applabel: '' + appkind: '' chaosServiceAccount: pod-network-corruption-sa experiments: - name: pod-network-corruption @@ -36,3 +37,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' + diff --git a/experiments/generic/pod-dns-error/experiment.yaml b/faults/kubernetes/pod-network-corruption/fault.yaml similarity index 53% rename from experiments/generic/pod-dns-error/experiment.yaml rename to faults/kubernetes/pod-network-corruption/fault.yaml index fc2180857..9d2f187eb 100644 --- a/experiments/generic/pod-dns-error/experiment.yaml +++ b/faults/kubernetes/pod-network-corruption/fault.yaml @@ -1,15 +1,16 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Pod DNS Error injects dns failure/error in target pod containers + Inject network packet corruption into application pod kind: ChaosExperiment metadata: - name: pod-dns-error + name: pod-network-corruption labels: - name: pod-dns-error + name: pod-network-corruption app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -17,99 +18,120 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always args: - -c - - ./experiments -name pod-dns-error + - ./experiments -name pod-network-corruption command: - /bin/bash env: - name: TARGET_CONTAINER - value: "" + value: '' # provide lib image - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" + value: 'chaosnative/go-runner:ci' + + - name: NETWORK_INTERFACE + value: 'eth0' + + - name: TC_IMAGE + value: 'gaiadocker/iproute2' + + - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE + value: '100' #in PERCENTAGE - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds + value: '60' # in seconds # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: "" + value: '' ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: "" + value: '' - name: TARGET_PODS - value: "" + value: '' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' - # provide the name of container runtime, it supports docker, containerd, crio + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME value: 'containerd' + # provide the destination ips + # chaos injection will be triggered for these destination ips + - name: DESTINATION_IPS + value: '' + + # provide the destination hosts + # chaos injection will be triggered for these destination hosts + - name: DESTINATION_HOSTS + value: '' + # provide the socket file path - name: SOCKET_PATH value: '/run/containerd/containerd.sock' + - name: DEFAULT_HEALTH_CHECK + value: 'false' + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: "parallel" - - # list of the target hostnames or kewywords eg. '["litmuschaos","chaosnative.io"]' . If empty all hostnames are targets - - name: TARGET_HOSTNAMES - value: "" - - # can be either exact or substring, determines whether the dns query has to match exactly with one of the targets or can have any of the targets as substring - - name: MATCH_SCHEME - value: "exact" + value: 'parallel' labels: - experiment: pod-dns-error + name: pod-network-corruption app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml b/faults/kubernetes/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml new file mode 100644 index 000000000..eec89d3ac --- /dev/null +++ b/faults/kubernetes/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml @@ -0,0 +1,35 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2020-01-07T10:28:08Z + name: pod-network-corruption + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness + support: https://slack.kubernetes.io/ +spec: + displayName: Pod Network Corruption + categoryDescription: | + Pod-network-corruption fault disrupts network connectivity to kubernetes pods. This fault injects percentage packet corruption on the app replica pods. + - Causes packet corruption of application replica by injecting packet corruption using Pumba. + - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Packet(Kubeadm) + - Minikube + - EKS + - AKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/generic/pod-network-duplication/engine.yaml b/faults/kubernetes/pod-network-duplication/engine.yaml similarity index 86% rename from charts/generic/pod-network-duplication/engine.yaml rename to faults/kubernetes/pod-network-duplication/engine.yaml index 7c1faedd4..5141f5260 100644 --- a/charts/generic/pod-network-duplication/engine.yaml +++ b/faults/kubernetes/pod-network-duplication/engine.yaml @@ -1,4 +1,5 @@ # chaosengine.yaml +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -7,12 +8,12 @@ metadata: spec: # It can be active/stop engineState: 'active' - appinfo: - appns: 'default' + appinfo: + appns: '' # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-network-duplication-sa + applabel: '' + appkind: '' + chaosServiceAccount: pod-network-duplication-sa experiments: - name: pod-network-duplication spec: @@ -23,7 +24,7 @@ spec: - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE value: '100' - + # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only @@ -33,7 +34,8 @@ spec: # provide the socket file path - name: SOCKET_PATH value: '/run/containerd/containerd.sock' - + ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' + diff --git a/faults/kubernetes/pod-network-duplication/fault.yaml b/faults/kubernetes/pod-network-duplication/fault.yaml new file mode 100644 index 000000000..d1fe39e01 --- /dev/null +++ b/faults/kubernetes/pod-network-duplication/fault.yaml @@ -0,0 +1,135 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Injects network packet duplication on pods belonging to an app deployment +kind: ChaosExperiment +metadata: + name: pod-network-duplication + labels: + name: pod-network-duplication + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get", "list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list", "get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-network-duplication + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '60' + + - name: RAMP_TIME + value: '' + + - name: TARGET_CONTAINER + value: '' + + - name: TC_IMAGE + value: 'gaiadocker/iproute2' + + - name: NETWORK_INTERFACE + value: 'eth0' + + - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE + value: '100' # in percentage + + - name: TARGET_PODS + value: '' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'containerd' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # provide the destination ips + # chaos injection will be triggered for these destination ips + - name: DESTINATION_IPS + value: '' + + # provide the destination hosts + # chaos injection will be triggered for these destination hosts + - name: DESTINATION_HOSTS + value: '' + + # provide the socket file path + - name: SOCKET_PATH + value: '/run/containerd/containerd.sock' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: pod-network-duplication + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml b/faults/kubernetes/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml new file mode 100644 index 000000000..6520a1f8e --- /dev/null +++ b/faults/kubernetes/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-network-duplication + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod Network Duplication + categoryDescription: | + Pod-network-duplication fault disrupts network connectivity to kubernetes pods. This fault injects percentage packet duplication on the app replica pods. + - Causes lossy access to application replica by injecting packet duplication using Pumba. + - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Minikube + - Packet(Kubeadm) + - EKS + - AKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/experiments/generic/pod-network-latency/engine.yaml b/faults/kubernetes/pod-network-latency/engine.yaml similarity index 88% rename from experiments/generic/pod-network-latency/engine.yaml rename to faults/kubernetes/pod-network-latency/engine.yaml index aa4396c1d..3529ae23f 100644 --- a/experiments/generic/pod-network-latency/engine.yaml +++ b/faults/kubernetes/pod-network-latency/engine.yaml @@ -1,16 +1,17 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: nginx-network-chaos namespace: default -spec: +spec: # It can be active/stop engineState: 'active' - appinfo: - appns: 'default' + appinfo: + appns: '' # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' + applabel: '' + appkind: '' chaosServiceAccount: pod-network-latency-sa experiments: - name: pod-network-latency @@ -24,7 +25,7 @@ spec: value: '2000' - name: JITTER - value: '0' + value: '0' # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio @@ -39,3 +40,4 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' + diff --git a/faults/kubernetes/pod-network-latency/fault.yaml b/faults/kubernetes/pod-network-latency/fault.yaml new file mode 100644 index 000000000..88a3f530f --- /dev/null +++ b/faults/kubernetes/pod-network-latency/fault.yaml @@ -0,0 +1,140 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Injects network latency on pods belonging to an app deployment +kind: ChaosExperiment +metadata: + name: pod-network-latency + labels: + name: pod-network-latency + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get", "list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list", "get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-network-latency + command: + - /bin/bash + env: + - name: TARGET_CONTAINER + value: '' + + - name: NETWORK_INTERFACE + value: 'eth0' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + - name: TC_IMAGE + value: 'gaiadocker/iproute2' + + - name: NETWORK_LATENCY + value: '2000' #in ms + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # Time period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: JITTER + value: '0' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + - name: TARGET_PODS + value: '' + + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'containerd' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # provide the destination ips + # chaos injection will be triggered for these destination ips + - name: DESTINATION_IPS + value: '' + + # provide the destination hosts + # chaos injection will be triggered for these destination hosts + - name: DESTINATION_HOSTS + value: '' + + # provide the socket file path + - name: SOCKET_PATH + value: '/run/containerd/containerd.sock' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: pod-network-latency + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-network-latency/pod-network-latency.chartserviceversion.yaml b/faults/kubernetes/pod-network-latency/pod-network-latency.chartserviceversion.yaml new file mode 100644 index 000000000..ac56fd990 --- /dev/null +++ b/faults/kubernetes/pod-network-latency/pod-network-latency.chartserviceversion.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-network-latency + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod Network Latency + categoryDescription: | + Pod-network-latency fault disrupts network connectivity of Kubernetes pods. This fault injects random network delays on the app replica pods. + - Causes flaky access to application replica by injecting network delay using Pumba. + - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Minikube + - Packet(Kubeadm) + - EKS + - AKS + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/generic/pod-network-loss/engine.yaml b/faults/kubernetes/pod-network-loss/engine.yaml similarity index 84% rename from charts/generic/pod-network-loss/engine.yaml rename to faults/kubernetes/pod-network-loss/engine.yaml index 96599ae94..8dda8d70e 100644 --- a/charts/generic/pod-network-loss/engine.yaml +++ b/faults/kubernetes/pod-network-loss/engine.yaml @@ -1,4 +1,4 @@ -# chaosengine.yaml +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -7,12 +7,12 @@ metadata: spec: # It can be active/stop engineState: 'active' - appinfo: - appns: 'default' + appinfo: + appns: '' # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-network-loss-sa + applabel: '' + appkind: '' + chaosServiceAccount: pod-network-loss-sa experiments: - name: pod-network-loss spec: @@ -20,7 +20,7 @@ spec: env: - name: TOTAL_CHAOS_DURATION value: '60' # in seconds - + - name: NETWORK_PACKET_LOSS_PERCENTAGE value: '100' @@ -33,8 +33,8 @@ spec: # provide the socket file path - name: SOCKET_PATH value: '/run/containerd/containerd.sock' - + ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file + diff --git a/experiments/generic/pod-io-stress/experiment.yaml b/faults/kubernetes/pod-network-loss/fault.yaml similarity index 52% rename from experiments/generic/pod-io-stress/experiment.yaml rename to faults/kubernetes/pod-network-loss/fault.yaml index 4594342d7..e257b5099 100644 --- a/experiments/generic/pod-io-stress/experiment.yaml +++ b/faults/kubernetes/pod-network-loss/fault.yaml @@ -2,15 +2,15 @@ apiVersion: litmuschaos.io/v1alpha1 description: message: | - IO stress on a app pods belonging to an app deployment + Injects network packet loss on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-io-stress + name: pod-network-loss labels: - name: pod-io-stress + name: pod-network-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -18,108 +18,111 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name pod-io-stress + - -c + - ./experiments -name pod-network-loss command: - - /bin/bash + - /bin/bash env: - - name: TOTAL_CHAOS_DURATION - value: '120' + - name: TARGET_CONTAINER + value: '' - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' + - name: NETWORK_INTERFACE + value: 'eth0' - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' + - name: TC_IMAGE + value: 'gaiadocker/iproute2' - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' + - name: NETWORK_PACKET_LOSS_PERCENTAGE + value: '100' #in PERCENTAGE + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # time period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' - # provide volume mount path - - name: VOLUME_MOUNT_PATH + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC value: '' - ## specify the comma separated target pods + - name: DEFAULT_HEALTH_CHECK + value: 'false' + - name: TARGET_PODS value: '' # To select pods on specific node(s) - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME value: '' - # Provide the LIB here - # support litmus and pumba - - name: LIB - value: 'litmus' + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'containerd' - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + # provide the destination ips + # chaos injection will be triggered for these destination ips + - name: DESTINATION_IPS + value: '' - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' + # provide the destination hosts + # chaos injection will be triggered for these destination hosts + - name: DESTINATION_HOSTS + value: '' # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: '/run/containerd/containerd.sock' ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel @@ -127,8 +130,8 @@ spec: value: 'parallel' labels: - name: pod-io-stress + name: pod-network-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-network-loss/pod-network-loss.chartserviceversion.yaml b/faults/kubernetes/pod-network-loss/pod-network-loss.chartserviceversion.yaml new file mode 100644 index 000000000..d93c10e4e --- /dev/null +++ b/faults/kubernetes/pod-network-loss/pod-network-loss.chartserviceversion.yaml @@ -0,0 +1,36 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-network-loss + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod Network Loss + categoryDescription: | + Pod-network-loss fault disrupts network connectivity to kubernetes pods. This fault injects percentage packet loss on the app replica pods. + - Causes loss of access to application replica by injecting packet loss using Pumba. + - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. + keywords: + - Kubernetes + platforms: + - GKE + - Minikube + - Packet(Kubeadm) + - EKS + experiments: + - bank-of-anthos + - sock-shop + - sock-shop-promProbe + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/generic/pod-network-partition/engine.yaml b/faults/kubernetes/pod-network-partition/engine.yaml similarity index 75% rename from charts/generic/pod-network-partition/engine.yaml rename to faults/kubernetes/pod-network-partition/engine.yaml index ef656e198..30c3bc2d8 100644 --- a/charts/generic/pod-network-partition/engine.yaml +++ b/faults/kubernetes/pod-network-partition/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -6,12 +7,12 @@ metadata: spec: # It can be active/stop engineState: 'active' - appinfo: - appns: 'default' + appinfo: + appns: '' # FYI, To see app label, apply kubectl get pods --show-labels - applabel: 'app=nginx' - appkind: 'deployment' - chaosServiceAccount: pod-network-partition-sa + applabel: '' + appkind: '' + chaosServiceAccount: pod-network-partition-sa experiments: - name: pod-network-partition spec: @@ -19,3 +20,4 @@ spec: env: - name: TOTAL_CHAOS_DURATION value: '60' # in seconds + diff --git a/faults/kubernetes/pod-network-partition/fault.yaml b/faults/kubernetes/pod-network-partition/fault.yaml new file mode 100644 index 000000000..1cea58ad4 --- /dev/null +++ b/faults/kubernetes/pod-network-partition/fault.yaml @@ -0,0 +1,99 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Injects 100% network packet loss on pods belonging to an app deployment +kind: ChaosExperiment +metadata: + name: pod-network-partition + labels: + name: pod-network-partition + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # performs CRUD operations on the network policies + - apiGroups: ["networking.k8s.io"] + resources: ["networkpolicies"] + verbs: ["create", "delete", "list", "get"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-network-partition + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # time period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + - name: DEFAULT_HEALTH_CHECK + value: 'false' + + # provide the destination ips + # chaos injection will be triggered for these destination ips + - name: DESTINATION_IPS + value: '' + + # provide the destination hosts + # chaos injection will be triggered for these destination hosts + - name: DESTINATION_HOSTS + value: '' + + # provide network policy type + # support ingress, egress, all values + - name: POLICY_TYPES + value: 'all' + + # provide labels of the destination pods + - name: POD_SELECTOR + value: '' + + # provide labels the destination namespaces + - name: NAMESPACE_SELECTOR + value: '' + + # provide comma separated ports + - name: PORTS + value: '' + + labels: + name: pod-network-partition + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/kubernetes/pod-network-partition/pod-network-partition.chartserviceversion.yaml b/faults/kubernetes/pod-network-partition/pod-network-partition.chartserviceversion.yaml new file mode 100644 index 000000000..759b0a0a8 --- /dev/null +++ b/faults/kubernetes/pod-network-partition/pod-network-partition.chartserviceversion.yaml @@ -0,0 +1,29 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: pod-network-partition + version: 0.1.0 + annotations: + categories: Kubernetes + vendor: Harness +spec: + displayName: Pod Network Partition + categoryDescription: | + pod-network-partition fault disrupts network connectivity to kubernetes pods. This fault injects complete egress/ingress network loss based on label and namespace selectors. + - The application pod should be healthy once chaos is stopped. Service-requests should be served (say, via alternate replicas) despite chaos. + keywords: + - Kubernetes + platforms: + - Minikube + - Packet(Kubeadm) + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - base64data: "" + mediatype: "" diff --git a/charts/spring-boot/icons/spring-boot-app-kill.png b/faults/spring-boot/icons/spring-boot-app-kill.png similarity index 100% rename from charts/spring-boot/icons/spring-boot-app-kill.png rename to faults/spring-boot/icons/spring-boot-app-kill.png diff --git a/charts/spring-boot/icons/spring-boot-cpu-stress.png b/faults/spring-boot/icons/spring-boot-cpu-stress.png similarity index 100% rename from charts/spring-boot/icons/spring-boot-cpu-stress.png rename to faults/spring-boot/icons/spring-boot-cpu-stress.png diff --git a/charts/spring-boot/icons/spring-boot-exceptions.png b/faults/spring-boot/icons/spring-boot-exceptions.png similarity index 100% rename from charts/spring-boot/icons/spring-boot-exceptions.png rename to faults/spring-boot/icons/spring-boot-exceptions.png diff --git a/charts/spring-boot/icons/spring-boot-faults.png b/faults/spring-boot/icons/spring-boot-faults.png similarity index 100% rename from charts/spring-boot/icons/spring-boot-faults.png rename to faults/spring-boot/icons/spring-boot-faults.png diff --git a/charts/spring-boot/icons/spring-boot-latency.png b/faults/spring-boot/icons/spring-boot-latency.png similarity index 100% rename from charts/spring-boot/icons/spring-boot-latency.png rename to faults/spring-boot/icons/spring-boot-latency.png diff --git a/charts/spring-boot/icons/spring-boot-memory-stress.png b/faults/spring-boot/icons/spring-boot-memory-stress.png similarity index 100% rename from charts/spring-boot/icons/spring-boot-memory-stress.png rename to faults/spring-boot/icons/spring-boot-memory-stress.png diff --git a/charts/spring-boot/spring-boot-app-kill/engine.yaml b/faults/spring-boot/spring-boot-app-kill/engine.yaml similarity index 85% rename from charts/spring-boot/spring-boot-app-kill/engine.yaml rename to faults/spring-boot/spring-boot-app-kill/engine.yaml index 81def2733..86be56787 100644 --- a/charts/spring-boot/spring-boot-app-kill/engine.yaml +++ b/faults/spring-boot/spring-boot-app-kill/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -5,9 +6,9 @@ metadata: namespace: default spec: appinfo: - appns: 'default' - applabel: 'app=spring-boot' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' # It can be active/stop engineState: 'active' chaosServiceAccount: spring-boot-app-kill-sa @@ -23,4 +24,3 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file diff --git a/faults/spring-boot/spring-boot-app-kill/fault.yaml b/faults/spring-boot/spring-boot-app-kill/fault.yaml new file mode 100644 index 000000000..2266ac0d1 --- /dev/null +++ b/faults/spring-boot/spring-boot-app-kill/fault.yaml @@ -0,0 +1,85 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + It can target random pods with a Spring Boot application and allows configuring the assaults to inject app-kill +kind: ChaosExperiment +metadata: + name: spring-boot-app-kill + labels: + name: spring-boot-app-kill + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name spring-boot-app-kill + command: + - /bin/bash + env: + # port of the spring boot application + - name: CM_PORT + value: '' + + #it contains number of requests are to be attacked + # n value means nth request will be affected + - name: CM_LEVEL + value: '1' + + # it limits watched packages/classes/methods + - name: CM_WATCHED_CUSTOM_SERVICES + value: '' + + # provide name of watcher + # it supports controller, restController, service, repository, component, webClient + - name: CM_WATCHERS + value: 'restController' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + ## Period to wait before and after injection of chaos + - name: RAMP_TIME + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: spring-boot-app-kill + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml b/faults/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml new file mode 100644 index 000000000..de5671663 --- /dev/null +++ b/faults/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: spring-boot-app-kill + version: 0.1.0 + annotations: + categories: Spring Boot + vendor: Harness +spec: + displayName: spring-boot-app-kill + categoryDescription: | + This experiment allows injecting Chaos Monkey app-kill assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. + It can target random pods with a Spring Boot application and allows configuring the assaults to inject app-kill. It tests the resiliency of the system when some applications are having unexpected faulty behavior. + keywords: + - Spring Boot + platforms: + - GKE + - Konvoy + - Packet(Kubeadm) + - Minikube + - EKS + maturity: alpha + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci diff --git a/charts/spring-boot/spring-boot-cpu-stress/engine.yaml b/faults/spring-boot/spring-boot-cpu-stress/engine.yaml similarity index 90% rename from charts/spring-boot/spring-boot-cpu-stress/engine.yaml rename to faults/spring-boot/spring-boot-cpu-stress/engine.yaml index e79586d05..4bf528334 100644 --- a/charts/spring-boot/spring-boot-cpu-stress/engine.yaml +++ b/faults/spring-boot/spring-boot-cpu-stress/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -5,9 +6,9 @@ metadata: namespace: default spec: appinfo: - appns: 'default' - applabel: 'app=spring-boot' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' # It can be active/stop engineState: 'active' chaosServiceAccount: spring-boot-cpu-stress-sa @@ -32,4 +33,3 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file diff --git a/faults/spring-boot/spring-boot-cpu-stress/fault.yaml b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml new file mode 100644 index 000000000..c33668f64 --- /dev/null +++ b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml @@ -0,0 +1,93 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + It can target random pods with a Spring Boot application and allows configuring the assaults to inject cpu-stress +kind: ChaosExperiment +metadata: + name: spring-boot-cpu-stress + labels: + name: spring-boot-cpu-stress + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name spring-boot-cpu-stress + command: + - /bin/bash + env: + # it contains fraction of cpu to be stressed(0.95 equals 95%) + # it supports value in range [0.1,1.0] + - name: CPU_LOAD_FRACTION + value: '0.9' + + # port of the spring boot application + - name: CM_PORT + value: '' + + #it contains number of requests are to be attacked + # n value means nth request will be affected + - name: CM_LEVEL + value: '1' + + # it limits watched packages/classes/methods + - name: CM_WATCHED_CUSTOM_SERVICES + value: '' + + # provide name of watcher + # it supports controller, restController, service, repository, component, webClient + - name: CM_WATCHERS + value: 'restController' + + - name: TOTAL_CHAOS_DURATION + value: '30' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + ## Period to wait before and after injection of chaos + - name: RAMP_TIME + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: spring-boot-cpu-stress + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml b/faults/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml new file mode 100644 index 000000000..d7df006e4 --- /dev/null +++ b/faults/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: spring-boot-cpu-stress + version: 0.1.0 + annotations: + categories: Spring Boot + vendor: Harness +spec: + displayName: spring-boot-cpu-stress + categoryDescription: | + This experiment allows injecting Chaos Monkey cpu stress assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. + It can target random pods with a Spring Boot application and allows configuring the assaults to inject CPU stress. It tests the resiliency of the system when some applications are having unexpected faulty behavior. + keywords: + - Spring Boot + platforms: + - GKE + - Konvoy + - Packet(Kubeadm) + - Minikube + - EKS + maturity: alpha + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci diff --git a/charts/spring-boot/spring-boot-exceptions/engine.yaml b/faults/spring-boot/spring-boot-exceptions/engine.yaml similarity index 91% rename from charts/spring-boot/spring-boot-exceptions/engine.yaml rename to faults/spring-boot/spring-boot-exceptions/engine.yaml index fb496bc09..f4366d431 100644 --- a/charts/spring-boot/spring-boot-exceptions/engine.yaml +++ b/faults/spring-boot/spring-boot-exceptions/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -5,9 +6,9 @@ metadata: namespace: default spec: appinfo: - appns: 'default' - applabel: 'app=spring-boot' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' # It can be active/stop engineState: 'active' chaosServiceAccount: spring-boot-exceptions-sa @@ -35,4 +36,3 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file diff --git a/faults/spring-boot/spring-boot-exceptions/fault.yaml b/faults/spring-boot/spring-boot-exceptions/fault.yaml new file mode 100644 index 000000000..80682eca5 --- /dev/null +++ b/faults/spring-boot/spring-boot-exceptions/fault.yaml @@ -0,0 +1,96 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + It can target random pods with a Spring Boot application and allows configuring the assaults to inject network latency +kind: ChaosExperiment +metadata: + name: spring-boot-exceptions + labels: + name: spring-boot-exceptions + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name spring-boot-exceptions + command: + - /bin/bash + env: + # Type of raised exception + - name: CM_EXCEPTIONS_TYPE + value: 'java.lang.IllegalArgumentException' + + # Argument of raised exception + - name: CM_EXCEPTIONS_ARGUMENTS + value: 'java.lang.String:custom illegal argument exception' + + # port of the spring boot application + - name: CM_PORT + value: '' + + #it contains number of requests are to be attacked + # n value means nth request will be affected + - name: CM_LEVEL + value: '1' + + # it limits watched packages/classes/methods + - name: CM_WATCHED_CUSTOM_SERVICES + value: '' + + # provide name of watcher + # it supports controller, restController, service, repository, component, webClient + - name: CM_WATCHERS + value: 'restController' + + - name: TOTAL_CHAOS_DURATION + value: '30' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + ## Period to wait before and after injection of chaos + - name: RAMP_TIME + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: spring-boot-exceptions + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml b/faults/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml new file mode 100644 index 000000000..dc877e1da --- /dev/null +++ b/faults/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: spring-boot-exceptions + version: 0.1.0 + annotations: + categories: Spring Boot + vendor: Harness +spec: + displayName: spring-boot-exceptions + categoryDescription: | + This experiment allows injecting Chaos Monkey exceptions assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. + It can target random pods with a Spring Boot application and allows configuring the assaults to inject exception. It tests the resiliency of the system when some applications are having unexpected faulty behavior. + keywords: + - Spring Boot + platforms: + - GKE + - Konvoy + - Packet(Kubeadm) + - Minikube + - EKS + maturity: alpha + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci diff --git a/charts/spring-boot/spring-boot-faults/engine.yaml b/faults/spring-boot/spring-boot-faults/engine.yaml similarity index 96% rename from charts/spring-boot/spring-boot-faults/engine.yaml rename to faults/spring-boot/spring-boot-faults/engine.yaml index ce886a0e3..a869d922e 100644 --- a/charts/spring-boot/spring-boot-faults/engine.yaml +++ b/faults/spring-boot/spring-boot-faults/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -5,9 +6,9 @@ metadata: namespace: default spec: appinfo: - appns: 'default' - applabel: 'app=spring-boot' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' # It can be active/stop engineState: 'active' chaosServiceAccount: spring-boot-faults-sa @@ -74,4 +75,3 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file diff --git a/faults/spring-boot/spring-boot-faults/fault.yaml b/faults/spring-boot/spring-boot-faults/fault.yaml new file mode 100644 index 000000000..a2734661b --- /dev/null +++ b/faults/spring-boot/spring-boot-faults/fault.yaml @@ -0,0 +1,135 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + It can target random pods with a Spring Boot application and allows configuring the assaults to inject cpu-stress +kind: ChaosExperiment +metadata: + name: spring-boot-faults + labels: + name: spring-boot-faults + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name spring-boot-faults + command: + - /bin/bash + env: + # it enables spring app-kill fault + - name: CM_KILL_APPLICATION_ACTIVE + value: '' + + # it enables spring-boot latency fault + - name: CM_LATENCY_ACTIVE + value: '' + + # provide the latency (ms) + # it is applicable when latency is active + - name: LATENCY + value: '2000' + + # it enables spring-boot memory stress fault + - name: CM_MEMORY_ACTIVE + value: '' + + # it contains fraction of memory to be stressed(0.70 equals 70%) + # it supports value in range [0.01,0.95] + # it is applicable when memory is active + - name: MEMORY_FILL_FRACTION + value: '0.70' + + # it enables spring-boot cpu stress fault + - name: CM_CPU_ACTIVE + value: '' + + # it contains fraction of cpu to be stressed(0.95 equals 95%) + # it supports value in range [0.1,1.0] + # it is applicable when cpu is active + - name: CPU_LOAD_FRACTION + value: '0.9' + + # it enables spring-boot exceptions fault + - name: CM_EXCEPTIONS_ACTIVE + value: '' + + # Type of raised exception + # it is applicable when exceptions is active + - name: CM_EXCEPTIONS_TYPE + value: 'java.lang.IllegalArgumentException' + + # Argument of raised exception + # it is applicable when exceptions is active + - name: CM_EXCEPTIONS_ARGUMENTS + value: 'java.lang.String:custom illegal argument exception' + + # port of the spring boot application + - name: CM_PORT + value: '' + + #it contains number of requests are to be attacked + # n value means nth request will be affected + - name: CM_LEVEL + value: '1' + + # it limits watched packages/classes/methods + - name: CM_WATCHED_CUSTOM_SERVICES + value: '' + + # provide name of watcher + # it supports controller, restController, service, repository, component, webClient + - name: CM_WATCHERS + value: 'restController' + + - name: TOTAL_CHAOS_DURATION + value: '30' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + ## Period to wait before and after injection of chaos + - name: RAMP_TIME + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: spring-boot-faults + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml b/faults/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml new file mode 100644 index 000000000..4a02c76e5 --- /dev/null +++ b/faults/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: spring-boot-faults + version: 0.1.0 + annotations: + categories: Spring Boot + vendor: Harness +spec: + displayName: spring-boot-faults + categoryDescription: | + This experiment allows injecting Chaos Monkey assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. + It can target random pods with a Spring Boot application and allows configuring the assaults to inject Spring Boot faults. It tests the resiliency of the system when some applications are having unexpected faulty behavior. + keywords: + - Spring Boot + platforms: + - GKE + - Konvoy + - Packet(Kubeadm) + - Minikube + - EKS + maturity: alpha + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci diff --git a/charts/spring-boot/spring-boot-latency/engine.yaml b/faults/spring-boot/spring-boot-latency/engine.yaml similarity index 88% rename from charts/spring-boot/spring-boot-latency/engine.yaml rename to faults/spring-boot/spring-boot-latency/engine.yaml index d34469c82..61d4590e2 100644 --- a/charts/spring-boot/spring-boot-latency/engine.yaml +++ b/faults/spring-boot/spring-boot-latency/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -5,9 +6,9 @@ metadata: namespace: default spec: appinfo: - appns: 'default' - applabel: 'app=spring-boot' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' # It can be active/stop engineState: 'active' chaosServiceAccount: spring-boot-latency-sa @@ -31,4 +32,3 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file diff --git a/faults/spring-boot/spring-boot-latency/fault.yaml b/faults/spring-boot/spring-boot-latency/fault.yaml new file mode 100644 index 000000000..dcc566ce3 --- /dev/null +++ b/faults/spring-boot/spring-boot-latency/fault.yaml @@ -0,0 +1,92 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + It can target random pods with a Spring Boot application and allows configuring the assaults to inject network latency +kind: ChaosExperiment +metadata: + name: spring-boot-latency + labels: + name: spring-boot-latency + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name spring-boot-latency + command: + - /bin/bash + env: + # provide the latency (ms) + - name: LATENCY + value: '2000' + + # port of the spring boot application + - name: CM_PORT + value: '' + + # it contains number of requests are to be attacked + # n value means nth request will be affected + - name: CM_LEVEL + value: '1' + + # it limits watched packages/classes/methods + - name: CM_WATCHED_CUSTOM_SERVICES + value: '' + + # provide name of watcher + # it supports controller, restController, service, repository, component, webClient + - name: CM_WATCHERS + value: 'restController' + + - name: TOTAL_CHAOS_DURATION + value: '30' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + ## Period to wait before and after injection of chaos + - name: RAMP_TIME + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: spring-boot-latency + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml b/faults/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml new file mode 100644 index 000000000..9bfc33186 --- /dev/null +++ b/faults/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: spring-boot-latency + version: 0.1.0 + annotations: + categories: Spring Boot + vendor: Harness +spec: + displayName: spring-boot-latency + categoryDescription: | + This experiment allows injecting Chaos Monkey network latency assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. + It can target random pods with a Spring Boot application and allows configuring the assaults to inject latency. It tests the resiliency of the system when some applications are having unexpected faulty behavior. + keywords: + - Spring Boot + platforms: + - GKE + - Konvoy + - Packet(Kubeadm) + - Minikube + - EKS + maturity: alpha + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci diff --git a/charts/spring-boot/spring-boot-memory-stress/engine.yaml b/faults/spring-boot/spring-boot-memory-stress/engine.yaml similarity index 90% rename from charts/spring-boot/spring-boot-memory-stress/engine.yaml rename to faults/spring-boot/spring-boot-memory-stress/engine.yaml index 16da3a5d7..042c2ba25 100644 --- a/charts/spring-boot/spring-boot-memory-stress/engine.yaml +++ b/faults/spring-boot/spring-boot-memory-stress/engine.yaml @@ -1,3 +1,4 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: @@ -5,9 +6,9 @@ metadata: namespace: default spec: appinfo: - appns: 'default' - applabel: 'app=spring-boot' - appkind: 'deployment' + appns: '' + applabel: '' + appkind: '' # It can be active/stop engineState: 'active' chaosServiceAccount: spring-boot-memory-stress-sa @@ -32,4 +33,3 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file diff --git a/faults/spring-boot/spring-boot-memory-stress/fault.yaml b/faults/spring-boot/spring-boot-memory-stress/fault.yaml new file mode 100644 index 000000000..0b1e02fa6 --- /dev/null +++ b/faults/spring-boot/spring-boot-memory-stress/fault.yaml @@ -0,0 +1,93 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + It can target random pods with a Spring Boot application and allows configuring the assaults to inject memory-stress +kind: ChaosExperiment +metadata: + name: spring-boot-memory-stress + labels: + name: spring-boot-memory-stress + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: ci +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "get", "list", "patch", "update"] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get", "list", "create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create", "list", "get", "delete", "deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" + imagePullPolicy: Always + args: + - -c + - ./experiments -name spring-boot-memory-stress + command: + - /bin/bash + env: + # it contains fraction of memory to be stressed(0.70 equals 70%) + # it supports value in range [0.01,0.95] + - name: MEMORY_FILL_FRACTION + value: '0.70' + + # port of the spring boot application + - name: CM_PORT + value: '' + + # it contains number of requests are to be attacked + # n value means nth request will be affected + - name: CM_LEVEL + value: '1' + + # it limits watched packages/classes/methods + - name: CM_WATCHED_CUSTOM_SERVICES + value: '' + + # provide name of watcher + # it supports controller, restController, service, repository, component, webClient + - name: CM_WATCHERS + value: 'restController' + + - name: TOTAL_CHAOS_DURATION + value: '30' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' + + ## Period to wait before and after injection of chaos + - name: RAMP_TIME + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: spring-boot-memory-stress + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: ci diff --git a/faults/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml b/faults/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml new file mode 100644 index 000000000..e5a2cf4a7 --- /dev/null +++ b/faults/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: spring-boot-memory-stress + version: 0.1.0 + annotations: + categories: Spring Boot + vendor: Harness +spec: + displayName: spring-boot-memory-stress + categoryDescription: | + This experiment allows injecting Chaos Monkey memory-stress assaults on Spring Boot applications, which have the [Chaos Monkey for Spring Boot](https://codecentric.github.io/chaos-monkey-spring-boot/) in their classpath. + It can target random pods with a Spring Boot application and allows configuring the assaults to inject memory-stress. It tests the resiliency of the system when some applications are having unexpected faulty behavior. + keywords: + - Spring Boot + platforms: + - GKE + - Konvoy + - Packet(Kubeadm) + - Minikube + - EKS + maturity: alpha + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci diff --git a/faults/spring-boot/spring-boot.chartserviceversion.yaml b/faults/spring-boot/spring-boot.chartserviceversion.yaml new file mode 100644 index 000000000..49109e0eb --- /dev/null +++ b/faults/spring-boot/spring-boot.chartserviceversion.yaml @@ -0,0 +1,44 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: spring-boot + version: 0.1.0 + annotations: + categories: Spring Boot + chartDescription: Injects spring boot chaos +spec: + displayName: Spring Boot + categoryDescription: > + It contains chaos to disrupt state of spring-boot application. + faults: + - name: spring-boot-app-kill + description: It injects app-kill chaos in a spring-boot application. + displayName: "Spring Boot App Kill" + - name: spring-boot-cpu-stress + description: It injects cpu-stress chaos in a spring-boot application. + displayName: "Spring Boot CPU Stress" + - name: spring-boot-memory-stress + description: It injects memory-stress chaos in a spring-boot application. + displayName: "Spring Boot Memory Stress" + - name: spring-boot-latency + description: It injects network-latency chaos in a spring-boot application. + displayName: "Spring Boot Latency" + - name: spring-boot-exceptions + description: It injects exceptions chaos in a spring-boot application. + displayName: "Spring Boot Exceptions" + - name: spring-boot-faults + description: It injects faults in a spring-boot application. + displayName: "Spring Boot Faults" + keywords: + - Kubernetes + - Spring Boot + - K8S + - Pod + minKubeVersion: 1.12.0 + links: + - name: Documentation + url: https://spring.io/projects/spring-boot + icon: + - url: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/spring-boot/icons/spring-boot.png + mediatype: image/png diff --git a/charts/spring-boot/spring-boot.package.yaml b/faults/spring-boot/spring-boot.package.yaml similarity index 95% rename from charts/spring-boot/spring-boot.package.yaml rename to faults/spring-boot/spring-boot.package.yaml index 0347743cb..711988782 100644 --- a/charts/spring-boot/spring-boot.package.yaml +++ b/faults/spring-boot/spring-boot.package.yaml @@ -1,3 +1,4 @@ +--- packageName: spring-boot experiments: - name: spring-boot-app-kill @@ -17,4 +18,4 @@ experiments: desc: "spring-boot-exceptions" - name: spring-boot-faults CSV: spring-boot-faults.chartserviceversion.yaml - desc: "spring-boot-faults" \ No newline at end of file + desc: "spring-boot-faults" diff --git a/charts/vmware/icons/vm-poweroff.png b/faults/vmware/icons/vm-poweroff.png similarity index 100% rename from charts/vmware/icons/vm-poweroff.png rename to faults/vmware/icons/vm-poweroff.png diff --git a/experiments/vmware/vm-poweroff/engine.yaml b/faults/vmware/vm-poweroff/engine.yaml similarity index 66% rename from experiments/vmware/vm-poweroff/engine.yaml rename to faults/vmware/vm-poweroff/engine.yaml index a9fa88a46..974b97c0e 100644 --- a/experiments/vmware/vm-poweroff/engine.yaml +++ b/faults/vmware/vm-poweroff/engine.yaml @@ -1,16 +1,14 @@ +--- apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: - name: vmware-vm-chaos + name: vmware-engine namespace: default spec: - # It can be active/stop engineState: 'active' - #ex. values: ns1:name=percona,ns2:run=nginx - auxiliaryAppInfo: '' - chaosServiceAccount: vm-poweroff-sa + chaosServiceAccount: litmus-admin experiments: - - name: vm-poweroff + - name: vmware-vm-poweroff spec: components: env: @@ -22,6 +20,9 @@ spec: - name: CHAOS_INTERVAL value: '30' - # provide VM MOIDs as comma separated values + # provide VM MOIDs as comma separated values - name: APP_VM_MOIDS value: '' + + - name: SEQUENCE + value: 'parallel' diff --git a/experiments/generic/pod-delete/experiment.yaml b/faults/vmware/vm-poweroff/fault.yaml similarity index 50% rename from experiments/generic/pod-delete/experiment.yaml rename to faults/vmware/vm-poweroff/fault.yaml index 46b91622d..49ab0c9ff 100644 --- a/experiments/generic/pod-delete/experiment.yaml +++ b/faults/vmware/vm-poweroff/fault.yaml @@ -1,15 +1,16 @@ +--- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Deletes a pod belonging to a deployment/statefulset/daemonset + It poweroff the VMware instance for a certain chaos duration. kind: ChaosExperiment metadata: - name: pod-delete + name: vmware-vm-poweroff labels: - name: pod-delete + name: vmware-vm-poweroff app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci spec: definition: scope: Namespaced @@ -17,90 +18,93 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + verbs: ["get", "list"] + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container + verbs: ["get", "list", "watch"] + # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] + verbs: ["list", "get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] - verbs: ["list","get"] + verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] - verbs: ["get","list"] + verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] - verbs: ["list","get"] + verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] + image: "chaosnative/go-runner:ci" imagePullPolicy: Always args: - - -c - - ./experiments -name pod-delete + - -c + - ./experiments -name vm-poweroff command: - - /bin/bash + - /bin/bash env: + - name: TOTAL_CHAOS_DURATION + value: '30' - - name: TOTAL_CHAOS_DURATION - value: '15' + - name: CHAOS_INTERVAL + value: '10' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' + - name: RAMP_TIME + value: '' - - name: FORCE - value: 'true' + - name: VCENTERSERVER + valueFrom: + secretKeyRef: + name: vcenter-secret + key: VCENTERSERVER - - name: CHAOS_INTERVAL - value: '5' + - name: VCENTERUSER + valueFrom: + secretKeyRef: + name: vcenter-secret + key: VCENTERUSER - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' + - name: VCENTERPASS + valueFrom: + secretKeyRef: + name: vcenter-secret + key: VCENTERPASS - - name: LIB - value: 'litmus' + - name: APP_VM_MOIDS + value: '' - - name: TARGET_PODS - value: '' + - name: SEQUENCE + value: 'parallel' - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' + - name: DEFAULT_HEALTH_CHECK + value: 'false' - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - labels: - name: pod-delete + name: vmware-vm-poweroff app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: ci diff --git a/faults/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml b/faults/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml new file mode 100644 index 000000000..fcec5e0b7 --- /dev/null +++ b/faults/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml @@ -0,0 +1,29 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + createdAt: 2022-07-19T10:28:08Z + name: vmware-vm-poweroff + version: 0.1.0 + annotations: + categories: VMWare + vendor: Harness +spec: + displayName: VMware VM Power Off + categoryDescription: | + vm-poweroff fault Power-Offs the target VMs for a certain chaos duration and then bring back to Power-On state. + - This fault helps verify the resiliency of the process/application that are running on the target instance. + keywords: + - VMware + platforms: + - VMware + minKubeVersion: 1.12.0 + labels: + app.kubernetes.io/component: chartserviceversion + app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + icon: + - url: + mediatype: "" diff --git a/faults/vmware/vmware.chartserviceversion.yaml b/faults/vmware/vmware.chartserviceversion.yaml new file mode 100644 index 000000000..85798b2d5 --- /dev/null +++ b/faults/vmware/vmware.chartserviceversion.yaml @@ -0,0 +1,24 @@ +--- +apiVersion: litmuschaos.io/v1alpha1 +kind: ChartServiceVersion +metadata: + name: vmware + version: 0.1.0 + annotations: + categories: VMware + chartDescription: Injects faults on VMware system + executionPlane: "kubernetes" +spec: + displayName: VMware + categoryDescription: > + VMware chaos contains different experiments for VMware platform. It uses VMware apis to carry out the fault logic for different components. + faults: + - name: vm-poweroff + description: It injects power-off chaos on VMware VMs. + displayName: "VMware VM Poweroff" + keywords: + - VMware + minKubeVersion: 1.12.0 + icon: + - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico + mediatype: image/png diff --git a/charts/vmware/vmware.package.yaml b/faults/vmware/vmware.package.yaml similarity index 89% rename from charts/vmware/vmware.package.yaml rename to faults/vmware/vmware.package.yaml index 3fe0e4828..812c39ef7 100644 --- a/charts/vmware/vmware.package.yaml +++ b/faults/vmware/vmware.package.yaml @@ -1,5 +1,6 @@ +--- packageName: vmware -experiments: +faults: - name: vm-poweroff CSV: vm-poweroff.chartserviceversion.yaml desc: "vm-poweroff" diff --git a/scenarios/icons/pod-delete.png b/scenarios/icons/pod-delete.png deleted file mode 100644 index 16aa7b417698ef0d66f130fe9b3218f25fa6f356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di49p>(E{-7;jBn@e_YV#fIeuQ7g^T4ylTJ`q zg1CrpkM->C&R^mk&6B&2oo)RkuFzBEkb1r1%RWh_y3XRYCsm3X9RilQCUiLj z_*vStc(X7GDZIzMgm4+nQtI%y}<9r|`+Y zT%_}SrPbzor*AKk;m%QSYu}ae%Eew*{{7-33+fV9vF>`;r>@7Uq4P-xpGRLliI)saTo`SRHK8kKn4p_?~3b<&(HG;{*eC@e$L}X zE*Q3sZDq9 zZk*-ez2Q}Kg7(t$Q97DiqaGYvFB?@i{rjylw?kLHROqW;xx4ChEoYAqXX=7g^IYE9 zp9q|?qxAEPS5`Ki5->-=g6zuc1CtePYqm?DVD3%ekml44nCeq7bMe~#Iaf}&ElE>3 zCwT3qaq|?LTaUBZuO-fCE7-dw?Do59Pi}ZUTK%PBzUIv~EB^9l_xvs27T*w? zxnRka;K|I5+y4K$CBNg7YtxncIv@47Dqpp|a>;n>Z)QVo>A?G*?_G8H_mr8g+~ucx zp*KQlE$eG&;K1E=TH@^~o2&<(M>yIxz+x8`h%PK?oGhuHEP8?*r&e*)xG89G`#rr< zWZ5E??*3c(wZ*xJp7hZ%i{pII^a|OoU4-B3~ z-23`!wp+ZLfpco7Cezo7?YmB8tbHg`QtG;7j^W%zpTd(|ChAO`Ug^K{nfB+Sa{n01 X?;ErEthk>7%x?^yu6{1-oD!Mk(M|!T@RP@Bv5SJ9uCTWO@Bm=(ZaByu=dElmz}o zTQ^a-Ws%#Sdy3K5Pa3C$xy>Vq^pVCbhaoUQ8n+xYxC^h5#x+f(5kdzLX;~o2R+#bu#Dkl*`|ur7Jhrza9!TQQL#f6p1ubM>IrTyIU!~J4``E zN*xGklT#}+KCw)B7UmR4-M9CC>OSy5;AHwL5aN;-{-X>Zy&}TV+56OXOJ)%8Md0Gn zO&U6DdMd6Ghdw70jA9aPH$t^}gi^J3hqby`=7$a(}p z9&juWC5vd+ErDU6+V5|41``x{z;P0p^srPw(T%efWKYy@ICmZzHtYUOBYElRWm>%| z);snewExd>Tu6WTaYk9$QcK=H^EnzFxl9*-Td)eJZFW zFFmzPznnM8FLuUSEs?cw)P*spr-FLjc6cyN$&tUwPwEMDltj`q*GM)&N*L9!Ef7=h zrYZM)H|X+!?Jm5ybc1AKSKiT=L&;m}bduoOWBt`uRtbGjWz5d)rG;!t}n-Nl`9qYGHc}lo5e$ z#=OyySxTOprPY-ig$>Idwu|En^wE10b^pHYE*uW~y9VFI%av{tMtb^+C&jZ{Y+DJn z_$x4DErF^N;TE-Pf)$je$ecuCl+P6QcW;7Kxj8dWpPs%2c$%Ic%&qzHRu@i}#YBC|dt5vE%JCV4lCKLAUy^mxAi9ycJjs#-W zEEMv$oT)~TB|4swR{3J8jfq}l-A2?)B#s4QS_{+qZZ=AKLC~hS9QQ{oIUZ85g`z~z zy0fbRt>=k|wE(V)AW3v35K;Kz(I}}TC=y+#RAl5HgW=rtl#Yi$r9@$Y7!R=}&F+pWzrd0Mc8$r#yG`a?7h+$FicRKSyTWw*Sj^V0F0b+Y zG6&h+2{kD;X{y4P3vI9f_06{?WoG=l&<0V5vl3JTD)IGFFKZhxN2Hf4dblP8h5TK8 zsaGY~JpTK{RqNbb?b=TsQHS^T~QK2SVwz^Vw~CAIpXkG zMS`${zU_%1`igZyv_L_$KtZ%XL9{?Yv_L^1Fhv@-j6vWSY21>Az#mBCmO-O<*K*v1 zR^L0?87ads_B8Pa+>Q1v(l})RAFM2l`yun;Bx&sOZt0fr8}6mg-FbiyCrDF|lPvG; z(kIp4jG&(i5)-5;#~SL2y>%U<)^`_0;vUlpD!e7eRwPA*GVgnCr;7Pv1OEfjsCZ#C S2e4KE0000 - Pod delete contains chaos to disrupt state of kubernetes resources. Experiments can inject random pod delete failures against specified application. - experiments: - - name: pod-delete - description: "This experiment injects random pod delete failures against specified application." - keywords: - - Kubernetes - - Podtato-head - - Pod - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maintainers: - - name: oumkale - email: oumkale@chaosnative.com - provider: - name: ChaosNative - links: - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - - name: Documentation - url: https://docs.litmuschaos.io/docs/chaoshub/#generic-chaos - icon: - - url: - mediatype: "" diff --git a/scenarios/pod-delete/workflow.yaml b/scenarios/pod-delete/workflow.yaml deleted file mode 100644 index 5d23cfce9..000000000 --- a/scenarios/pod-delete/workflow.yaml +++ /dev/null @@ -1,157 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: argowf-chaos-pod-delete- - namespace: litmus - labels: - subject: "{{workflow.parameters.appNamespace}}_kube-proxy" -spec: - entrypoint: argowf-chaos - serviceAccountName: argo-chaos - securityContext: - runAsUser: 1000 - runAsNonRoot: true - arguments: - parameters: - - name: adminModeNamespace - value: "litmus" - - name: appNamespace - value: "kube-system" - templates: - - name: argowf-chaos - steps: - - - name: install-experiment - template: install-experiment - - - name: run-chaos - template: run-chaos - - - name: revert-chaos - template: revert-chaos - - - name: install-experiment - inputs: - artifacts: - - name: install-experiment - path: /tmp/pod-delete.yaml - raw: - data: | - apiVersion: litmuschaos.io/v1alpha1 - description: - message: | - Deletes a pod belonging to a deployment/statefulset/daemonset - kind: ChaosExperiment - metadata: - name: pod-delete - spec: - definition: - scope: Namespaced - permissions: - - apiGroups: - - "" - - "apps" - - "batch" - - "litmuschaos.io" - resources: - - "deployments" - - "jobs" - - "pods" - - "pods/log" - - "events" - - "configmaps" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-delete - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the kill count - - name: KILL_COUNT - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - labels: - name: pod-delete - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - [ - "kubectl apply -f /tmp/pod-delete.yaml -n {{workflow.parameters.adminModeNamespace}}", - ] - - - name: run-chaos - inputs: - artifacts: - - name: run-chaos - path: /tmp/chaosengine.yaml - raw: - data: | - apiVersion: litmuschaos.io/v1alpha1 - kind: ChaosEngine - metadata: - name: kube-proxy-pod-delete-chaos - namespace: {{workflow.parameters.adminModeNamespace}} - labels: - context: "{{workflow.parameters.appNamespace}}_kube-proxy" - spec: - appinfo: - appns: kube-system - applabel: "k8s-app=kube-proxy" - appkind: daemonset - jobCleanUpPolicy: retain - engineState: 'active' - chaosServiceAccount: litmus-admin - experiments: - - name: pod-delete - spec: - components: - env: - - name: TOTAL_CHAOS_DURATION - value: "60" - - name: CHAOS_INTERVAL - value: "10" - - name: FORCE - value: "false" - container: - image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - - name: revert-chaos - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - [ - "kubectl delete chaosengine kube-proxy-pod-delete-chaos -n {{workflow.parameters.adminModeNamespace}}", - ] diff --git a/scenarios/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml b/scenarios/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml deleted file mode 100644 index fc67c5f43..000000000 --- a/scenarios/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml +++ /dev/null @@ -1,40 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-05-24T10:28:08Z - name: pod-memory-hog - version: 0.1.0 - annotations: - categories: pod-memory-hog - chartDescription: Injects memory chaos on a k8s pod -spec: - displayName: Pod Memory Hog - categoryDescription: > - Pod-Memory-Hog contains chaos to consume memory resouces of specified containers in Kubernetes pods - and revert the chaos - experiments: - - name: pod-memory-hog - description: "Injects memory chaos on a k8s pod" - keywords: - - Kubernetes - - Podtato-head - - Pod - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maintainers: - - name: oumkale - email: oumkale@chaosnative.com - provider: - name: ChaosNative - links: - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - - name: Documentation - url: https://docs.litmuschaos.io/docs/chaoshub/#generic-chaos - icon: - - url: - mediatype: "" diff --git a/scenarios/pod-memory-hog/workflow_cron.yaml b/scenarios/pod-memory-hog/workflow_cron.yaml deleted file mode 100644 index c5655031e..000000000 --- a/scenarios/pod-memory-hog/workflow_cron.yaml +++ /dev/null @@ -1,158 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: CronWorkflow -metadata: - name: argo-chaos-pod-memory-cron-wf - namespace: litmus - labels: - subject: "{{workflow.parameters.appNamespace}}_kube-proxy" -spec: - schedule: "0 * * * *" - concurrencyPolicy: "Forbid" - startingDeadlineSeconds: 0 - workflowSpec: - entrypoint: argowf-chaos - serviceAccountName: argo-chaos - securityContext: - runAsUser: 1000 - runAsNonRoot: true - arguments: - parameters: - - name: adminModeNamespace - value: "litmus" - - name: appNamespace - value: "kube-system" - templates: - - name: argowf-chaos - steps: - - - name: install-experiment - template: install-experiment - - - name: run-chaos - template: run-chaos - - - name: revert-chaos - template: revert-chaos - - - name: install-experiment - inputs: - artifacts: - - name: install-experiment - path: /tmp/pod-memory-hog.yaml - raw: - data: | - apiVersion: litmuschaos.io/v1alpha1 - description: - message: | - Injects memory consumption on pods belonging to an app deployment - kind: ChaosExperiment - metadata: - name: pod-memory-hog - spec: - definition: - scope: Namespaced - permissions: - - apiGroups: - - "" - - "batch" - - "litmuschaos.io" - resources: - - "jobs" - - "pods" - - "pods/log" - - "events" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "list" - - "get" - - "patch" - - "update" - - "delete" - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name pod-memory-hog - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '10' - - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: TARGET_POD - value: '' - - labels: - name: pod-memory-hog - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - [ - "kubectl apply -f /tmp/pod-memory-hog.yaml -n {{workflow.parameters.adminModeNamespace}}", - ] - - - name: run-chaos - inputs: - artifacts: - - name: run-chaos - path: /tmp/chaosengine.yaml - raw: - data: | - apiVersion: litmuschaos.io/v1alpha1 - kind: ChaosEngine - metadata: - name: kube-proxy-pod-memory-hog-chaos - namespace: {{workflow.parameters.adminModeNamespace}} - labels: - context: "{{workflow.parameters.appNamespace}}_kube-proxy" - spec: - appinfo: - appns: kube-system - applabel: "k8s-app=kube-proxy" - appkind: daemonset - jobCleanUpPolicy: retain - engineState: 'active' - chaosServiceAccount: litmus-admin - experiments: - - name: pod-memory-hog - spec: - components: - env: - - name: TARGET_CONTAINER - value: 'kube-proxy' - - - name: MEMORY_CONSUMPTION - value: '500' - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - - name: CHAOS_KILL_COMMAND - value: "kill -9 $(ps afx | grep \"[dd] if /dev/zero\" | awk '{print $1}' | tr '\n' ' ')" - container: - image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - - name: revert-chaos - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - [ - "kubectl delete chaosengine kube-proxy-pod-memory-hog-chaos -n {{workflow.parameters.adminModeNamespace}}", - ] diff --git a/scenarios/podtato-head/podtato-head.chartserviceversion.yaml b/scenarios/podtato-head/podtato-head.chartserviceversion.yaml deleted file mode 100644 index bc4c726fd..000000000 --- a/scenarios/podtato-head/podtato-head.chartserviceversion.yaml +++ /dev/null @@ -1,40 +0,0 @@ -apiVersion: litmuchaos.io/v1alpha1 -kind: ChartServiceVersion -metadata: - createdAt: 2021-05-24T10:28:08Z - name: podtato-head - version: 0.1.0 - annotations: - categories: podtato-head - chartDescription: Injects chaos on podtato-head application -spec: - displayName: Podtato-head Chaos - categoryDescription: > - It install podtato-head application, inject chaos on podtato-head, uninstall the application - and revert the chaos - experiments: - - name: pod-delete - description: "Deletes a k8s pod" - keywords: - - Kubernetes - - Podtato-head - - Pod - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maintainers: - - name: oumkale - email: oumkale@chaosnative.com - provider: - name: ChaosNative - links: - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - - name: Documentation - url: https://docs.litmuschaos.io/docs/chaoshub/#generic-chaos - icon: - - url: - mediatype: "" diff --git a/workflows/icons/bank-of-anthos.png b/workflows/icons/bank-of-anthos.png deleted file mode 100644 index ba9028d7d373d2da38927da15c885307c9a52f17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7870 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 diff --git a/workflows/icons/podtato-head.png b/workflows/icons/podtato-head.png deleted file mode 100644 index 59e9f28f98a614b9c1df274987acedf2ae435df6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162950 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®5>!rwri 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

jP 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®5>!rwri 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

jP zqn);X3q!_3Z)AaD4;5q^Mw4Gr+8JVrc$z^dLSWtFehi8!1Ab7yucY({{<$y(HB7$z$TSzB(FGvuGX$EQ^Pfabl9=>;A_tCxW2i2tdbmge`@3g+-*LN z538*9H2dD{H_8sm^+9oi!R^@mX9V>8DX|;yHYu3W?sYUmdOLXw11qV7SMh+8-ZZfRS}5+5c-?5 zOF8p>=5)#*6#QE^%Rf-=YOnkLNUya+U8ta}L_$wc`!m*9*ZpumGz6NO;8)_4w_jW$ z6T<3RIlppFt89c-g>-V1w1rO5(+bDXWHoRXqq@{{dEBa*FW5w zLpy7eNJlN^2HTyWjS`g9aG^Oc-s7arKZ-S~*hv&WPeI4i%hXRFSP5WKyqn(}2%5`P z@iBPaZ}g`SPAQ!Cmmnth!E>|o8rQdc)VY<UO!6KeWhgQJ@+vbXwVt&+E!0HL4LZ&Bo?Ydv8u-oj@ zut5n%7oeB{{E@QYwaC8*R*4Kt74TIZ8~<-Dz_6`%2lCDxq0E$y2X*4$XYq3Q^%PTP z3Gw0 zQ}ErUu$IHPuzVQ&z4&__RjQ0nQ`{ydcM;0*n>zSDEeRzsjlG-;(kn1?f<3`z;wD%q zjJw~vRK9a10=PRz$Ixh;PlHA*R0OL-C|p#YSbn}l$CW4^Gar(V=P*}7W?|ADWTtI} zAuxvN>a0}V4bTjfDIm9C_}vvlK5{iMhH~M%Nu%}-XpL;yIbFvfn@W%)3#@Qs#v?^OyP^&}8HcYDO;@GHw4t9&EZErl z(9)ioo~B>lTM?M0mf<(Z&-0-1)J4T!as}1bM5A zBHN>3QMxQkm4&A2hZ&uJ>gRbYCxqFy~PxknZiLkAR_lEzw^n`rMAMlun(pln|0AKrCf9l ziCR#U9#1bcMFbWl;Z8 zxj_TodjH~vF57qr`hIL*#cgUC|OJjW_upTN3bZ1;=6Wtp@HcQ)nAm)AyRT96wB zAvtbh7!pDGYKwyD(}imycz-|3vVSGA00(_uAdM!!o)q$xj>Wo<@*g)1pei4$u7okf z#5Hg6s^yV?RzV;8kEd~ zW*i-~Qi&Hgg+22woZZKwJ_jG^8a~K!&JFdU!|;bD3F=gulzU>wMOM8!-#N@IIuM&> zH;MwgE$X4{a_a1%rMt_XmiFaK7O*h5*reYf7V~6q079)i?1(-1n0U;JZWU1Rxs%Qk z#9iY9h5Ni8qj5D9A+3|1ep}(0Zi+Y@5%P*pUf!%F$!lytuzSD@3P_!7wtOlls143U zPdI?f7fKuY4YKkQrI9YPml8_$^?0h44$}TebwJ>5(}GCV(a>t21#Q{MWJT%*z{dpju#ItV1GtG6wiCI{ zxKN@~MSyQUvX3dLW@ws$ z2D0Yiyz<9Hh|u|koe)ZP%BDC6Zxy?<3-9r)ot;s*oYeN^%_JP7wimwhvdB}S7+G>s z8dh(a%JnJjChfqos&MsAzhs$;dW~{#2ZXc%)3)233)U+>uURch9d2>cW-H-)VSXMyZv-EJx;NdYDJ>vYSmjWow_oST=~T> zsG1o9)(2AeP$=I^t8&`_Oa`pM3+2rInOInUAI4cO^sRcD`Pe__CV_p_7of?!0MVe+ zpIBX zZl?SZ)e@qwpw%qDvdTfcl8```2Z4>z-lHV6IT%H)12~+%tkpW+hVO`+oAfY+idaAZ z%g=NbYIZIDcxl!PCjS&Fk^aM^EPdWgtQ5qCRP0?B$yw8Dq_fNp+kGSIZvEUeJWuS7 z>x%#|=16HBKf}f)rzvgr+}8Ix+Gq=QdUwv&YfeiF%3W{>c5A0ajjf`^tGxHHF2NB( zu|*L*Ka!^uX;I&-KdJ38{h7^c)tIh9>J}S^Cn8>6@`HP$TD36ZAK$kPXB~lf{vV+? z@8c~1CNC(nmD`O?(RUkO)Q;_?oacz>A*3G} zhgqCEE0aGq8^DAE6rLY+Or^FD8Z$1unP=2bD*cEfX-MGUAu74;WnMd(`le=H%o~?f zO3T=2>(&(lxsgvlNF4)s#DLLBg8HK*oC7t! zN0+230=P=B_r`xZmMh0}9g8s*YOGO%c90RCD7qGcKem>a@)1VD?gpccy8!jTv?E|rCXnB~kSR9r>YCyyG$h?BKMG*du&(|z- zh8K9jYcO2c3J4uD(kV=9G8f_dN zRw)+MCipWb*&sTZ!FtHUanK{pKqj|<^$7H>?3BD5AUFf}uZgYpRcqW(+8H~J-q@S7 zkn@$fHESt3rVU{Gpl~Vp^<{-3Zz|<8HAks98QL@bnWZ;&m)Huo!8?<=FbBP=t_cz1 z)~RPdDV~23M4AHXSa+Y!IH?+C!)L2;%frW>Wm+v;$1gre6#jL!j#;qsFo&R4Mk&p1 zMOKeP%Alrh#OG_q4O^9))17R5rN2xCwbt8(_d&ZNVHK@3M#pZ%#3rB49yu;^?n}fz zMge}HV|ppTf=3fMW#*AKN&Ea7SHELb@5GZ*E~o{5G`f^sbNkwY2%yohW|0YkTmB7i zU4Su|o_}GnhY<0Ni=zG1mOlMg-@5(BMCGc7f!F1L7-79Y8?N!I!ha(Swx^NT7_Svl zCZO{4YwQ^06`~hnNP=Mk$C7?9iR^RtDZuV|V6o~)!@J2MEJAm1_k~QsGXoN!q2Rzm zNHEtlW!vN}1zqad%%7Rs6P3u8(Jpf5 z_*K?%E1pjvT4m8XgSk>`QCAH;epEgaF{DYPUX_$m;Bp0d!MpSGu9Lf<+k%o)TK3LM zEJ#GiK)bJenF+XPd;>EYb9C*LrTF+(kb-V3d=-Ety{UvuPOL;z`>SeKAt{lJuoecm1 z0Hno)RoCr~Cy$Kh&h|n0w_O0~`^5_~F*5eN#mYALd&Og?;p;V0lld2NTg(8K#`n~WK(td=g>+Mt4#ZOOq2Ck)-`etPp1uM`DEu6%aoR{c?9`6j zC4pd)`82L==QU%vC$c9FR|I~?BS?wNC``LiH$FlW(@t6mzA&XZlqSb~Kd_2!R#3iW zhs^AFk}HIQiZ|)=6k%I6!XiFvNfET81{<^_t}Q-g>&4k*v}b9fnUf^aW6%8XSYxk+ z@$FVG)8@8`_Ha$d6t^P4DO#^sBvYp=Od#{xqQ2Z2>BJM&Zu_y`1~|imDx8kXJu-xB z-b!s$k2inrkWMzFg(^yuFhb65Rn#8z*T?!Xds;5H`3|PflVPR?axSfaA6bbH-d;H; zSp67rs{z-TZsoN1^|-mx{p6ay5W>B!y^&=}?#kAd&-rWO2{A_>r%brW zPB8z&@Rj3#%l!%YRVCm&U`n^w<0@gJvQ;2?TEYCp9Ai8zi!{-6)ZN|P*32#Di*pL; z!Bx!3U}~pb7l(cwo0GgaUJ(6zH=1JT-R4fYDSLkU1&*tH5@_L}8#7$R`*OG~f-EfhxRpHafKK4jzNgZO})N=v!4Ym=n26@XQN0 zJGe{%U=^9Y{qHbszX!t%4!7aSsQ&VZQpj{8e&XongVAs0C-VUk{ks4-R7V7;Hz+CmqN8QszGo>$6#7`X*|ZHEJFM zF+D$#$FZQS-xwvuc6Wbd8oCx3fD^_+K7zV@mlH}l0QbeXcRwE@`T8Mwb+}N-|2}5M zEBsx!v1L|?VxGFHcjavSDJ|W$NZt0EB1OT)WGRSQEgB(dEZjW^Z?-6oag9=tb@1>G z&#=x)XCt}M1M%|s>Vq|2$iHI`4a;Wodc(Pi4{$%&9x7I- zs&(j0fY_mTjR?fJ%5)JJi4-=o$P48>ms(hu_Swyppy}2P6dYQp=hh@b%@wLuYXl4$ z$9gDaH0}XrDF`?=>cw_h6R88zVZdS*$U!AIZ27f{B9ucAw7d$gg^gh?9Wgqj6LX(* zI%6Yj4YZg-=PEMY31YM~sI|SP!mi#d0nJVXP0ZxYdN~zfg!TIN(BWNo3hT2KRr2p9 znPOLBC2$3Nd0%LLGVGxF`s`sB=}vIb^h5rK4KJM$*SjA_hdR@C-teu}#S4r)E;m0J zm7#Vq&l-tx-3yvgOB)a(irFH+n%y>geAH1ZJq1idOW68ipVAMqbBLTm7My5;v)-1d zHwVH97`hwBHOJKC#AnhByK7vN3k%*$455MHtoC_IxKPq((@ef~-cTBcDhWPb$N z@E>q{$CeDHr~Kagr^x;5Yd|EMK5+wKN_Nk%c@D3~#CD5QEzM*?bpZ!;T2aXXqX1j_ z@+H#PPXWp=j4%IHswj03c13lDaP%UKME#%t?x7!6i(v^1DTMdQCN~t@Q>gLbf5ICZ z;e86Hh{l}R^u5Bb32eCrkLn1?b;7~OrQFiLYba1W;&^S_U?3>6y+UZ`bq9DS6hHnm zi2I~gm5bv?=T5XPKsUfDQFjb4?f|j=h9>y=5IakGvS4E8(||T)*CeqqyzA!){}9vD z-T&K!zceDziR$Nsry$7c71Hgxabvz8%gF3^Dk?!i4Tf3;g9HKGF!s-E;Y4-+o)QOc zTk$%X!$>&HEL<`@gqw(3((NJ`8JLybG#25Lw+JosmIp%&rw0omtt3c?>)F;u!eUV@ zcGi?{*6g@rG+%q8mh@vHZHyf2aMg@(*;!nI-2|{Tw=_Q`vJK^{|QQ6qa_!fa^daG%lpqyg|%UqvMV+(S8Ab=%cT%{x+!f2 z#4%xWR1Hj;;}_;BXqx)-oBH$)rr$i|7!F8>151@0Me#(&08&8BqouGO1VETZQAD{; z*kLez-VH7Y0+LpoiaE-pdc6)&;De4qT?(?pw#v?a!~Sk8vI(VH6syX?cKv;&rMlK` zef`~!c0gUi3Mys7+1K(^kCY0sLB^w|xZx(A7(^yZzaLf(2}RxNp|-`91ft14l$=y# zWckno0g%e(9gJjYe9G5A>uyMRVZV`an63vGqw{}wI>+|R!fjc$7wv&!++h)hM zZQHhO+qP{d9s6YMv##|E=C}EbQKRlE+}A`NN%pl`s|P=(ty~}LahVYrQKgq)@Lg=4%<4+mcHj-<-mmeVn23HpGPI1&?x_($nCGUMONWhI|ry=}v;PLJJJ6~D7?gO^$3B+DtEHipI>%gXa5>mIldEqXaOs&QuX zKw0mXQmzhy?UNx*kX7o|?9^w+6PTdgdT=U0?v@ z?Hx2%AtmjSZ`hqSx2TCeTX{=4Ooa;x(E=-`uvsDhel1X_@oqcxB-E`HAwS)=H9XCZ zDLUh-*l?w^EI8b=NV_DV2~zA*>?=i89-IeVT2nep0UpQ+X8*QI2IH(w0z-r;e#!Hh zmq@Dn-VDtf7%m|SMVp~yh3D)QSN?$_k12!Io17?9_ zl-opct##Z(c}BxmkvN)`PG~|g4wf;lR^~y7@)iqDDmBBdlhHt_ysdvH&BGwt6$FkIFui%dy)-L_v9yXoao=S$75)bJK*@LS+bEojkjl3^U=T7%lT--e5NgT&@pV#im9Y(w@d7eFdm&KNZojl$O;6|D^7gSOdDb>D7tcBKulp*k!QvoP&0YwenzsV_;KLxaGgAH8q`?N zp5|*U@^>$MwHOl3a2Cmur)x8C44>~Zvv@t`v)euAXlbT4ggD4gBup()H4a_5;35m9 zh)khH5r*AW5;JFjb3V7UnkZNk8ByEXOaa>>lB-4Uq8NGgI7{y#o{W$B)D{N5uYXrC zK@yMc4L7wi4V=}781uCmY9sR)!HW0?{d?Fr(!cCXKj^l)9lAV^AHZ0N|A!TOH$?Sb z)O0%AUu|#gI2c$TUtUg1orm~5-_#Y6l;bOzlGY<9iU3jhLV~?YPGskPXo~(RR;c8V zf_yQ%8vC2NLqJBU6e~f(cny#&-!H{NF|_;TAEbYTFD-D|Qq(4iI4g=6GH>Z`4$Jpz zN)DoS=`PB3DXVYrAA22snw(NSxv#v&6av8M;8ng*NZn(9-tE1&0Uii2L$tP5d$Cfp zc05dbBqv-b{)p0C)m4wAt!0oT1!TP7hp6b~mlQgeuor)gZZ-9a!Jglkl3*PUOuj_* znl0EEA7S8mxym{|@kHah-x9|8F7`0X6E$`~r1Wf%CJvmxBooz?_$^ZJ+sZ&GXEL)& zb}s3B4p(36G4Yh(u~Q#)3>SrTt^y<2dW-V{{+(%;%EAxhWV6sSlxj|61(0xQRvlf~ zYMKjxl2mxAQnd4YnIG_mqs)Z&%I1nMZ9u18M-&o?0*8UE!7$G{`ZLZ{W?m?j0KD;r z1W>uoZI57}UAf+F>S(!HonOV_=#4zNRWWb%l`H~AdaVq^OynPCKrf8 zgdm5K^Ba6_1&;DU$pWd&pGxNnX7szp9ttss2~zaEUHy)S(SgCKb6@T)B*?u%XGE`c zmf!9uhTkl-kSwojWby%)nVq&1AWIrT4&;&KMR$CfUCPTC(>(2^JZB((h2z`R)I&Iy zyrV+&t^vThvLrj-KEpgbstc7-&@02-u7C|Dq4?wvO2xR@Y+$(w?UY`xN!uqR1DUnt z?SU=lUzQHOi0_bD8Aj}sl$(pk3k1l-@C)Rp_T)y0#$M5~+R9!t41xTJ6eVfkpD8^D3H)ancV-4fbk_>|%22qoXnxzO&H9lUDmOK71Mbq%qh}uj zg3j_EmCMCrIPOEnuyYJ^bQu@Q9S#-~);hY)@6W1M@Y1?;Odz3)(}@|sRhXh;*(Ju* zEp)W-T2FiP$AEPRU}+()fi@nE}I$b&^q zzBE-5rRDKbf92q27!x!-ipf1rUOsVwNS*5`b+StvV3k3){_f-?Fp?s$Ni42v&U? zv@{SnoKh0Gsy#j?zzCIXmfr7+23Xbv!=L5bEi9LPSY2MNy^F}oRbjQ*iRD>?S8*N+ zhs?xE++n3EO+VS9lnh%vPmzL;Uo?kz-%6(r{jT$iB|oo@*UypxNyKLJYl1Vsy0>qV z7z8xAXU%kk7A zm9do^fOka>b-;Fyr7QUzh7H#$mu|X|NJ7?9J6Opx`^D?bL~ko`zOW=V?H_M3WwMI9CDjn44%O!Gu* zW*(L}*IKxPYcLvzUCLl8!l^kH@uBt!9vk?>{JuAnX%0_6knVc_e!MK{+?)68-C!E) z5em2+gQX@{kGQ(8y#oa`6DUFzr2>Go7RFRld&kh8qdw}&%hdMNaeSg(-}&Vkt-6f6 z5%H+Nt2-pi=dd{>#Jtk4=u#^ztc*fOWU_pf$M$=i*!K$!#%S|8uHE|@hntvgaxH94 zfHEocqgRaX=@&M(X3^T(S+6|f|L&vGjKBzXWFy1#Iq5i5T5NSpRtcfsF3r~)!=%_Z zpY==doX)O%zT$1>9e>xB|89eDEfJ6}`snn^!9r`WX)bLMihyb)W#5RN$4mt4t}~St z8H76{ngOxNlUkG@XJO`kD`e6ZDO|<+M|NQo~!X6p#N^#RPXbbs9aSKRL|= zFs_YvmlZJKy04u`Uo^;yqMWcz1e}E-s|Y!i!0f&M{rWAYP^4$gtEW8p>p(Zq6zLb0`YM3h{3^;`W|)kWK`FU1Un0LT2&ZHGmh#yg$Ea~G zf(l&?tIXTQ_!%k@@MOPMI-wqp^oLjGep^zB1WyfR@@Jnd7$b)zBWIh(pdYk`oKM{H z%aj@)1>)<&nv!G5+|OTv+89oEK+QY$l0V2qFp`&eC>MGF)ZIb21jrP*6w8%BgL6u> zz`N5doJ-T}>mj}GO%s@XqR2qyqKL_h6-ThY>)?EL4S-4KBvyam`wVLG%RSB`pLDc%Z)B9krF1t`fZRaz+Y242y z>o1C!>aJW2b>WmBJll$IA-7|aFk9L=fG8YzqHV?6o5|(mq}i%-1;oyBZ!Ct0e+V zTsEeLc}9+Cyif@a#fSy%%KxX9ltZ7u0Fdu%wm8JsZQRx^d&NZoRuMR{!i_PoQYK+k z>KxS%OsWrIQetA|?cHa5tVVV^$n-}Pk`ZR*@C5^w(sm_$b~c`Hb-$isxwEuA9+cyg zjW;qumyLmxXd-b*jf^%sr!L|m;nv=fLQA6 z7}p?5iriwh+|z(3!5!+EM2ld#h>eX;B#LFYk26t|3IWbWPr$8^!wS#*YU6A>ljcbY z365~sok`@B0sr@~SfvRH;ng8-R^PJ36LVEdr)btem@6?%$nFKZ;SevFfDsHLO!R1% z6kP7`r=G)tj>nl1pCLv8u`fD!jIm+zD5)hdg`#6RH2Q^i4V=7!(sbU#B?2jczb*`^ zU}zCp%~dEO$6z1uOd^&0J98R%60e2tOT5}DHlosB$|=d$-eup5uZDpcBpJVjF*vPdx$h#mKTZXm z(eRns#Y0J0-L=k62PZ;-VCR~MPGx|9kt2+{Hm2&0UkVg)%D+AxSD`lI3VS?8sYV4K zsqo*p0Q6{Z?T9KIC-10QnZ#D1_B{m5SuSb(1OL6?Ds_CT`KlkI(vjJMNHkLk5>v8JhDYel5^6|D0=FKVGF-HllaO4L znE^9a>Up6c4q3S4vrN$()8Kb+t>fzq7|2&@?zwl5Z z)PW<23?z$;VxRflyX+)Veg*Q<#ebuNOjZdrRqIo(RwX=b(LLhQ4Z#IpR$1c#dqa(9 z(U(J2E1W@r9cvwsEr5~<%k2084gUEA{rZUP`V`Z%zs2p>dSMn`JOxL67meN_hgm+z zd{E3>WbcnWajSvkwJFtv?C&M7Mq`Ne*sNt8`|tqr8u3z?t?7OH4UC|PV;Hbv6}wTQ z$#b6O-Y3oF+6e~wDw1L+Cy8%@Pr`JB!4(+)oVIV^^Hx`KY1fV0_JNT6_~-IeBw!1> zx{TCKQXb6apc@isdtD0GoOqkGxk$@g&w_5FqGqf2?6G)DyIVNynWt!zXk%^5jw7=Z z*M_xlzGGNyO+>r5wj30TafRd!6vdQ6YmNd?IwlTvKQiom`^xmXBwq5IbHS!BWz=tG zi_E&xURYeykkHAiYsU3D5O*zVOC6 z=s>G~$z@y!-P+}(g9vy6Fx3TcLKVW3pBskwg}A zhl9g_b<6dJ#1$6YHmnJ&=qc7b48NbAkeOMR;)SZgy#J#rDmzbyOKE=&%su<;Sy|6D z_|YzO-m)g_a8sknpIBi$?z>j*_LtZq&RNC~40C$5V}{scdSV_4)mq&2o-o~% z$LVS-#WG63_IfOaJ!c1yJcrP9)M!{?WGsEss)nBN9Ns)bVRZ7ht$Dmyvl*ZDxUq3D z{vYxak%~q~Zozudk!tOLGOj@|So`RDoeB<>ke9iWSO|V=vm&?48%5=fEutG+m}eJ% z=9+A4XAX*Kbw8liZ#=iPPYCWSZV2Bc2@;WX*KxlzTIrs6V&MY(=nGO=E3Of1f|YK*RYPtvHh#Yab%f}YvZ!CTDG`x_U&aUlw>*|RUIt3Z8K)Qob3kuZ zCFTLOQ{s8_7#h(4UpnSRu&A=^92<|Rq~&%$?pr)j>Aq32%TdXlC6c!8KB69}4LM7Y zhw+T18`Ji)R$aalz9yov}Eb7ghi&IxV@y}yJ^O@HlIALF+9F3PR z#^kTm9OZO+?rp+nYNc=L=;(AcH8$R|2z$l(citJZc|AkHG(_)|g z8HiFfbVefL%1VprYjJzhgN^CKUkN!6De3HTesi>>2ziI{i(?dgoLEE<8NyNpu!}>! zjIU|gf74CWax1VJ9botjr@HX3c~X3SgU-`ybV*69KkWB)SBJBY+tTszaV(UPm1p{` zk8e^k+01tec-W)rk%_Xy78k)jh#p!@)LMTgp<*aX#_9Ss+@&s!kw*of**3czhuzm4 zEIfjB(jvN4w^K+9FiDFqx5R>nqz??FhnMbMm;s{E?m+QRgoNSjIBxz*UMG9zr^qLa zL~=ofHj-LWLlAD5IS$MnCPz|cP33RSxZY@UyHbNK!ibt=$7oGpzE{yxc)rHC`!6Gj zQHjo342pu=QaUp1yfGjPatl{2Vkwmkj3LF%*UA87!~}6S)+T<|l+#;77CX zfg~$zYjgz%uDDT~Rp4;OfSI@sD+2TYH_>w!E^l{+wf);QYE$#BB^ zE~VS_d*9@nhJ&}CM_f=gZUS9=A-P)dA$A<{YD=%x%RnL2VU|jb6+DNZQ8LWbO8^>U z5#NPEkD;gn64!6T0$>c0Bg+de$eD`bK;9)Dd5>qW819^GAK+s3`Zc^b^ZiltF)h)i z^z~4Z{Vv+M`!AqPIQW0DU*9i~A2U9WbVaHxEO>2BH`{ov-UsUxPBW!SN=^NPas0u9 zBC6PiTz)(d7H5hllv7ST5YSAeK)@V~bibcgfX&L5vRDo1Zv^@>*JXaiGQ4(czLjEAC*6;(+-Y)}~98Ss zVUX1V{#4X9`xt!bb4nis352dQ6$|U?x?O7-5A!f1*Ks?Zr`c~0mt)xVVw-EOBS=d0 zI%AZj5-V`?q>Rr>>qD$2L0aakEgEN_#3P+VCzEDeB&L*%P{#;KUmM0G4p?=zafP7O zp0Y<-NgVzL6dULX1R95w3Q!KH>d95_(XfC&#fl+$A6E&vQ^@$3JD5;0{t0Wn)%O0e zBHZrk*(5&w#Y{s7ogd5;r&R}FMDEt&gSO&!&Ox(zPL>zxLLLZ?h?HQq$k*Ym#V^>k#0)l zyHSzZMOKWi!C-F-vNf6SFrCp%dA@5N-^PhLVzhA)t3GVtcYe;9Mdfrhn_x ziL=~V{YPXWFOI{#5IZsr)arzNC;NWLsW(RQ`u-(bH># zJeYf@*qd^>6SQ3k>b-q~QJKv2CefUrbm)xH;J*qrQUu} zi(;c0mggPHC z+;778az`pxq~2B6Hh`~(4x24CEnk65cE(Q`{>SW}Ee5DmtAEu_qsrJdib$r^0Hy-a z7jNq52u25D(7jFWuz3mn;-V?OyPd&iy2IixFLc@2EA5~2diTgX!}m?!dIo`C8}{jA zYyfTU)z9-V+2GqFyKV^2dkL(wBj`k#YSOxw)Nz7``2x{eX%A90Yx!|O*R9ubv(@19 zCY$YIqKr)0IUu}ELf$|V3||l>0YV^wGL8h3{sJ1epl^+^CARKc271+@RC4yt9&WGC z{(>BVc_~4Hb6s-!@*I$(pS|a_s4L&2NW$g8#d#$UK{V?J>tA6Zh0DR8j*skXCIB)- z9eiC?o%KGi+Wo3)Wqp&}b2mSw>vdh`u!#OY1J2DSq@|5bj*hnWH^|D4+Na!WDO0u( z+TkNCpJ;}2j@YL^BN4t-#w)I=AhxMhG{m}D5>7yPm>Q=af|C!HlET{(K@9snewVIb zAgFrt&FJKc#sP;VCX&C-Kj2Jjwml4uO4OETmed3WL?llf!z<-(YgGKxz0XFy-y|^Y zppYNytTyYaJ$LMm{sm7Din43Zp67~BoA24e7Cih%rkUsSwADKGkZBVX7@CpHiWW^8 z{V94&i;ahaIEb`!BpIVQjh^n&E7N_+Rrebq!6t(&8XHPe4{HxW!b)Od40Hx_i*}$V zwhD~o!;RFx2`zUaM|6UcI_w+ui;~j2)ODL?Pl;HV8AKtSw@E4BV-PS4$k`qBoEg3Q zlj{%IJj+;;%bb(K4*j&&6Z`^l&6QgQ8_bD|&=%Z_?+Y5?^%IGfUufPSY^E(&mAsb? z*d!=K<_*JPQ8ZV5A65zGgiHvFn`#Hit{j#1h@)2u zxVIliJjManN#SJy^LwDQTK0O7w8=Vf$yP{zhRhx;kqFJO?SwPZs3hcl!uIu%k+n_08pj0l6m<=#nbQ<)g*oUuM#i;A3oY?;Mb_kEjooP-l1Q@I{-&{7@I zS=t2|yaVih8v%>!PtK{0JZT0h@t#|q52{`hMk^x-cqbaKHHu*AhqN>)lc@8EikTBN z)HS>-5#zpg{kl(huGZ>sc+86^332ar@hZpY?)$$*wTBhh=OgC3F6e^Q=F`LiTQkRU z1^b?1R)@MM5&V$DQ5?xvj4~WXp+MU74tE&A=>l@Oq8BFrpJ68Z%=>cqg&ZyQeR((d zaP&bi2N1OK)Wb`ZKKi-zE=e}7tX@pWNLPzAq2rdaCv7v75WwjYONI-~V19cEqaJQhSjiu_bX<7BOZFmt{u* zEPGnCLZsqe>y0c@5o_jsTz9gTbzGeL$uF(-7)tr!ay6>PK^+D;I@;R9-Z4#B*L%tk z*dv%IaQCPf7=l^oEtI3%purI$Fb=0dH3o<+ZISm4Eo@eNvVkwikr82pGKuyq+X1+} z2i#!3qDc~+3T0Bc7O|x>7LRYM$fmQ&kjaxk#>9i0{jVJYAV-3xs&Y9HI&hgKBO|A+ z&et^VT9Mcww7n}z(@0Rq_EYBuDF@=Go17t#pEw<1(JA^PZ5YS>;+$Z&oLRXcw2ros z5k%0fX7+nRc2Ff$@*87mTSvej<6?6lNPp*EvbO+@i z5!U!$N@W@VxtausUY^g@cj^S?McD{i!U-uRL$~PMiGBh}h<-mQ9vWdzaS&&cK!c3?u&G^sw3|~1 zLJrJnc#p0nI-8Gv+12tF6+vUS*!x(2OP&a$N)^rVMUXcpmWk3% z>V}ZsG8zs-&PpD1Rv8>e4#Hcy%UiGEkjzRpH%Rzz8&6+v)2RRGEWw2Ri^;u3^5Y{x z@A_OC)cL|r%l+C6`Obvq<-Uwk@g<2&Q2?eh$Zw}tX32jYS88L^zY$FSz(Fyo*BT?y zkJRb4G(izAY_qO670{Dx9cMT3TRxkOxQjK_L8~vud&`1GXwB3TKyS$;e8`(*l`9PI z^sXXf>(>2DL~vQkrJC*D^J*;$4TUL|QF#!5Gy9;SI$<~&9`dq{#;t@G@ z&f*>?iSEeds9e&1VbWGW7HE*P6%%=LwZ3j5d3(Qj%hz2c{S`cCkK=lsh8E|_AGln% z;}7#m@CoK2ElVi)%@HSvw;jfgB9 z!UZ{Ava|B_byD2G_fCxB&NIHGwJ-P^Op?=QA8d(s#6#q|AH_p`!3?oWvsRbZ;^sy7 zMN%E{FfWp?DM_zMJzHWLGMO_H&;vz}QY`yIq%>#QgbEr_XB!1_A8vEm3QX;A{ z@LnrGRRDR~3l*3J&=BdwQBEVSRciaHKw7oJ{6YnO;UpAq6d<2ev&RAA7Y*YdjC{6# zw(QAe!Wj-koWD;U>F5le^dThe>?@_@@yrIl;z{zXm?>_>(%`sj4`&x-9Q0@e@aujJ z)2(}(B^`KePABkl%AksNg%mh$%DFTkRO_mMF3Zjq;dJ`u;|%|Lgq%j{XYpY%F>#^Q zxQ9#g;cS^Dx;792#Sa1+#qk)-fKycN=davEs9MmMN_~T|?w8}K0#1ERHH`DO;tTB* z*L$#ZSlV962Z5GGivKOK*eQjmmXQi-qCD?h$1a#{)BhMqf|hYLirej%Ym|8#Ffons zC&;43i0|k{eZSIQ#;d2(WR2~llo6Kihz+O$(bt-VbND3Z_TJXFQDRH9F&jEW3<+UC zyfflSt}VuH{2EFuzF(n4PaY{9g)wEL6T3V6Jk8AP(M`!trCi^H=v+$ zOne;>eiM7INZ3MdJ2skg)nvZ{%9gk8k{8@YAv8nzHiXI3#H_g1V)GI^$H%&92Ov-I zm&k?-^ydtG-t7nV6Jl@(9n#n}=8%28CNO-}bUewB*!88>CRt%vvcOr;GR;N21AW*IMrSegpz&aCV;-t{)_?2qqj*cQtETM3s zU}7KPuxUo_+$Cxr2}ivNBhRN5$yE#-HRDtl0UYD;p7}dHVBnU)Sidn_eV930w)Pzu zrCyTO4h71QLfy$_&w~NWj4nGBcHdMWFQg*t_GYX4A$&%6=WY3&PKwG<|9^+BUXk5g zHJ-K>pO+5!@S+j=Hluq$7lty5bh^64=>e(jy|k$9X|Kc6x{+uL$+D{nqD z2*~%~u#K{d5EzO{!c&}3oU>)01NJkHcOQY(41$HieUudIwiyJ! zqG54x1A!0&Ezv#iRYAR)Ta6j>u2IEZC~W2?779ut5tz(i;iY?3j7+u>bkuDkU9-f= zOpJdX4o0|m_DHaZjZAA4%`#?HRd=(#g0;tL$NSO9<6oS~Wf~c7-lKN3t=Stw40yVi zFkXKQA7AZl!!m_Jk-!=|FNc9F7pu*h**vd~dOf=CYjV||!1j8_$b}&(Cja$scD+kI zE+f!K$|Nz=p{mk!aJRfBF>m1IDfurgevcMenzl)k3IHK5U(J5lF!^sTXt`h<&h;*~ zF7FxEInZIUSCwIB4Zt5BSrVW-eiiG4%rp+e`GZahNx63M5yHqj{a?p1p1qc5y=cY8 zy~V>FBO~JU-BWAglCNR+cZZENZ6%U}(&5cf(i_{HwKTmuU;1&>Y#NoVLE894 zr3G+&87Tp6dde&*!2*$Ksa*2Mz+P`iLDlv(f}ID;?m-+8k06t5nTNsz50P3}*dum{ zhazs23AH3!mg9W>dFJ&Q7X9wO{|yg`Y*h0P=nh;p!i#NzTH@L-v@~7BzmIgdf>qZCNinct**z!|-37H*7Bt-mp_RX9l!GPK6HWp-g^c@-;mMNEL3hFBo zNnlCJsNlu#7`T7NPh*?yP9xp#w}`{nuHKg`fjEc0f0#pjgAI166ELi*EGYp$=KA9?U_C;! z#n;Qu9{3}shRo7-G)Sk z6Gqdv#@LZEXVYs-iNz^FK5+&$*e3S`&@lEM5lgj%Fm>z`at9w!KBNFx$=RQPKz|pY zy_;}&vn71o)gR4(VW%ixLGfL&imo=KKm(mZ(l~Z$5D-z2C@r29U}unBtZedYEy4cO zeAEYye6Refaq!I@113I58nm&A zdxKRBME*jR#2~aX531bB`8iJOY6DkWfKsxk72nAL%C~;v&AyzJeL@V z`>SfXF+8t=ef>XSxuYoi_s-DV-JI(H|JL$g(WAjt6(+LllCHO2l^2%c4c3G}0L2^&2$o9J_G z1JjZ62|73IpNbh;Ij)}i?&C@BHhNv3342`3z+cqX*u}j9xZ5=lYTSRg6`OLLY#pG0 zo7}dF+phZc9yf7~Pmh4$Sq@4d<|PeOF#3G=;(Qq)un4n@5M|M$?DHW@;N+V$N!cF; z>q#GJwIna@{u18|JlcwjN|xKY$nPRA*y{t$`5qRhTleGb{%QWgW_5kJxFk|^Ra-w< zPj!B;m@G%mP0>68dE(r68+c#@=njBF*)R^v3f;fx`W^+hQO=N}qo5lpjHday`O%r; z7_>JbYUC0NctVhnuAcZX+iyPAu4oQ)^@i!X{LF~_cZ zFc*6E&lh+6meKjxE(Vp}iK<1Ft>1^C$-mO)biUI_>iC(NFBdj^-u0-@!HIDthG_{NOmi0PeR) zX&-+#S)*N0UwRdV3RZCo^85KJ!ZD4-LX@=rru4C+G)WNrG6WN=NfILHKW!()!(o3h zo8*1PlbCBj3|A%*^$DTiN0b7CG}JW-Mxyu0?k%v#kS^%3ESACb;eL8@lZ4ISXoKc6 zZ}vw0GRGwQKN(P=ic{0C@r$MEDRori37kk*c{+_|dhAWtGLW4gpVDb)bm~iT*lf_J zr3?TB#Ocgc@=4B_xTavY(cw0g3vp~-K{JP;>>i77@S4tNmjh4p6E$lWs-vWviFpDx zg*>j6L5Ryx%ub4`R6H?k$+%K~(VrT^2>#@qvhr!hozGLXM#Mz-H?Q(EdNP^FD*l^F zED{ccNfUaWc4rsA+;j+UFG?7JcJt#jKLsEXEYBbdfxixvXOC@Ntwjl>ad$i&XEZKN z%t0OLXQXG^#qvsw`B=L{?@F@Z-&q(L-G)2Nzc6Og@Z6Bf(^I})tjps&QY~T?D2QVB zWyRIqiT8!LT-{{@_ZAdL_&Marm%uesZBNis7y^?_)1teA`6^da@+r1=^`acGs(#DT z<(>OK*nm=JnBY8uWd{o46+UAep*6z6M^7LL z69wT@Pzoh7vCGO@WC1w9OFTnziwYWz>wTjD$k4wiEJPO5B!KvN^^=@Xjn@z@&Wcug zop6G6QXDKJzamSHWmkg~O`y^XUzs{0q4~-b_`mu8*a)wK0_8Tw8M3x@wp*{3^3LU_1|cwX_$%`)wg&H&-_ zs{ZPEG$G9>;N8#9;J^a3zf()AF-*-LGy7SdnU_=&ab>Ek16xeT3{`I!Akzj8EEfyPvLnc#GCzBO1GcXpg)Ng5V-W^Lg$gAGp5J2^* zq6C7cyTcSMLIKPNdp}Orc&JaQ9TV~61i~4PeTSIUsrBkCD0FH9!HD*7sNFne7>4CG z*J-r<#IQ4+cxyv3`4$x6f2}9E-~1pb`>BG|rGOW-D3r#ppGZpiAsmN~d|gR~CpX6| zhEcpdU>{g-d|rRtbIAND!4QV!cA1D}aRo_Ibt+|WZ`GChXBdF@mFlvB?d*P=jOP7)F0o(jp zGHr4GebF{|z;yz3Xh+!M7lsIVkhAa@@UlYYpgP|$rbMlYUNzdP8$|+r$rcKk^sWtZ zt#j7%&f(#!M)m4<8>kY zzNY&E=7`REh1=)>?5%BSj67@u?-Hl>$B)*J%!YGhYA$~HZ>`0}%uxV&CO@XyeILGc z?_F-b9=SzFo}gC}Ge1ylNeMc+G+o_2&cUBvjwehNcAth?{|!yHy|*K;D}VTiQ}#5a zWtE#Y)7Bt{BA8Z1bz)Pv>Bb>x8t{1O8W5waU_*?dw5n7!?BurjE224};IJo~~()fWc`Gn7ej!sWU=g&Ig(s0(2g3SP@@+y#FVZJ9mACs` zMm5|O7ofeht^%R5NWrMUZ1!r9HPMc{RgR}cYs(mcJzHEq?$+~2k^>e>3_oP|(%2?7 zklB@zl5L3?DEXBhY!&tPE!UvkTR!PJ^>x4O=d*qGFyH%jzCNG!PO_WrR(ss#kBsbr zU!~$q{T>1Sf_r8k?}XYy$7r-0X%24hM|8Anzvy)Ie{&MD7zdGO87&_NcT|eLT^pFa zC7HQ~ZZp6umh!+cVB)%cUQPR51;bAv2p5YWWcx#S-7{d56R7Dz4wu*#40i2 zirYs&=mYo~LLYoD-OJfZFU+O=_G*$iDT&CpiK~MFI^q&~-WhzLAK1;+@Pj(IuV6^r z+IITc?On6gr5fS7bA+MV?tr_==T0^rRV2$+0t*}ulG#eH6C9$ub@`72Jy2k@aql~7iM52aKVMJEOqn<2x&q4 zG5l*{@%2_KTzI9F%=DWqSdjO~>d6|?soG%GcD8ic41E%=$I#f^6_Bp7_geU8a08Z2#I=b7R-LmyZnd#{-AzT;J9gO$zy8l0+xEj}w_m%8>G_33M^M(o+ z*BfKyCe?*O!5tVWml6t5xZewz`m)@+ROs|b@v$CNy$~D}w@KJ6zD*4^x*enHEBM1z zH3sQEcM=kjFLSjU=HlRb-C0gppH}Ji7GsyTs=Lvk_3te{V^y0d3k|huJAK&SU_Fyg zFhHdtIeUv6PWbz318lzcaJe-illPYS~nc=+U&>o zrC$IJ3`bHbH4`FVk(>r*Tn$c&g6Q0hUy9|@d;&^Trf=}E#N0jbes$KW)mnAWyc6jz zcPQ+&fuatP?(JIbM2wPv(L@kV_T=UgTweZ-CQOh0I{4X|mu#>1qnh;#nPK#4(A340%n0RoIhdj;Db2zEM*sgzmD1CFT}d7osIse< zmz5J;LI#ob&NI|mwrvTlTDd~i4y2Ry!|i1kq*C=E6JY66Oj+Zhm`}|NH|Gc1J^?$Y zr)NniT$}7_{iCs#i2iAq69=vaEdx>Vf(5lCE-+|kL>T#`*YYm-r<=gG>&$t#fJ3(1 z1n-(0SaN7JG>ff7Z~mtdTZDKwE=h6fWa@wHpskXL!enblnR$MDz-FFqCSYqxw&Io! z2Ig8^6M!gHsNPO+D;a*&f#~&9au(r8)M{MqSFbo~QE)`aQRLCMQ6*NykV;0NCkPAW zwlHjNt*##?QE_H9$bsx?@-@K}jI@e`6FT2?>KO&K1G6A;19?;eucSI^!}X;0>|7@#$o-x*Sv*pb@4M?#p3@Nz61|;7@a4$syoS-vk6_C}oan zjWgH{>}EcoY8)>`MVuu5Cz~@%geyx5#Am6k8B)x+y zX?#B4T;gQPzgGVwG%}qVC3%8Owf(iF1e#zkAD08%`ol?VCxHlRLEih1$CSHej269yO%W0vKH_S0>aLbYjv2{ zaeH(c2o!8f3s3P-DCNkT$T0o4*7r+!xEOf8Pe{7*7m0c_#Hy&+pR}%ym8uMI2VXoH zK_RY0-Q4itx!^yHYvb!oeGA`59}7>9gfs`^tXGfIEO!k28{N5*Xn0u8%@Zd$8L1)* za1271>wRevDjCCnfuZtM%H{tW+3^`+h^Ue#qZOU9oG2mHqAuHdq5d=EHxMsC6vY<9 z#6Wqc<=uW{eTjD#~O8n%1+3-tOZ&*uCiH(?zEXI1`5w*Qx54ga>Kr`raUrxQhiohue1!!^bpW zW|pr}g*>BA3&|4C@9u-x4*?qY$XmKu-ZeZsoYNLmAA=a>^ zer&2#V?U3w6Vb8gI7VO?r@3Grd+1^N$Ok@X4_`h{jLRX~w-UQDdPZ`wwz%=t!9>oo zEdbLiSKhS0{SW?$-9YD8ri@%ACPfB`CKPxD;MXOSD8p{Bdc-bFd4QTo9P|a@%btTM z7E-$mMFI5Va`ZEmY@OBX_vclc8vR{hZ+dzfcUIorRZ+mO##mq4$tKxeQX~K@;>so7 zrA}YNLwZ6M(e+heAP)}KoTXKCV2@Bv*R$|QQ<~0l^R{48#Vktv8zk{)$E-s0RR#$%?d2bI@t4%^90;S1-In!J(=}QYx z6+Bev>;Fv~YcX2_cQPJIzb0^~ij{z&cLWiW7?>TKNR6uG*tIENCRoc<-Ko(@W5mf1 zv4BXN4i4;qxwlD8I0k8yMLU-$LP)^6MbNUP)QzdN!+cA%DTXd_kJkeXCSo{kBQpeJZ(UeC3>*+ONPDqVyq zGg`fA{gGO$#ph{I8tzbnZ8g})ho&7Q|H`j^1B1tHd+72d`_F&mce5TYu^uTa2Ec?F zHq@ewt!0BA!#%W*<;IT9FBR;A@k^{9VXIXmwt^0RV{;kikUq~c(4I>zSZe86TD_k0ZXSkql6)L{EHO&z zN66lQ0lZq-XN?x7P{j{W%m+`Z3aN}**0v*LVHFO&zISNlb)-sQmOR&k+}r}f&Jh7N zB`FihqMZWW&};`em)2HU1{jkVS-@j1kbIXP?->C6_8V{HLa}`IaAyzK%qe^9@$;6! z`P=JI*M}x9DKrsa5`h`&Km|jExx?rPZ9@VkO6-*C{%%qba73s{IoZXUu@3oiT%4!` z09|y~;0vybp@hj(3<}^!hK&$c)n#Hwo|qrACn!B9p}x~4PK2_NaG5rEePyU$k<*sl z#f{bh-99*JfDK109F~GM`36_NvXl_D^4B^vuzsEZT+$fCJ9Vf7NLM9MNpu0OvnQtQ z!{76){q`UHm_2fO8pqZe*EhRGtnIxTVUz?ej{t6>=>4{~%l31h{}ub0fAKHv#^&{Y zNtXA8!f&^OiAKpdA#{r!!aBogK0gH?_*r%I|Zdzq*ic_Uq_1q=8Ii zX?BMLDNHW6c3p`A<3bsIMozP&G95OI{*S3l)S4vS0ZZlQd9<`$_q`vZi<^Rp!0*w zLV?v}hJK2ipRIb)8i!3gGq(d%n~r_$_2s8;Z*xRVyrlc7=0PMu96g#xLSJ$k29k78UXMA?X&d(5&q9;Zxwz_=_E%t_; z8-LsuPM@|=bIL|w7^CC~#?`?}v1A;l=Gk%F#a}~ebZ6@}b1}qt4+(;j(zrH=k4Ls6Li!#w9kL( zTlVE|y=t4qCE~`?wm$u{d@l6&EIB!FLYPwBmzM(!rF;`vLTsNx?uOW_ej2g zl_aG4`LF#VUAYeIqo4kM>k=U=wi0t$pwA|P9@oUPs)0b=D#KZ}FNuLL0-f%sh?n9Bg^gaY!C%LT7 zX9~t1#d6g)jv(6I03P++5*N-ojNc)k@Hzl=hl^KWV+1{37wT5!RDsP77q>c;B&0p$ z2CCz}(i^J_hT7DqwT`w49tps6M#r$~(>VJFf8ewBi4T9!rVANLrALl<7gKX2c7)^` z?LD>hL0gg{MSXL9$Hu0|)DCFmptyJL+O=yxbnDW|tIxmi=4>Yj z1pb3Y;3xju|90}lSFikzt*xCOYIb`UMp})qsyH6(D}x$fNRUE|nLwUQ0dY#0lC?D0 zBnSO8f~u3|SOLtz@lMI6Snm>)BgaT>NRSe-Mu(`omn_il?TAZ~2W2M@ac6lEKP`6<=L{!9B>*B0oJ+z0ah&l7=TEHMw zT5Dv4@~_N$%INc|S^rA}LZ>ZvE;1p;@N=L4B8;Qi@Az%sYiCcLuxZ+r#>CbMSc)9r zvuVwWk&mbf+3AzBM9j>g!OQU;3H#P-SCNmQIbWfvguoZ0(5@D(20Is2yC9BOTU4%< zF{DRUA14$5-m|-{EqiJ08r%xy^~q@~u(l-EAz9GZ&zw7BA1v>qUoY7v=XDd7GMk@d zkSQmFJJQ(dh0x`8WrmK?9es)i+4gPURK&k*K_clq(20Kl()?WezhzRe@pp~y_3ph)$= z{b6J$>$7wbZ}M_v-NFha)f?fd@PSf8{U!xyY3(w=R@Q zrQb<{!x`M063%$sS68uEF6-%U%GIQRIZ}L{CQYwYFgN+yH|Q%uE(MYKxrNfTo*pQ`})V9GOTLNQ#&`6nR~3K zRZvw0;-iObM`;dQy#CpQ45!njKC=nt8eF#$nUeH0dv;cUS3k$oK9B8n$=w@ty#{!%8)`zPEe1(QT$@(7`R_Cu|J;R*RFeUZ$i6 zvs4lzq@9t22*0v|GA{$Bn@TRK2q<3nm2N5*u=X>NbfYNpBtfg0mh@*lhmDCdeUn6QX&Ba^f;$4RIyC!1;%-;&FL3F=KxQkK_V5uxSHOTe| zX=lXTtH3eD)LdIT4Bf;6t!M|-Wc$R_tUYn*VSD`XCkS_*wZ+9nO5R*lnl#WE2-N5~ zC3F@yZ{4xyzx9HB?VDc%DEu5z*flAG4cXkB05tAoDQADpJjUVMy5hp^P z&KxQ#jP+2*+lK9ID4$Q+UasX9L7)#4FoCM>sdCh2-K`ys*p=&V;HKX6iqyH23-*~$ zf7Cws(I;sqS73Gznj3`CHLCMT4`M(j%!S#EP0e4n3GxHuF@W|V0nkLfG+RYCoy623 zM7=wBk2d9Y<>9s!RYRFEtrQQAb0t)=FCN||d{41EIIJn3M;w=7OhM9hd1{d;wu;?q zkX?(8@lFq;Dy3kSdH+0BRn{0=Mah&{AD3_634k8}FrLcTBr$iLnU=k#H{(k^mc_8{ zV(vL0Kevf~QY#-MMg~Jjp}4&tE=-LD?PT7C$9n<*x3>=p8@s!wTD^91dScX0pfAe< zf(|f)?BN#O$K23X$cJYrDO(nth} z=A1&lpXbKS@w%q~4ksyflB*zK15na^OQG@r6sc|;P z;gr30fn3N=A+viCBPd!rLitwqa7_#eShTrWvi|60`{5^^vJXG`tj&`Tq>Dj2z7{9F zRMRBE1-5U;LuI@aii#p%I))v&eC19CVTQeBubox`RKD2RS>)0wDPj zYDXmirVT~kG&6`97~^J0tH&<1wL+W=blA|YMZ3Q+yQGv1E&wa-Xd6l_XLnM#-*{W5cKy$)!{{=am5$G-I4225foq-;Ssl+`6gyV;<3 zvH+=GLF}K-dp4gUH)_gTB8{?n7-2G#8K%y8J25v0dy1imn>x#cRYOO)erIQKYy0q{ zZ(Lm&$&aT0JTGS{(Dv@$C)jq5C6xCj zjUUwfSezg(qvAzs8zP^(6S+9r~D6Lt5zYvB7P12gLcvdVSIYnW~T&P)8fJsD1e@4}hB^h$=uU{e4-$g13J&NoSz;O1>6DYJUz@AZR ztwS;#Ah8Nj{!LAdS#}a;uh=(#u)d_J21PL*Dv(+PjAT`Dn5(gw1#fQ9V$+{w?Nlq$ zJfH@3zA`T`|LxFoe%Esi^S`WDN{ti*>tq3OZW;V`aW z^ogrmJAUkIE7wTDAc|#q!`_Es^76wcF_>tbhlruYsJsDcmLLaoigu)r&}AeZ`7i+Y z9L*8Ff=+#z$eALVcaaCG-qoGGRrRr~oMl`aVL)IH5~7%B(ltc6h#gy4!_3n-vWxli zHU@x>K#GjbP1-YA;^JT_(`yO)*`u3w1MCs!I3YPLj`SO98A;T`3C^TL)^?^jGP=`ir1Qrbl5>CobX+Gye9zg{@slU zc2rB@=ty{KG-K1suY+l;5c<4{o3(`gpsOu~Upf5Y))^TXRQIRPBFDICogd{y`QGCuW9Sno7R&jO(1-rE*qpkl zHWz0N4c{PhPB(%sNDu8)0Hlb?excW$zWm#dM_NKq{mF$T`@s92pr_%4J@?3?c9w*2 zX&A-G3CzmuuT=N#-69w1zAbOA+SgwE2KM+@$Uxl3R6>ps@84zj)MjT8kuz2lzZ)R} zI&T01{kHD|FPaIyU3zsb1``1XEB%Qy2HKg95gnijB?6Nc(=JuFv2IFDK4MEnj|1ui z{K~X#J7P?B3309xMBQNrD9v8ayLwCS7sR!=wxu5}GjPW#w&$H?;K8vD{uHwrK?WeE zk6HsasCI|~(+aQF1OmfHG|o&Q{pbH&UTjl=RX zb^?HRuCKvRc9*y%Kfnq517H2xYd;xJMAx5r>e8=8rti`XHhkIP2n0EDtoYk)6l#U+=KyBF#La3l(XxlhJ7Y2}nKq3RMY-!A%i?}j9Lsm~&MDMXuS zh2g8ztS|k(BgH{kI1vAcJCS6{&41FxYu)jUK2;k^sp<@(&P}cGiqD~H6`CKPv@}eW z%$ADX3LONwcp-?W7RS?MUKL2q;A|bIoLR`xWrX$mkU--&2^EP1Q7P)~#QVkA#0%I$ z5wPw+jz|axK_O$HI#apk(buT{dhf?v<})4fd~kszQ2@$szx*O{s13Vych5fgsgKzC z(^Gcw^bG4ahD6rLI82@5HxxCN#XIrLljkTG&5~ZhdcHDhFTGl}?LD<#)p$`oQm(Af zws)3L$(Fw}{v8ZAb-?O9+`eDmx^7!XdvASX3WIRCu@(i#MDB`w0 z1O(3H=OLw{DM0%ugCrx!Zyf;m5C1=ZGx74b-P8^8^OqGBrrQ|3k zju`@;FB0xNJ2OQ?>{-N}9J@!_1fpJV8^m+AFuh#4aoz4L-?6JVZeR0UQ zI9SpR|JJ|+dXE7J9DMG8{S3+kdg%6YKnF02Vfsj6tCF)Tk2tmkjqWeutfAjOZfw!S zF^Dy&qX|)Jyz-|MaN3lU%R@eOT&~3Hmwk190_HI|7X#q;8{@12V2!bxmMA(1Q&mYr z09z&+Y&vQf&ZL;h_H1r$(Jo!OOmxnp!34}rBmgKKi|0~>DuklKuJUCXKX$e;8Wj#`*1oI@l zoc=uAKd>TI9m!{CA4f^{$ia{EXWkw(*u+DO`1@$?SB1-~H*V(ZGk|@d=SIYSsd%6j z91tK{CL9*3(kM5ws%0`@xS2%JT2#bTNz&#SaJpT^&C7d5WkBH13bGzmSz@r9A%Lnh zebo}(P3lzHaNv3go7Ye^YhnThk+m&bNK+*OtElXzWAmm1tTB)U>Y=N54Zv!k_4Ci? z2@!q6h!Z~2TB+@7u+B=cALjU5m`~Q%*X@;8US%C65~ux$Em4v#;Mk3*EecQVuvY0c z)%YNuMCP@ar5n})0K0Ct?~l`{U=zHct}9d!VIP~|jS$8bCs4g4t7TlQDdF6qrmazt zlTL89v2P!1rURWn4sDgb<6xFN*letYsf2Z=s%#iVy{U4>ST|JirYfbL%Qe{4~__ z)L70kP_wsoS8Q{4!**NL!4=xbAnQZ~SGY8NoHR9U79%E|n3y(|N1cd%?c-;w$VF$j)n`hodcwWX7}_a&VS|l25YJ>Qd?~b3q-~ z)C~ZzKIs5ZX$R?2W%U;9mx>e6$`eztW@P#)+iwKpMj1UwqaHY_G)`)vQ>6s2c!Me~ zD(y(h0)CW!Yh*Z87$ZTv6wX^E+D8<=jgVPPq3a!`8R@6T%ekvENt+z26rnWygGe7^4#nVd@5$61f@liT6(a8aTr|i-ZN`aa~3;a8-4ohOz z7`dR2YuDyZ&%-1EQdFnq%iXlz=e$lpKB3Gk^q5NQXaDstQdOayDBz|7%O$WNJ#|Pa z3ovt917b38NFOM4(${v2UUCPm)*Zr(JyWp1;nxWqREWGuhxG55B9zh~Ox5JQRHoGY zoMBBFQI&`JzC(bu>*<-(5BBK5RV-1aB=nzt#32^L6s+BH?S`)nS}!zrOXAd`dq)rA zBn$}4(X05}xyv>)xnT7}Qak{-o15#-fK?kC4s}CR)+8|!^AJe0v}Oy2NY5|r8`V0Z zUf8_{Y$=Rmj(<)}=Gn+op}X@nyLJDYcK!PMaW?;uee^?5+R{RSr9Wuxn&vZUs1Axv z){l@qLuAbC3D!UGuDh2kuPA47zB<8h$bavH)U`R5`qxGuN4S|9o!|M z4Z4-^`5x;{g9Xx7WsG{nz$DR5Uhd`WwiWC~8q$dD;*N5Ec_?`2z^!1tjy?w*hXW!(CRugn+^(LvL?sRu>qY zr?Iv(JcHKpM_R2)hMDar*EiR0&CSfeYZUu; z^@=+D@WT=KO)>(1_Rs$LsZy)`@pvZtdoC?5eq{0F(&X&I44X)_et^Izz%ItTtBlxi zl59S)Xv|^CE0q?= zCD$y|8^4e*aNJCiEx@M0s1RS96bI?KvssxnoLY1iO0CV5q1Pq{PZ4c7H2PxpWOxa| z5{CH94c3U=9p&^^(Y%3}h}{@XpRln}G}=>h?kZOEfX!|C4f7sdj;BKxEq&>|JerK- zley9XARkn*GIAoz7+D~)#Z8|wl`@2QPp}<&;S?5b%u+`N&R;(VtUgqdQyoS0HAgiT?_vzKp z5{h7A{XHP7P@gHacGq5+DA=jetVN4yOQHjePsJ^9He^quAKZjA;l=Fgy&ITU6@#X- zG`NG-efqP?b+NX&VW$DY)6?h|S^ovTwI+^HYOfsu6oEZQWH9dR>;zz)8ZgA*IG548 z8U^#f8Nk)UgNe0R=b?#sA@sh;yj_S+*|n{E_D%W`?gL2LMBj`k5k(ZTb~d_50by~p zdntAXF)ZC(E?U(&wZYUo4$>(D zD*2zcd0%WkTeybmjCe(*W!-Sx&<%E13bRar^qX`BsTJkWArgp-T80S$CPlOG3x2_> zFYXhUFWYZ}`FlUi-}or*Dnz7u)Y(Nv*nvpbS3>{sZ+`aY?O*+ypQCy7Jqu-MS3?M8 z6xXt7`M9!##Bf5V>%w$q4FFbDv4FvmhS1$!E}M`eR*l5DxwyIOTs%<($hjOgcEGN( z`*btpVbZefN?TmuMM5{LIIZaJ%kx^cv$q^*Qq%;z6^MarXcx3|R2FkedCc5=fx!eO zb5N3o0_Sw_6^M+Ti5Dmb64#;qTTB2Q8jeeY5=D0r!RQgw7%*0`WPx$!hUIgn$J#cJ zp<@a&%43%<*<%+TveQdT>_7_~yLQoAmVnL`quF97sunuFEB1Cu>Tw)c`m50HDS&lb zt$&zgD!Ax7IE6diw2P}7xYSZT!oefa6X{6w2RVQ7R;~HJt}m}#n_F7s792i?BQP9+ z@3s;6>wo31F3e7k|2`@f|9N5}eR+g{`8buLER~2jmAEd+3zb9WMdlgbs4E9n4;czz zrMxoB+LK~FRe$$#wPdMr<{@=A(pm-qp{^LQ2*M+%C>itQ3{6kpw1qbQD#+KbiSGT&l>~b6Ry;r+Atv}vIvnxVF9V=8uL^>2IGB2tc zM)id*8rsW`F#q-Vz3O3$4SbWi7zZpV(oG^yR6U8X{*;jesq`2FfTdV3Gi@Np#~YPkx46r3U>C)c`L)Pjncfm6xRyzrp+CbOwh;0GL`&MtUi0m577`1n;Gr_V?R&t+J7~|Ay`*$vO-# z;IM%-V19naKCxD}sS1V?LbzY1tUN&ruu)pP-s)nSJSf>X=OMx(y1P}kmH3uB!)K>X z*+l*fCYFk=Z`}Yi=WV-Lvd_KtqMdl;lAS+uG78O0dG33olW3$6}PTkm4^b0YL~n~(C}D~LeE$dS$J$0B<4(pgh_M^ zlQ2wa?J}f8&_#<$pvEq2i;g2(O+-n2S!K(JCX0?ed3T-e$k{dRL94&`l`q-7`}gfD zU;C6{nM!TlJkqf$7m*JizaOFBxO zBaIn)5%1tZn6_9$IsW5_p;gMqyUjtf8v?wy0GVmD8;?GDk*}vLKNGbxCr-MEdY|PyLY}pXQS#4-cZF`(Xm10(%r3n+gRIjSxiLc!I=r4XA{gLS*kR7 zO2L}HHBV(oAJE@xU{q|~ReP15x4XN$#JB`&gh+x0)u9&UVzGkZ5FN5u>m*6i z8rfj3t#Hh$Q7PM1kt$wNRt1NY=qPd}&kLl?8m2Vs`GPV}%3b`9lCs`w8<#IRh!(~O z7)ECo6+osWo`MijxO5$7aRKH}>>!)~pk~y@r)OQ;mZc&icX5P>vrS5!9hkeL-A(nq zWj+qV{RM2BYQyRgF+mehJ%aU5gbwQn;}_vL6)%IM1a03<`xig=)Ar@BeTf#SpRkX9 zep>73$P8V83C0#$Pwk@ zCLvEsuH%D9$kUArg6h@QJ^L!H?Vc_n<6=Aon8Prq)3cKn;`Q#@0pt$d!h|UxN+JN< zD1=1>5PKvU6*Ql!d;+rL;{`i$YRO)~+%ke`q=HmRpR*}k!@8;l3cYZ9oIx0SH}Ay< z3IPA{Pyb~0AN`Ymeh%6>IbJ}E##O&nIw0qcn+vvSU~89CNx4V5$p&<`24v9rA}IZO z(`09@j=N%A^VSD&BY>naF8TuCFG|349al~l@JA}M-D@4$tLP3l7y+41>dIMC#Zp8f z{}%*K2aa8VE(c8PlEk}*BjgE*lGkt1qw%4$r|sn2jD75*AGYV7c#ItsFDhn>b~GJy z00LDv0DE74{#*9NJ^H%hD;Jc5+@ zw;^_Lj45thm70}ZBtTxJ)GfV;bTD#9y9SYdlP!;m=_1(8*eNc0v6G9ZPTP~uzRwM34{j3y>7eI=pH(@ZEMG&A=$OT6y-{+3Oo$KAnIQ2>kv3?eC6kZ|t4fSl{`v>QVJ~BPlwoIj%@ork$Mw z=0x@2Rb&;`G3J>nAVx;f7{H+UJQ5wvZCaoDT5HWQTBEc<6)7+_eb%0N`f+>Y(TBW4 z2FnohB|5o0Ylln%%!lFKOuu^wWnySA84yzJXy4(?c`6s$U{oL@KzcPgOOZcStL`rjjV?lI*bN@Htbeej&SQm5zu) zF+2arQ+CLjQUnBbs6`JS-Z#U@Jb>nW>ZY*E1m#@8H|Jm>SVb=rj^=|Ns{e@} z4-^1m5Fn)|G?&DAktGi&!lGPeU`w!ogRUR?;GTG{^R74(U5IKX-3LknNd7f&{`N20 z!MHf!k#`92ruJ;Q2(&vAUDQ%JxojQx&V*{tW-krF}#+-9S_L%xq9uIUAcA@CldW~ z(behmXg4Dxi-W#Ee&LVbsC$NfrfeY{h;B@GMSIDZ&K>He!VRfoQVVHm6!lqEe$`$| zpNEUdyNn1J)wm!9mIQ1E8p;8Xb_2;?KcbkZxPKWL#6(-;sLg(EW z?Tp6qt!Cwe9Azq>%g!uLga3p9t< z(R#&TvE-aB)owYk*xlO%5YlxD;5S2?%DMSzOl=g4am^+Y*bzslXlNDg$GPaw4n#mx z*@CP|*&Ixh6CqvZP^wLn1=qUG<3OIqNU*kfhm5;*0Bei6a1RGE8Le!%M`&Ka5qZpt z;#VZm>7b44iRF-{-lHNUmy$$CN~(Zu(}(JR?7sd!SeD#ftZ25rlUT1Cg0*8c@eU&z zhdqGV`s9{pvL>>yqk!lNGA1|c@jX?#a>#lnCy*iS^=y1{3Q!!geYF45zAKW=%T6Lf z7<}PSF`4cgmJ&!2Hqu@yJ5m2;-3bBGq|ubA{>)@ zBCcM!k-bXA`B+@Y+rzM|8{4Pde^BRGd&t6~;j|Mm9qA1L4$_%xT@)cwV_mvW0Q72U z%koOFNfG-aZKNu2B!5gq(0C%Vic>!B((_(%Y%;SpdH)uqO_>bcLv-~$fl7P_>TjRK zAlg2Ft)-f$bzf`q5dhRXYDqKI=}yXz$|?BG4*-vjs)A)s5$upU9H{3WJS54lWFuN04TNh5kuKV+fh@pIu4`= z7pK6SHdj@89v)JPaApj)PGczm=*Q3po`d#!{kh=SeEoJ!U;t26Le>qcwtTYI2QDrR zpe7fYcqDe6puCZxmCq@A^x=o?(&bCg-(xtU(23yK?MY;dc1GY;jnj1!s!YCB1+2=| z%{awiTva}&wVU0dgmCBXJvI*Xj9%ZuWwt}^7SRgI+#*9VMY|qp7aM%`1iN4lQ{{ZN z)CC-CSGODU3B9sU#HBYZ9VnS#ih}QFE0GOYgcdIym;x%yK>Wg zCoF=)V;GLWciRa3g}?F>;q78=;p+A44;>YoKeD#E^RbQ9t)d}$s*%PkoZ>xXyw=mlCHnJ-PL2#PGB%o7Tsm*X%d&=F4JA`OQq z4~h|MJ#2f2te@L!FqCN9?(EvVJKJao+1!?PZEt@Sc@+RJl;`D=Ug?ovPSU2BG;At) zc8ktjj%faNBcJDj1$@M@GO*9{ilj zMz$fhFT@QI!o02+L)^H4$T(HK-TkV)eC0J{UXzdqqxNaC0MB2b(wK%=z@XVyU*-Q~4QYveiRNX#{lxycvF~QfaOMvp1_Nc5)MT zHCMAs7#5S1-6a9jbuvRW@Kj>bvOVHv6y2xw5U|<+WH&hG9ZKFiMA1khAcJLr9LX^< zf^QN3=0+k`OtpmD#0XR)A2<`wBtxCv3$U?O4E}yAn@A;GZ+qhm;M-KY0E_4Bsq8EC?-p|5jsBIY%s(yj0EslakrUGB zNr=lUL+DcC4cRt3v?4dwD&osJgC4Y7)OMmzItmD>wA=5as|&D+c24C^{hAz9(?qFE zk@2UtZcn0Ny8x4wt7ie%(j{fk`O!I5vIhFkBmflh*Z-{BB*lS+sVJU;$*h zc?7B|OajswjPU1i7xD47asx;8ubBakO$Kji5~YLGM5wGNCC1Brjfhx|Hw9tG0mScr z|3`eh9((w*oj~xcgmh&RDyl~9f28{yi4*3m?k~>y1vyI%%I%v3s+QRe?ZTk05tp+D z(|7mI9maFRv#7Ld^DxgobJ}R^0?aY@GD$?ql9KU6PG|L5mSn*9zI|phf)IHG6AFzk zZR;MTa9ZxbqF%Uvb1J^Ne0KEdryu!SufKln+9Qu#96E&m6HhwBmm7}2gC2qZ;eY(E zN3UJGduna-;P+sb`xG%z=ZgDBd2J-SY-Ck_4J7A)IiV}>)S-PWwE@^PsZgiZ14#tIwd>oA1(38C)V&SsH#7nn8@5p>K^K0}>qNUMi_5P)JMuvy+)SnFS~ z_6EJ=c?cBA!K*n`5-V@@sdY&SYjj7l-eGSe{Po1&+O3UQ=##Fg zOdt(|6}FZ2`#zS6rB(B>7FDBIrDbtBg+WVu#RI!t*#L~k?2-DOoobGHg9Q;j>Yg&0 zM#o;mVA4cJ!1|{68AZxz@$p0r*7+psbsI*xik~2hR$m><#i_%?f|i(7%6c|gS+->-4O>&D#!T+qGH)~T@{ z%2v*WAPt_dV^H4hcgzsr^!IZ%-2X4iYxM-8ppZw268Ye>PuUqXY)?J$ICS`EU()0FVM@EuPe82c|Y9>Cw@eYr&Y@4;X5jUC!Q<7B?fEIN#l5z55ND! zf{G$nd6bBgBq5U0UnBt0+BHd#>n>oqp#9zr(%x~nvhxeVo*QUH>Pm6vhLV0R+Sg7V z2bcq$VE_R89ZUL`opxYvKl*=HNVi;Vh;e1(R|elG?yp5UcF=zp=W)(H^s#4&KgglG zz&*vzSPAqpuej@rn^vH#rSq;*wQe}w0NZ>Yj1b&l^z@Plne>7Sw9?ZY|%FXAP zSAM8eZahQvXs%IhjkKgCmfl&c7@Ja88EM9F4V)I2{!Fb-4L%<#`pQdl0a)VuG8P8q zV9i6SSq9&avG}vDyN)^v5DEdZBwqn1Ig6&|qZ^yI?A|>(jIeHKepfWe$t$Pr!i5WT zIhv;P(Tt6eL70U}%TfM~sY8h7PHmtC$|!#-i&Z^{RU}NX4vdXO?d0iEHqP_5zjuN7 zlp>7M0l9hiZRH*<(YDav5wjw5Lt2#^+_WKuA_t49ADf7kAXzm4fI-(QK%HW40CSS| zI4G3SG8h^EPitBfKv^dmW#c}KAW0G>*huBr&SDN3&y87^&!OW^;EMH#9ZH}x3ny4B z#+})WL=@IcrLMefdqm^Z0ZlSds1z%wZd1`^4#s7#Ru&>{)X-BlF_kDcF)8yzXAg~E z(LTRUj85nPhwvHJ&}Z!o-9r-U(xD^eT(PWMa;9gW`qZPW)cKI7GLYx$2BPbvSFQwL`lZIj{zd zR|FlB)}S)2Qx6H#t^jOPl>dv{u&?AikH!nEZDk)n(IDyywzsp(d0aw05Ic#!y}&`Q zzZr0nh_E;x0f;G%v@f);E^{9^QyY5z+% zT>$&~V5I+tfPpgmeAgkTtf*s#w#F`{$jwva4lFC8L|OvBsRamBitRIwBAX>c5LoEn z0%EuXngk%GCMN9SIrIf5PT1niq_=i+O`iAjB`1&)@7?8Pd*kXgvWo6eazz6nfC`8c zd-wli??1pj&9bvTbf27atW&3QuI}pGJv~7)BNPS&f+WC_Y_Kuc@Zg8*2d*uQWPAyd z5eP8YU~wg3z{bLWkc6^E(&W%NRdrX6r%ui}hx_}j{e4xXL0AZ?6;SYhi`T#ZR zF1D$J)gES(UDXy_nw(zGtmplTulr16`TMvmCHM;_vH;sTB*g#AzJ(r!!|*&B@l_h2 z-Q8nno}hvE@tE+(j?=CUklJXqv>sXpPp*|dhfXN<90pv?pN*fZG%O#biue3G@1{4Y zdYdG@JBvWJnh9^Gm>s~oE%);}6{rz{|e)Ig3Pd&5neoVke@A>EoJh}q! z&lUK~fAxQCzI}V>#O&^Tr|gxC>M(I+Bw9| zRIZImm>RIxsf0*qY2GAFjNcx}WQ_{u=uBlQ9891#PjDKto**e)cdQ0hE@k$~)Vva~ zd`xpoBaksy0oXg~#PI_-KhUv+teMa8-kEl{3r8O<-X44GWHg1ibY%z@aF}8Y^ph5% z%Jf#F3AJkp$0D{^=I0R@-Yawnc?#fmuthB*2g9{(!CLN6Oj7qH@h$)Kl%ANNl?nrN3=IgyTDfq8^x zSRxC@uEs)w2J-A((5w|yUMYZ^VD~bIUSY|q+}J@eiEKB?M z?+o>|5@`SC`L|wu>xrjdn0r4a;iLC_bOjz=fronq{`8;ub@UK&Et!E!TA+S^KTm^#*uyS`(Uo%V{tdNyzja1|Ak+qn-17n9) zyoGL3U;M&*X?3?fJ^j>U6f7J|U7h&O^|z)oClAm{3<(e|E9zm*?93!sseo+)ZpFsk zKDt#Dm?(8Qc4{CUMhmw*yO98ZK!3lkUBvlfWIElrK1_iM>C8K~)8!ji!Un~4AX4Eb zfnx#4YnA729MyUyQn8`a&rTd-;|zqY8fI-F^=oR^KEW$^&Q73zUm&BiHnWoEx@J-f zsnp8Gopk8rvDAod&MYntwp(2w6<>*_vaY^09XWc26ezky@W3qZxj~bL3Ok+{>&;-< zy~7S9b~ZtCSPyWsh|qNO$_hmmJIiF9xc*cCzj@(P>CWAEAr=t21G%<4{s-?Tyy3+XiBm&SabbbwKu4*Gq?k-|p zF_fO2J&;b;QQ-`QT195A1KYkQ>h`6JRio*RifJ-`i>VSLZM_vY$k?sJ0-NSOclw#s z1^{m09@VmLO%9DQfYj7uC~g%sDPYGJL{Br>!F?0sqji1#12&z0sE^+?0Jt@`(Ac)V z)zjVF)6k6#$i)li(>QeK9+PcjUVRoo&`uLk1@WTTyN)|yDbrxzK&p=fBwDoyz5;Yvl)%g>d;13489Pi(lnFLG$ASofo}N*H zL$5`ofYFyoZV6Z#FzeI%ZTtI|Ju z>2ue9<%1tPardFlz(;TP=n6c#0uSv9{C9u;zpb2}oH;ObYx={(W7B_pbaLuhyyZIV z*3^QKzm^!MuB)y|xy(8iQ3CDkG-Q3JlSP?8( z0fM$^lPQ5vPuy#^vXgkV3HWiH*$jCS8(2;E>FQO77pg2FNkiB_Gb_eNTESritv0$M zeB$(@ouf_La%vz>pa1eJ_{YK|(Q0k*z|nN}v1eed2Ga49XHth9FxvTScEw$22peFa z>S5S4d``qM^=`GcRs*@#ch#k?kDLt#a~43h%z3=?_Qmw`KmSX3=;0BFj=cs3adVs2 zZP=Ntp?%w=7-kI(p&EFvpAT8LTo9wi5rC+-t{ZtenKai!R!N|+HhQfpu;JLMTumbj z*V3)2cd?~u#sjt^%^=0<;^C2U>go}q#gd&-*hf@EgVm)!&7M< z7IT^+ifVL=wY6S1-aSmM0o1lHRolo~*$zPS&cXI_j5FA{^n%-_(idL&B0h$&lFRF1 z&GY2beXMyhn^^7D%%yEuz77bM=j$jSsd$mK$L<^e-yHyX#Z4-=!3ec$LF&|Fs@=%> zt>gLkbM5b>fwlJZdlrwU^b9_<+>3)_-6_r2rb*8K*{#lWx0V7%)|oDfU+NhPdfF~7 zO{M*Vhtufv65tYTpe+~Vubp;=n$qU09muIEl4Kh77{v6PH87bSGkia^>De;>b^;`U`iVl(TSZq zgf&p=sVaxODiEeDa=i-+tXA5z~^7b4R2H7Ib?tAIUI0Gs#* z`UF|E=bm{cebom)n4W*^aWr*+1yaaXA!%GWhKJ!xZ@iJtU%QsB@^yD?G$y`Pxq{M2 zQ*&NX$y_dl+VYd0T zh?ftfr=B>I4j<~HoWCpBN!#7I3m5kdz*lP{6Nmeu#$^fZ!`-{LsoI?*#d|4T zg6SKlA959*=flIp(FZej+n83nO}Cv~wDht6GuPa}BWShS*oQ&DKum_2X~j7L8U?Nu z0RBquxoHck`6J-gx^tyh@TOodd=vG3vZ;6rpNl?c)<)vH0km6N+j#R<76iJ8>{WM+ zjjcZW`fFF3S66or|KlI})Q>&;;=U_SJbCs}58;QlY(ILVM_1rK{0jW}|Mq(tNACgTdYE!`8?2KgA|? z9fN7DWi6_};%tny?0U_3I@R2r`l)GHA+_Du0ZY3&m|90Kq*1!UtW$Aa!!d5{EV2ed zbpasf=EqYH_op47phl=i-X@BRlO}iUA4K*$IOnLvqC&~lw z@SDN_t}m=MZ?9~fXm4oi7)I28b7C}&P?5CCqP__ME25wvaVD6hBCc!fsJP~DrRPga@a2#}?; zZ{EBG=(~Wc{l&0tnW4hhWA(gO&_7re?YU~9VCCBm08TF^@4X^lcSg}=L@h|Ln^uFf z6E}6MPo%FUyD4+ZKJfr`w@g&YPwQy9Zk;(Fv<`% z*fHC*q_5{7eVh-lvv${8(SS$TQgH`;`v+8f8+^J@uSD1EAZ$F z{8nFqzwtl*rM5R-zI=ww@V9lw7=k?%sF@Cl)NKVl zYbnO)9;i)EH5^W7kDZAEy_Jn6n7k(efY-s0NKPGb3Dl`UDN3Nkuv?YqR}oc*fc zc=rH#^@EM6gSDpT7@a)csZJN)rF)j^EFjF5eNpttv254+d204dO9QO&FBjFnO=Y6vjD*cTI~(vQ1OxUN51|KlDUF#Fgpi=^cB+XpB}d>q@chV<&& zkVG^asC8YfVvQx6xQldblWf))tmW%f!(^7~(l^Xfx!v7sx-31`)SFJTw!BqA!w1HP zUWL`9csFTB>+9#|CRmq_Q{)4P*AAw$6Ghn^;2J}1o_lxbMmm4~t#ta(p^C1~#?7i7 z{d6Aw<9&J4uRP4{waq%f?J?H#wh7w6+?*ImQ>6Oz{sYQo1}_)hX5ndAo zk@^c~&I|w*PYM#YthN#W@YT*l>f~?rHmzpz4PgZ`#s|;vwPXb`0}*H#J1}(zrd(Ih z7esq8+ol0Rom5r<4^V~m+;bmD2M-)d&pr7>YStu@ol7H=aAamGUB7cPee(04NngJB zHhM<-3rqJ!l`n(V?ihX^Ktm3(WHImAs}vWg)cMJB`DM>YJ&OFfWdBMaw`;l?I$m>Y zEn_Ty*LhslOmDzwJkGJvUysk$)}Uym_rT2%@ZIwkWJjszqF~$K3%oNj=Gp_IT1h7i zk{0QP-FpJc{P2+j0Kh@M4x>+Li)*#V`K>M*Tm|ouDQuLPXm=LdaC+UBrSgPp}?QYHSkb$fNCHIOp zNc*=5?+=qc^g3(=3=UOldl)yC+E=+dQ^%tu2SIY(PIKyj0qASRR27|vo?RXL+f&zp z9#Z|B>;9vum9}~Y;DvcW>c;9JKxk|A_DXg2X6;Ykerxz=4?jJKIONge(G_@f1%9ip zz~B0d-`7Wh;nO<{3*UO|z`>85Id%Hvkpr}0qpG$V&}RWeJ?p-p%&R*t>hC} zbOC5ch-zVyG|{it92v&X4QA+!`I=ssNp~inj)nm(ovmpU*~--P3Xdj0&gubldhHqIH&-{)+yrZ>)?pMv zRO{Z+-jz1@AI1-{8$btm=VY6)$vHUK&sS$^14J~jp6DF0My6_o&L_*HQ0;J1p%oeh zo7=Eyu8Xx*6!D>n)X=$sl)sPVML;gq$uGV9rF8w;-SqfDT9J02NZovv@}X_lA~NQK z2inrdzv{{K*r@~P7(bupr>6jw)&c;)!3=9GB4#VAs$0^fb)-vE7t@RM_dQtI7d?#k zkzsnF{a|`yi%u;NM)llVZG61H+NDiT%%>&#KKJkIgKXGht(i#+)3;$nX@|%9v<&%j z_3D-M+Uu`O{K0Sjy?1zBk-B`iv+Oqo00I_jp^SURrl*>RCdbI5(-#krVwZ;Sty4)V z_OJlKn;6u0PFV_A)S;EYr36!9T4}2u>3U{E6BBEIMZXXIANEXX5zsdZK%C+xEph4K zmx2ygLRe)9K^vkOuInI`_osaErGJS3RKb5gt$&ld@N1P`eW()eaCI#eeGj z#rM*eUVS-Tx^yM2k|H;ldJYCYo0-ex8C=&%O=wP9M{Aw%T~t%UxtQ9oiQOGDkw+B% z04#l|!^yxow@wPXZmacd-)AK;o?Dg|?`%M|M?l{r=C?))GW7DH|dvpcpkJpmA{vSLboAPX!C(A3v_?4GW__JW64Xhjy%hjBAi z9I2@tc?g@7%k3Eaw@(O0m*qz|^aDjMt=Pn+l{CySY=JD~-G`2hv@ejO5HX)}r ztvp?0^A0~5Ynuy_Q9Cx`ddEfo_H0)YU@BNUEw3^&=)>>Td}$4Xurai7c3qN9nVyNqyGSo2wZxT!kSt`O`>uZxKIT z6Zh}$3^~;C6ZDtwZ%O+O4y0><-di{5VUHweNt1*Zsw%>GUsu z>c`Sf%{Qlyef)_4p|!3PtgW?-nIlKKA%J?*vrkMyUffD!Xb2H8q6<}Uq)wB2r+*+$ z(JN%YF0YKILF{+-FobU4*v~9s3SHR@&cR{~ki10!qM+MbI6Op0k)f&7(|Md415CpE z57I`J3gPMDkP=k!z7tcU>9e2zRO7e){%@SYJ>_>W0EFz`*xhQJU7oMAV8Wh%LcU=5Cr5Z-l$ZKQgj#m0_er*JADLl#m^2pKuZ&Ys+F$}DC8zn#(*-q`f*bL9;TH8 zj5)<*{{#g2Eu!c_;01HG3ym#s(zEE$;DL1bzyWSfTWZ6%sDk{zP-A*-CSAOKHC?`S zBMq|?vgOTgSk~AYC|7}H%|m|g&^|bQ@0HJ&70&s)Uw(ec04id&Xre~r%W|g}7eRny zHLvMv2ejIX%zl;cQ(TmLnu{_}JQzVA1ch}-L_IOX3L_mNr+TQY`XKfD29Alm6n;m><*uczwaqU%gccZpzP1BtpbZ8Seay)t$I?+;`THnbX=~)UXh7UiSFs3$<$&oMm`8(w z+ifjs;(>6xwXUI+vHAo-uYvo}$)W#~#Tzr1TaR_UFK+D*-or;fKe__H+poaS{^-9% zDplD}1?L@Q)x8UYuBJ^KJ4J86mq zzlU^lJ27a}wwAWZ6R@?uPiZ}^zcA8ok-dMgq`$h z*Vr2J!Qw#9FRFVvKH19}HsYOa^{fd;h^z6dw+t zKVOGLsMSKw_u*t$=+!(yZNd5^879FtnK0MLXltqtkmHGhMl*)`7uw+iWN`8NJL&B8 z6X`fiUpwch22f8(b(fX;)B>;%9HQ56Z)chTFm7&feO*_oxaO{Dtb^OUm%9JED>JNz zbns}W2!zjVsi;fMfbt!_bGvgDbAe(uu$fuoxvuRRX4@)N(5)_XlZ&scY29|Uv(pXB zD~rwTO&tY~`fz9eZwdp5d1Kw&`a;XCsiDTnB}&30`I=jZ1t4R0W2-m&_X>z)f1<*( z*fq$i#bgZ%JZr!#7%^4c$Ux}jhV;Om9pFN@aREoE?z+oBp9U=L9DA|`e zR0PQ9HPkk-+vD190sa66kHdU@vfDSGJNPZcj7hesbf zoerKjO5fi8)D08p@$4#G=5wq@rjmjxV*npJ-qB$M!=tlUwv0wI>mkzOW8)*}8?bPJ zW;eaCP9yU2de1ntes;$g>HorEKKFt&t(`%xf6oEKa|_4TNR@>5 zR{W0ZyUqlz$6>#P3Nli<`{^|qivnqfZUWt4@8Pts<6um*9$FH$13qhrE_*7jW0Y7J zl)I5=lcO!C_aXn=d(A;p&D_RL)Byz`J-xG4(L$`~=Xn3w%AL8-Hy!Gjez;Tg(Yrmm z0*|ghc?Dkm`CrBirRK4!y~_U#xbn62m9YQ$6J|V{1Jq2=x^j5vF02%3M;7}v7WCO=)5WV4GSIPOhN1y3o0Z!eV=d2bb%n`3@VIT!E6_q$CkRqPJaby1SP`Z4b z^;HezAz~pq$b$#5F*$iMJ@&-@_?$-Kv5gN5sg>cor-K6aC!~(|jwb84mq<*wr-bn zdJFe;8!)Np?8Y}`sy@|z)8<9oW%+-~Jw#(Nq zJ@rEG^B3NaDDb`mz|a2Fzo?p;o@$&~nQtFknyg$V$8I`SHb=ncZp`$yyPE)jrvG#s z2e7&0D!&}>_f3-{%NG~39;DpCr0#_(?q|wlsmbFKbat~Hf0O%qv#qNM~ z>Im*?qH?wgvHw8#KzjP|r_xhY`}Q-?YY~#}GVqqC*V6gRm(nkM?pM-l^cq|j*_i^h z1)7>cZCj$}aIQ!WyJyZzkGn`8Y9<;!eA!dU^sZp4)cKVxoo_aa!b&ER1K~h#AP`O)3c^OfouryL@zDdafnQZ@!ruhd?RZU{I(Rfaapr6~b@mLp z3-xaUOe(Ad=%Z^zQgmNomnm=+yiG9S-+J>s`W#QEi&t(#zt2)(wHN?(b$KRqFP3$= z;jYDXT|;drzLQQ6UbgiqfxL#HmDOb*WYfyIrJe2fWD8AgtDV^4Jr!{a7~Kfuie_0v zcH??LF>VfZ>`zDNLULl?k#utZA?yVPC`jQm$v8Ao^;Xxc1}7I5*@~`OtAs$(RzaJV zkfqFfv}%H6RQDAr7^?xJr?MSI>_!rcL>$L{+B1D*r*a3G@m}53t&uNmRc?+996Iv8 zQ1FAabJiMy-|t`)``{aouz z{SlLQM45&O-^Tn>-nrs`r*#<_4gNVmOgY-qoR$yK$~88)WTb2dN9uTq_%X$Xd3bCs zji86WGjfaH(*g~KXk`og64Hq>L3u|k5ED@4{`AJEB5xMiuqxKQDywDzIzHWI1GZTU z0>W*rJ&j$i0EC<9$d{HfnX*PP!ZiSs_9n-Uok(xKdn_u64-hjCvj!a4*F)DUz##F_ zrVY`l7PIKyb_j!(Lx9>Xnjs7#`+<4G=Wlj)9yf?SY-Qd?DkKP|8duvc+s(0lxQ?pX zk5!lJy9pRlGal6$Lv`sRAAOehYNr+4B&};FihItzVC}LspXSZCS{A?p zuDum$xv44*cJ!u`^}Xr#?n0W{p7U-*fu&>1VxGN(GW!NXoEob#=Xca&oHO7AQG=h#o`6 zj~fR-!Yx z8%@*6(d7h|PjhHNUkLyM_!VHz-JZKCQ>K2Vn~&Hbnw~ZAk+!TLC}e=-6p8Ve0dUx; zc*}D~lc(v=`{C!Gf!aUJuBr>cG#VM&xv|mVk$0eC$z8nv#wTXe<;z#2L&xRIm(fow z(xqdLGx9?->u0sI6E(Xc ziu`NR4t6~?^!YtCcr0yFktTqxL+{tsfqt)(YGl$a&$JxGHGd%O=c|XRDlG;4ykPNk ze-)KRb8=&AY?)(W*yDI3Fy%^~46M}%`Om^*NUy{-d?h#7RLm`9-z%@~@&*Q{Yx8~V z?mkQfN>fW;%l_uh=3l&i_3HKGCr`Q^fAn~C1s+|2f6puMPyXTGYb0)UUA{g1+|KsS zCulSFp|!=eV^p3t?xODz{8`#(OjGmQL~O1FOjxL}2?)&Q3Zz8w=BvbXx2CcMZ85O~ zFsDqU15erp;=fq}iiX3exEYXRuX-hcVY+Hu;JpL%=~=QV<7ehL12TJ$M{79Orozsp zf_1C8mG{Ds*oW(tfO3tZg-znfDjAfuCuoR(8^Yb8+i8d_$`WhU(9}2uCu6KL*oWwF zkCEZlkuL6GJ#1q0Tw4t=Gj^+$CT-b=J zf1KB0Qpx=Tz4*IM;O|Nn2u+?kI}0th^y6Y}uHKb$<}<%fN{}R!B8B(UE0qZ3ge&H%YhNWGrl^Lx)@FMsk)^zjuzF#Vxeg zJ6VS>-#~ivN^hFGF~A$H(VdF*vO-3X^$mt`hKtpGgSR3sn-NKr5w&eiVz~1)s z7zQl5zC@vqUby(zj!(_uL)@C0s2p$WgNW)RE49K{1_-Z1WKq79Ub^u5{%>6PmZp7; z1DR@kh>!Oj08*7&x4E{}wlufYs((BfITUD27<1Y(UK?k zu&q`^ig0&_$uIj>3&^Tt0@iSG*U)=SGqC0uSnKHeD)FYf`*z@w-1N)Ds$6!03eCnyx-j3!2 zI(#RpZVey+9Cp@wQ0BW#pl#cujV-1(Uwb#b@#d@8A5hq#38>=c0?@ldjY?vNw)a)* z8ot|dDeQer-K&`hFkR=3Y`W*bD7KV^Yzk=g#|t7Rc-4j#Q1J z{+fjcA=So}1Q+dNfa;+~b+RtAE1jQPjnwyznbueg*4eSUa~~mPv9!M2TGd$b;R8nx z^bHmv{U)xvLH+yF0*A7%x zY@K=U_T6tME}mJKU+G$yrwWwVzhS4KkOpM{Si{09kaLqQ>tyd*Hg!>EYPw-n zIs?a9J=+Gz>n01b4@;{qfR8b#r@uZ8?Bb!<&g{2p*Wx(oMHwsCUN^B@XuN`7%WPKU zo#P=vA!Wy30Vfp#HQqB|qB1AqeY0)m_+6*PCtc`^x*F5jj+QixvGW}I!uM|8Nww>B z>Gs+bU8~sW)*6v1jAJvtt%i(%>v0l=&jg+7$#3tbE8t zzGw?$VmnV%A=+EDTLtF&E4>6Bw%SAc(+(`?mCLtM4HdTfz3Q##R}~;jbHkb~*3T_$R*1XnYOG1QhkchV z-Gb9(&G0oLJCdx~NwchJ_RU?d+@OlNBUK{p*|5hN;HZ{$rbpfpGhxBJ2pPFP1K4yF6=s;Ch1H;(3 zlG^vtN3e%u9qA3wzq>RLlzg%v6f z_wl|1z?r$}259axGmEphvBRPOiZ&v(Yqe*t_APzyJhdpIa3~bjPX5jToogbBteRC) z{JoA{LlYpQf!$3lfKQX=WvYed&<5D|x1K>&$skoLr>HXnG*P>rdUn*v=E2|jZGSv{ z^@m=F$z2aq*Fc(JY;+=h=CfZ&*KXWMuU)wY%{>`fjz;ufW%aK5Ju7@OpvmUTrVuqF zjt8^QiQ>7~zp(*!O(W5$(ghou=3Qj4IN&Y&-sV^~qY}%TZdxxUhoF?6bj(0a( z>yAn0(Jm{97*ytW3QR(r@JDzzUlw~kYeou{l` z)-P6bja7M=9@on%Zmwa7;If7GWy3ageD3CY9@{!V)c!}8Vh}gAu6NZoK3>p=k!G$URTB-o z_uQcuft+L80DvyAY0%Yv7VoDuG(RIW6~BbO*g4jLD%j*7#qY zHUQ8KvYNfh>QN%Kc2dM6VIwi7-ogUnfo!1hthotWj_xDq-TKl%PY)XK2H2oZ(wm)h zupm8$y+?O7M$E+5X1qgd)J4aRo&%y1)xwF0jXm@N)>s-nx)4ssi>hWxiHy=@EA>XJ zv!z>OH=Ed=0JA6Qtn?zqb4wI8OjBVz%hw2=b?;n!C%v~sY@(oJhm6^-@*Mdri3jN| zwa}!n_gE+;C$ejXHZq(pOkY}?jbe^!;=JXMwK`9SCZ0_(*JE}OAj8^JQ`1C8rj7K< ztF+~O_jOX*Y`TwOE=^kaJHPdhrUC3&+IsNUg9)8mnoE=Gvw&%?A=ka*a7Q}cwTER` zPx`8lJ{?uAFTeb1UN_EjE_1oKuEzGOX3waqu2&|+ajxS(==HC&r0xL1iq;F!7+}YBZjvhFMR(*efNALCc_&7}4HXW*trDvagA-#L)OmA8Oh*FxX>>a`2$7k}yJ(*aDHpL_Bg7^5jI(wU=)HRi;T z!|BE6pGz}S0JFupGz|!~JC-UUE3ubgEyuamlY7gllhk#^`W}rC>eK#hHW@pZS#Oit zw|BE1zKjc-D|ptfE8(<sFSp`B`GU`0!$TP&PX*d6=LcZO;|T+ z-Y&k{gGt&&+xZ005MU$Us0anJrwL&?7{EYL+1b}s~hZM z2K=VKEBw;lprt1?l3{;9Xl{bRtmQscYXQLI-oI}!J$tx69q;H%-}c<^2?JL(J6QQ= zKuO?Dv=dxwhB7D8+ERxw&%ppB`Fsu!({a)du&@TSu-)f*>vJnu1!1OROWgtbG< z}si0FdC*P7MWGMoh2#l>rxfi0@p%X6xNEnS>taLuLzcdqX1zVPnN zW7luo`OyBs-e35cU-;A)k00+HI&gZ*YrLz>33U@ihcPQ`8mEOu=T7PwH;UUh30LNHfh zyXXdwD?}z3Vy%ft%7YY)wlCp6urQhG#%EX?n&{>MVB$0NR<+YnHDAv4Z+QwU65JvV z;vz7(Z-2;7Lf&I`s-X?L7-Axg0`^#ss%>n*YidkE19-N;i(64WDiM-fj#k=vDN}c; z8|_#thV>S~RaL1cY>4hsj~zaoF5Wns#wntl11v34>@WmdXM410WT0~auMa(=Ha48Q z`o}6_b=5ZDY71Ws2!<`4D_k;6p%(2%)uMOzdJQeo17yQInOa@8V1;z#^2!vzs6O4j zw3(jy07lbK9ZT)q&FS!o{?swh0dQJM3#8oFDEMmw=ECM7(VUO)as zdgraH>DujgDTEmYc#)|RaNA-O0J}b)B|@9TVS6ptsbv>TtFMoW6w>;pv<~;&*<a>seQ)+t?kv<&Yybn+=t%g6d$V7#QP2aFI+r-@cNyhBXcWj$TgUZ zEc%-Ah89nHx~Pa10Q$(bFEE6rGyN{GD1c$utV9o8wReCKp4-k~*Nv`*2{g|{TH^W9 zH4p7TCG3r+pNc?DXL{w?`^3+(afc5bPk-o}zJ}6ub{9h0(usWEc-i6<2baD@;V~$H1w2}PWk50~>U(U+^l^jN zby1IrnSo_#;{2d(OQ`|0NX9{JI@~mAEr3rp)Zir=Qk+{$dl{{1y0CD0@q^E&qeqXX z7hd=P4X+2d-s~QE?flX_0Tecq{)C%=uWPr4)7{|_QoQekf%7ajH*;Fu01OQb&7=VQ zIU1Y0^DMj@O;1G1wn%>m0F-i%3N@Zd8YEKC2G{tVyH^8VM~e(M7Oz;78I8GC$bd3Dfi zsf7#zn~(|#(A;op%@LMpxneeC9HHqY9@^(Uw9gT2?#YVWsQPvnxjSEL55l{m#g29cw1j zK~chsFFc9VWR(s2RCH4^J9QoXpamt0ca}(3&H+5JTO+e60l?ev`n?LOQq4qhj&8@* z#9LY$)vz4TE`4zA=#ewV#&7%%iT6=lLVz`ey9vmX5gebnlRo(w)?Hi`p8N3A>G=;n z8?8XSSKZy66l1bR@?1NLc-qICA_bo(k-5y$IUD>t!>Gj&_T{mKB_yT_Ya%Snao?c0~RKS-vC-FB<$gdpg~)Ajnb z+i7}cK0Wd5$@JutPhxY^6`r|whi(Q5)ByRh0mHhuv_i2+2U@+3w2n8i*QFcax#|!!v~hE?hQ2QsC`1R0 zs1(hq!|>Gs{JB$!G@`4i)wJ&1)BrLeO()iIA)B0F>ec{KD?D$E0VB=2A_M5IOI=x! zD#*J>L7YB;dr-ce>4_)Lq$hAZSD&FFvJ+$qQRd69zLDO3_uVwF@iE{*B=5uHF*WNW zfGayEU*sV5MwM)zETL6Rf>ayGgJX2%kZrRUG9u_BM~<+2X~n?vNIG}!v0woED4kauBXIL=duTy3 z57>S0;wXXSPI~qA*RgaNWAfaL&LS1IOVd!3qA*T6`(`wduJ6Ke4mW@DS(=f-w!_19F}8s96}aA*Of zN296#JyPjWmB;nith)ol+Q@5an#U%lPftyccG6nu)brO~{M_NgM?d-5mv3DA_>0HJ zAL3ko^j43q!0)Il@Rz^$d-`5|_07}QZ{GQ1WEft+=IX%u)>fNEer_1ok+y8VM~Bk&+gItiekaZ2)we~gn`V=` z;2H;!QOkQp8k&}7JESV!Jw&I9*WOP1NX53acBUsuyLMo(-_}79O;a~()eInOHdxzMe)sGPbR{{_ny(UB>1?k7p#ws0PpR8yp(otyVQtjt(Twv-w% zp0-(2bcSeTob3VxN4SnZ^9w(dhLD2&_3!!riNAuI4M4z z0d!9@7WAFnLc4cmZUjF-h&tA=CW?UCm(fYWxYpu0Qe)AQ1QB>+3CD~X!2B}na1X_d zl`WN6^E8Jhe`?bEL(#0`vudM$a^}vyiMd;m*m{_c_Z0wMzj3Q&cy#gv6S+Cty<`(% znV7JF0lWy(%1#(%tF$e|uI9w!5sPum*r0>!nTQH_J9*tfszN*Q%`pYJ%JWC@a+zp$6U4p=S45$Ik`eCc5L;pt%gXOfk%Z?SNPMuDVpE?8U_W}Tyzyk;rfacd% z$7k8?L@mw5cP^&OfW5aaTuj$)-X+~R8K7I;ox87E0MwScN}H3jBg(DY3R?xM&17!{ z;(Ts-oaJ!`BN!=RfDo;Oe68;3l>oYCDt8-6W1pe&_{@<(27YUL0^Ngpj7I4D-p+n{ zY4)<)tIvIx)rzt^OSYejoj(AaduV$fim(8J1Wc@Cw%1?<7qMF4I_tT$K=2xwo=jJ6 z-C~zHmu{mU8KGU$G#iA?&|Z>yxA+62)KtecVHd0}q@FQagD2!BJMFCJ;eK1eEsIF- zl@ zi|>y7%0K+!AN^;KpF2DB;s>A3NdM8}(G~bza0PzgZ~wKLTQ_eXeEFp}zW&y&JKwRg zI)4Tigzkv13aZ?s$L2S?2GrJC{0DpDMjC)rt`jnWd5>IdJheh8^vU5TnoDvs0Ca9L zx2t8u3ZfyrX#IOZKp3m5Nx3RR+11@3T93NySmmjfjyMJrS&P0e3NMIF%cNFU01vJ& zb1eEJ>*G=7`Y*1mK~7KvKo+CDu_YZMt_^n6&I}V{B{=p~KgY4kB-){*j`VPat6~M)H z*utyR(^2HG4D+Nh^$Ia_6J|=kIa{c8VqR=^!%OCMuw7df43`_*EjGDo)mGMqNo50K z1B~;T=n-$ccOhN6aGh&dmtOwTn`!!kUz;93cOpIc^zm?(Xl8BACeN&+p!5B-*6i6v z&U2Uze;1uH0L$-Py2vxu;yEkp3$Stc;HmSB&L;NIbtTchCCiG;_SoGi8%My@&dsHH zELG+fm+77{oep4a)_(x6!WsPmW&GOdg7QQVCfBZBrSf_%EzZ-yglkwy25n|~E_G1| zDxdJGOVy*M8ts`shcWNj(&ZdLKIRL{zf1$^D;SfXLx9Hn|=x z6x(dz;Ws`znRYprL`89hVAVFVWTfB+7(=XAfJE=D>*6f3vk6lCM`?do&;1|V--|8J zA*5)NX^wm0`imbS<*l0?x9(j1oy7n`=Qq=)tS@jIy8tIvJOb?GQtXm7`$`ZIpv{RH z&*%RQ4*VGGpIsifux)(R^S;`{U?YrqBrKadKMw6p z;Mu|s2b!3HbDTboCkZfA!ot#N`6Af!kQ{6>t8;VnXggM^=zTNYzB`(3--3pxb&#HW zesry%yf~in^D_wI^DG04iD#NKGnD!8-MMBBO|WQQ_oBe3Nj(SRx?5)7`t%PP{7mENVe1!sP(?Z_c$cz~H^OzIt z$vhfp!VeL~Z#x!-JdSaKjtxOs-RyUj2BvcCNMZ)rw6e^%fRRg5y|%V^WH#+~?(S`O zv{WzFHq^KLtIHSfTswXCkiGIAJsw?w|ERCPU;Ur{QupY{`2O*+ssChtZs}Xr*SC&P z{6KkQVeW1ObjL4a=Vr>TNV*AFndaXf$c&U3lKh=`RAeJUj$$1bsDLwmwOK7!i=;jN~eDB3ii-0UPk3+hc86 zq}W3iZf9;Y&8*F*k%cLMTXPy1y^~fkqi-QjHxdt9TVUS!UXNzIlFU&9#D-u~jH3i4 zQq=-pD`TUbSZP0_6ebsexJhjzHCeH{FA6DoVdd6Ib9U0lymN8_*-ws-%Vb2R7Ar{^ z+jT^V57pD?=(E!X6|ttH)eaiNkw#hQ5yg zdO(H0ju>QAPS9PWw~s;@*gExy>gD(F->c+v8d*#B@9V&J?F5B-$hYv2HN!MIxs{e6 za`ud~WMSg{y#@wPf7Z6kvJl=Q=n%Dn#XVdDlueM;X(S!oJc%w7eV^KOSv`pmd)T*8 z?Y*rZVhdyp%_1OFt%c$JO}Cq&veG(d-)$+UMC;D`o(TK!(Szyv=O2e5YbLM1K~)jDhF|zJj^@*8l&?L#@^Xn;*wv^(PTWiqJSw@a$TVPP0kD$=!n8L6zb$sa>&Y+M@q?J(te${osYc3^GS`FRdstQD*imZ{QOqhj}+OPA8n+*G;@9Y3^zIVn0AE4~cR zGRIZ5R^&;mb8dqB@c1)TEY5cUP$D2GcSgH*ct4;FRZO??OUhKrW+-7UxK~ZG+Px4 zo2AcdW}~R6)!)?r3XO3FgV`k^+g*tb3LRY(`I)82Uzr5Zn4eUly~<)WD9DA#4n_El z_!9*rg1AV%X{_(sD*-@Elwnl5f<0IUk%o{Qr?d^*F+~|gDix$^adsfy%Lwi6)ZrE| zm+sCGJ8u*Bu>xtwh2VVmU@&A_!*n*%rJQ0C?X0>1hWqHmG}zxpF$yuzJwL@E6_5(s z#ve6;ZYYh}vCGs{S&&$pT1i8;qH*i%?xoNH!T}Jmj2>^6RO~cn%{Os0m?2hPgXp+} z=itmTUat13CDrW0p^RmhuN`by^bj=mMRNw-BFNzAuUO5ssFppHm80Q8c)IenLLcAP zC~UZL$HmjzE1xjolr1pH1`v6TI&PgUW`?_86>jLNaOB+;NB-0W|h5Y+-jbND2E{TD%=O zdN_5Ui4%#BaB*LK=X`qY!rS33Rjo-VslIhgk@SvJH|Qd+iLwJQSipkik@0I_0t-yD zA*VI>Sy1ebb;DLJ02a^5DpGZj!C(ilk>a)~t~5M=K_JXPHkb)IW!P*09uqKH#E~M1 z|0uIRL=W42z3JQ&kEN5Rj)(cN+P``j(ExjZrVS{2-Pv!VwOC*vj^gcPiu=~Bo3McR z=&dYpJ?&fqTS;KkU{u@_&Bw#BUCg3?V(!usRl24hWB}bA8mI;55{KIgS1A;MI^9(#*=V(zFTAdi(d56w_ zvc2`DtYVQ0Q4&ApYHh*3wL_-QSJ$SFzk6}Dd2w}N-|dm{&-|Ug_oF{??#UB(zxJaq zJk(0BhY%+oy~U#|@b7&E{>I<<-j-Khd-KeVTSNcl^2+*0iE9Vx(9jfmV5Ka0jyh+Q zlgN(AFm0J3abah^Y_dtUx2zj%)3Ih(L;x1;x%g)W&Q_cF!}2=8q%T}&O^N>M#un!7 zp2qf(h03XBH>{C!Vcjtf_%lD{jkxB%_QExTV(OT5p&cYv7dHTG-FZDTsu&AmZL=^8 z@ML!)Ka)9M4@h#)9JR(UU(q|(6^y?vtWT$Rs5XvxK!&NIiuldOxRne^J4Fdyo!xXa zqFq}X?JQ}@xv#$)9XILMR;5LHtg4gL3QRDVV_MFTz>^i}+Zq@pniHiaHugQ(y&PKW zOGoAo<7KL~)dEF-Q?%}!#g1ep-I}`_Kx+ft*~&KQ)U|0++H`gTTzc+JFqF%9pqjxd z`zhB5LW$F+cD-^kuu$!kw->q66mHbpb&G5f*UNjf zPIkuz2vs_Xu%^#U-^BB;jx=f&mM{my54MTxru?gqRO^23S$FR=7Cz|kuFs}TbdTQi z9oJ(QLE^kDo*1MFOSn6%D{sDe9t)TkQ)?^NzH&abw(n6~*_94*kC69p3+xa@8#=Jb z0w&Qz*y{A+UO}gdRNq>i4#G+vAVoaQ`nRQJ40uJdqmpYjMzQJ0fz^e|VL^?<)XY+uXKq3F%+SqTJO%AH1+*VUm&pG1=5O7VpgR>mgMXz2JXuHe_J47O=>Y2yIEB_{#*P8$#{BsQzvvM~m>|A6}0uEb>38tj)nMwpSpUYGE!un(lim{2y6j+85hp@u+UaR*`P%^O4M?YAzbtF&vg z1B-&-WkBB=db%x&QMSCeC5>J(j$BhU7N*pl2;v%L@(Wf*;gZIx!wiY!y8V{uIs51|B!ai!B0psvR2 zSX7$3VbJqxZ^v_qODb~ZT)Z!)fb;qm09c<$cf+AEaxsV}=M)k<`_^hw0TK2Em!;RE zV^*(5U*kLGHd2oJEO*emQJrX0+*=#BH??RczSWP}XY18l<42~Kx1LJ%jsN@4eeUJg zzUgBx&is3?xQ|}==nDKcxdMOjd;a^Lt5>4#QnyxD9DKUY+m<%F?|)CK9q$RtDURb zz*KAIOl;jIp3A6&DSWXJS4ZqR6IP}X#ezbuK*zRTF=1XRIwQB01UF; zS&J9LgYZE~PX>|3%0+vO2k6YlS;;w687oW;8yjR4S-+x_62WMdYfynsY;*w);UX;5 zR9$-Y`nzPf+Q^`^rGuJ@Vh>GBVD|6nc@agv$S*D z#=v2dDS0-blyaJ)53??lC-Q z`vA24tY`H>0@QQt^?64m&$9=QalQxBn_brds0-M1WzW31>06=8t`Ptlx2E2^%quaPoH-pJTj`ix%9^C=hMrNT}@y2iD$V=3lJR@>BO<_bc%w@F(gOZ709UQ zySzoU_Z;teePuj7+d(#{iP%r7{cw9*I^NisZjm0}!r5YG8*4ehY72mHk>Z_^sXIU& z`X93aYNeX|09nduj>(Gd8m!kUS1TKF%;=n1oVO6l%o@!bb-Vv13KQfL~U76S_aB^36RypMW61b=y}Xu(Yy{ z>r?4&-kZ&3*)Xlk?2!UM|8hpFcot44RG# zeD4+0!zu?6fuE_Gdg%Q|G$;*C?a_^;itE_Xt@NP^yPkuM4fP#I0sO7=3#-i|cW3_j zFMsjXPk!A;UU*a`{M!V`JUWcu_!ao>@A`8CpZn6w-$*OaZ<(1}c%He}W3il`dhJM5 zNEQTZw8X~OmXQ|cwW5g&X93%}5f6fuBaU`=_QmT$V=N0FCj5x+*<_bplgN*TrcPRI z4OXU&nA8BsFa|GUtD((?8mlPkVAE(3N3^gMnAuH9$&lHqB5hpB92E$zV_3h;MqV@N zM&6(7Xv7EOhft26vuW#fE=ZH@dzNNDoX8KAnjnd^D<=%Lit+d)>! zSP#I2Ji!(bO|{)JEF5$_mEmH2A+>2Wa!Y^K=5-y(c4D5-G>qW&y9Y=?A0Xp0n{Hr{ zW~OBmF<_MinqB~oY?IC&+q6QnM8R|11{CcqW+Fy?TQv;bj+rmk!_gr+DNPTj(L2|$ zTIo+`&YYw%!BMpMJ!$`7cT_otE|_4(q7AI?$sW;YcI4L>@C{_R?*qx=GC-9VNCSs-93!M1#Mh|h#^ZuEPndA z4+3)M)Ag&ch}?rRQDM*_;N*G(!;jY0Nhu>}mQin$L ze^sR0JAE!zJXR*JVA+OdvTAv5p>uI@v0UbU;}i1Nc*Xk$0NJ(G0j9c`C^b>+;H@c& zF>*#N1HcC@L&^m=XnCuw3gBf**Fa$^4}#Wc+gg$>;zIiCq$^u zZPT_;&|Vv-(x$YMoSvmAX>fB_J`N4D9PmkDoae zAn?@V=fcoffap$4fLOx>+*sem=Lnk<>hs^i#CjNSJ^C+4Gwf*1#(=J7=M(<%dTCi{ zr*_R$OOXnZnY1Wn*I=kEj$0>=Gb)FvHnxPlnIPDPD|!>he54N+a^P4R?A^~UwIkZJ zbv7XS6~udzy7UYD1V{vd3UryK52Dwubi3e~d**I#6>a3gGTu(Q-ru^CE{zS5mY5(_ zvWjiMJUd}DwcO_wdnBs2lbs9feNW93K=K}o%*83~AiVrB-inP#!11Uk%UZ)2hiZL7 zTzvmM9vq|P-0^o?Zaz%27%V(ZkEhThWpTE41_mP|p$sqSZtitG)P8e&7Yhk(m0(X> zJMH^iky^1Ns>50a4JMGV>SO4l+L0hMzkdG8&x6y4pE-Lf3zr@}9$kUoAy?pg{=#<; z4Bfu{Q7n-DIE>R-!dkoFPv%M>*G5+jt?~4q!y%dZ0SL694Q;ak(4DQ|E(*Pf6MDD# z+GbLbc|%KAB?~f$-Ok|LM_u5-;?G9g^qN_ddi3IM#?9tb5i{!qB@vfl1eLXzAyCp% zu!_}yhdo%n$OIG>$@YBRjII<}BC^FMyVOUQ&Jbmgx8N%ilLm%NDwOd@kI=l{Wn=uP zQ7M*(Xg3!`f$8YnRcepY7@ZEbs4QDzqd2>~kjCa0(hweZYRX!v0`4XQbF_m_^N2-m!drO_7cH$X)0aKs>Ot;DE5Hv% zFI`F(sh(YCEm_?`n@2Y#TewxQ?)YUa-bS9aV*573edM)u`N->{QYOu+S4f}VK=XO? z7I7U5mQ}iT?d_dH|4ji5)wp3|%{o!Xed@t3r-e+C*S(_$X*7U#d10D@nl&0V(BiEI zD=^a4;fHGujQcB7>-wcxcMwUg7mx=PoYzbn8cR~?yL)Xx*wk=sYaoIKsLJl?9l(=t zh%y$)kLc=@J!}QBUbjlF|1#a71feSwjP~oR2shZ=T#Z%}BBra20-Fw6(Mry_)>41q zip!fcx()y$HK=Z3ZLDLxuj2izVpemX3lBBjUWNcc#>TyO^WqrJBnAKGI<+^~SFNwE zwUSlLj@J+A@xB4T+1c58CTEvd!=Y!p77?!up!2Hia1pGTb|{50v^UPOZ&PR}xHM+U zB{_DXVB+^Nz&qKA)Sw%g18rL%unhQH(H=ni64196FtuD@)1&=V#O~{*;DC-8%`C$6 zlzdwa^~y`Hq|bcn(~*ue@K}ytg3)rq`aLs(89rO`lVN<_l zTKit{hCo0QX9kX%Mz?|X0}hP||JA`1HL8DM5H=I+I$B%PnUlxSE$&ZW`|+;=1olUJ zwtB1tv?wt^EzzI$*5uvv-i1p5J}R)@co(hTL>ivD%YY-8!W_1=8bAf5XiyNSMmG!s z=hhk^(t;LsjfS1rmgdPLV5#Cd)@@oCq7yzkN3KN&pyf0zZnpQk}Xov9Ct zU}8+hdu0u37=0TuU0hr=I0q}KZ3}e&vkY4~1>)<=F+-^mJM8+@LdAIli&{Hlu%#2j zSXhbZC+$}qsRY)#j;=ngp@CSNoQ4Kk`aQQev(rY!+)-?1e(tkxTzvK8&z^l~wEshj z9gp7T(G~bLufSjYOW)Uh;jQyuedF5oKgq0o0&P}vJDzFH#G_{Bf|8sD(!I9btR?>F z4iNE`IoK%6$NXEN3xxn7=AD~=CT%-&Nq}UEQI~_ZwzdFMGcz;MQK5Rb9{@;MCgV>6inn#TI- z*aCo>l`uzYv4?G7S=TnuZZyIA)u%6CemU(YOSGSK@u7ji zFkto?bkt#ROe(UL4ocO4Vhbh`Af|GglqpPEM8xf3gCLoTy0i~)*^dp%=_7~8kW{9R zJoN+`waN6^FTMd2b|+oCa|PS9WqRq(0(1Z?=o`(@snu?;Wep@oT70*G&MhQNynU^e zu)O~YYtSO?<6e7pI9+`2m2~;a6Kwv!DZTLgv%vs2k>Rt6fqFy^m%@q4bfmruYp`cH zpMB}gmoBp2U7=yaSQ?qfD4NR@Emm3kXORYNux{A2ppqWS6^nAQNWy3gaQzY;ooL^7 z^6ca2|N2t{V`pu3hc##=9Y6k9u!eS3xeG(NK{awU09tjY=Vc~r1L@M(#Ay1$=U>GR z=HsE^XIP{YCp*#;XO3Z6R)=@rSgHV|?{FP%BUc(@j2-LX{9$D40gJAmO=N$nks{PE z#w;SOQgXo9huH%FA{S$zFVV)davqQho*dZU4SNb<01~BLUIUV{Y)br)9`73foSvSn z1pv0Pkdi4A{8_!47unoEqez*41^5dFCs>r63YN3-YnvA}0R$V|g~1kCS!05Lp4*zl zvjefXBv*fx-6*^fhYuaVjr>SDdE!Lue6C-=kwyp(ckW>KV!3v~GGFQ;)4VHk%dlCo? zYG+TMNgsOgc{F~f0C9jq0Fz9mrR?LkZ^v$7jW&0qc-vik?-DI`E~LrvX@ce^yTbO^ zDXU>zVlb*{2*xk2xx||$+o;!Io&xw1IDBjg*hISguZrVpfw~@~6kXQzB&~M((Drq~ zU>zgPd-@p1MH;vTZ3l*l==!L(-NK-mho4=ki#>WjLO}xKpyykU)b0d&lQ9DE0+jcq zA>806hY1KP>B6m7Ea{4hI@7w5+I8o}`5G7v0xP70ope!*YsT7ijcFB`UcsOD&nhc- z&c#;=zCEt^onuMeNTlou_UvtaPut1`pyNITTdk)bk;Rli`N&nyjxjzL3xjgJBFHJ#hql3~Nnwp3HGG`p8-U|JtHET7Afj_YKtx zYg=a^8tSTA8uzhSRKIlo-7kOeiN_y-z=st09=*-`a|QnT-~C^kZd|>78q2Fc)Y{s9 zuB~R9WFzyH7;3|NjfQ=!!Ro7@Zo#Xx3SF*oLjYJ8vJhkPTy7#`(b~Z#QlwNC>%c)6Z~#2by7|0qs&+d^s?`uamFfUTD!66%iaVN6#y@{ zNZTb98*$cZVSdh?m2wuLT=&AZ%fdVuy1iYPF^ePBkdyL^RYl+sexrcsRyt;2=)A^t znVPzh-WsLlDE_0JEqJT8^`%zQoSjYm=|C^tlmHXQ5BCz&(QEfLCLCj^EM~Jy++ABE zOTh--*cKaWybWvdMy&;?BS)i(wk@6R{TfW0=hNkzx6r*!rnm9$yE=s5phbB4#}Y^D zYNk1VwC|>hC2?S~jLlvLiy0g3s?{h%C&->nZ@tCZftAXQE2H%FJ(!+)`WeieJMcM# z;9zaspt!>fU=OM7zD}e@jlGZ$ed!Xq{i$)YLGuBmB_QhSv6!iWg{&hry}L|30O@cg z09@~7bb)toUyF9BTi}8w^z_P^E?>S1gV#a&{3H^q0V;62)7Z%EG&eJbHV=Ty*pY2k zAGk+h;ZOb4Po}T>$kU{#v(1|cu2%kDw@uLrv3-mCZ*uGU{B*iLKAaAvjI2?p0b{CqA`^zj;1J;R7g zCqdO++tAM`SqjT8S+@LyYCXJ8Y zja@QUJ7HZ?M``&6`Vp_M^s#U%Jno7@5)WGsBq?WYWDHswWmj^28`0OZ+uX53t$CwEjw9Fk`S#Rg8s%@xuzr&melG3+8f~-2gq4Ad1CL#D*8PAE1CW|FZs6}~^+GaT z2(P0Dvj8yCE$p0JD*i3t&wCaCGCZubOvv^_7B<`JD6Ay-eVvS_n$yq+<@`*kTk?BU zufraW{8j@Dz&x3kfaGh=RU5&{&TLw&3(eJSM z&9EuiBF(;5f!2nO0!>r}(t7GBX^5)zntI#-s@C4SKJ@lu#}6(&IL{va{OAh&cDVw7 z_ecIg&7IqKPi$^(e0xuC=Lh!n_jFXE6H_z0!OpFYh0ww;`*N{I{FG|78Zqb+^+J8ox(#>lIKW;!>2+EZ34vb)E2}AX$ zj7i@+3j73sVSH??(w+u~1iko7Lh5qBMp-?%Qk!Z#1WB53KC5XI)8-o#7Hkruo5?0w zRoo3&-cJ^yjdbL({=sx|@K8Fo{~+f3bT2tZ=OqtNv>p~X`UCO>Kv>8m=SyD{8iJc=}Q?qGeg)mkI# zNsGOaAr7vg#UH*iPDOBM`r_wbP9OQmlQc6plLqkWZA0g1^|Wm_UHcCorMR%K9Vd?i zFnt~A!n^0w-O<~TQr@)77Wa1t{iW5xW(;%R`K<3=VayHRx{+qNpS6In#~yn!9Y9`X zn70RUM{`%|INrt@*O+eGvBL~wHRHndg+kNX`mJ>S;w$(CQ_ymPv^zb1=a;NSu$MqJ z=PrAqUv5L120%|N;)h7Kv0AU-oyH&>nko8dfLt+C>G`<+N(ODB{hz_kY-VyMouQ$F z1wAs%t~oWZwoB_fmG$+l%IY$${E!~+8vrbP{%p zNh)LCeCy5h*7#7@z@I(ZIP(=LNe{*ann~z1LYGutCGW3-}Ba0Uih-{#*8} zWcV`cRA|l~xJi{^O^|Q8;LL#4*Vjsl7calVgV71&c=W+N9p=vKuw;wuRCI~&>g}Uv z?cMbAzxc^?|JPUq+Xc3Lv-Kh0uUeT-=78u5=Zb8Jd9g?1Hh(9-3*gw8~Uo68@WmENj;*r)l*X3 zV87%o0^KY-rcs!>oAeUCaPeBYfwA^>!zyeS{f4A%ROqeXE6Y9bCJLn zIy&@qR@p^1+G9mBz~rcBB2-`wx-EDs^>$)D$BFEn!PyjcQONSEbT>HZg=`Ru!Ief7s5*BI*2Rt!=M1>?DDZmw}=HQME3wErdC@IVth<2s3AMi!F$+CwVq-$L0J#SFsIInc`efw zavWk}tl5B4Kq31Y7Ffgud%+`Z9#-O zFN;hBs2i9J+jD%4c35A-3*|o&Lm)jRe8m!{ju(3HEe~$tb zz^vdxlvZY&BCZif{QO;;8jyFXs#=M7)Y=9hWW&C?J(}h>-bwQ__36eKn^#ihZB>UU z9yyba44lJza4?;FMntXd~vt#jYL zbn@h}=<0NrrUGxi`F6U@Iy+AabDH$<5{%^rmNI*QR>5TGEs@4FalLEz0L!wRv8kqN zdU*_T;4bzw=hN8OJ4l*7oL>0g2k{R)kh-wIF(qEj`?Robbab+|wPVcO-;_?A?@zDe zi)P7BK zRqC|uD7yA~#_lBR;o>4zY8GfTE;3LgD%R3xKle%Q-B+dk`!U?EY2r2A=-&Z;V-O?w zE!sF@9zEX@711o#+#9|ybF5}8oBB2FYl&dg4lpL*0=RF=!5}ea@wG*F+15sJ6JS}A zrisGJ4s?p_a44WhQ1}oZ?;8LFK<)9hO_6!-hT+XG7U*zeFPNH=M)#cVrR)TQ%z+w( zyOu_C(YoC+FsQe&G}&O%Eb^YST->$7zo}N9F~qw$omT~de&Gdr69ODJSXeJ!zQk_j zA`O`5g$*z>q~k)H<_#+BK8g!lg3_|e*VJB!{|jputIi(OE}DY$hB|2jj0Ko|;C$R4 za&r|C*TZ6($~|z9N+@hx&OLED9Xoy~dK2$0BSVD+vf5T!ei&A0dUh_oj!)rvOpZs{ zWraB;z|hHVHI&4e`VWKV4uMtU%MRMwm;!bJ7hAf}=hZ+z(=aoFj6Hej+gR0Mg^^sz<2MouQQd{Iv_| zCPf@`1jH2txvT7MCOSqk18O%6btnYhsM4;sP=8m4@IU|kzgIUkHFcP_R^Pd_wD51YojWzMubI zXYtl{Yl#jQ!SqBr*dhZNI>8`u4Xv4J;IgXO%O1Vj6}I_)ja2KlbDaRf0?sw!$krNK zMcS@KMu}KnrId%_I%AtnqV_ocP1vX1ZS{G`W&oUKeX4hHZm4I|4>;EFevNayvhrrS zdgD^6yjh!`8+tr+_ALOsvosWV@#&|i(me*t)}9up`P0lcG8Vuiph~^9t`K_woaUB_ z^!y7a(zDMVPrvu~zK|~6sm4C$N_ze3Tj|2k1v)X^<~{*$$oN#*4vzOX7&W=%-o&yb3e13-gxs8+P|*!+y_69KJr!1rPC+-S?9PncA zfb2L1xFp?9I$WRH_I@@HkWJE66^z$CvN93?JKOW5X6w?YKK)6?6CSruJ&lxr_N7>y z?H;75!OivrehU&{4fE|K#`Yczs$R5JtOe1=&!S7)+}f=y3PdKQ-I~Rnmac~s>l>R)R_Oi0YGHS*6j)nWpwJm2-}<868Y zGmR|Vo6O94g3(6yiJ^Ug5eXVdj-chc;H;!<|N_MHSpSkxs`XzEhYake8+gCMB2Zl)gU+7f?vxWbCu zi?@;BSx@Suue$|bsljw+|DkleXCMu-du?Now*d0=t*S6+gscw`6Ys0F0-Zys#Ik}~ zo!c##z}p14>A5jl;?M(eahR?w1U+7}VS1UAa1Eeba28p8L4B}x;yQvH2PfQG1xRfc zKt3QIpC#~jcN{8EJAm-oZ2+x(D`jmXJ=T2y} zsNT;GSYh9L1?s;MolrNaji@dpI8=qfvtS(?9nLg&6Ho0F*yml7= zxnoMnG{rLFb(v0jO;(Ub$;_-Ln~QAp6;m**V zlXDAmf0V}d-@3TCa7a(TO{;U6pA&YfFh*OYNtQ;|cl)ThE0|Ib4iUq1H`uIIYih4u82`4A zqlQ8|=lz!2KQ^Fh4T;)(*~J5CjI7^|Ix(zcU>&zHoNYAwgYC)|ZPONv?EtWFOCbK% zp{J{AbY0W*+4F&^!f%fRUaD#*E^Ja<2&=gbDBNDv7nV#4ao)Y{(zGBEb7khd3wsa&5Q?n)ryg1s~rQy&c&Z)x&Of6qrNH-UTs6Hj#3P3urZ-3gItJ>LN_$e~E>q>q2<8}3*Z{MS>s2lYPvvNDwtDvm|z}ND*E35r! zdT|_y7wK1s2(51fma?*&=m|Y}nMW(1*NEx0t7Kmm1#yGi1MSZ=0N-RiLsuy|WVTHC z(FXUlq6y}b^@i7NF3oZ5bTr`@YMQ|&`}R^l>GtteS-m!nj}9KBjTcupQ_~{O9uhTN zyL~P7=`bzoZm-RzS*}O31x~EX+g58+No`ML$NMTcqXx}jh2srSYP-Pp)|O2e=-(L( zU`Ap2dO~y1T~GFOAX*Xn~`9rI0wN~fEIzP#VNU<#7Qf| z)P{KV#0d&2*g-yi_Dnhf^VdzA97U-F&M5aDr-Ap)>*zPG4MT%Zgo*P46-AqhX~Xay zRA$;2uv1MSa`J5GhR^5L;}Bn?$Q5v<=UkMS6MwBRR#VnNS-)xKzV4oMW?vU{|G{(+ zjfHy(`zz;O#sGKQ06Ad@SXOpT@%giq@sCnce}i)QTL^!>4#Nm*$FKxg+nne6lZs)$ zM;oWGSMa?^zW|oPmdDHMcL7ns09)j(oBb-2d7X*}L9MO*d`Mhhz%~T8 zVN?!Kuc8~fg&JOCE20?;j!FVwW>l-$RU2>xkDCMtL%7$C3z1gPajdd~qx*1}a+@;p zAq#G?$+kKl1E;T>p)WCulj$cHiEy0==xLmCr>J1uF`v^!bMw_LV^cStnwY)YOf&g| z+m%)S_@!6ge)oePcF@#j zuP&LGb=(?~(GF6qBu6PTTy^!v4Lx%;FM@sN7hCMjU}p8SNNT+%Ch$; z;Lt8ozJ}wK#ISP_x~AwCU%~5)Gf~(Qsj2J+v4V+6mVf4U`>J0 z@*G(|94}VrF!Ia`r_;Uz{h_7wzea2n>ic9)kxF$E+ezcD5L0IsUyW>;9)}hT3W~KH zS})St6-ct&#BZUKgsPzTZY$Sc(9AVpo!Q_%*CWB{LB~A`ZkQRzvIbd>*KKoi31ViH zuQ4oY$mq4R-ZI9XK$Cc*p*vc>ZPDD|E}cu3Swri##Y0dk2vh?WeHAtA)n7_u=BQK& zp;?If%dQ>|+PjqZAPNi$P!n{%AWTabK$7W0HDt$+oy0Wqv2^;>Nh+EUviA4I4sI4- zr)jkdq^2iG`Ch$zg?4QiW{yk&ICE-2P+9s!ZA1wyZtUUXmn-GqRzs^&xmf|T)d?+) zkQJ)Gj;JIYrvL!JvPnciRAAZ}RbXxDPzPN)n!3{=*gka*-PpKvQoNwPM&J?}7`CPM z*VTJ(f;Mt@$ERW^bbE3Hhx!@(_~z0SI=^{>YXol2d7Yh01#YA6#I$A!XLxtC7Nsz{ zvXyK8%KTQ;MCTMao0;&<6KE0abE~ynoMFJqflKg+_J;Inwc99}G(e>cKrPp~R$UC> zF0`YwR_vLorT~ZuZS`#(K+t8(?e3w4bOeRp;{u=$b|Hv9clU^qw+L2CTcmgRot}q|cbQ51 z2Fp+SS^?lL?FM&?6mjljnvGjKi0tkotB%i?MW5$BWuP!r}o7UpUy@y*mI?Z_3nc3H|rcpmQ-%)MW}kH51m=O(r# z5&|V~+@Sa)0AL(J*6T$<2jFkVq6vV|(i~oO6qEE)RM%p62YSbD*0!XjW)5ould6 zl`H82`tVU$&+!RtT(J9ETDOA+okm~=Wnk@&VwWTd2n%Se8Q9vJO&70xISr3pOt)`8 zpFaGN4~Mprk_5067WRpP_%fru5Lu30MaF6|7_?XJEF`h^kqK;fZ)&T?dd;?!U3q&1adBbQc}gl z|2IHjDcHAg!3!3X8@iSOYrz5|K6>m%`WV0wtX~)^nqCAD6_x=5{k;@03qN;d-RJjep$0+2u11P;i+FZTc#1enQUujc{+Fd!UtU=jZ>Af%w5g7r~ zuErn(vaagnqD{kQBOKjDbKv%Wu?!g8T>!!!$X!3zF78pTnGS2_uzT5oey61zfKH(8 zhnfDi>9@35fI$AeTbpeXYE5O+dPmp(YIege0QQND5UVIR=bxy0t|5T*(*}@U$=K}Z z;kZe#RD`g`J+Nv_Hr12>Tej$1yaG_%0RSqFb|sUQ0*|I-hB`o#}CdHWMz`{G00AwHxy^XP59_XmHl^8DNH4!-)*g^v#1 z9s2g!xw#kEl=MW=R8+VMPLyq!QkB)Y&j31rbM<^o{%pr2gBP!JZ2NCPq4R;)y8rWe z#CWx}7SZ{9t6!t&tB8pfj6~`eX%NnEMQryt^4!WAI~IR7RC{!;C<+ws>9})|g;^>9 zAlkeg0GLF8U-`ML3;aE*eEGgdXAO@z(tm8mjmN%+$C1HqWtttIOOOZ=lUi_hm;sfpi+J+Sx;7vLGD>S?@Yw2E{yx zy7M)mXrsOnMzr-%>OYK?%oOR>1=^Jk-^D`a3RYlu==wx2+}Y7EK{jg^L;^sxvN{8! zEi`!cp^F?)O+}FdYU4UXP$Z-8C9S7=OU5gy|QpJSX28PvnFXQeG7)tY@1%Z$8f(8{HdEa4j(ykG>wnIT+Yt{ z+!h1ePD0#hhjZ@Pr+F?7CK&(6P8?2c`Un<&#~a`e^;mmo^^Nmp#A=YSRl!VdvH7p) zsAWCRy8T^bZWe)TV@5{L4Wpc7TPE=e^#|q*d7oTHxWX(;ce2*UyY$QmT-fd>^H34iwS3rGK%f=~5yoQsX%097eFld4E8DbWZ>P}c0D|f{{x)=-?s8?%Z0A>l+4ZIx3W2+# zarMnSWc%t6@zw&g^$QDN>iY>my}fQANT+x&EuQf(bfC92luf_|iTX0xmQM{$6+mru zMX#)7g2@5_*NS2QAfFAz>$a!~$q4#|;S|vMu;kC|y|8`1iUo6V*GaDy1KRCeID4EgkEq0Uu%gEjmmD^5E3(X-AuzG2~ui_d1goI$zrrp46$M1 zjFKOKUlr?wSufMCyUL`@Lcw^3i-p=cAsn&G^-|Cl$7hIk6C9E&55zcb#sO_6>GE*1 zH?|v-4Diva-Hu!UYu3Z1%`rBu*nH7vw}AkMKzP57WQ$aXETU20S=|Qw^%J9MRfi18 zSew1NTpw6FB@8G4Y{tjYjw6*zXyD1vw6)UabObVlB|<&*D#wtEGC|5N1r$iw@N*ZV z>F7yM`hNj(Vsd0M^|5Z%(N(Djrmm+CQiU|BU~2;~Z40%>A3Kq*+@P_*wd}C$$*Z|2eTJWll6?P9Je?HT=pPL0#hW{U5W_HxZiy4gNfm`zK-t|IK#NtcW16vBJ z$M5QB+o{;zoMZ#?JA(miYH3-)l=J$`^6Gk&xyK1+MkHo|tVig!@-8p1K#WO6_WWM2 zItEY!ukB|SwIBMtE~>|N(Ev&_$%=^8awn0<8uI*3+%5Oh=(-Aa>GjuN5C1&Vx23P2 z%$hgVf4k_nvU7>at!|=V1xu?JzsJP#m?LIoa8fSNr3Ns}t<{-nvEut$O+`ullTSXG zKJ=jv#m{Z*j4GH6D-6&z*tT~sT}!XL`bK)|-FMT(q-9ndQ+N%c>tiBV#iS;$miKM3 zUohZ{jy`Bm0EP->xpwsgq5+t_K2n)J?+|6_A9&%J^jz(M03;ex2~^ac*>rqnYdI}L zFK=*O7tx=M!FmZm#~Jk6w=A<0nIfIJ0^{ZT)moX$b*$0P$=$btWBUo)i`V<-?l+wK zvva-RzM26pK`DUV1UxoEdk5%K6dA4HieSzAR>P{9;;H7|;?PRq<36A>iR-{;HxXFt zqAN+l)D*8Og2oDgZ_NrXo{JO@_Kt1=1~hiLo9r}W`O$>6f&0Mq3&ZVv_oDwWGd8Zx z5<9qUQtbLa&7e^krh3_lZE?^hJHd6V0V)Z;?ilq0TSo(;rOO67A9d|9_V_RQd0KeF znDRKcnACLgh@D-ezuc^pfKEw6o(a4@7Y*fw(~0k!2BIz&(OA*$v4^&%4E>>2N-+kF zN3xGA4L65|&fOfk(~LJ{!}tHdkNn`rKJxtK4}IvVhq_bDE9|4k@762uxBj=kU;p-7 z7mobG&;Rm&4(t3)EL6vciw$9zUPx-nO|sXh?3-N`Ey#+8aUj_2V*bQfcl}rAn#X>w zfR!LHwOOPqd4Zd;=;cd1sCQ1A1`R!}5)>ENa`RNI1wJR{mh-Q4hsd9y_n#HSvC%Z9 z3xw3u@g8(s;1yK!lBQcFJMxtd5gu=2bDqal0zl$hBmRb3%V@n707LA=XKL_20durE zPuyr(pn$+sG+)f&HG;?r@h6y2HmSQV_#9U)A&Ll?nyA`cBuzMk&TQY{AiB3Bse9j{ za86hzy}1j4U`cT;DO#=eA_lQ(wE|jTXbN|1b}}~ic7Kv2u+VTTs;!mja4m{Vm|OEU zt9v7LQ}j5F0!jX@bc=<@^yfzNl>kgT6ho{K%WqB8hH3K6>$hS4FfHDHG=1pc5!#~- zq{F8VrQU-b(apljWGD~T1~==nbSWL(54+iaHa&LkNIG@vRO)%B} zb89~>X$%Yi(4BiHTA8ssEP~sE;ICZJ%inGC+|3m{iWoFKJqTwt-lReIIR3_f&`o|DF||z3HpKwF zbol6j-K#+t(oDcg%Pz{S10*M&livAYwWJgG3f8q`x)ri zz1Z0#dw><=KdQyuAr|J-+WmOgj{Oq+6}$5oqcWhyc#TCiECfus7cv81=SHYvlT5+x z(Hl3f)cuPeo9;rC|G)qEkAL#@Z~L}SOx|C8AN};`3jF(Bfxq#0{&wq^UwY~6`Sb7n znVIqF52BIX&!U9ApP8E6w>MJ1k+reKRo*B^tPNM>%+@)?9mb)>4brf94)Z`VAo~U6 zzsFC45NA+H@D-$i)wY7RScpS6mY*jew2~|=x;!q^$gUAGTv~ORy#NepVd91@%YSm( zIyglEAs<^!`r5dwgu?^Pl8pSm!N6HaVcgqON4As}Yv+nWGr$LP-#Om4*P0gD@Y4!` zqO;mGh4TW$Uc_2ETU6ks#|}4`z_#X2QnUaPK2t`})~B^xtkrp>Ii!)>TIt@=Nmr8= zb&K@I)s~F!jryr-U!rK<^D{OC^S1?vT8IsEXV+X$QWiC%}0!sxib`-hH`jsLnX8%;CCXK~(ECWn`4MH*WfNfRrR>DJ7h^vNr4rtZ%6 zbn4wB=_z#hj~&7=nU40aNFCK(>FS;H z$c`{~hUMF^s=Bt5`-WE^Db*UTeSHh;8f)9q^l*Chi=Rt#beZa>O8Kk5`m57ZPo7Rq zxN2;`_zm_orLX?bGimxHX4hojzVxLpr0cAI7VkAQX#v(uW%)FodsGnH?hS%qVq%1b z5f@SuYx3bEC&TBpf;D;&*N%~)yJ1|eS-F}*ykaH?;u(8yV}}Rd@$hx1>8;`02Vbf{4{7R+A;uRD70H_Y@k*Zm@))vEE+7 zwH0&pDPAS^YpVFr9`73f^ayF)GY_zuWpUbOfvk4&%ZS`>p;K@(MIb28D*DlKk!7Ij z3yq$Ozg8SG7y>WAuE66ETwt3bt(d9mw)PfUr(ml>_0H>Wyb|rxg87SeIWsX1=v+_{ z#}@&r6!(T$UofYLSpXOnR7SD;?B9b|z66p|?)6MWwSLb$^GxXe^bS0LiKU;b{_smL zy_8;hwd*lb5i9=8kJ8xH8pgr7AWAyISQ~%n_;hTw-5G-^(ybcEd=} zs5aFuO;(?oSF8J~@ein@s;Mb_5NX*&QAINoxgMajMd|z^_tuUgRRl)aJ^cbT%a(z& zBMke`G=*96EIN#pqV1md&Wr`RoX5{E9^kZU27`~JS za>U$AFo<>`Q3I+ygQm@<2aLno?$`<_KLEhCr;C(QF>Yf6!6jEIVl%5uY2irDVu;b44=Ij*9!5@{?YNV z-}5V<{#^h3;_^TL$3OZrKlR7|)89Ar(4xhoH~L+51^&Sg|41Eub$dVe#Vav^X6u|2WjriFRgCYj^|=4YpV3+?&A%~10H`imrp}F&fKK1O zds;zs&Ssz@yOTqIq)6S2Wprqaqhi+$Fmc5Vrg9SZgcc&~VAHjQwye^0G;EaxE1F+# zq8(O}v&-?iIo+JYW(x4?>t-=kZlMc>=c&ZH-fj}i?R8SCYkbYzohByn*`N$J%(cWZ zv4)wB)fz|<07Mu6El!Ud8N}F_%4rJgD$zQst!@L1efXJU>D=*w z^!TxX^zOC6^!g?I{AhbRgM@1v1LvJ8Tn%UMu$BVCSc~c*DVhONi&LZN6)e-L`1kN# z)`xHYMEb}FpNT@ytu@lQ{V8X>CkLskUx~m96GA^`vwgsrKDMTe(Met-i7eqj8BC^pDH~yNZocw{Y~> zaR{V-Bm|Wl*2)dCo8!k%oVw3`JcMZUz5+l}c@EnJfR#>|nBA0Hz+#8@6(>+mxL~4e z-{O{y?^XdXGKs8EorQ&&SEEs+(85%b0qsL}shz=Y)VOx#>b*)dQMG2!QE0%8%W2@u zq{PjXMU-9Cncj9ld~Gqva){z@g^<~QJ*WXJi#>wXVsZ-l`f0{}^5n_*Y#WZ>x^*i} z(l_z7*WXH4uiwe(WOV>m$ij~8Fd)^sG-GpMu}dXE%8n4GOFNrs3D((|PW2s6&m4Y= z_H6hu^|Mofer^Ih_F>X#yR^A!Jc$^%<70Qz#f$Hze~kcnhSc{KgKd$*jul%P*^-Ez z*iy7%TA}TYOrQHj0tPg?wFZJNtAZ;5h2FAVQ?#bH_45m1D{k~KknVs4%Psg5H8W9~ zF~!toC3d%7O(w(+fpinF6$8x5Wo%(&`mC@um^R`iRg1?~WI?^xp|dpAqi{KQR$1lV z)@k*imT_NW8lRacnr3r-T@+Yl4Y?^mudy{#~xX zpZ)**+3uhGsh>GV2IUWqOpbnRZeji?Y+p-^JI6b3qAo9wRlhQ;msNm_T{fA<(O}4n zN62*I8KxYv_O)czLJJ%_dB0ral#OH{W~{M*&-o^6?>q_JGkwo?gK-0pY5>IsQYnb9 z-y(%;UtTxVK3~1pHk-LBHnDzY6nF>%*WKnux-xK_ zRmPKo;SW3uKoBfxE3(cezsl5~$E;L?%2xqkl~fVOv*xggEy0gdu%Fzo}A0Sj3dQDbUUFj0q3~^ z=~6)p&!!Dim0bS@HTafiAZgm6(-B1umbeLo&Olyl?~>wX(Ox2T`}vDgtZNPF%a`w_ zGwAEp@cWPcAP(^L>2Zf8?X;U4y3+TgTemGao>cDiG|kdEV)@ydHw(-2M+?~zs= z#;&CTufTdTKDBBJ)yfkOJ6rnk1+FJ<@1)mWeKXe7MmEFW^bH^3cHp_Hl@4s&;R6E{ zhnxdMF0xL;HjWNa^s!7^Q#z%DjELjs(o6czqlLe9`xa|kH-Fnmeb1ewaRlc@)~XWl zx-^fUuy!(J)UNVA&vUJMp+#))uy6lBx+2@^x?%Q>u~P|i+sNx`0R8eTwH$Xn>yw2t zba_fmjJsuue(amvK$Ue3@3W*U1@ouDzVlm~Q&fF_`s9h@qyH{*_c!vK_Z0v>d$@b~ z_Ul`>)+)DG=GHgSiuL8~8-)7(NF+5nq&v~?go zJ#aWZdFUwBRjr6n0fJE2O)Ut9(XMU6kZo-(K$X*`2Gikp@7}@VaF)Tyj>&<<}QwaYd<2xpnNwT-k*f>ksXAVbvxl^@D911$rzffV!}0b+~eHCW1^)!=>Aj9#)E zv9D=YgJKP7=q7AuN?oMa&Z3)j1HVCrU0!o7*Oi#DPC(wZDor6XAZCMNuugQ7@y5&`Xj<3E`nM(*}IS7ayh}3_i7^( zjDhQjMI){i?96?=)$0KQl{WD=$GZSg2}2#W4psJr)ON-!x~yOp``x=9u1p4oO~y!o zOqq*&EH?50!E&4vsTwy%^w!*?^F8XI$KHAG<(3OqUO#>G(3xNO{=fU9KmFZ*_CI~- z0pvFlY#u%Lcg7X?ox*^GA+@yssCmCnmv#?kEEeG zS9foAR`O>zll&L5jlv!)=CJ@TMBi?zvu4=WR$~F;CMsuQEOc-qWZcg2$BcqqFv2p5 zsp2AS0{|goHS0q|rS74;l32fIaRkTN;%D>x%?i@BF6<2)CmUxmTL|7n<|a* zO%sRXg1X*fE}H#_N@kuPz%~HyURvIs$v4s>hmbPmf;gRQB8CV$=oq0ku}1Gb-;ZpH zK6`42Lsz~6+0X>LgUrPD*j}BEbEpZ*Q;e9~Q<~kKn;*Kzu5K?^lL4a;gXfMLbE;+2 z)Uj8m8B@wuq43Z+kh=f{L#(LJeW?~)|ZLD1|cny`QyRn0oZrIIqm^s+{|DZAK2mH;WRNc8Gfyc(mI;i^VyA+-7s66xGhoft{W$J)C6eJ1)`4h zcwL)B3vKzT#?wnTK9^p)+R5+x(+8hi0^kheO zda|uQZA|Z^&%Aau{rJ{P=?(6!?bT{!cL8;~tov&l^l2t8H$^dIeY$#KD*bppvAkh3 zecgw@3K`Q3=et1xW@Y-obBE%*Zx2nSPksJky71l*Yq<^rA^pIgy&@CW-rK z#la)H)l_-!!Ne}oNvf6g>tri8bSHIDRMU+))Ww%UB{I7FTmvw&|EleP%;!7vvJg0b85knv%RqNfR`0OLUc zbGb7uk27|kQO%~QsOimY*`a%UEtRMpv~k-9^JlfMo__+AG3;E>VxcLRfOe-RA{4Ix zraIn(S*pasA-Lm|REzEI16 zpW)f1bQ=J82O58Y6zYmQHqEFvi>faHQ*66401Q7yuebkGGhzZ=zbg%sO>uBi?y78e zR0XikRbbggUBl@{du-BZ-JlQ^bezBG^75XkVRY9bD2ZTBfL|lvWdNwPjzu480%ct7 zjZ5GMWNx5A3E(HdDULC!y9IIu1E9r&%&_-cu%G{yt1)Cv!$rOrNqKCPHMPacuY8VLO_cXNl%?hKiopNim@P+ZzLdF=?w+PKK080d{|^)A%#Xx>4?cpCj#b2C zjeK#zkUYqg_=^1d`2ScaGvgSVDFRsVjKLy?&30x^xfv^- z9@zvp@%PsjWfuj(m?vhzE*9&9&y85=3FR4g?@>(KGA=~HN_lV(PU(mTnaz)*EWlj8 z0Qnk3oGtzxZWe_!DZplN@VUC#*XM$g92-29oIz7|;x9}?+iGlU54Mr(vjtn|dg4P+ zvjXc_hwou+3z|39i+a05>2nJJT!THV2HaGT<+0n-5^IU9s9ma>Asreueb%wUjvKI+ z+G17jHPB^aG3_oa=gvl)RQ93G=eI|7uq@cF7AppQj#HwfxK)5JHw|v0x3Jy1kzRfS zkWSIz*2xp;IDMRJu`vTW0`m3dBd%ethd3t<9PLV{7yHpecBY~A4wyLG;!1F^Ca_** z1Y!CefK4II$jIIF^2;x$a z5TR9P;p6;Pu}7Pqo#i_Ahq-ngDfU(fk7o3Nw%0S0DAS!SiKs7JrmzPhA!-dcX$wd; z_*`wmqB#L%LoJ`t*ueeZTKiQ`YPgbnpv=cJi2~JFvh#WI|I;{qyaliye&UJK4^{u? zZF^q<;2-@{e_`c2|M1tov$VPO&i2CUAVR>FO)EInY{Y0U7us^-7PNmXY3?#}dM$Jw zY%3Lnn)==L-v$jQO)RjyQ)uVfqN4N8=rBF`78w=UP%_Ux1;DUUcDwL9bZ!mI*cM>Q zR7F|wdrx1brp+kA!wwTs$e{Q>S_NfO&00`@@1gzavgk#RcLB&Ig3a|EyjW+_7^FtC0+d)XjJfUQZ{g z6{U8;un@+e61#3&EfLJ!NY)hTNdt|kNP(&#&_{?>5$P_``mAK!9=wiaN_2U5F*G@w zcpvTI)?N-d(+igOSHN2BVRI9sp;#<(94rEK@m*6`1FwnSFg%SHWHC6&jrI zX8RsxXeh>7Ofmk8G|K}3(7Wpb6{*^Moig0YF+2z30>Z`j`(rl?r^`hs`}xIi6XY8g z3NV-tIQ|r$qk}_~`U_muHa##O^0g=ziVSXLPW)~gxqARG=79c&#X?aosIo3v&=3qO zE4NywHb$O)V{5x{ZEgP0-~3;GlWl@g4cBzu?M`XK(kVVbS+VJ3Zx^?Ht^z@m>Q!g6& zlSli}x9ep{inW6{)=`yCur4+k;#(1pZVIDIF06uuoSRvu|1`EZ-WIZzb`X3iV73H+=Gd#DS zU?p&qs^)1bSYJV~oBK)X8&A3x5ZOjI3wLQ^WyP%xq!mol+T&JB70$I<5lFRn zwMV6rZSSQ1bstxIs8(f9(_&K>R?1mv=XD1dYDkK!Pw3)IF^9(@&o9Aq>8bS~kgK3l zP8_|%1Rxs!<}`H;uXEDb!b(kL1a`q%0XXCM0?5hsxn}r(MRl{s;JcUSz-h8svoJsX_*-vov`>vLoa^fB`lY}AH~!Jjo;h=P^bh?0-xD35A3c8e zUV;DXAN_;+^XD%gdHtRDe&6+>k#C<{UOh$PsWF=}=S)lq0KH20vNjfh6>}phfn)f~ zJ=>2rD+4JN&T}vx_W@u`uj2PwZ)B^j40OUjFi>T|a>b&U=jFZU+<(V=Rl?f^Xe_~- zJ;mdAi@4%^j4Y6I%xO|Em0?z099}+WJ}Qd3atzQoIgU&3KjToOqrE2i`jn5Hy~uGy z*-UA15ziG6x{oUWaQFy93b+osM#P*i4kD7}ZbAzT90{=p0CKrb8JDYIkM4B`w(z9b z9LMH2I;-#|Xy;e4j;TX(RD;AQtg+(oY+*?j%S;$+qAB}%v}dhoq5&KM0A&E1@KkNo zTeqb}-e#B0u9zmX0O9!ej2;koqO$$e?Chb$B=)+mbxc`?P=}8 zdo(SWfe=Bbjnzu3oaen+m*}2icc?n-V%Er%eeUyLCiUAwSFoe$@iQkP`&P#~*-RnF z*L?IjG@;As)whvV0nirbWC(5XM@B0wShVFvpUM51qzxY~WPA>ukJ!^RVdBjaj4l$5 zJLjr(Pz~$b1{Kzuv=D^mMoBwF$&wbCIdTn%S_SJ=ziG3`LZThdp zMz3Ie;(GxCGouH{5@_-J+E|Qj3j+YL{hMG$cFx_D#RCQzG;7Ti1N2fhJr4soL!~Ij z7)+`x7%?Rm^t;+Us>CX}X-<^QqUfX4%ay^c1b|W58r7Lh5`?9@GJymJfo9*n-gNfy zQ)ytZFDA*-0;ZFfuclY2^u2QB8lG`hXWCgL2NLyt8ij;5j&nLd@7Wh|9RJ9vv*|EB z1iJx!m74v2!;#r3Fj#Ip%qEclJCsVAL~d+bOx2&prtpW zD~gs3oQnp@2JAp~*(f{ohWtA`5sQjgKeq}!g*qDr+3u7AaYeAr9bvrI>VYDtvduD*r{$b{B5tp*AW8S@*&PAle}aMbFD<4xT-)GC<2~j=?a$e*ylALny~xEH(lz zN1lvcEHp9&zS!Ge{M*r10KdGeFTrB*hH-u_Cb{#-j^IqHTHqP!9FMwKe2U|Vp1%&U zVxf&=F9Uuskp+Y6sdy}AfqX4rVN0P6jJkLJu8o%rLF^u5tTE=*TpFZFS?umq4UUXX zbxu#M933B|DUh@=|B0$#_p|RkAC=Fbp`&<|KtCM#mk$IT{wUFzlN#! z(9+uGp)DqBEbzsc%vLIS4&9TGIA|UYwGrTb`!&b?8 z<~g_-3s85Tfz0v4&v6dtLc#~vigLh|f6I)$S0YP=?j2$5UGw~R@ekRN3x8+{^E}tq zCd}^La~7ZbAjrJ8FO5U@J#ymPkCe#^wk=|@U{gO;fQbEY{hb9Jww~mDH?0)5e=qN0 z0o*o(h}Ts^WXS^wic*dv8`w&rUu_E>czWj260;uZQ?so$adD{JZR0%90Iv6?f%yR# zKvJhu(`gRRyk!7o9S2jl(-Z&~K8&^89_$n-Zq2Yhn5|ey^LXkFEzz}W@pig?^RXxv zdE)E{{Dv?~z3;aVNQuo9Xtgo9V}Y z;wRJ7Pd!Q6wShvA{lrH7TDQ|tbot+>$UR$C%)^R&pZI~L44TE}9iW_-uBL$n=e61k| z+XQsVK-UH?I-k)Cx`A($GZ9mXT~( zVo*^ZU@DGB*4r@|OiA!+LCl)fzIK3kK$lo9tPg@fcQCbrIYqP#`r}8BrTv5Z(lOf6 zNTH8Vp|v*d+;bOQ#{%BLHX<7tt~wPk>BrA^BLbb1t8p<2&Qrh^`Y-Ry8WU;(A{SI`t^(Z z|MC;h96x;L_x<5NPMFfd0-2JKV3>LS=W+{Wc{P)}kK3KL84rax!8{L>c zeidNU-^o)(&+>R=HnDtULL-Ak`@F{Hj?HZm4kFF0y;*^OBdcY4JJ|jlB?Cz3`R>Lr zGx{X}43;oHGXljukQ?2S)R$vZalL(NkC5wN_Ua;`!ORZ#!22_9_?I zz+!FSjDZc7ZVi6EETc!Ko!4&7T{2%SkPZ}-0I1sN$J^T8M2Zz%App`&A00F$@P282 zJw7}}fy8_qKa4VN6zgef8Yc$`4)5w-H6#GV8dabzJ9TVt&ZLdI<7oo7hcRqvc9x#N zgt;#rI89@RUi5&r8V1q} zOD6z{^ydY9_9D-+qlfaRUC9tLdKQGjnl@1dZLi>UNUjPB0WChQ@LETeQ0_#g^-mO} zdi9Odu9IB3hxOpkB|~XHSX%YPBxq#<^pLXcp*>71tfRIeGf>#W zw}x>VM;k#QMBXj?8Rc%$0th>IR6%Xi7LH<(Cy$&+N4ooQe5XQ+!M_PZGfsNQZ!w~wtih&lE1cECDs0PD^vPc;UwB3mo05D&EqgwXDDtCtd>YgCl&{wcy z52k=)XI4Nltr`qE27W=O-_^oBsDp`}@4d)-|7Ult?%?CS0-5p^)VU~3hAA(1|zJ2`Hy@rpT@H_qr{O|wgj|{x}(km}qzI5%s zS(;yYnnkZ&z!DoR#%12f6dS4lHupz)$pXekq!_ye(G}MvgSld}@^86P56Wx;>}85A z1DlxR`QQG&oHq}~m6)uu^$)y%E`BONYO#;XIgE0)`j1!;vT(mh2O9&6nUY!khz<7+ z=U%2E_MOFC^sgmL`IV;_Ye>8|Y+(S+l9|lwRs0uoG>0&sP;My86N+PwB9Hr<<18mG z0I=_?)PsBEdTG_L>ws*ZpW(3vNuoA0E~jf9z=${5u_az~P%-}G*pVCf`gxoqrN@S* z0D$4BK#?zG$qxN_1v|cvg@9`-OMEr+yEZaV*y>capf}9U7L9B+U1M5WJ0cdYur5!} zVNW(ox_A>k9@a1wbsQ@mf0{b)QW&DwpvOJEG(}6&+vzdduQhD!rU5EqtLTNijoz=m z5uk~;-!6K(vAI?J@@}R{yZ~j~YAX0W&)KH?h9kr5p*C-GNU?6+x*f%#ws`YHmO1uz zBvJ!3P8c7#m9r^@tychi#)$O_x=qy8DRaUiOwU+ulthp~u+DaV`Bn!2lwVScrOtns zW(ATX>K>(>VhY7L%lISI2gTYEmFKLBkqTx(tgEfR1!MVRWHzs!J9nliIsdmzr2oKQ z|E2&ykMY#WljBz|T>a_m^LI{SA<)Eb5o74!;PY-QD{q70XoQt&<>JZ!);Y+_FP|;D zAQV|LW{hVG*AAI<2n8OM5bmNquzc+a|-DE(|Vf#@@X}FEO zVdHt9N<5F6(mveO8!?@9K&`K#cbp#%U7tJH6-++oVffZLE?GV+q9Y}%=oeN{5Zq{U za#%|%XJtv%25v=#l!3*7l~ab%;>-YKK#rhkRYg&?XG)Xb?W#F}0?)xP|1N`{TQM!pddAY%Zk8p{_O>&zpYE_poGf z%VQ{a=4GIb*y^N==jIud(?s!#0Vq-iQT8bxoe7PDfze(QRn~U+NWKl~7 zI+nwn1}+ynUq{d@dr&{e_1-7FUnYynVfG{Lakd-QAs^`M&S_q5u2&=byOwiBEj+ zebJoctNrNlTX6;c*^mCS>Z$3OF6^56fA(L0@*8hlyZLQX6LY5-A5FFTTsntLxni`h zXx)uM#1A*uAyvqLBY>A6O8J2?gZZbXH4nV}y=?JWZpzAyP3RPyT~5rZk;^gB0F!f81t8Va)2<|eHFCDd zM{HyZ$eI(~r8X?bmxwVLBFA3^Eo&5TgfAku%#>s%HkkW()ky}bLaPAqZ7Aj8e(eYf z#Tu-QIWuF|tt_31_^oFmfX}to|IB`Q+*@?v*hRm#g1&y0CoZy{OtG$v!Ftu}VgWHx zOIE6*ts{B^5A^Iy1BZ@Zv-|I;?=*slb6)4 zS1;>Ecf3w~xem5qXS}wG=5T5xRdo(P|^ zzqP{*!sfAtaVL0hLFu}kvRFT5+@lw;n{&FW(41o8@S#J$bo}tq&(MQ-;{A>jzi9yQ zFMroxoBhr|_HADny*>Wo`sz*-*WqBP`G}z$;34mB!jRaMD}g1tkV&7$!day2oSeZ1 zW{;&vT@oPHp=g(=OtqR-%DIXg5rSf7Qnr1u%BP_FdEqWqKc%iEdmt5>v_i{P2BA*0 zg;wnB-@iYd#^kxXqZ4bFd1&M70KZFVYHT8#lmh+)UNIB-TnC2wiCP%ECk~%XpE&tU zI@^K250yqWb5sm*tQT%vO`m-Co%9}6zJ`cpCha1n{d<^4R%imrNpCTL8>!GbOoi4A zRZB|jEPdV$t(mJ;c~JxOilSBy@=^sOm(jJSIQi zC=*PJ_C=1pobrvOL)JsG)h;+{NQ&c+_kBQL>2XDBA&Us}^9V%2T)Ie02*hreoh#qf z>ojSU8=5V8KI_f6(@wyz>zUqL@0?#8Kd`X8b_xUYANREYqsPFid{nw*N z&1y-3U-?=`aR4oWTORxN-!0?NJ^9E3^IVN$#D;sR=`!)Esc~%C^6RzFiga?`0G3@# zvi8;<^+hYjNR8+7D8KwTU%O5W_gX}IUC;3zXw4f-ft>*0UW|(PnP000&7ZXf(I~iF zhe|@C{LJvm2nMgr0O(GU+iXUB)W?gzRcW~;!0`NKd4;zY(V0Yvt}e=GOf*qEhS#)2Z(%`oVY8evQBF8)!=({m=&hUe&4N>Wy@9_|tLN3fP>0Mj)JKQxkFrT}Gl;%*v8w&le%e%sf#hU?NGi34M} z%Xo3E$dZX-ENj~%!9*sow!U$_tE=a&gM$Zu=Fovd<~0gUX~ z>&}rISWQ=pibetvPUjU^q1Xeqf$G*Z25=NdsGrj%-jHSGsn?!e!tTyOZfhoZ zw+^`f+`ztcxT80H;>c6!SaWZxgc{Z^Wt$zyYcPHP`r>Qp%hNa02F9V4w%Fm0)WK4E zthF}x=JVU|9%|&AM=b`it4X0o|^4Qr5;(ib>!Bzx#Ba5#wzy;$Q4lQn& zI4Xc9=eT8IPQkWD>d8>$BoXARE8?q}e#m8D-cifKajwGf`es#BeR)i~_)vv{qX3Bk zVBOKWSVihX=R!uE!O#2U`KlKUwipm*l_1NQ8;=r`md6q25J8-dGd8u6wm0y5`HB>4 z4S}YfU961s7UQ}sD9Oi=J9uOZ8&`&WUUn{tbQA(+3uV+GxmypI9Cj{@1DI>=7)-s` z^`m3~WiPBqjQiw5?HDf>T!FgxInwMfH7?RRKkm|zC5lm8#Q1$h4Z&N$S>5Qf4$Uqu zw!Zf6TJOZl;*Wjb-}}+mx_i4PjvPBO^@- zMOI}qi#uvvv%Ba?h3({F*EvkmY>MZZ34vicc7IVsH;Q1EtNM{#e{6`Og# z%CjURA#1e7EjDi^^aAKrgyDRgr`o*-WhYKwfe_z! z_$+r{+p?y-l`+VaWPaaFXw-$R*!|6~hgGut5hwlpI0j=+sDlfjns=&}>f~sd`;JFX zcPn!(L^H&&*5!48f~BV*JnA3Gq^GZ`z2?xtYM8jvV!B z1xds5T55{()%BY54XcuPFYUuNuTY80`ZqJXmR?53cd;Y))je?dNIG=nXsX#q<_hn> z2G+s@JNxmK?MjzwF0rOk=MW-qKqla`LoZvZd&y~~^Rz7;ed~Ps{P>yl$EUtEecd-x z!D~|i8Z`7D-b=sl>ju(?pY2F*UpSmT{rVfor&1c4zmV3rM@{XV8;s=^CeI@`_tHzB z=}OZh^Hdz4z{3|nx;dH7oja7i;ak2Xz46wCH1*2s*z*9Qx5y+?X}rzrYI+CL5^Gs`|=v=MMeo$3Obig|kl{pZoU;0>8l*{iXuI zKlA7R($@F?mG8QE;L!f>`RSkg#lOhl`dDvQZ{OtDR8-8W9WV#J%%a?C&&Fsr?gS!L zSuicJGjretM$5E$2q=p#9ywi>gOu**<%B9HYG!Zlr+S52WdTF@S5qb^JGMH^cwymXyX3b7Mf}yaW%os@a2TE=tK6f9&=9P=qgO$k~S5&PylitL=Ar6zpv| z_R1aWy)=%W@T-m`1H$qVrp^UhSLzG>TY0a1Z2(gRD!eXIH7WvwUgKB=pb@C^PT0!2 zG8GjA#T2f)^&)k1k0prn&Z!SmP#G{50r!F9d+=D}yak(?W{c0yEML}r`un`_WCo#Z zWS=jufjh590a&RxR2UxP&({@9LhRIIBVrwzTY=0xlxbcUkj%N{V~O@x`Q0-USf-hM zo*>-ww*h_e_hJ>w#~#ayVBamQ23c}`hI=kB5`mg`O_YNQ2 z-#bA!m(_;Gy3N*>=G8y(o!{{Y6#fPS?!$ii|Mb1z-FE%PaM#@Y%D$iY*FSl7ud?Cb z($;ia9eoztn_AYJ>gpR|Z%)k4&7Fq5>1%DPsgEoRX*owxj0MJv@h0{+N@`%8wBafQ zIx%3Q8aI!y`}4gRvz3;i7r)QnwHYZ*_<#K~j;d8Qihf2YhGoOu{4n2xgmT`-JPzp!`ZIR8vibqfT&sAYF}Exq@%`!eUQF5?AM^CQ|K0WPUS9h?TrLjX zdzU3A*)73&UV0&NriK)+jknhrQ^cvbKYkhdivOaqfw4>cCF=(R?6J$~=By3OqIlkn zT(Rj@w-(z}r2$by>1fGd*>Rd+8quRtHavN)G+Y+Omd^6F>9p5_2myob){z|oKfDD3FL zre$}pBaKkSyt+plJGx#C&D{+TS~Y!Y2W?Gy;r!cF2Xh?952Ua8+K;3zyn8E_cOtuY zcVvR%O3boZ2WkPq>J9)_K&iiX!6RnQboE)9pH7n#BVnj*maGLiR$EsqGA-CWuFW*X zEi163%M`%0!(#R~Q!7xf!w1DOu!eKsgeltWEs@^dqT|%9$C7`%Rn@e{W z)+P4-)hZ^czw+?S0I(S3C9vt}<_31zQ?Z`5JX7fgM$dDIS#RB?ItcV`dNhiSVfD77 z;DSE6w2V834&r!Ee;UN*r5+Y%0cP^{)L0swo=iXU))&*;P}W<}^){H^g9+0dS_;r{ zuT@PQyNgEBxHaf3)-l`EcTWIVrbxcBg83d0djQPc4^9~Xmcig&DLNmU-=$!t&7x>_ouAFF5l-X0j2+5x0mrfbxaOkMzKnRY!G0K zkD{}S_cLSz2Gjs)8PsJ9hN!*D_q#ZT07>4!g4w)RaadlP2foMV0j?~rWpT|)HX>{r zj9J1eJ|eo-cnkrwiojdoMq_)9Z$%2%BfAFxHP}^~5h$zCw;&{_o}ZgPI(qlcQ9kg4q^PIs zYO3ejQS@#kJTedf&2U;FR=tM!> z>yA-jQlu5~d&xqv2!z(p4Oo$Jh|O3*2;@1RwQ3pHW&oI@K#mtyw^evYSB+6ac&sO2+ybEnPXUMmD4N)m^99Yzym?T?!n{s7=m} zr8I_2?qq_sPF)$<$FC*zQ z7rvOrHfGZEXP-&mT>UZLgLRqLS_FEgf}+gLr(xx&W`1QISBVgcv2{EFhsN##UTMrg_OAmB@Z`XmbfO*O=*Awv2;IDBML2^!+?|=Jv`VJ3 z{m?*~TOP;Yy6(oe{NCU9&!2eu$$#-j{_wZo{PpI`!~FYiIshyW{_N?~SKoQ}(vOUc z%skBkypJH&ZoqJ{R-|g!C_{_W%ZnTgmx1CQSSfZf#lmT7v|Q9dVR5Bs+O7+X_&R~%OylDkwQEQ@98qStUg z14S+49s_7)Z6!@GfUb<(Nq5ovO>WXo2k^IJMAqoEh$4QAvVNV*1*7Uw1Rd%N*@;B! zpg8uTy3FvB*YKE}e%^%tne9Nz7{l4;J z%D?}r*Oh>^ysxoEEdq0Kdcmmi_lV!|w+OdcWF2bm;=+mgvvO!*m3ieST@RlTfC%<DjI*fQwHHs5rP*R(jvz1?<@XS+ci zqir(FJ2?1kuP<)z&JR@#UBX}RQ-Aia{QZ|ZySs-64;+~NFMt1sabSP+c)zZ|5C4-N zZM<^%z1|x)Za+6VHu*=1M^BMv>?Tk&YIS7{RW~L8bkR~z7JH>aduP#r8l)=HXO4`p zd&*(AhzXf(j`3gaT;hB2b#KgMP!tvT1o)CNXGnYbo8G8%Z6*9qG>96RESC!U?tR{H+Gi)!);R_I1H9?$~3!L7`4&kU37J zLHhFU!g4O+6+BG_ufB~GF51KTx^}#TY4AX{t;ThiaE(L{=UAS ze&N~Yesu8g!P~$7Yo~fBMh;rOogAAOGAt^9w8Ab7y$;zb1%1UtLwvF5`i| z6PIwa!FdwZm16+I+82PRrw+1K(u zeYD*1k1}$Dk zpTIaKj&TG3Br5j+oM=LL1w97^u6*m$jP6Gw=x|}dOsuU_)Krh)Vf6G)_yq+oApEGYE**M5(M94k;O)N z`OFJY5v%=8X@(o077Io`TfdbHLHxpV2qSY>-h400Ynqcq<)Tw8Ll1!QU$t5BO#^Lu z@P1%s3*)P}Lsq(P73uTx;wm@D!y(_ry?V!9*2AiBlo1GCM*t~f9xT8*v61k%SJSk! zwb3=cxNvA}X!zXqOIL0;x3pf|w{PH6fBXA?_@)2$yZ_|qSB`;4|NalZ0{`E?`scfT z;wS(0Q?t{P-+?8?2bLD*50eFG*1#!Djuq(J5y+ITZ5$mEYNZ|D0oF)^={?6+joy}~ z*YdQ8Mb4C~)>T&aI~GFD;QfzHU>QB`&(9d5cHb#9d3iKvz!CWIE7Gn1wkwb;jte`k zU;-VNnN`el95u5{mKz!8K^#IhIS(zNG9kaC-^)ve%%kf=K$<+hd7WOS_vAjtNawE4 zjpVnI_P%K9G zfv}k@nWz$6ePxU;;APcT1+P6D07PL6plNQM0+DHKSzs6YX%W}e+mue$ z@54Gpufm;lU|)NhnnYVz-JY7NI>Sb7OYn(}i@toeKy}QI4BbjEf8q1#><6CZvwKr- zXCvLby3>9OEg@;vS>LzSaWiMYd-+xh>;!GFcgw8lW_W4=jH?ubtjw)Y6EMcLz^aB+ zFU{-Hsg@(Dg^9jv)QxLUepx|HFgDzvDanmH|MI?=ODu-w)B zgn1`b%|utUUk6C4=WlCjMz|wos!jKHzih>(2Ej@t`|sI?%f&BDJ_`GRWMI;TKHx-a zcY3b(P&(bcFM{gq)@pi_9=>nfyq0cEkEPjFs*@;QDe3y4)r*Q-WzY@kA~Y3Z(piqb z&1bDq@Ueq#M@i4Z2$NF<#@ks)}m* zZys8kSsmDzt2((ddH1QcyQ5$H%YX52{=>igecyHU-*tRFdfxx@75L#F`N0aB+aLbq zFMRqNhDPWA6Nc?+Vn(k;UfhB#h?gnh9@eu!ZLjdNg;hm$zTp5|a-k2#n0uSq*f?8$ z9}_pg)ID?@^QcTgm*DQfcvnQQBE|*tCNR4{?d}n(UIT>~ZfT1{&vEVEjJ2(trx?cG=!MavzZc73T`o5m4*(-`K`EQY?2b+Mo?X8ux zMmBBW;6eHgBYA3Rp~dP+3M4S5p%`P5SU*2OD%TSQOjZHnQUwkeD^uy68y8alyB$>K z)~CV#Zd^am?g7&JNXLkt@Lx3zYXTnanB%(vvrz4lV6v{h-}CCid!8}A0&7;K;!7=~`3hk*e%%k?!D*!XJ5>Af{@pZ?#iy3ybOw*O`t2zK?Sb+W)EkN&KyL#x4Eo8-adHI zh1)*)#@E04H(&RPS3J7=!i)cZ2Y;MDUsnLg4*cRT|JvNIyz{Mhef+OK`R)^^W`FqT ziJ5Q4BE1+28)V9GXM3gzz;|lNMlh989uNsFjpL|H83HKiw{jL0I3}UBV-!+_MWV^9 ze5r`h2|T#T51(>y zQUjCZlaVB&O!&R<;2{znQ@q{MQ`jU9|gS~8Jf zoT=8{F=ElKGY8{4&Y1i&)rQ&Tk@~I~5L{>4B(D&IFn|;7iFx_vVq>%Zcxc<~Jotf- zCB+gELt(>dSiMQ8IwkDscCl?jz7YvGaTDZjARuXecnY*|3KZ2eY<@&vi$B7wQ!rDb zg>4e-FSW6zsW6R&XzBDc?Hq4!j`Ef&QG_xLrEJU;c;%IG`|GhD-cqwFKn2{$VjO7V63$}GYpc3cAhG!z1>liiP?JWSPI<6Mj zV45{X*e0Nl?h#zSPM4gI5kz@QT$g4{@N=CHx~|T08ahusKZUq@13{*QEOs@cze81l zH{umqhg|(i+2#WJYym(6x<-=-J@mTIF> zk3y90k7t;J-~SAXJ~U8{m4st{)ecf=9YV>ugZrMymJon4317tce&Kc5g%i7x z`)~x=D%P@xo2RpfmJu{Mw9@H}^bXy0!<8R>`8VJBJGb3(?ZW_nPwy!E43^PXb4szp zeKl8qjjnn7JO2IrwO3v7#fx`e@ZRaEu|Gk|mWLpM|gL zsGP6JDV1uO(yqpanVa<7G!Wp0{&)2MYrqW4x`;H1v@rRWVPbBgoEk+cZp73|dTgn3 z*-asW=z_^j+3tzW*)*712SF)}7(RMtMpZtR-~&Mcl>Jl14FEceU^UYt`$K0|rEC#0 zF^!BgmK5Kqp-Gs|M&uu4O6UCT7d`EH=ebV+K$%TlTN(f}joKa5ngs|wWkbD#+44FVx*=n%Ebs$m0B~Tm08l#B&od(i@>^V6z`|^GJ z4}H(C|Mmy3`Wmr_=WR3Z`nT`gbMWBd?>~Kd{@c5qwX5q@B*jwY9&AwHd1T=9Ic@+1 zvh4U8Hu45irpS3;`8qAq+=4j#Z@Slzk8%@dr3v{&6L^{S%{F*i6HN1?8r)uoJO7mG ziEpAD@+G_8-qijG9-ae|HsU*)k+Mt_$%w;`EI;OR)&#$J7i*MjrKbQ0)nCZpgnUYW zB$o#ZBg^09DX|vwPg~U{{S-ipUnR(img^4{e_Ov4;qS_e{FBrWD2+E0%P22_-nrX` z_sRNI@UHVMfczAlDs*PmL%3Hse~u*A0>OTc33Hv&zd2x1DO`PDPo;SIlPGSzh(3V9!heg&rJ3JN)@5v!irQB4m`9)aByD}=CSFBtDK6K!JFGrXM9 z!gSy!$Q1yjnVEo-{yLoCx$D-(5+t9isOO2r=ipYpFKpLE@^$`thL8MZY=OF?@Zm|b z`A5nf-iL`wxmZ%BzLB|Cw8g?m$6ydFrqXZ#^8lNQs>8xoN)(xL3m+dYPD*F|odGvw zMv;y|&p~H$mr@nnfM=Ea02eqW$n?<{1iTv_4NmMEi?d(b7#ygPCagpd32sFrHEY_zxCeiuyiVrK z)Jf8As~yt-rffe2wiV1@<$nW;7zQ25@Km}_>yG|q!`Ts}X`o;G%E4hu**UvRzNS;njCqQpxi5j4AMAKk`3c`q7Vk z{QDn#=&|oZ()ztf(pytiX|XdP%@H!S3^jAKZ*1iED5Gm6D;3_F(I$w zoaBsWjas@raIH{iZexBZF|g8o7!QM~Th{zvkGo=Pi=4J!M0iu+5Fki5?oI-1+#O=P%wBW=Z8b~e`X<^lOHf`&2ir{pB zAFt!3A>qjk?2*x-!*s@Bfn5bqjO(fGH3^v|Jq^T2CNPYsJ%+oUEI8;E>Vpe}8@5gi z#M1JaTTHyfyT#XNdN!UWLSPOpBXEQLQF%K0I7=&O6M-5%a%LMlStuWb6qvF;4Q1+@jUz0ts?{mt&0mCi!a?~gWh-(3qwUC}> z3-Q650KX9tC`oODR`NH43^_FYz z{;vPw)d%1D)@QOh{&CNF)&RhG%wPSr|8(d-{L)+h@V|ceLytXnbY`>? zCMnISkwY&g2vekgJv`WaI|P;E=zilAPM z*14S+ADB7&4Z%S5MeTv~yQ*@ipEP4IF)DqcOhOErnj^evH>yadq4{HM(0r-{Ol@T6W47&!)#GQQy6N>B0NI@W#LFFRopG^Yy>|$-C~^_o_Q? zTPJGdlcD@_4h7!wmbYB=m!J65kHN3`%>dSW&zza7j&dWW)&X-6>EGc_Vnyg#)0;&S z`%Gy;-zD(ADl{fFXlpsA4SI2oH%710A9&C*ih=)A&3)|~hq?$D|fC%I7K3w80VAK&K6GGFkhHV10 zF}Q1)etk3*V|9(vmk-B6d#8MK=*9?mDzgG8hy&7>XR zZi?bWx)=)IHP0tXo+;NG@Px^~>?? zL3_S73fzFwc56rk&7uR!>4-US{pD9>FTeE$6i-0JFZSf84jsuJe*E$5sriSph5Cu? zj?v4r@4NKn*_$ta1?EpR`|IQPWFK0%>(t5K(&5e5Z~o|ay#BTS&+RXK;S<+hb+wr) zp9QaH9RMUv{?*U_`usO@o6mmc=u-y|-nVe@%czVx~|edWp%G zS+|cl|F~%bn6#k#4&aTX7`{z$(_n$hH&9;}pZ0T6f z|@+W-(TR|3oi1JW8#02q(++0XaNB}_31dq;oLYu5KKBttXR zG&0r6Zx3*~H+x*{}=jMgJ?6_$2wxXq=Alvd4S=KoTD zwxMhij9Ho?1Z^v+Gcfin&cj&J$* zxfFQ!yWh3>qaXRJSIo_wc>_#Smm_kqPDgx#6b5NnsuYZa`{)(((b|ey=BXw<=2EU9 z^6DPJBUApEuKmI5f>-H2=tollBR>0G*bEl~O$krdAM-Gtb`T5>&gnQF^O!{ z_Rib${%9p)T}kVNccguBE+^qk&&0O_G_~t{fIY9cit)Ojv2JL0%w0PKw&H>!g%pLM zs4dUKmS~>q$~ADobE%o*2@aA}bDVzV)I7Q$MoPnoRL+HG@IQWB-%i%=Ex@ zYT7sje26~A=Zr6f3EsfyApLcm9E5Gt&yt_y@4OG+Y>A&VJBKe~%I`H^7jN49Ghv}u@UyD!~~vTM-bAr)H(!6OW! zVP3_vD|7gLHGAaI`?DvWyaDA}cS_-~3jrOMA=ls;m|!1A9>ON}Vri7AL1!Nz4J|;S zw1VF&$RSBqMr$I{UEvvFiK~sO4mSQTVW=_o^c#AO>O~lY%@oc$O_)0&aj{OJycYlp zdr0^=H8GkYEk$+~D%g;$V$p<2xL}edp)k^s=P+yeB;QYCQ+Pxiy zeq*;3D3fFd013y@-CMV3d$(;xG|{H4IZ=bEdO7>_%oEvtsPeHS^}i=dReAx})~wUw zaADZOqqG$Ou*2v+MlrjlN=~*^-ShsrM#?1HU|?y)Zn}_-PZeN~PT>WZ8PqC~?N~ok zMxgsp26rEOp8kloYxXTh>X2S2714gtb*X}SQY(T~AR!~Qmg#}{c8 z8&pb<9AJa#ScQQChz8&Z494g+YDCrnJokyQ`9K`b?xx(4e3+7X)Mpd`dONPn=jblH0PQ3rOez*FkfBM0z9)0x5A6i{)T@ETDNj^aq&5-bqLcMQ` z0>Uiep00%FCZK3-;{V1&Y;Fy{V$CxphlI>Xft0UL_kYv11+R+nPS+PrrQ)L@#JEtD z*Zf8sT$Axi`;&gptrI?{()Awa={H}Mfh&?=c-?{(B%CD}Jvil^1f0cOOC*=tl*YdW);BeU`mu52nj1x~hmYrH*ziFDb3M32!Ji9Ol{J_$7 z6AFN1kQ-ge81OQrMBP-Vz^buzTeb;+vJZT4>eOs@9A@X)1IMy)R1vwowllkDB-DvmbwQ|H|pVeZl|q>W}StlbrW(iYyzQEWe8N48zC3FIV9@9ne)d;T z*)Kcwj<@~P$$Rhm!Y7|RaNq}*R+jG=sf=vjJ~2JH1n12a05z6aYeO~N0!TYU&0PyQ zv0RTGU?~MkTqI(EFtbWpuQMt@O*t9fxo03BaMvXTAo5{knKbOM1G4wAmj%&x<|AT^@nXBtk2=!7aG9a z1S>A<&!v7im_z?$WH)@OS8M|E1tc@1SsrF8NyR*gnp@IKCM9YfI0tAFxA7hv+hUxI zzUx6@0rYJ%@RUiuq4?HrwL`7jO8hLka0Ak(J-@Vo+WH`9VXaw!wfiwrnx{Jif)EJ) z*05%pNR==FZTLuo+I9LtRcfeNecArU54`#Q`}TbaSC;@V9lU|>k34)}`{R!t{K1vw z=Cw#yF(IEiR&v0`MPH?1Y)bO^5}>CxmSaf!DgWbKHP97nH2q9(l?##79tWaQ3;vJ7 zi2x3Plg&%5J^}#;mp$@LU*Bq*bAWu+=Q!_;wBh+}&j$cgt47T86lm%?cWLw0W^0P? z03!Gh;4;AD3()5+g*T&#@euRRqx%Sd^At3$)wXD2U%z5j2E3~ZG%?O#YXo$2 zkQAU!4kH!}*(e0o%*g zGx*y$Bi_=_rwIh(LSNy=t5#7$Z2oD+H4;^0!{KOHwSYgRn)jZ zqYVX9ZqajxeAd`G+a)NqJ&yj>t!5Xsft%TrND|HRZDUi@*$QgrRz}9Mt-CKl@CWDx z_0Z5T{0RvnnN%8ST#n5h1PHu4`_|XKI2+%+MQ)Qj5Y@YF%a&{${(V(OF;}dp1M_8e zYY6H<)ehYo`!88P5-Dj?O$&ClDy5>UoH#~b^&w2nDqXdg$;g`^~l6R~K8?5A}Pykt=Bv>zQ+=ceO*&N5VH_t)Udm*zftKDl--* zCnuk4=r|L&$#Iirst)?iOuIz=X-2qrGxTO^e^3vtS2bn~4{U+demFy+C1x>f$U1e(SHd zKCRa-8i*MLW@^Wu?|jD+W!^fiM|%Ds%~GlqbHkp?&P|D4e2>kg0EhXL`ZEs zo3SzOn2&a{=H@dTz=Ae~4^i<91)Vu2rcv;LQTyB_O~WDZ=KFO1^xD|s0qm3J$B0@a z_cnI`t_R!r9<1L?&()AmOG9=0*XLRtgqtiB||vwwYSAFX!l>wl1GnE=WA1XUi9s10QEX zZtU~=7gDNdj8#vJ`6yd>_UbDeK*{QS|- z;Mz~tfS;oE>}%DQQV7KgsYn3zI;xy=+l_eIGa8%ZBw?sQ0O+ECoo2$fK$*NX*7Fw= zLG8DAa@Q5=Y7_ljbE*9$XYslq<(4_?44UZf&fC|0HvyQyRDJWi$nTgwj?B#pl(>q@ zS@UO3BlXHjJR}Pvz&9Ux0$HG;vIf_xMFMfG4eXLG)G#7{Cjk(r zN2hvwC$}7hkM7BZ`q0_AO6M>8TPHrf`|=C-zv}y6ar!GA%df}z-!K4>#Ci9B`1P~D z_TGPY-=RkyJ3M#t?4KWg>hRuEv!`Bjc5(jZcDJ(!Wma}JvDx&Iy<0UMDRH>DG)%rJ zBa(wEhCbB&whCbIf(eBt5^9}Buz|JV*e389#0IA!fAL{{AswH9s z)<5)>f~LW?;+P~qBboVwkUqgj2@Z6jX(jy0*EJQ)Lv@FpQKToNG%D%^i>3K#1r2yE znMb^G#_t=M`n(~44KtT_TpCWr?yd)e;s^X6+fi@*R`TLA0P9gPI?d}v+3)V_7oXll zE=h|@_DTU5|FXzE>q}1e1Qc8Q#j!!{vNamdZnP8qg#T=fQ0ricTdghnxLQYS^N8o_ z(EKFrkJJXf7EFs_^N%hJ@EBy-LI^-@NbPmygeMH<@K4eWe<< zVh+U_1>lJ>v=l6X2n+yPN)n$-zClV$=gYu0|Ii;6cUN@p)4WpO-NE^r^C7CMecAcc z%-2iae69gB4iORZwpMvns=l)5_+VH9(egzz+Ip^mqUS;~<}M_~obv#!VevX&J@h{$ zzvg+;oQgSG*KN6p51C1n_qTNvDWartr8baSKwP)38q>hI#(nZCCjOKHE(wn`(8o8U zc2k~dV`DiJ%{7E{Vm`&-8H#}Bn=noHw|OCQ#B?BK{dw7e>J8v;?*7}8nt zue2n~X8Ew^rsb{)LGtX}DQN&}NX@ck`>t&FMSHX9Ez_u}yE8kDWY7zz803Upmk1Q8 zjbWc&Zf7S@VdMZJd#}0vYUGPXRSu*_8Up}qFlrYXz#g!{8W0^*x~y`aSHf%rLxG2_ z!pgURG%qa%$Dtq6#^NY_6k%*c4q|B6k*a2ArPdnTyzST}o5v4dIlW_MXv_E~W*Ytf zKD2G}_>RjjJbUviZwz++bW{K9e*7B>0Fqii^}qdV5|`-u^l$vqJC8i|)c*Sq9C&ie z{KEX@M^2u6{ju3IFIjGNF6^!iPa&m6gUls$a7|4MY!Bt2 z6X@v7%};83&U&V0!Q@3uX|@Gs-w~X*ilWm^OyW~0^n7Y|RuhN51}r;g8|}GT$U&`F zp7)82l)hhF6l5UyTi}ppLg(!pX}HqgHqxl2plDFDHh68W07#~2m;v&(2_77>6oAnf zOrDQUHmU$fMPo9o`c1-7d?TO}8U)s1wy|?o>mW#wCI>_bzxLl!O{3a(s5N*^-v3~b zTEY&zd^<4S%?aQsFKi1jh8O?D%<12k|Dq#Snh)Rd@gt+RcW6!hjyVV{;B4G?J-@JV zNT8_ZM?P0=*}an3U8(l;n>5Z(^6mMW6kON?on zas$BF)R4c6{(my1W9++N;LL=Nln|3kON*DDIB{YdEDw1qVVaP6oa3%k#a@}&v2|g**7^3G7oV4G>;O&CtX)zVvX30jWlmI&)JR# z1XznkF$$;Tg_?MdxRS&CIprM+H1gLVkBQ%7jR$Xz-_yQDwV-s^QcbxnSDVxX$RUm? zQkc)fjU3-YyJhUbz^~oM&e10UpkHUQlY=8ZGQKmywcsW62{ft?YZ2IbR$2R4-y9pY zi#s@CrW+BXe}V3`cx1-si^eDNRjfT$)lg;t0e!_f7gi4K5g}X$r%-2u+6Aek5b%3w z+=@XmF2#yJ1g(B7Mq6|#u#8gbs1wHVKeXe^%?YO6)n%AtVNt6Bz_A@Bd~S?2vK`ZKgIJo%PSvNfc?4^$(QJ&h z(!>6}jO!jhd?b4*z~B^o2+6;cPK%ik0Q~wa3rDvqlx%B3P_5SykqonNtJTXE7nzXy z3{u%FnHbDSbaaV{)hC(q3@#W*_Hp>)y_Y^RRUiH0_Qu5L$7&-_^ma@he94>d_=Xf} zzu^F2$^d@+=ik9_>Jxnb_Ame36A$g%ckdUz^zbG7kDPejQmgwCI745Fg|iI|W`ZDt zVeTOf%cMeZh(*X;g2u~i!m_l|3W`!o3ZsM~3CK53oX5#b^DnBeXPcS-1*q{fs(NsP zJPn7`Ipiy1FpAP+u<{4g&z7pg{7?8w{Sl3KaRJGzPEt`C!5j-JfNX5?!OVjuIk-*a zkMjaWUyLazOlcb+A^j~Fr8%X$UMLv6GYa{95UdKAk(t?s6mTfoOQ2YudLS5GfVPxI zh}$xzqWoUwua;t`*eufL%^8u?Tr`!sgku;!Z@xjeqC)+YG#eY4Z4$-Hjys>rHy3+8 z2TS-SN9p9BNyZvzHI?s+Cin`N22CPS#GvlPp4l0-Guha{(m5~)?wOyAj9Yog{5sxC z-Vf{#waiR?Apl4kQG-s9L9GEd57M6LUTi~BN+N$LXay!pUQ6fhI!Z0EFgiD|5#*&) z2`c)r4fks(8@F?AZf^Vgf9p3#e&k1g?CY8UHJ#VbmhTG-XGiDfXD@EGm&TD;6q*gp zBj;HyXe?NsO&0fLE@{p%ut`F!X}DsZ*mNtj$EM*k-a_6scq|`N0vgr#J=c4uLT)3659|@R2NF3W&~sv93;5JHG>$z4lK=ps zI>^G}f;5k+SORc)A!-G0Z;YMXQX4ruv325O@GJZj%GNznpB$UrbLVxeKlly%`i2I8 zDb;`YXWzvQfwlQSg(}7X?$*_FY z!4;5VVr`01#tH>}Tx_?^#~2m01SXkVbX>BdX*mA?Q-~qm5 zl9S1w!9{laB48kyUpTg|l$$LZt$D`{x`#?0#tNXooZI}&-dV-Q8o>?hO)i8v=!+WY zwni-gDFU%9Zh?6TSsjT^`ewq^HC#TJYchfRvl65gK!Xw-|8qdXKC*3QWWYK>#TwV3 zdLn7?R|$Pm8S)wfe#W^d_%LGHQYWnelEiBqr;$tWfz@w!lM;qcE&7E(@eo|?0Qk)Hhx3{L6SS+qYQ$m$T}z0H9CQdGWG!3xo-s#Y4aa#;jvw< zmB7gT%!Pf{D^}J6+_TCEO3oFzS6Ki^u1%InnDeZseMq^0fgeITHI~3+ z{ox+8fM;i54n|70Nfu~8L~w0;Et|jS!fa;cXtvN?Q0c=uQo41!3)#}*scdCwF6*O$ z2=gSa)e-c8%pi5-_8Wqx4<}nw+Jw~ z3^%Z$=FK-;^~kQ>+djMfqV4}>dSdD^)GMC7^46=KHM#uOF_EwEkLL^kOrQIGzxAIL zIsBp*UvX&u?9j)X&GuC*%dM9I0PaQVjmxkwc3^64hM8-$gGs~WzrB`F0VES<{)R6T z0y-!`GSasWAB6@cZwJhkdf_4X5wNt(1gbJkVG%Sa(O{9xoIRVJXrtl>YjZMjC)yDI z;S!|QiV~fxmN?(3nNfrk&L9Y+rZMtX*#e_ak1=IqiUbHniU(s(wy6tPa?d6<;Xhx@ zp~6qW5NX9+NQ@Q?{~Ja^+d1Bz7+4WpK+Gd1&HfOo@P2H_H3?e7`i&ceIIkEdV1arW zK1Bw=!u%URVm%fR|8=+*fJI(OIoQe}kKNDzk>Q1gA_aKT_p$HvKJjzNAbFj|Fc9EG zp9;-E0e}l_3CCxck+06Ute@Tkje`OBnxy68rSV8MYcWp%Ksg|D-a+du(+}qaw+%NX zX$xBi%!~0cddDmv&C-ZYci#?4pUgIy6Y0EQFY_p1jXU=cZd?pQHm#C2Pt2DpE7f3A za&E0k6g-cca-D({4%EPKm6{39FoN@y^GoF&Iu)c^m}qt2v{Sy$p#U-taCb+(=HX!m z&@fd7Uo`*=@&aWopg`#wp+Zw0bB*hgz{Z3Wf+<@+q4mSeV$}^CYr#L$UODVv_g6SI zXm0yjH{mQMh;QKJO`KO;Lin!Ca$HYR)FXE!(shuBk-rHX35;5s{H;y^C)qQ~)f{ zcV<~L>G7%MC9Q_Xl8y4TvLt|T4egDCRz2kGT>}V2>JC^ewkZd1hqcTbmR!8M z0w9gL=hJ9=4Cn9K4nPTXUc<6knmLo5LA9?cb2#*of@W=XcC0?J@6yXJ{=X)-PuzVStg>z)7d;a`V|rd^n8(#<-KiLHh7&3Z$u_MTPcKKo?}hKWPWol(OoBoqRTYhWm!g8 zI6deoIo)A|XqIT*-d7$N5swN)8UXp=eDu-;EVFmG11sj8{L&Wx##Ow3S8PZ! z04(!eRmn1^TL`VvflijDzcYsnQ+$eMcIj4j;=5n}?7#+aW`14m{OCU48poNkP||U5 z2rOh|<8pay#jN<4y$oS|?vY{Kc$s`G(~aD;eYKqEa7~=B0-{r1SnPk?Rhgt{B3=&u zb2z?vpWpe~+W8s+L*#XMcy1oHPD@kQpSNRU2o{(SMLX($k5|T&_H!!DrK={CA{`%a z=__APR}_Ip(hQyv#Y3rtQEZEj?2dkf|C4GcJh)9w90v`0Gd?ds4{G3`u zGa}t1pg0y(lyw=tfph`$IOQ6H(E&>Z(<^zw^1$k!*r5$IJ;BJzgJ6q~TLQb^2Q%n=YBzh;z#H;z0Bb22? z*KNm*WGIt+xYLFHRxq1WBhbl)69U9_r#c#ooq)1okGRn;A|?mH{(pU*ak}! zKbf=fKI=*b0LWD(hgitw<8*xSM?5>ZP6)P1y-$hJ^G!Zb&4hWE*D$vs-Tf?6UZ@+G z?x6s}|DTkHsgaCF;77(fVuJh_X{Dk*2m~@~1swUhZpc%@xklB$^r>jA9!dpgrU*t$ zW{DJLVRa4>=b;-UN}7nW7K8QvjoNSyX#d!~8`C1bTE!`l%d5YUIRj3svvHBPWh(NN z^k%{{n?CkQsU`-JV@2m<`t?GZZclQ4^p%pctz#%EQWi)im>T=bY)o#QrW~)XO1#k$ zJwqnWb(szsEf8VqPlgkfs`3X1JYW>r>5$0wbwl}LBtYb;H~138BY%`;LedG8!8A=# z;BpP3zn$Ng)ACt&1PVe;SLX6F*|q2ixsh3LW_L85gqkUw@Yj}h-;bG9+C+d(PP$Fz z0tGPd1`gSUviLroGyO>LNaG)t*=m4kjH|b%v-`$!PNjB_<;1ehNGOKs$nUo*QoP+e zn$cB9FFz1dRn3<*TEu1T%!+?y^G8vEd5prFZ{zBwG$IRYd%@w2Gn?M}?9Q-jJlryH zB1_MK6LoEm4Ej%hH~e1`W$1a|bn8C0Pi(H|PapueI^_ai3j!Q*JIDS%h<;BMy`Q7{ zTVJ~ai26UHJrv(!ty?`M8+LO23Lry(vv9xz{a*ovfh?D|ON*9>(Oq`Z1pcDb-OFi= zzJ6-sQ8AgCXr)zF{xOr>8q>KamArd zH6VI^mN}%rkk4|jG7v>VS&+kn_wyJMM8v{tepzLhX|)B9A&V8ICMm4=m)3cOThg3A7|PKDpFDR>w}|ychz^Vltrsf|i!2*2n7t``Fo?@V)D6|K_~T ze%z;FQ^cF$VyvL-4N{)a1IkwurhkOuF>u`e+8cHMYQeZhz;PkT(@}r|lpqvZoCxE5 zfpF1i;;THhJ64Z1;T&qxziBu~S)@9&oCj}k-Pu&2Z?cZ>2Ew1mBVv(EAb^+g%JBAY zae^bavr-aTMy`HUKcmJMfJ-?$V!yu&rGsdoL=Xy$bgA8&WEN5_ zYM|_&P^}&|FJt(GiDh08q)7)yu&2z0(F-3uR++kDh!^$0&!EXIuud15>3%OP%0H_m zfM*Cr|505Q`Z6Cf)x0I9AzSz>h$I;|fPQLe3I@_86vy76qFU~1jD%rteX01VI76Jo z+2#OvjK}q~(}BWb!S#A%FH~Ul7KZ8d#Z{o1Zk0NW_|@=`=`GR1O!cWoAiB@nfPlmv$pbp3>dcf1`2#wR+i;@jm&f%9WD-xtB6yI=h5yzOl<=E zD@yl#0vwPmN>@Zbg6E9`idZT8M0q=nat1NTMa+?TEs;FN^9F@>JG{B`%^Dx$uzgC7 zwZ?k!Sy8^=$kV{|woHuyy1WMqaj07$q|V_@lWxwIS<$d&_>7cHUd*0>CLAlsfH0Vi z{Gz#mAEiWu_w+Nmg0x&F)*QE*&oO`&6o^RlK|Z-9N&J-aX}q1z8oTOyk{A}loKhx# zXBxX4RKU7TSS4P1y}X=!Y_89Q!so7Yf8e`yH_f8>Io+%uTGN7PDtmS&GblF0TFV@E z%-iq0MPdld=m#)>I8XHUR|5kSEE5K4uGKfXmYMc+S5_bnTyfz{HVjkt%o5sSf*XK5 zkf`p!R?9fBGeI~$#yr9m3&7|*tg4+3`#0O2${&784}_DhTs}V~lQ8XGINvC_>ut9X z5Af^#!?n-7a@I=eL!wXaXuH_$<>awk_gP`x?(a>mcdB^!FVEgz*!pUE0$&JG$j+t> zJ{3U}@R(HynwXf`Ac~X|q3sT%JJ`KNg5}Q%{6Sc!I}!q}T%S}gHI_Osy1(}$e21pV zM%6aO3>csq!os%xP(UAlk~<-Z@8bI|9vMpl#@==VxJ142;`2B^_8!p~P}(oI@1|4G zdGWvJ7H72vIr2gQX`fypo}bvpl2gkd(AiVd{RH)~usTnU#SR6CRDx`AOGxot>zEQ) ztByyIq(D>oUd?n@^O@=YnCM8*kGu#|7dYFGr8YJ`)ZX{6M$e(0KYp%$e#e+bqCE~r z+q%6!9qQZPp{<{z3jF5HerFy2dSF1pL7ttj3!2yOQ*XZ`^IzLPz^}MX_n%;UPM^a; z0WRLLLqi$rfY7861xA5xHGPITH9Y$}&WyK(UHGYHF^&{m?~A&|ia z6c7>I;`qZ;Hh_Z+k~T0AW)7&e6EKDO+eo60ANa344+Ok&w7m@pY@&CVbq~1o^Y3GJ zL43)w$6M^lzP!RvIfXt)Gd@G{@uL7PR;1c1*%7i~hGE_-??nzh#KS9C9>jHU@ETD@ zWdFoe5-Nz%Z+2b>3%r045~E;iV&m_~sjSiy6-ZS-2Fh7X0&NIMZaBYLkS}o#(9>X0 zZRy^=c1#0?VIE-U)SGi?c2f;!W?T^%)Peaw&T71Nnp1N)lce1Ptwy%xFIWRH7JcGb zMVdj$9UbR0L8hZ9&pZ&b;;F?iSQZcHD68O-P9I(IX>N#OPDH{-6vVWh<_yK7>jEH* zSgR*6Z0cebO1ZqOMd4V-FH_X`$E4IH3NqB!a)|KLvEqQPO1}TXHYV%awIZ~5fKMe1 zk%XHaL%Q9~Gw+v6g@bhgq-=FC*|&xOW|IXA5;!3KQw&$=%V?lp*3rI@P#lAJ`Qdnr zGhb`iF#LCQ6SJL-h$kdpOvqKR?uLlUgDEtHB0LoVE(}M=?SY5bzAqi%Hs5SQ+Jex^Ux*ek6 zE!bO%9kO@959fn<@`CQs6rW7f{Mh{P#eL7TvmxrvZ_d`;?7v+%GyFee-stjp{{dA_ zUHA2*(@oa@5`yE>6Li=9?5#gd8jv3SxUv0x{pa)T^u>3^dL~-c`ek~Gt_vMa&<#DeRI&%CsJo^?u!BXa!fdr zI~0&-2^p<~gXH3mX^Hh0$M*B`EL)>ea%gARt%K-JX+Vw%6t4Gb0`|)8=kx#&;PYOEWeYk5CJLNxEL`m zFWK?LLhGUy+SE}n zU#&O8dHSh0qKwGn>-_iI+1lxD^ZvTz?Y7zM{IR%~_xjKOt;U{!{{GnKM(nC&d1#_r%@<)k-c-^^4#JUHEc(n;RW;iW zUz!Er038^OOumA{5Ht=XY4mBa{A#5gtUT}WCY_W#Tw)QUoEyhPM_lu(wcK8PgkGb%|Sos=@nUj z*cx2R=7`rffQea%F>^?QKlX?%Y7@+4lHqQ$2d`yAN#tK+L7#p+tTePzBX)Wpi64p7 zoDUIyfN}ku8YGk@yFa5Tc?6N)BGC#J?Om2t_GM zkXu*<6RVpHqBYGH^<0;meX&Ee>LEtlc;|5N)p@VQw_x*Z3&3Z0ab3WuPKEl!!BybMhC3KywpmK@PL#xJOZm zYeioi!?7MT1EdWsKA9rv!GISBN~r1X;;hp@1~k(BR5KO8U$P0zoWF1MDP<5gqFj@h zh(Y)uZ0{t@7SfmtE|Hg^vb(Q`Nwxi^5i?V;s-Pn+SmnK5Zjc!JpV&4@)ghua`o=z@ zeQM}BhI2i>7L%0OL_!7k;Pc3v;`9c1>XjP zy4})Nkbio1WqBZJakDa2LkzmZP|`SvN@~pv9^R|MQNykt-R>IoDO3|>t+*6b0_B7( z!3Zsw6^t;}56w`He&2P&D5~oY>VP8P%mQLrTz|#N8aol&I^aZuvY+)m-tk(BAml{6tC+_#DQy#3KB+GEC2Nn&jqns1?s^f9y;_py6hYW0HXXTj4$Dxw*Sw{8+v&CKN7(HytdruI;$?s_!8BRWvUZW1$X~NVe~FRRBhN^e%l;b*Zm1hK zrX8gPop*tZ8Y(&KPZxsm^)fih=D9gjJ*Wd}Ykmfa>#x=+VqY=eamA_xjtr=z46;`q zEX2B`GpPz_SfFhd;z)*Y;YUlhh-gt0qFc|KC`=2b+>k2bVE=r%6wY~dhBEUNMYarV zo54HyjPdCpI~~=Bcz=9*Smag@&Q^`FVd2CS!?wPy^gJo%XmwF$_<&@Yvw@}gzKzOPd4Om zsuM<<#vvDY@v+3kz-!`iLeMUBF>Z*bKr(WO47v{?P``R5CS(fxvyO_8NqE^xVZ&>w z@hmu#35ETQnKHxb!7}riT86R8jpw+m)Rn5`7!WO!b|KZZk%8IELYE#SOIfWItHIX_ z=kYlnz^6BIi5Q)Ha`e~lrKdiwba8*I8U^^5il*fkZMlwT7CD$=*AnCuNkiE)8%pI1{g{!7{pZ&hj-96v zdyl2|^Xj+Cny$VVA&<|#MT_gn>-Zn_8~%Dz=L1S%p=%x%=ks3MoZ2h@lbN2U)rSnM z6u>Q3^f%AXlsCG=dOzaVt2@K9)e=}ZBK}9<-u3L%*73O*%|wnBn5ktYit8&Cp$J#= zpGBA704Ejm5E_b37C7oJIbq^PR{bQ!C2M0>e=a5_Y4umRQubh-9zqfMBZZ5=*y74X zt^QsVq@w7XX^VM_PE^{X^#O!pAr=ZxVl_8qjs*QQAj_w9^HXhVM1E|?=m~zu<`{lK zo{pZEm_`?U8wdM`3x!*vKE|0X>KaDSer4#trF5sV_k2lkOCA~xw>A|@VI4}Lc|Zg< zqLVYlGDVEn3krV6hyr@vx=eQ6a_5%cr!q+QLROqn8ov5@tOPe&s2x2%CW00A4Mp|W z+GMSP{)^EQ-72669Ht2#mNwPTqY#}fiuu&~`eC3+NhndbN<2XkGi3h>%hv(^lacJO zP%lSAWUnF_ibf(S3df%uAl|kexZlE6S=RopFed};AS#xvsQ>BX)5EsP&`#<<&uu0} z1Sd{XNF-ci9yUqbf)$wjb84K)m4^=l2-ryY+2|g|tY^??MxLP3a4mPr&zRN0!@YQC zR%|f(9|$8@`zDTkk{^_`D35mseVfUlHA({EI1ph2=m(`0i6xl?fYd8xb(Z?XnY)*A z7G_m#hH1;tDpc#-{jQ#(?Dlod(az94v$;OEqa+|+O{p;FK=Tf?*AF2Ljy?SKE>l?B zT3wMW#z$t`f2ZL&P)(NJR`~Bk$fV4BEhTk(U5eWx7*0F}tbH8N*MpsN=3ZD;Y+9)FXtnhHk#lh=8 z*qp5%f6GngNr+>6^q>Lw+fEC9G15>qtKY$U3}aW70TKO2T5{IpT6-w7v@Oi?dcF1C zZcoS16YcUkzB_0L+Rn$L1X!8$erT1Ga@PFjVl!@hAF}dZ&dQ|$uV^;^(I7a!FGpMb zZdxCwv-LEtXj^wyEnW53FPom9!^ulei={_Y&1~(7Ugo*UYa;CvQQrZ4ZANW@WF&bfiDnmUQ|RmYE5$@bDKEfB0A>%=!c?T_)}bIGf=tdROv-O?qOm zGrcs9mZi}HLrTcZ!DqQZfrJ4u<+g%R|i)&7v`?s{JQk&=%QoUukGB| z-G#lIu<`>vL29fJiLw7k5ocuK%vl$CVz2OSH3whWy7aJrfcuoL48FC`CPSOPy&q4? zEPG^k&hf^zJQ&2+=R==5U3V-A_K&{lvaHIVFDKlK8M{&uXxZcI^=?n6yhB=QXV-PU zTfyaVl z8CE^_!dvXNpBG;}T(75gJ}XaB@^;b=D#!qzu=7C~@jA$M@-a4kAV<4M38LmubUIQJ?2$$H!D_bY&pOIwCN)zFSegMn5y)oh z){hxjs{lxlSXug>{ouZkN36*~C*=$P>g1n*fe%ucMH1eFOkVXJNWiTQGxkX22UI*B zxGvSh?1MBmD~yIcA5DqRduDv({n{pYQ!K`U1f3iuo(8$8Ux5@|6UEurlWyr!(3w_^ zvhnsEZ2~t@uIGVVGhpT-BrrrVbua~fl6mi8?ex&5)M`3qG|`^il1pd-ajZ)8@Fj&R zIy#S#9y|mP;De5C?UbW83%@cuNYYEks3x{8m1X2YGW8HM^@RjhUW(J4-ntOJgR!D0 zf@2+U(ALqB{zu}xtZbz8`*~l6q2pxh=NLo!r?+g6gWwf-lk4|nt#`+P$a}jhlX`N( zaO&!HT@r9iYimb{>v{cjA%jAxg7|Ejve3 z^e*%dKYW zy68}T`bLP7N!^%!=(yaBi{Q)eu05jgX=ArZPvQwT-OOxw82iW9$?I|;=HI%k^u+zg z8J7K!7@9kA~gs__)@5hCI zgew@>Fe;!K0I^`g^{O&xkpRsvr;~HC;Or*|NC#umN7?^lSnbx=9uciuSHX&p{zwxd zXbf}B*4CH3ZGktEDZBE;9e*mE{EzX3D^+HAg-e&=Z+0M+z+|Y~HDuxht$jhDDf@|* zSdDQ=>z@j6bSCmidy(J7nLJxlwK@S>frf7&*eTHHXTg#!Q-oaazZ<}FErJLrT5QIw zB93)~$68^)UeAWwFAp!7+7~xn29~DqcuG^R-}cP~Hm>OWZ<}|%_r2}9kA@}m?)I&t zjFpC=Ud?ROnZeq|hBKOrA`^&g-Xyn5gWqa^_h+8P}=aF!bU ze(AH(qYa7wk+7U9sF>T;Pf2+h|FpkqV6Y%VszBg3RN5Y2!x?u5p)1kNX_aIRaogh9 zq0V=tAV?Q8(|auUskW&V>`C?MjK8vj`f+JU)6w|FwW(jDVD^#iC$$j4gR;F{9dgJ8 z=J5m`tmdaa(9Ag<%0-D_XwA78Pkiv)$_f=dvXEY?;w0Hk^0rDq*@6mjMh=&nas_Pl z{(Zcs+)xF>G}wX+|7KI;BgA~|IIs!kSKj=@OsQR@gBSeA8ybdya0{i#zFy}qImg@t z50*CsG+9Fz-6bk;Y}~TM!>O(IH8FB}3{H{$+1~Nqx#6{UvMzaiwd(mf_ugssnQ~R< z<()70#e6#_{|((x*1nE=G>irBO#*c7dCI6=sw)*Z>sDrD<;+`q&d;-lt}RH3YR|~@ zEm}0tAOJNf?WYoojt(yPzK7DJIDNGb7M8lrlI%ofjSor`ZUt9qT-Gp1hUz@Bw(@0M z-E}T|fkPVA8W^5}yw5(rK{A@k9B`kdLu)$pr_IOpS*<2$hgF=|38u`pm$n~eM~g>k z$b)hPu$BCH)TiI5$_~Aqtt+M(Nv5_ib1{KgHuO;z~BA>G6X%{+N4O*<7CHF!X$1 zTXnyc{Hth=+qrAFi0eA$(bw+C=A8;+0NGU^_?=|k^9US(tMeS1z}L2Gj;(X$c31Cg zj*E$l-2xqU-`GDNU%L8Fnjv5J-&UFgG5ps${cr{mw2%7G8X_E^qJ8=sRJ+oESWCR9 zuPLz1qx{#f;s6fU->WI(Z@$RUSx~Wj4IVcKO6S4V$9=Z8UaJ^lk*?ZX?$zJHYw0>;o)l_3ECPvs%)v6$~lb1lw7L zV~xG%c@!gKS?Nu!(mXxXQ+p~C77xydeB+vqhEDcQc+F!H$EL?rp3jPVm*dXQ-LgKd zuibPGy8bgp^o7!)?56>QmA=JK4_@OJIx0D~#2F*Y4OFt zMMfahC3T7yODZwP9R)G?_w12p4hn!6bTZJK1$rb3^e#kQK`4ynrSaSAq-%_L?%G?nhi|6f*yTnLVJl^PgR9t7=OeZNG9}Zu1hYHX&!H7_n z3Tsc6+g1_2g(@Z(J9z+>l1X^IDg};M;>>yCfCw%Zn0!<12!f|3wF)xB)}2r@3#4WW zKLJS)ypB(qSQR{SgSS4{wMKi5KC8a8@brtVy)Rgi2MexjF=f{;MN`8mil zA=w^~`$zoY`rsGpScYBSCT3B;i(LjO8;0lOgDnYxIyyz3L zSb~*q`!}DwyeLsY9)&+xxpUOE1gOOa!Xd*a@*toZlv&wi_ZxhCK4JFnV`>1QgEjvt z-r{A6ml5=5C8EGtMFI@C4{L*NnqJ1%w_Kgz`oQ_;SOyA3uGjgU_XzdUjIRF?T3)Zg zM@z;8{krdS-q)@>y${*N#hag91;{7%Ou*0cTpUv${!TSn+mCkd!G_gsBqnxWKe1JC zY8*qYyfCQtD02OBy(qP{2Bm|2d2Jw(Bu)5KPf&4vOi4)zH&7em=op%?0s<9q;5tSE zy}5|jhLz8VKAjYwk9wMFjT=tvMnB9ZE5_qzXi03N^k0@-u>$ zaN)(z(4XN(psn7r2f+0_7P9R#su4ub+x!)5%W*lbiLnv=|8)Zn-z(H=g!)*(->oFT zU~xh7i8WdS9O1XIF&l^^iY#NA%n6KsY1oZ&SFP-|5}8y0;xFTK0l$g&}29l&V^zXINgZIH!4n zoPX8P(qHvnXJX)fWX1VjUZ!1laE$&3{1nvJi@2|;fA(HWGHHy-BbilKJZUEwdf}zd z``vgqFth&P_OSo;yp&Cvp@=#lE$q+sUrt*xeWqUc=4d-(nKFPNI1M}4r9y&wOmJYL z&7J`%gf10e@?tgd<}B~63k#`T=Jd7{I@$|mg^!w7veAgCZ@eu^H7 z@C&smM>mKGAQhlm?*?K9Lla=7)vqyWMsy2A2)>LnD2D~Y4K8puM)#~jLYBtbzY74d zdxAh_X=PR+;K$e#V1lVMQx2>!{+Po1B$`Pi>RudMj2LJ)qXvvVc_!Ubqg$}qUF5cjw;OQN?Wxy} zgH4I((6##%ZEdW_1YFaq6Z77**FP#Yry z&5`g`l3U6JXBiQwX)3(>BFaYPPz}?{tvoHuXHNlV8?!LgguScCz&$6^;-2V#Hfk3n zH5AvKbtZ#9(D3^Z?wg7^897`0?q+ZIer4WV$D2#Dua|wi8-YxP;tt@(%klY1f4Gq{ zwcv4wH}fx`TU4NO-(LkBNt(-)air0S6k znr>IZ;-ftzoApan8zJr`3|p?gLx zCYp#e^ferX$@ier!GMel`V45fWAqFH@ofZ~kFhGlp-EO)Q{77>@kI6a=sT=ij+ZXIEB*++G z*v=wlV7$}#ys)S>3^2hdLE2cbl#uH8S5sHXeP{tp>amg7xAsmoLo>V?K?X*;dc&H| zkR@%&uxiMqreVW!eJ4%g9shUaiCKQcM?Fu~qN`X7WYeEua+H}-1hM}rIp~`9Y-^m8 z?dT@OiL=DOy&5=uQ=-SAyJX3-(ENy6FLwwvTsH)+4t`xsuHB+U-lk*UHN$oHeWt|h zzNO25^Fq0WvY#3Eo+U;9xA#g)MNnYfUz;N_G6-1M&sA+d(Th_K|F5qT#v%gWiMaez zs6fJ2e1OX>tuL=g~dEvX^V-Wd>{P`*iQ&-boQmZO@m)TT?4$Jt$ zU*Do`8suF5i>GCvvD*~P5y0#g$YxRWF|cH1Z{pJgM@sVn*W@b_;|8Va|2}X_fEQF5 zrzL3DYxp?Sv#!sxX0;TyzSXQm8FKT{Ig>_(*7GaMV8pc3I>*eqdgn_1Q7eaTHGqOK z>;MRkkPe5lDyy_qw~bR_&=@)ksFy?_`VEKnF5*xuINa3yPa4BXHRlbx@we!VJtz_u zNRvYZQ8b8@=(;VaWP38HeY@u(;jPeqRf|J09FG-&omqO<=rGr&Td6!qB(i~`uDD5gpw2qT05FpUF*NZYh^suBq<#Z&euh3=-LI?A$o zhva6SlSo2RJh7Xg1|X+KlIbM6ln0s9PN{*E1~C=u2jaAR+8a)tx?2m5+cB|q6B|Dy z)UO6PoE1eqDT-+#yzck0)Euw-uZ!b>HekTu7FWTr>7v7f%E~!YCb0fO8U(?7#(1Al z*800Tpt?Oky+8Jo0t1m6~j8i7@jVbY5+^9c$U9; zlYqud1O~4zLCCCrbSz^H3AjS4u8}O{ZCWlRh<%UqJBUJup}<_#XS?_q3%PYgsB#LLjbm?_ploN}vL z2mc8IY}!W0)X2&TE~wY#^kFh@K!#3oX;dDQQ;?sy+wAnbj`Y3+&X>Jf4|@MMnr9<6 zS(B9tOavu^=+Q%6b)G^KaRAm4o>nt!S}TTzpGP`q0<)+&-`omLX$6-Ufxf2DJbuke zY2)_ITSjAC77&4ef1xrnr0R@srnlzrC=0WaKw)PVC4?=c{MkY*pe^=zTXzJNCsoM1F z0^Q5y0PP_ot_nULFH0TPnk{#vVh??av3GskHs>^!Zn5W-@71DH+tWUSS;wULz zaEL3ol}ia_QE{L=#&s;rUCSVqN!xWYHW2RpbJyz*BJUjU(jsxg*b3lsawg<`F}i8y zxgogj3R(SHn2L>cG0>D_7-=&*9Ew)&Jn(=n>36vj=HhF4Z0~NYe`I3hHRO_ozeuP* z2Ljs+>QZ1)`Tfw(;CeCPS-R}Q0`-s9KpLn>1hZz5${3Ftg80ktbgGsmw5Xx`2wtv&`RaB}Fs!*gc?&y2)62RDlkg?u7PT-W`M31Z2SB)VR+?Oe#Gk zXEu_)gIm_z>6^Nn%zhMfNF__?cC(N%G#)B7c%P-t4d8vR!>(EH z#`h5Mrzv{Sm!B!%UQ-4(8I_Vs@&Cv8|2-?||GW5KACFy6iNGJk - It install podtato-head application, inject chaos on podtato-head, uninstall the application - and revert the chaos - experiments: - - pod-delete - keywords: - - Kubernetes - - Podtato-head - - Pod - platforms: - - GKE - - Minikube - - Packet(Kubeadm) - - EKS - - AKS - maintainers: - - name: oumkale - email: oumkale@chaosnative.com - provider: - name: ChaosNative - links: - - name: Kubernetes Slack - url: https://slack.kubernetes.io/ - - name: Documentation - url: https://docs.litmuschaos.io/docs/chaoshub/#generic-chaos - icon: - - url: - mediatype: "" - \ No newline at end of file diff --git a/workflows/podtato-head/workflow.yaml b/workflows/podtato-head/workflow.yaml deleted file mode 100644 index b3d24aee6..000000000 --- a/workflows/podtato-head/workflow.yaml +++ /dev/null @@ -1,114 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: argowf-podtato-head-chaos- - namespace: litmus - labels: - subject : "{{workflow.parameters.adminModeNamespace}}_podtato-main" -spec: - entrypoint: argowf-chaos - serviceAccountName: argo-chaos - securityContext: - runAsUser: 1000 - runAsNonRoot: true - arguments: - parameters: - - name: adminModeNamespace - value: "litmus" - templates: - - name: argowf-chaos - steps: - - - name: install-application - template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments - - - name: pod-delete - template: pod-delete - - - name: revert-chaos - template: revert-chaos - - name: delete-application - template: delete-application - - - name: install-application - container: - image: litmuschaos/litmus-app-deployer:latest - args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=apply","-timeout=400", "-app=podtato-head","-scope=namespace"] - - - name: install-chaos-experiments - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - - "kubectl apply -f https://hub.litmuschaos.io/api/chaos/master?file=charts/generic/experiments.yaml -n - {{workflow.parameters.adminModeNamespace}} ; sleep 30" - - - name: pod-delete - inputs: - artifacts: - - name: pod-delete - path: /tmp/chaosengine.yaml - raw: - data: | - apiVersion: litmuschaos.io/v1alpha1 - kind: ChaosEngine - metadata: - name: podtato-main-pod-delete-chaos - namespace: {{workflow.parameters.adminModeNamespace}} - labels: - context: "{{workflow.parameters.adminModeNamespace}}_podtato-main" - spec: - appinfo: - appns: {{workflow.parameters.adminModeNamespace}} - applabel: 'name=podtato-main' - appkind: 'deployment' - engineState: 'active' - chaosServiceAccount: litmus-admin - jobCleanUpPolicy: 'retain' - components: - runner: - imagePullPolicy: Always - experiments: - - name: pod-delete - spec: - probe: - - name: "check-podtato-main-access-url" - type: "httpProbe" - httpProbe/inputs: - url: "http://podtato-main.{{workflow.parameters.adminModeNamespace}}.svc.cluster.local:9000" - insecureSkipVerify: false - method: - get: - criteria: "==" - responseCode: "200" - mode: "Continuous" - runProperties: - probeTimeout: 1000 - interval: 1 - attempt: 1 - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' - container: - image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - - name: delete-application - container: - image: litmuschaos/litmus-app-deployer:latest - args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=delete","-app=podtato-head"] - - - name: revert-chaos - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - [ - "kubectl delete chaosengine podtato-main-pod-delete-chaos -n {{workflow.parameters.adminModeNamespace}}", - ] \ No newline at end of file diff --git a/workflows/podtato-head/workflow_cron.yaml b/workflows/podtato-head/workflow_cron.yaml deleted file mode 100644 index 97bfb153f..000000000 --- a/workflows/podtato-head/workflow_cron.yaml +++ /dev/null @@ -1,118 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: CronWorkflow -metadata: - name: argowf-podtato-head-chaos-cron-wf - namespace: litmus - labels: - subject : "{{workflow.parameters.adminModeNamespace}}_podtato-head" -spec: - schedule: "0 * * * *" - concurrencyPolicy: "Forbid" - startingDeadlineSeconds: 0 - workflowSpec: - entrypoint: argowf-chaos - serviceAccountName: argo-chaos - securityContext: - runAsUser: 1000 - runAsNonRoot: true - arguments: - parameters: - - name: adminModeNamespace - value: "litmus" - templates: - - name: argowf-chaos - steps: - - - name: install-application - template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments - - - name: pod-delete - template: pod-delete - - - name: revert-chaos - template: revert-chaos - - name: delete-application - template: delete-application - - - name: install-application - container: - image: litmuschaos/litmus-app-deployer:latest - args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=apply","-timeout=400", "-app=podtato-head","-scope=namespace"] - - - name: install-chaos-experiments - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - - "kubectl apply -f https://hub.litmuschaos.io/api/chaos/master?file=charts/generic/experiments.yaml -n - {{workflow.parameters.adminModeNamespace}} ; sleep 30" - - - name: pod-delete - inputs: - artifacts: - - name: pod-delete - path: /tmp/chaosengine.yaml - raw: - data: | - apiVersion: litmuschaos.io/v1alpha1 - kind: ChaosEngine - metadata: - name: podtato-main-pod-delete-chaos - namespace: {{workflow.parameters.adminModeNamespace}} - labels: - context: "{{workflow.parameters.adminModeNamespace}}_podtato-main" - spec: - appinfo: - appns: {{workflow.parameters.adminModeNamespace}} - applabel: 'name=podtato-main' - appkind: 'deployment' - engineState: 'active' - chaosServiceAccount: litmus-admin - jobCleanUpPolicy: 'retain' - components: - runner: - imagePullPolicy: Always - experiments: - - name: pod-delete - spec: - probe: - - name: "check-podtato-main-access-url" - type: "httpProbe" - httpProbe/inputs: - url: "http://podtato-main.{{workflow.parameters.adminModeNamespace}}.svc.cluster.local:9000" - insecureSkipVerify: false - method: - get: - criteria: "==" - responseCode: "200" - mode: "Continuous" - runProperties: - probeTimeout: 1000 - interval: 1 - attempt: 1 - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' - container: - image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - - name: delete-application - container: - image: litmuschaos/litmus-app-deployer:latest - args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=delete","-app=podtato-head"] - - - name: revert-chaos - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - [ - "kubectl delete chaosengine podtato-main-pod-delete-chaos -n {{workflow.parameters.adminModeNamespace}}", - ] \ No newline at end of file From a7f7d0fa191f37325b358791b2342cdc84d1dc25 Mon Sep 17 00:00:00 2001 From: neelanjan00 Date: Wed, 21 Jun 2023 18:11:23 +0530 Subject: [PATCH 02/16] removes charts and workflows dir Signed-off-by: neelanjan00 --- charts/gcp/experiments.yaml | 366 --- charts/generic/experiments.yaml | 3398 --------------------- charts/kube-aws/experiments.yaml | 442 --- charts/spring-boot/experiments.yaml | 605 ---- workflows/podtato-head/workflow.yaml | 114 - workflows/podtato-head/workflow_cron.yaml | 118 - 6 files changed, 5043 deletions(-) delete mode 100644 charts/gcp/experiments.yaml delete mode 100644 charts/generic/experiments.yaml delete mode 100644 charts/kube-aws/experiments.yaml delete mode 100644 charts/spring-boot/experiments.yaml delete mode 100644 workflows/podtato-head/workflow.yaml delete mode 100644 workflows/podtato-head/workflow_cron.yaml diff --git a/charts/gcp/experiments.yaml b/charts/gcp/experiments.yaml deleted file mode 100644 index 3cdda68bd..000000000 --- a/charts/gcp/experiments.yaml +++ /dev/null @@ -1,366 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them -kind: ChaosExperiment -metadata: - name: gcp-vm-instance-stop-by-label - labels: - name: gcp-vm-instance-stop-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-instance-stop-by-label - command: - - /bin/bash - env: - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - - name: SEQUENCE - value: 'parallel' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Label of the target vm instance(s) - - name: INSTANCE_LABEL - value: '' - - # Zone in which the target vm instance(s) filtered by the label exist - # all the instances should lie in a single zone - - name: ZONES - value: '' - - # enable it if the target instance is a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # set the percentage value of the instances with the given label - # which should be targeted as part of the chaos injection - - name: INSTANCE_AFFECTED_PERC - value: '' - - labels: - name: gcp-vm-instance-stop-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stops GCP VM instances and GKE nodes for a specified duration and later restarts them -kind: ChaosExperiment -metadata: - name: gcp-vm-instance-stop - labels: - name: gcp-vm-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-instance-stop - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # parallel or serial; determines how the VM instances are terminated, all at once or one at a time - - name: SEQUENCE - value: 'parallel' - - # period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # enable or disable; shall be set to enable if the target instances are a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # Instance name of the target vm instance(s) - # Multiple instance names can be provided as comma separated values ex: instance1,instance2 - - name: VM_INSTANCE_NAMES - value: '' - - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID - value: '' - - # Instance zone(s) of the target vm instance(s) - # If more than one instance is targetted, provide zone for each in the order of their - # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 - - name: ZONES - value: '' - - labels: - name: gcp-vm-instance-stop - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back -kind: ChaosExperiment -metadata: - name: gcp-vm-disk-loss-by-label - labels: - name: gcp-vm-disk-loss-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-disk-loss-by-label - command: - - /bin/bash - env: - - # set chaos duration (in sec) as desired - - name: TOTAL_CHAOS_DURATION - value: '30' - - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '30' - - # set the GCP project id - - name: GCP_PROJECT_ID - value: '' - - # set the zone in which all the disks are created - # all the disks must exist in the same zone - - name: ZONES - value: '' - - # set the label of the target disk volumes - - name: DISK_VOLUME_LABEL - value: '' - - # set the percentage value of the disks with the given label - # which should be targeted as part of the chaos injection - - name: DISK_AFFECTED_PERC - value: '' - - labels: - name: gcp-vm-disk-loss-by-label - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back -kind: ChaosExperiment -metadata: - name: gcp-vm-disk-loss - labels: - name: gcp-vm-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name gcp-vm-disk-loss - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # parallel or serial; determines how chaos is injected - - name: SEQUENCE - value: 'parallel' - - # set the GCP project id - - name: GCP_PROJECT_ID - value: '' - - # set the disk volume name(s) as comma seperated values - # eg. volume1,volume2,... - - name: DISK_VOLUME_NAMES - value: '' - - # set the disk zone(s) as comma seperated values in the corresponding - # order of DISK_VOLUME_NAME - # eg. zone1,zone2,... - - name: ZONES - value: '' - - labels: - name: gcp-vm-disk-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- diff --git a/charts/generic/experiments.yaml b/charts/generic/experiments.yaml deleted file mode 100644 index 842cfa364..000000000 --- a/charts/generic/experiments.yaml +++ /dev/null @@ -1,3398 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give IO disk stress on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-io-stress - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-io-stress - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' - - ## Number of core of CPU - - name: CPU - value: '1' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Total number of vm workers - - name: VM_WORKERS - value: '1' - - ## enter the comma separated target nodes name - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-latency - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: NETWORK_INTERFACE - value: 'eth0' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_LATENCY - value: '2000' #in ms - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: JITTER - value: '0' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - poweroff node -kind: ChaosExperiment -metadata: - name: node-poweroff - labels: - name: node-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-restart - command: - - /bin/bash - env: - - name: SSH_USER - value: 'root' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: REBOOT_COMMAND - value: '-o ServerAliveInterval=1 -o ServerAliveCountMax=1 "sudo systemctl poweroff --force --force" ; true' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - labels: - name: node-poweroff - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: id-rsa - mountPath: /mnt/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - it injects chaos into the pod which stops outgoing http requests by resetting the TCP connection and then reverts back to the original state after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-reset-peer - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-reset-peer - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # reset timeout specifies after how much duration to reset the connection - - name: RESET_TIMEOUT - value: '0' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects chaos inside the pod which modifies the status code of the response from the provided application server to desired status code provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-status-code - labels: - name: pod-http-status-code - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-status-code - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # modified status code for the http response - # if no value is provided, a random status code from the supported code list will selected - # if an invalid status code is provided, the experiment will fail - # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504] - - name: STATUS_CODE - value: '' - - # whether to modify the body as per the status code provided - - name: "MODIFY_RESPONSE_BODY" - value: "true" - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-status-code - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give a cpu spike on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-cpu-hog - labels: - name: node-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-cpu-hog - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## ENTER THE NUMBER OF CORES OF CPU FOR CPU HOGGING - ## OPTIONAL VALUE IN CASE OF EMPTY VALUE IT WILL TAKE NODE CPU CAPACITY - - name: NODE_CPU_CORE - value: '' - - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' - - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog-exec - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog-exec - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/md5sum' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}')" - - - name: TARGET_PODS - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects the chaos inside the pod which modifies the header of the request/response from the provided application server to the headers provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-modify-header - labels: - name: pod-http-modify-header - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-modify-header - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} - # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} - - name: HEADERS_MAP - value: '{}' - - # whether to modify response headers or request headers. Accepted values: request, response - - name: HEADER_MODE - value: 'response' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-modify-header - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects http request latency on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-http-latency - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-latency - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # set latency value for the chaos - - name: LATENCY - value: '2000' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Taint the node where application pod is scheduled -kind: ChaosExperiment -metadata: - name: node-taint - labels: - name: node-taint - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch","update"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-taint - command: - - /bin/bash - env: - - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # set taint label & effect - # key=value:effect or key:effect - - name: TAINTS - value: '' - - labels: - name: node-taint - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet duplication on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-duplication - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-duplication - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: RAMP_TIME - value: '' - - - name: TARGET_CONTAINER - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE - value: '100' # in percentage - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-duplication - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Pod DNS Error injects dns failure/error in target pod containers -kind: ChaosExperiment -metadata: - name: pod-dns-error - labels: - name: pod-dns-error - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name pod-dns-error - command: - - /bin/bash - env: - - name: TARGET_CONTAINER - value: "" - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: "" - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: "" - - - name: TARGET_PODS - value: "" - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: "parallel" - - # list of the target hostnames or kewywords eg. '["litmuschaos","chaosnative.io"]' . If empty all hostnames are targets - - name: TARGET_HOSTNAMES - value: "" - - # can be either exact or substring, determines whether the dns query has to match exactly with one of the targets or can have any of the targets as substring - - name: MATCH_SCHEME - value: "exact" - - labels: - experiment: pod-dns-error - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Pod DNS Spoof can spoof particular dns requests in target pod container to desired target hostnames -kind: ChaosExperiment -metadata: - name: pod-dns-spoof - labels: - name: pod-dns-spoof - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - args: - - -c - - ./experiments -name pod-dns-spoof - command: - - /bin/bash - env: - - name: TARGET_CONTAINER - value: "" - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: "" - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: "" - - - name: TARGET_PODS - value: "" - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: "parallel" - - # map of the target hostnames eg. '{"abc.com":"spoofabc.com"}' . If empty no queries will be spoofed - - name: SPOOF_MAP - value: "" - - labels: - experiment: pod-dns-spoof - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: "Kills a container belonging to an application pod \n" -kind: ChaosExperiment -metadata: - name: container-kill - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name container-kill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: TARGET_PODS - value: '' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - - name: SIGNAL - value: 'SIGKILL' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: container-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Inject network packet corruption into application pod -kind: ChaosExperiment -metadata: - name: pod-network-corruption - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-corruption - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-corruption - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-loss - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-loss - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' #in PERCENTAGE - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects 100% network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-partition - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # performs CRUD operations on the network policies - - apiGroups: ["networking.k8s.io"] - resources: ["networkpolicies"] - verbs: ["create","delete","list","get"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-partition - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # ime period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - - # provide network policy type - # support ingress, egress, all values - - name: POLICY_TYPES - value: 'all' - - # provide labels of the destination pods - - name: POD_SELECTOR - value: '' - - # provide labels the destination namespaces - - name: NAMESPACE_SELECTOR - value: '' - - # provide comma separated ports - - name: PORTS - value: '' - - labels: - name: pod-network-partition - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Drain the node where application pod is scheduled -kind: ChaosExperiment -metadata: - name: node-drain - labels: - name: node-drain - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] - verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-drain - command: - - /bin/bash - env: - - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - labels: - name: node-drain - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kills the docker service on the application node to check the resiliency. -kind: ChaosExperiment -metadata: - name: docker-service-kill - labels: - name: docker-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name docker-service-kill - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '90' # in seconds - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: NODE_LABEL - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' - - labels: - name: docker-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/service-kill: "true" - app.kubernetes.io/version: latest - - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Deletes a pod belonging to a deployment/statefulset/daemonset -kind: ChaosExperiment -metadata: - name: pod-delete - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-delete - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Restart node -kind: ChaosExperiment -metadata: - name: node-restart - labels: - name: node-restart - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-restart - command: - - /bin/bash - env: - - name: SSH_USER - value: 'root' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' - - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' - - labels: - name: node-restart - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: id-rsa - mountPath: /mnt/ - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects memory consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-memory-hog - labels: - name: pod-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-memory-hog - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## Number of workers to perform stress - - name: NUMBER_OF_WORKERS - value: '1' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - labels: - name: pod-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - IO stress on a app pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-io-stress - labels: - name: pod-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-io-stress - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - # provide volume mount path - - name: VOLUME_MOUNT_PATH - value: '' - - ## specify the comma separated target pods - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give a memory hog on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-memory-hog - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-memory-hog - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## Specify the size as percent of total node capacity Ex: '30' - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty - - name: MEMORY_CONSUMPTION_PERCENTAGE - value: '' - - ## Specify the amount of memory to be consumed in mebibytes - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty - - name: MEMORY_CONSUMPTION_MEBIBYTES - value: '' - - - name: NUMBER_OF_WORKERS - value: '1' - - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects memory consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-memory-hog-exec - labels: - name: pod-memory-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-memory-hog-exec - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/dd' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}' | head -n 1)" - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - - name: TARGET_PODS - value: '' - - labels: - name: pod-memory-hog-exec - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Kills the kubelet service on the application node to check the resiliency. -kind: ChaosExperiment -metadata: - name: kubelet-service-kill - labels: - name: kubelet-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name kubelet-service-kill - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: NODE_LABEL - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' - - labels: - name: kubelet-service-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/service-kill: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects cpu consumption on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-cpu-hog - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-cpu-hog - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' - - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' - - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-cpu-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Scale the application replicas and test the node autoscaling on cluster -kind: ChaosExperiment -metadata: - name: pod-autoscaler - labels: - name: pod-autoscaler - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # performs CRUD operations on the deployments and statefulsets - - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-autoscaler - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Number of replicas to scale - - name: REPLICA_COUNT - value: '5' - - labels: - name: pod-autoscaler - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It injects the chaos inside the pod which modifies the body of the response from the provided application server to the body string provided by the user and reverts after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-modify-body - labels: - name: pod-http-modify-body - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-modify-body - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the body string to overwrite the response body - # if no value is provided, response will be an empty body. - - name: RESPONSE_BODY - value: '' - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-modify-body - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Fillup Ephemeral Storage of a Resource -kind: ChaosExperiment -metadata: - name: disk-fill - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name disk-fill - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - - name: FILL_PERCENTAGE - value: '80' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # provide the data block size - # supported unit is KB - - name: DATA_BLOCK_SIZE - value: '256' - - - name: TARGET_PODS - value: '' - - - name: EPHEMERAL_STORAGE_MEBIBYTES - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: 'containerd' - - # provide the socket file path - - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: disk-fill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/host-path-usage: "true" - app.kubernetes.io/version: latest - ---- diff --git a/charts/kube-aws/experiments.yaml b/charts/kube-aws/experiments.yaml deleted file mode 100644 index d28a523e8..000000000 --- a/charts/kube-aws/experiments.yaml +++ /dev/null @@ -1,442 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by tag. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-tag - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: INSTANCE_TAG - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - - name: REGION - value: '' - - # Target the percentage of instance filtered from tag - - name: INSTANCE_AFFECTED_PERC - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ec2-terminate-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Stopping an EC2 instance identified by ID. -kind: ChaosExperiment -metadata: - name: ec2-terminate-by-id - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ec2-terminate-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ec2-terminate-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Execute aws-az chaos to detach the target zones from the load balancer -kind: ChaosExperiment -metadata: - name: aws-az-chaos - labels: - name: aws-az-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/py-runner:latest" - imagePullPolicy: Always - args: - - -c - - python3 -u experiment -name aws-az-chaos - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - name: CHAOS_INTERVAL - value: '30' - - name: LIB - value: 'litmus' - - name: LOAD_BALANCER_NAME - value: '' - - name: LOAD_BALANCER_ZONES - value: '' - - name: LOAD_BALANCERNAME_ARN - value: 'na' - - name: AWS_SHARED_CREDENTIALS_FILE - value: "/tmp/cloud_config.yml" - - name: RAMP_TIME - value: '' - labels: - name: aws-az-chaos - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-tag - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-tag - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_TAG - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - - name: VOLUME_AFFECTED_PERC - value: '' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ebs-loss-by-tag - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Detaching an ebs volume from ec2 instance. -kind: ChaosExperiment -metadata: - name: ebs-loss-by-id - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name ebs-loss-by-id - command: - - /bin/bash - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - - - name: CHAOS_INTERVAL - value: '30' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: EBS_VOLUME_ID - value: '' - - - name: REGION - value: '' - - - name: SEQUENCE - value: 'parallel' - - # Provide the path of aws credentials mounted from secret - - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' - - labels: - name: ebs-loss-by-id - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - secrets: - - name: cloud-secret - mountPath: /tmp/ - ---- diff --git a/charts/spring-boot/experiments.yaml b/charts/spring-boot/experiments.yaml deleted file mode 100644 index 10e5e5bfa..000000000 --- a/charts/spring-boot/experiments.yaml +++ /dev/null @@ -1,605 +0,0 @@ -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject network latency -kind: ChaosExperiment -metadata: - name: spring-boot-exceptions - labels: - name: spring-boot-exceptions - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-exceptions - command: - - /bin/bash - env: - - # Type of raised exception - - name: CM_EXCEPTIONS_TYPE - value: 'java.lang.IllegalArgumentException' - - # Argument of raised exception - - name: CM_EXCEPTIONS_ARGUMENTS - value: 'java.lang.String:custom illegal argument exception' - - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-exceptions - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject cpu-stress -kind: ChaosExperiment -metadata: - name: spring-boot-cpu-stress - labels: - name: spring-boot-cpu-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-cpu-stress - command: - - /bin/bash - env: - - # it contains fraction of cpu to be stressed(0.95 equals 95%) - # it supports value in range [0.1,1.0] - - name: CPU_LOAD_FRACTION - value: '0.9' - - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-cpu-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject memory-stress -kind: ChaosExperiment -metadata: - name: spring-boot-memory-stress - labels: - name: spring-boot-memory-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-memory-stress - command: - - /bin/bash - env: - - # it contains fraction of memory to be stressed(0.70 equals 70%) - # it supports value in range [0.01,0.95] - - name: MEMORY_FILL_FRACTION - value: '0.70' - - # port of the spring boot application - - name: CM_PORT - value: '' - - # it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-memory-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject network latency -kind: ChaosExperiment -metadata: - name: spring-boot-latency - labels: - name: spring-boot-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-latency - command: - - /bin/bash - env: - - # provide the latency (ms) - - name: LATENCY - value: '2000' - - # port of the spring boot application - - name: CM_PORT - value: '' - - # it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-latency - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject app-kill -kind: ChaosExperiment -metadata: - name: spring-boot-app-kill - labels: - name: spring-boot-app-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-app-kill - command: - - /bin/bash - env: - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-app-kill - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - It can target random pods with a Spring Boot application and allows configuring the assaults to inject cpu-stress -kind: ChaosExperiment -metadata: - name: spring-boot-faults - labels: - name: spring-boot-faults - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [ "" ] - resources: [ "pods" ] - verbs: [ "create","delete","get","list","patch","update", "deletecollection" ] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [ "" ] - resources: [ "events" ] - verbs: [ "create","get","list","patch","update" ] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [ "" ] - resources: [ "pods/log" ] - verbs: [ "get","list","watch" ] - # for creating and managing to execute commands inside target container - - apiGroups: [ "" ] - resources: [ "pods/exec" ] - verbs: [ "get","list","create" ] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: [ "batch" ] - resources: [ "jobs" ] - verbs: [ "create","list","get","delete","deletecollection" ] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: [ "litmuschaos.io" ] - resources: [ "chaosengines","chaosexperiments","chaosresults" ] - verbs: [ "create","list","get","patch","update","delete" ] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name spring-boot-faults - command: - - /bin/bash - env: - - # it enables spring app-kill fault - - name: CM_KILL_APPLICATION_ACTIVE - value: '' - - # it enables spring-boot latency fault - - name: CM_LATENCY_ACTIVE - value: '' - - # provide the latency (ms) - # it is applicable when latency is active - - name: LATENCY - value: '2000' - - # it enables spring-boot memory stress fault - - name: CM_MEMORY_ACTIVE - value: '' - - # it contains fraction of memory to be stressed(0.70 equals 70%) - # it supports value in range [0.01,0.95] - # it is applicable when memory is active - - name: MEMORY_FILL_FRACTION - value: '0.70' - - # it enables spring-boot cpu stress fault - - name: CM_CPU_ACTIVE - value: '' - - # it contains fraction of cpu to be stressed(0.95 equals 95%) - # it supports value in range [0.1,1.0] - # it is applicable when cpu is active - - name: CPU_LOAD_FRACTION - value: '0.9' - - # it enables spring-boot exceptions fault - - name: CM_EXCEPTIONS_ACTIVE - value: '' - - # Type of raised exception - # it is applicable when exceptions is active - - name: CM_EXCEPTIONS_TYPE - value: 'java.lang.IllegalArgumentException' - - # Argument of raised exception - # it is applicable when exceptions is active - - name: CM_EXCEPTIONS_ARGUMENTS - value: 'java.lang.String:custom illegal argument exception' - - # port of the spring boot application - - name: CM_PORT - value: '' - - #it contains number of requests are to be attacked - # n value means nth request will be affected - - name: CM_LEVEL - value: '1' - - # it limits watched packages/classes/methods - - name: CM_WATCHED_CUSTOM_SERVICES - value: '' - - # provide name of watcher - # it supports controller, restController, service, repository, component, webClient - - name: CM_WATCHERS - value: 'restController' - - - name: TOTAL_CHAOS_DURATION - value: '30' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos - - name: RAMP_TIME - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: spring-boot-faults - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- diff --git a/workflows/podtato-head/workflow.yaml b/workflows/podtato-head/workflow.yaml deleted file mode 100644 index b8165d4a4..000000000 --- a/workflows/podtato-head/workflow.yaml +++ /dev/null @@ -1,114 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: argowf-podtato-head-chaos- - namespace: litmus - labels: - subject : "{{workflow.parameters.adminModeNamespace}}_podtato-main" -spec: - entrypoint: argowf-chaos - serviceAccountName: argo-chaos - securityContext: - runAsUser: 1000 - runAsNonRoot: true - arguments: - parameters: - - name: adminModeNamespace - value: "litmus" - templates: - - name: argowf-chaos - steps: - - - name: install-application - template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments - - - name: pod-delete - template: pod-delete - - - name: revert-chaos - template: revert-chaos - - name: delete-application - template: delete-application - - - name: install-application - container: - image: litmuschaos/litmus-app-deployer:latest - args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=apply","-timeout=400", "-app=podtato-head","-scope=namespace"] - - - name: install-chaos-experiments - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - - "kubectl apply -f https://hub.litmuschaos.io/api/chaos/master?file=charts/generic/experiments.yaml -n - {{workflow.parameters.adminModeNamespace}} ; sleep 30" - - - name: pod-delete - inputs: - artifacts: - - name: pod-delete - path: /tmp/chaosengine.yaml - raw: - data: | - apiVersion: litmuschaos.io/v1alpha1 - kind: ChaosEngine - metadata: - name: podtato-main-pod-delete-chaos - namespace: {{workflow.parameters.adminModeNamespace}} - labels: - context: "{{workflow.parameters.adminModeNamespace}}_podtato-main" - spec: - appinfo: - appns: {{workflow.parameters.adminModeNamespace}} - applabel: 'name=podtato-main' - appkind: 'deployment' - engineState: 'active' - chaosServiceAccount: litmus-admin - jobCleanUpPolicy: 'retain' - components: - runner: - imagePullPolicy: Always - experiments: - - name: pod-delete - spec: - probe: - - name: "check-podtato-main-access-url" - type: "httpProbe" - httpProbe/inputs: - url: "http://podtato-main.{{workflow.parameters.adminModeNamespace}}.svc.cluster.local:9000" - insecureSkipVerify: false - method: - get: - criteria: "==" - responseCode: "200" - mode: "Continuous" - runProperties: - probeTimeout: 1s - interval: 100ms - attempt: 1 - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' - container: - image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - - name: delete-application - container: - image: litmuschaos/litmus-app-deployer:latest - args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=delete","-app=podtato-head"] - - - name: revert-chaos - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - [ - "kubectl delete chaosengine podtato-main-pod-delete-chaos -n {{workflow.parameters.adminModeNamespace}}", - ] \ No newline at end of file diff --git a/workflows/podtato-head/workflow_cron.yaml b/workflows/podtato-head/workflow_cron.yaml deleted file mode 100644 index 099a05089..000000000 --- a/workflows/podtato-head/workflow_cron.yaml +++ /dev/null @@ -1,118 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: CronWorkflow -metadata: - name: argowf-podtato-head-chaos-cron-wf - namespace: litmus - labels: - subject : "{{workflow.parameters.adminModeNamespace}}_podtato-head" -spec: - schedule: "0 * * * *" - concurrencyPolicy: "Forbid" - startingDeadlineSeconds: 0 - workflowSpec: - entrypoint: argowf-chaos - serviceAccountName: argo-chaos - securityContext: - runAsUser: 1000 - runAsNonRoot: true - arguments: - parameters: - - name: adminModeNamespace - value: "litmus" - templates: - - name: argowf-chaos - steps: - - - name: install-application - template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments - - - name: pod-delete - template: pod-delete - - - name: revert-chaos - template: revert-chaos - - name: delete-application - template: delete-application - - - name: install-application - container: - image: litmuschaos/litmus-app-deployer:latest - args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=apply","-timeout=400", "-app=podtato-head","-scope=namespace"] - - - name: install-chaos-experiments - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - - "kubectl apply -f https://hub.litmuschaos.io/api/chaos/master?file=charts/generic/experiments.yaml -n - {{workflow.parameters.adminModeNamespace}} ; sleep 30" - - - name: pod-delete - inputs: - artifacts: - - name: pod-delete - path: /tmp/chaosengine.yaml - raw: - data: | - apiVersion: litmuschaos.io/v1alpha1 - kind: ChaosEngine - metadata: - name: podtato-main-pod-delete-chaos - namespace: {{workflow.parameters.adminModeNamespace}} - labels: - context: "{{workflow.parameters.adminModeNamespace}}_podtato-main" - spec: - appinfo: - appns: {{workflow.parameters.adminModeNamespace}} - applabel: 'name=podtato-main' - appkind: 'deployment' - engineState: 'active' - chaosServiceAccount: litmus-admin - jobCleanUpPolicy: 'retain' - components: - runner: - imagePullPolicy: Always - experiments: - - name: pod-delete - spec: - probe: - - name: "check-podtato-main-access-url" - type: "httpProbe" - httpProbe/inputs: - url: "http://podtato-main.{{workflow.parameters.adminModeNamespace}}.svc.cluster.local:9000" - insecureSkipVerify: false - method: - get: - criteria: "==" - responseCode: "200" - mode: "Continuous" - runProperties: - probeTimeout: 1s - interval: 100ms - attempt: 1 - components: - env: - - name: TOTAL_CHAOS_DURATION - value: '30' - # set chaos interval (in sec) as desired - - name: CHAOS_INTERVAL - value: '10' - # pod failures without '--force' & default terminationGracePeriodSeconds - - name: FORCE - value: 'false' - container: - image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - - name: delete-application - container: - image: litmuschaos/litmus-app-deployer:latest - args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=delete","-app=podtato-head"] - - - name: revert-chaos - container: - image: litmuschaos/k8s:latest - command: [sh, -c] - args: - [ - "kubectl delete chaosengine podtato-main-pod-delete-chaos -n {{workflow.parameters.adminModeNamespace}}", - ] \ No newline at end of file From 3e1cdecab0bf9436b9ba90cfc9f507e9a310200a Mon Sep 17 00:00:00 2001 From: neelanjan00 Date: Thu, 22 Jun 2023 12:32:25 +0530 Subject: [PATCH 03/16] resolves PR comments Signed-off-by: neelanjan00 --- .../aws-az-chaos/aws-az-chaos.chartserviceversion.yaml | 4 ++-- .../aws-ssm-chaos-by-id.chartserviceversion.yaml | 4 ++-- faults/aws/aws-ssm-chaos-by-id/fault.yaml | 2 +- .../aws-ssm-chaos-by-tag.chartserviceversion.yaml | 4 ++-- faults/aws/aws-ssm-chaos-by-tag/fault.yaml | 2 +- faults/aws/aws.chartserviceversion.yaml | 2 +- .../ebs-loss-by-id.chartserviceversion.yaml | 4 ++-- faults/aws/ebs-loss-by-id/fault.yaml | 2 +- .../ebs-loss-by-tag.chartserviceversion.yaml | 4 ++-- faults/aws/ebs-loss-by-tag/fault.yaml | 2 +- .../ec2-stop-by-tag.chartserviceversion.yaml | 4 ++-- faults/aws/ec2-stop-by-tag/fault.yaml | 2 +- .../ec2-terminate-by-id.chartserviceversion.yaml | 4 ++-- faults/aws/ec2-terminate-by-id/fault.yaml | 2 +- .../azure-disk-loss.chartserviceversion.yaml | 2 +- faults/azure/azure-disk-loss/fault.yaml | 2 +- .../azure-instance-stop.chartserviceversion.yaml | 4 ++-- faults/azure/azure-instance-stop/fault.yaml | 2 +- faults/azure/azure.chartserviceversion.yaml | 9 +++++++++ faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml | 2 +- .../gcp-vm-disk-loss-by-label.chartserviceversion.yaml | 4 ++-- faults/gcp/gcp-vm-disk-loss/fault.yaml | 2 +- .../gcp-vm-disk-loss.chartserviceversion.yaml | 4 ++-- faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml | 2 +- ...cp-vm-instance-stop-by-label.chartserviceversion.yaml | 4 ++-- faults/gcp/gcp-vm-instance-stop/fault.yaml | 2 +- .../gcp-vm-instance-stop.chartserviceversion.yaml | 2 +- faults/gcp/gcp.chartserviceversion.yaml | 2 +- .../container-kill.chartserviceversion.yaml | 4 ++-- faults/kubernetes/container-kill/fault.yaml | 2 +- .../disk-fill/disk-fill.chartserviceversion.yaml | 4 ++-- faults/kubernetes/disk-fill/fault.yaml | 2 +- .../docker-service-kill.chartserviceversion.yaml | 4 ++-- faults/kubernetes/docker-service-kill/fault.yaml | 2 +- faults/kubernetes/kubelet-service-kill/fault.yaml | 2 +- .../kubelet-service-kill.chartserviceversion.yaml | 4 ++-- faults/kubernetes/kubernetes.package.yaml | 3 --- faults/kubernetes/node-cpu-hog/fault.yaml | 2 +- .../node-cpu-hog/node-cpu-hog.chartserviceversion.yaml | 4 ++-- faults/kubernetes/node-drain/fault.yaml | 2 +- .../node-drain/node-drain.chartserviceversion.yaml | 4 ++-- faults/kubernetes/node-io-stress/fault.yaml | 2 +- .../node-io-stress.chartserviceversion.yaml | 4 ++-- faults/kubernetes/node-memory-hog/fault.yaml | 2 +- .../node-memory-hog.chartserviceversion.yaml | 4 ++-- .../node-poweroff/node-poweroff.chartserviceversion.yaml | 4 ++-- faults/kubernetes/node-restart/fault.yaml | 2 +- .../node-restart/node-restart.chartserviceversion.yaml | 2 +- faults/kubernetes/node-taint/fault.yaml | 2 +- .../node-taint/node-taint.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-autoscaler/fault.yaml | 2 +- .../pod-autoscaler.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-cpu-hog-exec/fault.yaml | 2 +- .../pod-cpu-hog-exec.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-cpu-hog/fault.yaml | 2 +- .../pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-delete/fault.yaml | 2 +- .../pod-delete/pod-delete.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-dns-error/fault.yaml | 2 +- .../pod-dns-error/pod-dns-error.chartserviceversion.yaml | 2 +- faults/kubernetes/pod-dns-spoof/fault.yaml | 2 +- .../pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml | 2 +- faults/kubernetes/pod-http-latency/fault.yaml | 2 +- .../pod-http-latency.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-http-modify-body/fault.yaml | 2 +- .../pod-http-modify-body.chartserviceversion.yaml | 2 +- faults/kubernetes/pod-http-modify-header/fault.yaml | 2 +- .../pod-http-modify-header.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-http-reset-peer/fault.yaml | 2 +- .../pod-http-reset-peer.chartserviceversion.yaml | 2 +- faults/kubernetes/pod-http-status-code/fault.yaml | 2 +- .../pod-http-status-code.chartserviceversion.yaml | 2 +- faults/kubernetes/pod-io-stress/fault.yaml | 2 +- .../pod-io-stress/pod-io-stress.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-memory-hog-exec/fault.yaml | 2 +- .../pod-memory-hog-exec.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-memory-hog/fault.yaml | 2 +- .../pod-memory-hog.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-network-corruption/fault.yaml | 2 +- .../pod-network-corruption.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-network-duplication/fault.yaml | 2 +- .../pod-network-duplication.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-network-latency/fault.yaml | 2 +- .../pod-network-latency.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-network-loss/fault.yaml | 2 +- .../pod-network-loss.chartserviceversion.yaml | 4 ++-- faults/kubernetes/pod-network-partition/fault.yaml | 2 +- .../pod-network-partition.chartserviceversion.yaml | 4 ++-- faults/spring-boot/spring-boot-app-kill/fault.yaml | 2 +- .../spring-boot-app-kill.chartserviceversion.yaml | 8 +++++++- faults/spring-boot/spring-boot-cpu-stress/fault.yaml | 2 +- .../spring-boot-cpu-stress.chartserviceversion.yaml | 8 +++++++- faults/spring-boot/spring-boot-exceptions/fault.yaml | 2 +- .../spring-boot-exceptions.chartserviceversion.yaml | 8 +++++++- faults/spring-boot/spring-boot-faults/fault.yaml | 2 +- .../spring-boot-faults.chartserviceversion.yaml | 8 +++++++- faults/spring-boot/spring-boot-latency/fault.yaml | 2 +- .../spring-boot-latency.chartserviceversion.yaml | 8 +++++++- faults/spring-boot/spring-boot-memory-stress/fault.yaml | 2 +- .../spring-boot-memory-stress.chartserviceversion.yaml | 8 +++++++- faults/vmware/vm-poweroff/fault.yaml | 2 +- .../vm-poweroff/vm-poweroff.chartserviceversion.yaml | 4 ++-- faults/vmware/vmware.chartserviceversion.yaml | 9 +++++++++ 103 files changed, 190 insertions(+), 139 deletions(-) diff --git a/faults/aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml b/faults/aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml index 065a6ebed..ed08e8099 100644 --- a/faults/aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml +++ b/faults/aws/aws-az-chaos/aws-az-chaos.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: Kube AWS - vendor: Harness + vendor: LitmusChaos spec: displayName: AWS AZ Chaos categoryDescription: | @@ -26,7 +26,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/aws/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml b/faults/aws/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml index 357c10918..834ce90d9 100644 --- a/faults/aws/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml +++ b/faults/aws/aws-ssm-chaos-by-id/aws-ssm-chaos-by-id.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: AWS - vendor: Harness + vendor: LitmusChaos spec: displayName: AWS SSM Chaos By ID categoryDescription: | @@ -24,7 +24,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/aws/aws-ssm-chaos-by-id/fault.yaml b/faults/aws/aws-ssm-chaos-by-id/fault.yaml index 4edce9e6a..f26d694ed 100644 --- a/faults/aws/aws-ssm-chaos-by-id/fault.yaml +++ b/faults/aws/aws-ssm-chaos-by-id/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/aws/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml b/faults/aws/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml index 8537dc57e..fda10bbaa 100644 --- a/faults/aws/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml +++ b/faults/aws/aws-ssm-chaos-by-tag/aws-ssm-chaos-by-tag.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: AWS - vendor: Harness + vendor: LitmusChaos spec: displayName: AWS SSM Chaos By Tag categoryDescription: | @@ -24,7 +24,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/aws/aws-ssm-chaos-by-tag/fault.yaml b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml index 4fc35a54a..219675b0a 100644 --- a/faults/aws/aws-ssm-chaos-by-tag/fault.yaml +++ b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/aws/aws.chartserviceversion.yaml b/faults/aws/aws.chartserviceversion.yaml index c24fccac2..0a571293d 100644 --- a/faults/aws/aws.chartserviceversion.yaml +++ b/faults/aws/aws.chartserviceversion.yaml @@ -45,7 +45,7 @@ spec: - name: Kubernetes Slack url: https://slack.kubernetes.io/ - name: Documentation - url: "" + url: "https://litmuschaos.github.io/litmus/experiments/categories/contents/#aws" icon: - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico mediatype: image/png diff --git a/faults/aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml b/faults/aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml index f479682a3..7eae2e586 100644 --- a/faults/aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml +++ b/faults/aws/ebs-loss-by-id/ebs-loss-by-id.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: AWS - vendor: Harness + vendor: LitmusChaos spec: displayName: EBS Loss By ID categoryDescription: | @@ -24,7 +24,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/aws/ebs-loss-by-id/fault.yaml b/faults/aws/ebs-loss-by-id/fault.yaml index eb0d2b55a..186f86ea7 100644 --- a/faults/aws/ebs-loss-by-id/fault.yaml +++ b/faults/aws/ebs-loss-by-id/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml b/faults/aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml index e9ec1c22b..cd3bf7d4e 100644 --- a/faults/aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml +++ b/faults/aws/ebs-loss-by-tag/ebs-loss-by-tag.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: AWS - vendor: Harness + vendor: LitmusChaos spec: displayName: EBS Loss By Tag categoryDescription: | @@ -24,7 +24,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/aws/ebs-loss-by-tag/fault.yaml b/faults/aws/ebs-loss-by-tag/fault.yaml index 9f2d3dfe8..a65a96530 100644 --- a/faults/aws/ebs-loss-by-tag/fault.yaml +++ b/faults/aws/ebs-loss-by-tag/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ec2-stop-by-tag/ec2-stop-by-tag.chartserviceversion.yaml b/faults/aws/ec2-stop-by-tag/ec2-stop-by-tag.chartserviceversion.yaml index 061ab11c6..574364d3a 100644 --- a/faults/aws/ec2-stop-by-tag/ec2-stop-by-tag.chartserviceversion.yaml +++ b/faults/aws/ec2-stop-by-tag/ec2-stop-by-tag.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: AWS - vendor: Harness + vendor: LitmusChaos spec: displayName: EC2 Stop By Tag categoryDescription: | @@ -24,7 +24,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/aws/ec2-stop-by-tag/fault.yaml b/faults/aws/ec2-stop-by-tag/fault.yaml index c63d8fe8f..d2e5bbfc6 100644 --- a/faults/aws/ec2-stop-by-tag/fault.yaml +++ b/faults/aws/ec2-stop-by-tag/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml b/faults/aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml index c79b62716..c2be4b8b0 100644 --- a/faults/aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml +++ b/faults/aws/ec2-terminate-by-id/ec2-terminate-by-id.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: AWS - vendor: Harness + vendor: LitmusChaos spec: displayName: EC2 Terminate By ID categoryDescription: | @@ -24,7 +24,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/aws/ec2-terminate-by-id/fault.yaml b/faults/aws/ec2-terminate-by-id/fault.yaml index ff839d0e2..1af237736 100644 --- a/faults/aws/ec2-terminate-by-id/fault.yaml +++ b/faults/aws/ec2-terminate-by-id/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml b/faults/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml index a67c238c2..34e6ae66c 100644 --- a/faults/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml +++ b/faults/azure/azure-disk-loss/azure-disk-loss.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: Azure - vendor: Harness + vendor: LitmusChaos spec: displayName: Azure Disk Loss categoryDescription: | diff --git a/faults/azure/azure-disk-loss/fault.yaml b/faults/azure/azure-disk-loss/fault.yaml index 7310d2363..ba25816ae 100644 --- a/faults/azure/azure-disk-loss/fault.yaml +++ b/faults/azure/azure-disk-loss/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml b/faults/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml index ef0e8749f..e87bbf9af 100644 --- a/faults/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml +++ b/faults/azure/azure-instance-stop/azure-instance-stop.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: Azure - vendor: Harness + vendor: LitmusChaos spec: displayName: Azure Instance Stop categoryDescription: | @@ -20,7 +20,7 @@ spec: minKubeVersion: 1.12.0 links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/azure/azure-instance-stop/fault.yaml b/faults/azure/azure-instance-stop/fault.yaml index 6d2187f30..915389447 100644 --- a/faults/azure/azure-instance-stop/fault.yaml +++ b/faults/azure/azure-instance-stop/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/azure/azure.chartserviceversion.yaml b/faults/azure/azure.chartserviceversion.yaml index 41aac6cf5..6abde3e13 100644 --- a/faults/azure/azure.chartserviceversion.yaml +++ b/faults/azure/azure.chartserviceversion.yaml @@ -22,6 +22,15 @@ spec: keywords: - Azure minKubeVersion: 1.12.0 + links: + - name: Kubernetes Website + url: https://kubernetes.io + - name: Source Code + url: https://github.com/kubernetes/kubernetes + - name: Kubernetes Slack + url: https://slack.kubernetes.io/ + - name: Documentation + url: "https://litmuschaos.github.io/litmus/experiments/categories/contents/#azure" icon: - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico mediatype: image/png diff --git a/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml index 08b756692..c618e4ecb 100644 --- a/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml +++ b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml b/faults/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml index d7765e0e2..f9ef17072 100644 --- a/faults/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml +++ b/faults/gcp/gcp-vm-disk-loss-by-label/gcp-vm-disk-loss-by-label.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: GCP - vendor: Harness + vendor: LitmusChaos spec: displayName: GCP VM Disk Loss By Label @@ -22,7 +22,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/gcp/gcp-vm-disk-loss/fault.yaml b/faults/gcp/gcp-vm-disk-loss/fault.yaml index 538025870..a9a69df8f 100644 --- a/faults/gcp/gcp-vm-disk-loss/fault.yaml +++ b/faults/gcp/gcp-vm-disk-loss/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml b/faults/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml index 5a8953dd8..c884909c7 100644 --- a/faults/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml +++ b/faults/gcp/gcp-vm-disk-loss/gcp-vm-disk-loss.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: GCP - vendor: Harness + vendor: LitmusChaos spec: displayName: GCP VM Disk Loss categoryDescription: > @@ -21,7 +21,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml index 3cd3b2c2e..5d3a69234 100644 --- a/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml +++ b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml b/faults/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml index 14491d403..be696a197 100644 --- a/faults/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml +++ b/faults/gcp/gcp-vm-instance-stop-by-label/gcp-vm-instance-stop-by-label.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: GCP - vendor: Harness + vendor: LitmusChaos spec: displayName: GCP VM Instance Stop By Label categoryDescription: > @@ -21,7 +21,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/gcp/gcp-vm-instance-stop/fault.yaml b/faults/gcp/gcp-vm-instance-stop/fault.yaml index 163ec4af2..7f8e5dfaa 100644 --- a/faults/gcp/gcp-vm-instance-stop/fault.yaml +++ b/faults/gcp/gcp-vm-instance-stop/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml b/faults/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml index e4bb20577..dedbfe419 100644 --- a/faults/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml +++ b/faults/gcp/gcp-vm-instance-stop/gcp-vm-instance-stop.chartserviceversion.yaml @@ -20,7 +20,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/gcp/gcp.chartserviceversion.yaml b/faults/gcp/gcp.chartserviceversion.yaml index d7425b9a5..79ed79964 100644 --- a/faults/gcp/gcp.chartserviceversion.yaml +++ b/faults/gcp/gcp.chartserviceversion.yaml @@ -36,7 +36,7 @@ spec: - name: Kubernetes Slack url: https://slack.kubernetes.io/ - name: Documentation - url: "" + url: "https://litmuschaos.github.io/litmus/experiments/categories/contents/#gcp" icon: - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico mediatype: image/png diff --git a/faults/kubernetes/container-kill/container-kill.chartserviceversion.yaml b/faults/kubernetes/container-kill/container-kill.chartserviceversion.yaml index 4b1250259..26643a382 100644 --- a/faults/kubernetes/container-kill/container-kill.chartserviceversion.yaml +++ b/faults/kubernetes/container-kill/container-kill.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: "Kubernetes" - vendor: "Harness" + vendor: LitmusChaos spec: displayName: Container Kill categoryDescription: | @@ -27,7 +27,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/kubernetes/container-kill/fault.yaml b/faults/kubernetes/container-kill/fault.yaml index f36b39179..6afd4ed19 100644 --- a/faults/kubernetes/container-kill/fault.yaml +++ b/faults/kubernetes/container-kill/fault.yaml @@ -58,7 +58,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/disk-fill/disk-fill.chartserviceversion.yaml b/faults/kubernetes/disk-fill/disk-fill.chartserviceversion.yaml index 39fcc5068..4df0db59d 100644 --- a/faults/kubernetes/disk-fill/disk-fill.chartserviceversion.yaml +++ b/faults/kubernetes/disk-fill/disk-fill.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos support: https://slack.kubernetes.io/ spec: displayName: Disk Fill @@ -31,7 +31,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/kubernetes/disk-fill/fault.yaml b/faults/kubernetes/disk-fill/fault.yaml index c4d403977..bf905f1bb 100644 --- a/faults/kubernetes/disk-fill/fault.yaml +++ b/faults/kubernetes/disk-fill/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/docker-service-kill/docker-service-kill.chartserviceversion.yaml b/faults/kubernetes/docker-service-kill/docker-service-kill.chartserviceversion.yaml index 617d7ffcc..1c587453b 100644 --- a/faults/kubernetes/docker-service-kill/docker-service-kill.chartserviceversion.yaml +++ b/faults/kubernetes/docker-service-kill/docker-service-kill.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Docker Service Kill categoryDescription: | @@ -24,7 +24,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/docker-service-kill/fault.yaml b/faults/kubernetes/docker-service-kill/fault.yaml index ce399135b..b7870c05c 100644 --- a/faults/kubernetes/docker-service-kill/fault.yaml +++ b/faults/kubernetes/docker-service-kill/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/kubelet-service-kill/fault.yaml b/faults/kubernetes/kubelet-service-kill/fault.yaml index 0326bd22e..d0526f6ea 100644 --- a/faults/kubernetes/kubelet-service-kill/fault.yaml +++ b/faults/kubernetes/kubelet-service-kill/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml b/faults/kubernetes/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml index 8f41c5346..991864a11 100644 --- a/faults/kubernetes/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml +++ b/faults/kubernetes/kubelet-service-kill/kubelet-service-kill.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Kubelet Service Kill categoryDescription: | @@ -27,7 +27,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/kubernetes.package.yaml b/faults/kubernetes/kubernetes.package.yaml index 9a24956d7..3db6bacab 100644 --- a/faults/kubernetes/kubernetes.package.yaml +++ b/faults/kubernetes/kubernetes.package.yaml @@ -97,6 +97,3 @@ faults: - name: node-network-loss CSV: node-network-loss.chartserviceversion.yaml desc: "node-network-loss" - - name: time-chaos - CSV: time-chaos.chartserviceversion.yaml - desc: "time-chaos" diff --git a/faults/kubernetes/node-cpu-hog/fault.yaml b/faults/kubernetes/node-cpu-hog/fault.yaml index c62cdd01a..679b67794 100644 --- a/faults/kubernetes/node-cpu-hog/fault.yaml +++ b/faults/kubernetes/node-cpu-hog/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml b/faults/kubernetes/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml index 4cdd61efc..ddc962c44 100644 --- a/faults/kubernetes/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml +++ b/faults/kubernetes/node-cpu-hog/node-cpu-hog.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Node CPU Hog categoryDescription: | @@ -31,7 +31,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/kubernetes/node-drain/fault.yaml b/faults/kubernetes/node-drain/fault.yaml index 023d37e85..75e8cb10f 100644 --- a/faults/kubernetes/node-drain/fault.yaml +++ b/faults/kubernetes/node-drain/fault.yaml @@ -51,7 +51,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "patch"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-drain/node-drain.chartserviceversion.yaml b/faults/kubernetes/node-drain/node-drain.chartserviceversion.yaml index 28b4e7320..4b6568da6 100644 --- a/faults/kubernetes/node-drain/node-drain.chartserviceversion.yaml +++ b/faults/kubernetes/node-drain/node-drain.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Node Drain categoryDescription: > @@ -27,7 +27,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: "" mediatype: "" diff --git a/faults/kubernetes/node-io-stress/fault.yaml b/faults/kubernetes/node-io-stress/fault.yaml index 1ba10079b..8cb1549b6 100644 --- a/faults/kubernetes/node-io-stress/fault.yaml +++ b/faults/kubernetes/node-io-stress/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-io-stress/node-io-stress.chartserviceversion.yaml b/faults/kubernetes/node-io-stress/node-io-stress.chartserviceversion.yaml index 31925f9c4..ccd0a44ab 100644 --- a/faults/kubernetes/node-io-stress/node-io-stress.chartserviceversion.yaml +++ b/faults/kubernetes/node-io-stress/node-io-stress.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Node IO Stress categoryDescription: | @@ -26,7 +26,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: "" mediatype: "" diff --git a/faults/kubernetes/node-memory-hog/fault.yaml b/faults/kubernetes/node-memory-hog/fault.yaml index 3af297677..5e53f3c6e 100644 --- a/faults/kubernetes/node-memory-hog/fault.yaml +++ b/faults/kubernetes/node-memory-hog/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-memory-hog/node-memory-hog.chartserviceversion.yaml b/faults/kubernetes/node-memory-hog/node-memory-hog.chartserviceversion.yaml index cc32f6e10..172987f20 100644 --- a/faults/kubernetes/node-memory-hog/node-memory-hog.chartserviceversion.yaml +++ b/faults/kubernetes/node-memory-hog/node-memory-hog.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Node Memory Hog categoryDescription: | @@ -31,7 +31,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: "" mediatype: "" diff --git a/faults/kubernetes/node-poweroff/node-poweroff.chartserviceversion.yaml b/faults/kubernetes/node-poweroff/node-poweroff.chartserviceversion.yaml index d8aca6f4e..d879473ae 100644 --- a/faults/kubernetes/node-poweroff/node-poweroff.chartserviceversion.yaml +++ b/faults/kubernetes/node-poweroff/node-poweroff.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Node Poweroff categoryDescription: | @@ -23,7 +23,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: "" mediatype: "" diff --git a/faults/kubernetes/node-restart/fault.yaml b/faults/kubernetes/node-restart/fault.yaml index 4791de415..5192667e7 100644 --- a/faults/kubernetes/node-restart/fault.yaml +++ b/faults/kubernetes/node-restart/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-restart/node-restart.chartserviceversion.yaml b/faults/kubernetes/node-restart/node-restart.chartserviceversion.yaml index 4f2fec93e..89ecde77d 100644 --- a/faults/kubernetes/node-restart/node-restart.chartserviceversion.yaml +++ b/faults/kubernetes/node-restart/node-restart.chartserviceversion.yaml @@ -19,7 +19,7 @@ spec: minKubeVersion: 1.12.0 links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/kubernetes/node-taint/fault.yaml b/faults/kubernetes/node-taint/fault.yaml index f89bbd9ad..bc328a914 100644 --- a/faults/kubernetes/node-taint/fault.yaml +++ b/faults/kubernetes/node-taint/fault.yaml @@ -51,7 +51,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "patch", "update"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-taint/node-taint.chartserviceversion.yaml b/faults/kubernetes/node-taint/node-taint.chartserviceversion.yaml index 6e3b33368..bfe34848d 100644 --- a/faults/kubernetes/node-taint/node-taint.chartserviceversion.yaml +++ b/faults/kubernetes/node-taint/node-taint.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Node Taint categoryDescription: > @@ -27,7 +27,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: "" mediatype: "" diff --git a/faults/kubernetes/pod-autoscaler/fault.yaml b/faults/kubernetes/pod-autoscaler/fault.yaml index 207843b45..84e8d0139 100644 --- a/faults/kubernetes/pod-autoscaler/fault.yaml +++ b/faults/kubernetes/pod-autoscaler/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml b/faults/kubernetes/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml index 9734c91ee..0e4b791ba 100644 --- a/faults/kubernetes/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml +++ b/faults/kubernetes/pod-autoscaler/pod-autoscaler.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod Autoscaler categoryDescription: | @@ -26,7 +26,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/kubernetes/pod-cpu-hog-exec/fault.yaml b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml index 525dfaedc..49dd2b266 100644 --- a/faults/kubernetes/pod-cpu-hog-exec/fault.yaml +++ b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml b/faults/kubernetes/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml index e5f3549de..f44feea01 100644 --- a/faults/kubernetes/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml +++ b/faults/kubernetes/pod-cpu-hog-exec/pod-cpu-hog-exec.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod CPU Hog Exec categoryDescription: | @@ -28,7 +28,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-cpu-hog/fault.yaml b/faults/kubernetes/pod-cpu-hog/fault.yaml index 0d47dca35..76f924005 100644 --- a/faults/kubernetes/pod-cpu-hog/fault.yaml +++ b/faults/kubernetes/pod-cpu-hog/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml b/faults/kubernetes/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml index 6698a186e..ec0a5a5c5 100644 --- a/faults/kubernetes/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml +++ b/faults/kubernetes/pod-cpu-hog/pod-cpu-hog.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod CPU Hog categoryDescription: | @@ -33,7 +33,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-delete/fault.yaml b/faults/kubernetes/pod-delete/fault.yaml index 67d6e56b2..922e1b65d 100644 --- a/faults/kubernetes/pod-delete/fault.yaml +++ b/faults/kubernetes/pod-delete/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-delete/pod-delete.chartserviceversion.yaml b/faults/kubernetes/pod-delete/pod-delete.chartserviceversion.yaml index 2f30ef27f..b85ce7e77 100644 --- a/faults/kubernetes/pod-delete/pod-delete.chartserviceversion.yaml +++ b/faults/kubernetes/pod-delete/pod-delete.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod Delete categoryDescription: | @@ -36,7 +36,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/kubernetes/pod-dns-error/fault.yaml b/faults/kubernetes/pod-dns-error/fault.yaml index 21524ad7e..0cbc752c4 100644 --- a/faults/kubernetes/pod-dns-error/fault.yaml +++ b/faults/kubernetes/pod-dns-error/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" args: - -c - ./experiments -name pod-dns-error diff --git a/faults/kubernetes/pod-dns-error/pod-dns-error.chartserviceversion.yaml b/faults/kubernetes/pod-dns-error/pod-dns-error.chartserviceversion.yaml index 8bd22fe71..852d085aa 100644 --- a/faults/kubernetes/pod-dns-error/pod-dns-error.chartserviceversion.yaml +++ b/faults/kubernetes/pod-dns-error/pod-dns-error.chartserviceversion.yaml @@ -18,7 +18,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-dns-spoof/fault.yaml b/faults/kubernetes/pod-dns-spoof/fault.yaml index 2fcfb41ea..174848024 100644 --- a/faults/kubernetes/pod-dns-spoof/fault.yaml +++ b/faults/kubernetes/pod-dns-spoof/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" args: - -c - ./experiments -name pod-dns-spoof diff --git a/faults/kubernetes/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml b/faults/kubernetes/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml index e612f8179..2569931d5 100644 --- a/faults/kubernetes/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml +++ b/faults/kubernetes/pod-dns-spoof/pod-dns-spoof.chartserviceversion.yaml @@ -18,7 +18,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-http-latency/fault.yaml b/faults/kubernetes/pod-http-latency/fault.yaml index 61084e926..8a30b27c0 100644 --- a/faults/kubernetes/pod-http-latency/fault.yaml +++ b/faults/kubernetes/pod-http-latency/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-latency/pod-http-latency.chartserviceversion.yaml b/faults/kubernetes/pod-http-latency/pod-http-latency.chartserviceversion.yaml index 4f8ff4edb..b95f09b35 100644 --- a/faults/kubernetes/pod-http-latency/pod-http-latency.chartserviceversion.yaml +++ b/faults/kubernetes/pod-http-latency/pod-http-latency.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod HTTP Latency categoryDescription: | @@ -25,7 +25,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-http-modify-body/fault.yaml b/faults/kubernetes/pod-http-modify-body/fault.yaml index b9e383858..aedfe01d4 100644 --- a/faults/kubernetes/pod-http-modify-body/fault.yaml +++ b/faults/kubernetes/pod-http-modify-body/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml b/faults/kubernetes/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml index 3cbface9d..8b36a5a94 100644 --- a/faults/kubernetes/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml +++ b/faults/kubernetes/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml @@ -22,7 +22,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-http-modify-header/fault.yaml b/faults/kubernetes/pod-http-modify-header/fault.yaml index fca5bbb77..e67c5bc0f 100644 --- a/faults/kubernetes/pod-http-modify-header/fault.yaml +++ b/faults/kubernetes/pod-http-modify-header/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml b/faults/kubernetes/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml index c80fef805..20df7296b 100644 --- a/faults/kubernetes/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml +++ b/faults/kubernetes/pod-http-modify-header/pod-http-modify-header.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: CNCF + vendor: LitmusChaos spec: displayName: Pod HTTP Modify Header categoryDescription: | @@ -28,4 +28,4 @@ spec: mediatype: "" links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents diff --git a/faults/kubernetes/pod-http-reset-peer/fault.yaml b/faults/kubernetes/pod-http-reset-peer/fault.yaml index 0d8535b82..c6fa912fd 100644 --- a/faults/kubernetes/pod-http-reset-peer/fault.yaml +++ b/faults/kubernetes/pod-http-reset-peer/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml b/faults/kubernetes/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml index 9f83a0964..3a74e469b 100644 --- a/faults/kubernetes/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml +++ b/faults/kubernetes/pod-http-reset-peer/pod-http-reset-peer.chartserviceversion.yaml @@ -22,7 +22,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-http-status-code/fault.yaml b/faults/kubernetes/pod-http-status-code/fault.yaml index 6e58693df..87bc2b311 100644 --- a/faults/kubernetes/pod-http-status-code/fault.yaml +++ b/faults/kubernetes/pod-http-status-code/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml b/faults/kubernetes/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml index 05cb06207..cfde04d33 100644 --- a/faults/kubernetes/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml +++ b/faults/kubernetes/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml @@ -22,7 +22,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-io-stress/fault.yaml b/faults/kubernetes/pod-io-stress/fault.yaml index 1ec5864ce..ddbcba19a 100644 --- a/faults/kubernetes/pod-io-stress/fault.yaml +++ b/faults/kubernetes/pod-io-stress/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-io-stress/pod-io-stress.chartserviceversion.yaml b/faults/kubernetes/pod-io-stress/pod-io-stress.chartserviceversion.yaml index 445e8c425..099efc3a3 100644 --- a/faults/kubernetes/pod-io-stress/pod-io-stress.chartserviceversion.yaml +++ b/faults/kubernetes/pod-io-stress/pod-io-stress.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod IO Stress categoryDescription: | @@ -27,7 +27,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-memory-hog-exec/fault.yaml b/faults/kubernetes/pod-memory-hog-exec/fault.yaml index 0e8d1cc6b..b0bf3f9be 100644 --- a/faults/kubernetes/pod-memory-hog-exec/fault.yaml +++ b/faults/kubernetes/pod-memory-hog-exec/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml b/faults/kubernetes/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml index 01cbf41ca..258a8caa7 100644 --- a/faults/kubernetes/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml +++ b/faults/kubernetes/pod-memory-hog-exec/pod-memory-hog-exec.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod Memory Hog Exec categoryDescription: | @@ -28,7 +28,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-memory-hog/fault.yaml b/faults/kubernetes/pod-memory-hog/fault.yaml index d46102088..75c012481 100644 --- a/faults/kubernetes/pod-memory-hog/fault.yaml +++ b/faults/kubernetes/pod-memory-hog/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml b/faults/kubernetes/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml index 06977404c..464b307ae 100644 --- a/faults/kubernetes/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml +++ b/faults/kubernetes/pod-memory-hog/pod-memory-hog.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod Memory Hog categoryDescription: | @@ -33,7 +33,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-network-corruption/fault.yaml b/faults/kubernetes/pod-network-corruption/fault.yaml index 9d2f187eb..827a2745e 100644 --- a/faults/kubernetes/pod-network-corruption/fault.yaml +++ b/faults/kubernetes/pod-network-corruption/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml b/faults/kubernetes/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml index eec89d3ac..2e802576d 100644 --- a/faults/kubernetes/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml +++ b/faults/kubernetes/pod-network-corruption/pod-network-corruption.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos support: https://slack.kubernetes.io/ spec: displayName: Pod Network Corruption @@ -29,7 +29,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-network-duplication/fault.yaml b/faults/kubernetes/pod-network-duplication/fault.yaml index d1fe39e01..2438f6d79 100644 --- a/faults/kubernetes/pod-network-duplication/fault.yaml +++ b/faults/kubernetes/pod-network-duplication/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml b/faults/kubernetes/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml index 6520a1f8e..fe24d5fe0 100644 --- a/faults/kubernetes/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml +++ b/faults/kubernetes/pod-network-duplication/pod-network-duplication.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod Network Duplication categoryDescription: | @@ -27,7 +27,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-network-latency/fault.yaml b/faults/kubernetes/pod-network-latency/fault.yaml index 88a3f530f..1673ab537 100644 --- a/faults/kubernetes/pod-network-latency/fault.yaml +++ b/faults/kubernetes/pod-network-latency/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-latency/pod-network-latency.chartserviceversion.yaml b/faults/kubernetes/pod-network-latency/pod-network-latency.chartserviceversion.yaml index ac56fd990..56d084a63 100644 --- a/faults/kubernetes/pod-network-latency/pod-network-latency.chartserviceversion.yaml +++ b/faults/kubernetes/pod-network-latency/pod-network-latency.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod Network Latency categoryDescription: | @@ -27,7 +27,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-network-loss/fault.yaml b/faults/kubernetes/pod-network-loss/fault.yaml index e257b5099..68ae9b576 100644 --- a/faults/kubernetes/pod-network-loss/fault.yaml +++ b/faults/kubernetes/pod-network-loss/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-loss/pod-network-loss.chartserviceversion.yaml b/faults/kubernetes/pod-network-loss/pod-network-loss.chartserviceversion.yaml index d93c10e4e..6593f698a 100644 --- a/faults/kubernetes/pod-network-loss/pod-network-loss.chartserviceversion.yaml +++ b/faults/kubernetes/pod-network-loss/pod-network-loss.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod Network Loss categoryDescription: | @@ -30,7 +30,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/kubernetes/pod-network-partition/fault.yaml b/faults/kubernetes/pod-network-partition/fault.yaml index 1cea58ad4..ce724ee54 100644 --- a/faults/kubernetes/pod-network-partition/fault.yaml +++ b/faults/kubernetes/pod-network-partition/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-partition/pod-network-partition.chartserviceversion.yaml b/faults/kubernetes/pod-network-partition/pod-network-partition.chartserviceversion.yaml index 759b0a0a8..51bab8e57 100644 --- a/faults/kubernetes/pod-network-partition/pod-network-partition.chartserviceversion.yaml +++ b/faults/kubernetes/pod-network-partition/pod-network-partition.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Kubernetes - vendor: Harness + vendor: LitmusChaos spec: displayName: Pod Network Partition categoryDescription: | @@ -23,7 +23,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - base64data: "" mediatype: "" diff --git a/faults/spring-boot/spring-boot-app-kill/fault.yaml b/faults/spring-boot/spring-boot-app-kill/fault.yaml index 2266ac0d1..52db1334b 100644 --- a/faults/spring-boot/spring-boot-app-kill/fault.yaml +++ b/faults/spring-boot/spring-boot-app-kill/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml b/faults/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml index de5671663..fcb35b1be 100644 --- a/faults/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml +++ b/faults/spring-boot/spring-boot-app-kill/spring-boot-app-kill.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Spring Boot - vendor: Harness + vendor: LitmusChaos spec: displayName: spring-boot-app-kill categoryDescription: | @@ -25,3 +25,9 @@ spec: labels: app.kubernetes.io/component: chartserviceversion app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://litmuschaos.github.io/litmus/experiments/categories/contents + icon: + - url: + mediatype: "" diff --git a/faults/spring-boot/spring-boot-cpu-stress/fault.yaml b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml index c33668f64..a98431c53 100644 --- a/faults/spring-boot/spring-boot-cpu-stress/fault.yaml +++ b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml b/faults/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml index d7df006e4..9575b1160 100644 --- a/faults/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml +++ b/faults/spring-boot/spring-boot-cpu-stress/spring-boot-cpu-stress.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Spring Boot - vendor: Harness + vendor: LitmusChaos spec: displayName: spring-boot-cpu-stress categoryDescription: | @@ -25,3 +25,9 @@ spec: labels: app.kubernetes.io/component: chartserviceversion app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://litmuschaos.github.io/litmus/experiments/categories/contents + icon: + - url: + mediatype: "" diff --git a/faults/spring-boot/spring-boot-exceptions/fault.yaml b/faults/spring-boot/spring-boot-exceptions/fault.yaml index 80682eca5..5ee073e18 100644 --- a/faults/spring-boot/spring-boot-exceptions/fault.yaml +++ b/faults/spring-boot/spring-boot-exceptions/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml b/faults/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml index dc877e1da..97a16a673 100644 --- a/faults/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml +++ b/faults/spring-boot/spring-boot-exceptions/spring-boot-exceptions.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Spring Boot - vendor: Harness + vendor: LitmusChaos spec: displayName: spring-boot-exceptions categoryDescription: | @@ -25,3 +25,9 @@ spec: labels: app.kubernetes.io/component: chartserviceversion app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://litmuschaos.github.io/litmus/experiments/categories/contents + icon: + - url: + mediatype: "" diff --git a/faults/spring-boot/spring-boot-faults/fault.yaml b/faults/spring-boot/spring-boot-faults/fault.yaml index a2734661b..5e502684a 100644 --- a/faults/spring-boot/spring-boot-faults/fault.yaml +++ b/faults/spring-boot/spring-boot-faults/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml b/faults/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml index 4a02c76e5..ab74fb854 100644 --- a/faults/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml +++ b/faults/spring-boot/spring-boot-faults/spring-boot-faults.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Spring Boot - vendor: Harness + vendor: LitmusChaos spec: displayName: spring-boot-faults categoryDescription: | @@ -25,3 +25,9 @@ spec: labels: app.kubernetes.io/component: chartserviceversion app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://litmuschaos.github.io/litmus/experiments/categories/contents + icon: + - url: + mediatype: "" diff --git a/faults/spring-boot/spring-boot-latency/fault.yaml b/faults/spring-boot/spring-boot-latency/fault.yaml index dcc566ce3..eb627561a 100644 --- a/faults/spring-boot/spring-boot-latency/fault.yaml +++ b/faults/spring-boot/spring-boot-latency/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml b/faults/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml index 9bfc33186..40d834392 100644 --- a/faults/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml +++ b/faults/spring-boot/spring-boot-latency/spring-boot-latency.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Spring Boot - vendor: Harness + vendor: LitmusChaos spec: displayName: spring-boot-latency categoryDescription: | @@ -25,3 +25,9 @@ spec: labels: app.kubernetes.io/component: chartserviceversion app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://litmuschaos.github.io/litmus/experiments/categories/contents + icon: + - url: + mediatype: "" diff --git a/faults/spring-boot/spring-boot-memory-stress/fault.yaml b/faults/spring-boot/spring-boot-memory-stress/fault.yaml index 0b1e02fa6..7f708d7dc 100644 --- a/faults/spring-boot/spring-boot-memory-stress/fault.yaml +++ b/faults/spring-boot/spring-boot-memory-stress/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml b/faults/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml index e5a2cf4a7..821e35aee 100644 --- a/faults/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml +++ b/faults/spring-boot/spring-boot-memory-stress/spring-boot-memory-stress.chartserviceversion.yaml @@ -6,7 +6,7 @@ metadata: version: 0.1.0 annotations: categories: Spring Boot - vendor: Harness + vendor: LitmusChaos spec: displayName: spring-boot-memory-stress categoryDescription: | @@ -25,3 +25,9 @@ spec: labels: app.kubernetes.io/component: chartserviceversion app.kubernetes.io/version: ci + links: + - name: Documentation + url: https://litmuschaos.github.io/litmus/experiments/categories/contents + icon: + - url: + mediatype: "" diff --git a/faults/vmware/vm-poweroff/fault.yaml b/faults/vmware/vm-poweroff/fault.yaml index 49ab0c9ff..89b1041ab 100644 --- a/faults/vmware/vm-poweroff/fault.yaml +++ b/faults/vmware/vm-poweroff/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "chaosnative/go-runner:ci" + image: "litmuschaos/go-runner:ci" imagePullPolicy: Always args: - -c diff --git a/faults/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml b/faults/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml index fcec5e0b7..5fd756714 100644 --- a/faults/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml +++ b/faults/vmware/vm-poweroff/vm-poweroff.chartserviceversion.yaml @@ -7,7 +7,7 @@ metadata: version: 0.1.0 annotations: categories: VMWare - vendor: Harness + vendor: LitmusChaos spec: displayName: VMware VM Power Off categoryDescription: | @@ -23,7 +23,7 @@ spec: app.kubernetes.io/version: ci links: - name: Documentation - url: https://docs.harness.io/category/kl0mxwpfw1-hce-category + url: https://litmuschaos.github.io/litmus/experiments/categories/contents icon: - url: mediatype: "" diff --git a/faults/vmware/vmware.chartserviceversion.yaml b/faults/vmware/vmware.chartserviceversion.yaml index 85798b2d5..ae0c6da7a 100644 --- a/faults/vmware/vmware.chartserviceversion.yaml +++ b/faults/vmware/vmware.chartserviceversion.yaml @@ -19,6 +19,15 @@ spec: keywords: - VMware minKubeVersion: 1.12.0 + links: + - name: Kubernetes Website + url: https://kubernetes.io + - name: Source Code + url: https://github.com/kubernetes/kubernetes + - name: Kubernetes Slack + url: https://slack.kubernetes.io/ + - name: Documentation + url: "https://litmuschaos.github.io/litmus/experiments/categories/contents/#vmware" icon: - url: https://raw.githubusercontent.com/litmuschaos/charthub.litmuschaos.io/master/public/litmus.ico mediatype: image/png From 294375af2b26a781ad32084b1e0741dbc0b7117e Mon Sep 17 00:00:00 2001 From: neelanjan00 Date: Fri, 7 Jul 2023 17:00:41 +0530 Subject: [PATCH 04/16] updates experiment step name Signed-off-by: neelanjan00 --- experiments/bank-of-anthos/experiment.yaml | 6 +++--- experiments/bank-of-anthos/experiment_cron.yaml | 6 +++--- experiments/namespaced-scope-chaos/experiment.yaml | 8 ++++---- experiments/namespaced-scope-chaos/experiment_cron.yaml | 8 ++++---- experiments/node-cpu-hog/experiment.yaml | 8 ++++---- experiments/node-cpu-hog/experiment_cron.yaml | 8 ++++---- experiments/node-memory-hog/experiment.yaml | 8 ++++---- experiments/node-memory-hog/experiment_cron.yaml | 8 ++++---- experiments/pod-cpu-hog/experiment.yaml | 8 ++++---- experiments/pod-cpu-hog/experiment_cron.yaml | 8 ++++---- experiments/pod-delete/experiment.yaml | 8 ++++---- experiments/pod-delete/experiment_cron.yaml | 8 ++++---- experiments/pod-memory-hog/experiment.yaml | 8 ++++---- experiments/pod-memory-hog/experiment_cron.yaml | 8 ++++---- experiments/podtato-head/experiment.yaml | 6 +++--- experiments/podtato-head/experiment_cron.yaml | 6 +++--- experiments/sock-shop-promProbe/experiment.yaml | 6 +++--- experiments/sock-shop-promProbe/experiment_cron.yaml | 6 +++--- experiments/sock-shop/experiment.yaml | 6 +++--- experiments/sock-shop/experiment_cron.yaml | 6 +++--- 20 files changed, 72 insertions(+), 72 deletions(-) diff --git a/experiments/bank-of-anthos/experiment.yaml b/experiments/bank-of-anthos/experiment.yaml index f4f105fbe..0d043e5fc 100644 --- a/experiments/bank-of-anthos/experiment.yaml +++ b/experiments/bank-of-anthos/experiment.yaml @@ -22,8 +22,8 @@ spec: steps: - - name: install-application template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments + - - name: install-chaos-faults + template: install-chaos-faults - - name: pod-network-loss template: pod-network-loss - - name: revert-chaos @@ -36,7 +36,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=bank","-typeName=resilient","-operation=apply","-timeout=400", "-app=bank-of-anthos","-scope=cluster"] #for weak provide type flagName as resilient(-typeName=weak) - - name: install-chaos-experiments + - name: install-chaos-faults container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/bank-of-anthos/experiment_cron.yaml b/experiments/bank-of-anthos/experiment_cron.yaml index e9adbcbf0..ca5251920 100644 --- a/experiments/bank-of-anthos/experiment_cron.yaml +++ b/experiments/bank-of-anthos/experiment_cron.yaml @@ -26,8 +26,8 @@ spec: steps: - - name: install-application template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments + - - name: install-chaos-faults + template: install-chaos-faults - - name: pod-network-loss template: pod-network-loss - - name: revert-chaos @@ -40,7 +40,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=bank","-typeName=resilient","-operation=apply","-timeout=400", "-app=bank-of-anthos","-scope=cluster"] #for weak provide type flagName as resilient(-typeName=weak) - - name: install-chaos-experiments + - name: install-chaos-faults container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/namespaced-scope-chaos/experiment.yaml b/experiments/namespaced-scope-chaos/experiment.yaml index 129273c62..f0e739bc7 100644 --- a/experiments/namespaced-scope-chaos/experiment.yaml +++ b/experiments/namespaced-scope-chaos/experiment.yaml @@ -17,17 +17,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/pod-delete.yaml raw: data: | diff --git a/experiments/namespaced-scope-chaos/experiment_cron.yaml b/experiments/namespaced-scope-chaos/experiment_cron.yaml index 1f44c807d..2d464a36d 100644 --- a/experiments/namespaced-scope-chaos/experiment_cron.yaml +++ b/experiments/namespaced-scope-chaos/experiment_cron.yaml @@ -21,17 +21,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/pod-delete.yaml raw: data: | diff --git a/experiments/node-cpu-hog/experiment.yaml b/experiments/node-cpu-hog/experiment.yaml index 53cfa75dd..9403662e0 100644 --- a/experiments/node-cpu-hog/experiment.yaml +++ b/experiments/node-cpu-hog/experiment.yaml @@ -20,17 +20,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/node-cpu-hog.yaml raw: data: | diff --git a/experiments/node-cpu-hog/experiment_cron.yaml b/experiments/node-cpu-hog/experiment_cron.yaml index a6261854e..ff144c8f7 100644 --- a/experiments/node-cpu-hog/experiment_cron.yaml +++ b/experiments/node-cpu-hog/experiment_cron.yaml @@ -24,17 +24,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/node-cpu-hog.yaml raw: data: | diff --git a/experiments/node-memory-hog/experiment.yaml b/experiments/node-memory-hog/experiment.yaml index 8bb7db878..08c609d16 100644 --- a/experiments/node-memory-hog/experiment.yaml +++ b/experiments/node-memory-hog/experiment.yaml @@ -20,17 +20,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/node-memory-hog.yaml raw: data: | diff --git a/experiments/node-memory-hog/experiment_cron.yaml b/experiments/node-memory-hog/experiment_cron.yaml index 9dfc80ed4..6325c6fbc 100644 --- a/experiments/node-memory-hog/experiment_cron.yaml +++ b/experiments/node-memory-hog/experiment_cron.yaml @@ -24,16 +24,16 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/node-memory-hog.yaml raw: data: | diff --git a/experiments/pod-cpu-hog/experiment.yaml b/experiments/pod-cpu-hog/experiment.yaml index c7f163861..c35bd28ff 100644 --- a/experiments/pod-cpu-hog/experiment.yaml +++ b/experiments/pod-cpu-hog/experiment.yaml @@ -20,17 +20,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/pod-cpu-hog.yaml raw: data: | diff --git a/experiments/pod-cpu-hog/experiment_cron.yaml b/experiments/pod-cpu-hog/experiment_cron.yaml index 1e77fb989..ddf9b68da 100644 --- a/experiments/pod-cpu-hog/experiment_cron.yaml +++ b/experiments/pod-cpu-hog/experiment_cron.yaml @@ -24,17 +24,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/pod-cpu-hog.yaml raw: data: | diff --git a/experiments/pod-delete/experiment.yaml b/experiments/pod-delete/experiment.yaml index 460d0eda6..0665ac300 100644 --- a/experiments/pod-delete/experiment.yaml +++ b/experiments/pod-delete/experiment.yaml @@ -20,17 +20,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/pod-delete.yaml raw: data: | diff --git a/experiments/pod-delete/experiment_cron.yaml b/experiments/pod-delete/experiment_cron.yaml index 8da977ccf..4cccd5f0f 100644 --- a/experiments/pod-delete/experiment_cron.yaml +++ b/experiments/pod-delete/experiment_cron.yaml @@ -24,17 +24,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/pod-delete.yaml raw: data: | diff --git a/experiments/pod-memory-hog/experiment.yaml b/experiments/pod-memory-hog/experiment.yaml index c429b58c1..4d3738889 100644 --- a/experiments/pod-memory-hog/experiment.yaml +++ b/experiments/pod-memory-hog/experiment.yaml @@ -20,17 +20,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/pod-memory-hog.yaml raw: data: | diff --git a/experiments/pod-memory-hog/experiment_cron.yaml b/experiments/pod-memory-hog/experiment_cron.yaml index 1ba2b18fb..119c897ed 100644 --- a/experiments/pod-memory-hog/experiment_cron.yaml +++ b/experiments/pod-memory-hog/experiment_cron.yaml @@ -24,17 +24,17 @@ spec: templates: - name: argowf-chaos steps: - - - name: install-experiment - template: install-experiment + - - name: install-chaos-faults + template: install-chaos-faults - - name: run-chaos template: run-chaos - - name: revert-chaos template: revert-chaos - - name: install-experiment + - name: install-chaos-faults inputs: artifacts: - - name: install-experiment + - name: install-chaos-faults path: /tmp/pod-memory-hog.yaml raw: data: | diff --git a/experiments/podtato-head/experiment.yaml b/experiments/podtato-head/experiment.yaml index b8165d4a4..8418751c9 100644 --- a/experiments/podtato-head/experiment.yaml +++ b/experiments/podtato-head/experiment.yaml @@ -20,8 +20,8 @@ spec: steps: - - name: install-application template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments + - - name: install-chaos-faults + template: install-chaos-faults - - name: pod-delete template: pod-delete - - name: revert-chaos @@ -34,7 +34,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=apply","-timeout=400", "-app=podtato-head","-scope=namespace"] - - name: install-chaos-experiments + - name: install-chaos-faults container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/podtato-head/experiment_cron.yaml b/experiments/podtato-head/experiment_cron.yaml index 099a05089..b91480af3 100644 --- a/experiments/podtato-head/experiment_cron.yaml +++ b/experiments/podtato-head/experiment_cron.yaml @@ -24,8 +24,8 @@ spec: steps: - - name: install-application template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments + - - name: install-chaos-faults + template: install-chaos-faults - - name: pod-delete template: pod-delete - - name: revert-chaos @@ -38,7 +38,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=apply","-timeout=400", "-app=podtato-head","-scope=namespace"] - - name: install-chaos-experiments + - name: install-chaos-faults container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/sock-shop-promProbe/experiment.yaml b/experiments/sock-shop-promProbe/experiment.yaml index 43117ca83..b0b6cedf8 100644 --- a/experiments/sock-shop-promProbe/experiment.yaml +++ b/experiments/sock-shop-promProbe/experiment.yaml @@ -22,8 +22,8 @@ spec: steps: - - name: install-application template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments + - - name: install-chaos-faults + template: install-chaos-faults - name: load-test template: load-test - - name: pod-cpu-hog @@ -48,7 +48,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=sock-shop","-typeName=resilient","-operation=apply","-timeout=400", "-app=sock-shop","-scope=cluster"] #for weak provide type flagName as resilient(-typeName=weak) - - name: install-chaos-experiments + - name: install-chaos-faults container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/sock-shop-promProbe/experiment_cron.yaml b/experiments/sock-shop-promProbe/experiment_cron.yaml index ff2459954..c5292c6c7 100644 --- a/experiments/sock-shop-promProbe/experiment_cron.yaml +++ b/experiments/sock-shop-promProbe/experiment_cron.yaml @@ -26,8 +26,8 @@ spec: steps: - - name: install-application template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments + - - name: install-chaos-faults + template: install-chaos-faults - name: load-test template: load-test - - name: pod-cpu-hog @@ -52,7 +52,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=sock-shop","-typeName=resilient","-operation=apply","-timeout=400", "-app=sock-shop","-scope=cluster"] #for weak provide type flagName as resilient(-typeName=weak) - - name: install-chaos-experiments + - name: install-chaos-faults container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/sock-shop/experiment.yaml b/experiments/sock-shop/experiment.yaml index 24076ce98..83048763b 100644 --- a/experiments/sock-shop/experiment.yaml +++ b/experiments/sock-shop/experiment.yaml @@ -22,8 +22,8 @@ spec: steps: - - name: install-application template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments + - - name: install-chaos-faults + template: install-chaos-faults - name: load-test template: load-test - - name: pod-cpu-hog @@ -48,7 +48,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=sock-shop","-typeName=resilient","-operation=apply","-timeout=400", "-app=sock-shop","-scope=cluster"] #for weak provide type flagName as resilient(-typeName=weak) - - name: install-chaos-experiments + - name: install-chaos-faults container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/sock-shop/experiment_cron.yaml b/experiments/sock-shop/experiment_cron.yaml index 48417d9da..19db013e3 100644 --- a/experiments/sock-shop/experiment_cron.yaml +++ b/experiments/sock-shop/experiment_cron.yaml @@ -26,8 +26,8 @@ spec: steps: - - name: install-application template: install-application - - - name: install-chaos-experiments - template: install-chaos-experiments + - - name: install-chaos-faults + template: install-chaos-faults - name: load-test template: load-test - - name: pod-cpu-hog @@ -52,7 +52,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=sock-shop","-typeName=resilient","-operation=apply","-timeout=400", "-app=sock-shop","-scope=cluster"] #for weak provide type flagName as resilient(-typeName=weak) - - name: install-chaos-experiments + - name: install-chaos-faults container: image: litmuschaos/k8s:latest command: [sh, -c] From c01dfc2748d6de14c50f81388b4e756d1800f041 Mon Sep 17 00:00:00 2001 From: neelanjan00 Date: Fri, 7 Jul 2023 17:03:40 +0530 Subject: [PATCH 05/16] updates cleanup-chaos step name Signed-off-by: neelanjan00 --- experiments/bank-of-anthos/experiment.yaml | 6 +++--- experiments/bank-of-anthos/experiment_cron.yaml | 6 +++--- experiments/namespaced-scope-chaos/experiment.yaml | 6 +++--- experiments/namespaced-scope-chaos/experiment_cron.yaml | 6 +++--- experiments/node-cpu-hog/experiment.yaml | 6 +++--- experiments/node-cpu-hog/experiment_cron.yaml | 6 +++--- experiments/node-memory-hog/experiment.yaml | 6 +++--- experiments/node-memory-hog/experiment_cron.yaml | 6 +++--- experiments/pod-cpu-hog/experiment.yaml | 6 +++--- experiments/pod-cpu-hog/experiment_cron.yaml | 6 +++--- experiments/pod-delete/experiment.yaml | 6 +++--- experiments/pod-delete/experiment_cron.yaml | 6 +++--- experiments/pod-memory-hog/experiment.yaml | 6 +++--- experiments/pod-memory-hog/experiment_cron.yaml | 6 +++--- experiments/podtato-head/experiment.yaml | 6 +++--- experiments/podtato-head/experiment_cron.yaml | 6 +++--- experiments/sock-shop-promProbe/experiment.yaml | 6 +++--- experiments/sock-shop-promProbe/experiment_cron.yaml | 6 +++--- experiments/sock-shop/experiment.yaml | 6 +++--- experiments/sock-shop/experiment_cron.yaml | 6 +++--- service-accounts/argowf-chaos-admin.yaml | 6 +++--- 21 files changed, 63 insertions(+), 63 deletions(-) diff --git a/experiments/bank-of-anthos/experiment.yaml b/experiments/bank-of-anthos/experiment.yaml index 0d043e5fc..56bc2a746 100644 --- a/experiments/bank-of-anthos/experiment.yaml +++ b/experiments/bank-of-anthos/experiment.yaml @@ -26,8 +26,8 @@ spec: template: install-chaos-faults - - name: pod-network-loss template: pod-network-loss - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: delete-application template: delete-application @@ -108,7 +108,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=bank","-typeName=resilient","-operation=delete", "-app=bank-of-anthos"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/bank-of-anthos/experiment_cron.yaml b/experiments/bank-of-anthos/experiment_cron.yaml index ca5251920..d54251171 100644 --- a/experiments/bank-of-anthos/experiment_cron.yaml +++ b/experiments/bank-of-anthos/experiment_cron.yaml @@ -30,8 +30,8 @@ spec: template: install-chaos-faults - - name: pod-network-loss template: pod-network-loss - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: delete-application template: delete-application @@ -112,7 +112,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=bank","-typeName=resilient","-operation=delete", "-app=bank-of-anthos"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/namespaced-scope-chaos/experiment.yaml b/experiments/namespaced-scope-chaos/experiment.yaml index f0e739bc7..4c962ef04 100644 --- a/experiments/namespaced-scope-chaos/experiment.yaml +++ b/experiments/namespaced-scope-chaos/experiment.yaml @@ -21,8 +21,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -161,7 +161,7 @@ spec: - -file=/tmp/chaosengine.yaml - -saveName=/tmp/engine-name - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest resources: diff --git a/experiments/namespaced-scope-chaos/experiment_cron.yaml b/experiments/namespaced-scope-chaos/experiment_cron.yaml index 2d464a36d..9d41f9861 100644 --- a/experiments/namespaced-scope-chaos/experiment_cron.yaml +++ b/experiments/namespaced-scope-chaos/experiment_cron.yaml @@ -25,8 +25,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -165,7 +165,7 @@ spec: - -file=/tmp/chaosengine.yaml - -saveName=/tmp/engine-name - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest resources: diff --git a/experiments/node-cpu-hog/experiment.yaml b/experiments/node-cpu-hog/experiment.yaml index 9403662e0..0e949bfdd 100644 --- a/experiments/node-cpu-hog/experiment.yaml +++ b/experiments/node-cpu-hog/experiment.yaml @@ -24,8 +24,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -139,7 +139,7 @@ spec: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/node-cpu-hog/experiment_cron.yaml b/experiments/node-cpu-hog/experiment_cron.yaml index ff144c8f7..64586d8c8 100644 --- a/experiments/node-cpu-hog/experiment_cron.yaml +++ b/experiments/node-cpu-hog/experiment_cron.yaml @@ -28,8 +28,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -143,7 +143,7 @@ spec: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/node-memory-hog/experiment.yaml b/experiments/node-memory-hog/experiment.yaml index 08c609d16..b5f7eb3ba 100644 --- a/experiments/node-memory-hog/experiment.yaml +++ b/experiments/node-memory-hog/experiment.yaml @@ -24,8 +24,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -139,7 +139,7 @@ spec: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/node-memory-hog/experiment_cron.yaml b/experiments/node-memory-hog/experiment_cron.yaml index 6325c6fbc..98163751f 100644 --- a/experiments/node-memory-hog/experiment_cron.yaml +++ b/experiments/node-memory-hog/experiment_cron.yaml @@ -28,8 +28,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: artifacts: @@ -134,7 +134,7 @@ spec: container: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/pod-cpu-hog/experiment.yaml b/experiments/pod-cpu-hog/experiment.yaml index c35bd28ff..b0b506781 100644 --- a/experiments/pod-cpu-hog/experiment.yaml +++ b/experiments/pod-cpu-hog/experiment.yaml @@ -24,8 +24,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -145,7 +145,7 @@ spec: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/pod-cpu-hog/experiment_cron.yaml b/experiments/pod-cpu-hog/experiment_cron.yaml index ddf9b68da..6ccc7acd0 100644 --- a/experiments/pod-cpu-hog/experiment_cron.yaml +++ b/experiments/pod-cpu-hog/experiment_cron.yaml @@ -28,8 +28,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -149,7 +149,7 @@ spec: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/pod-delete/experiment.yaml b/experiments/pod-delete/experiment.yaml index 0665ac300..a7fbe3007 100644 --- a/experiments/pod-delete/experiment.yaml +++ b/experiments/pod-delete/experiment.yaml @@ -24,8 +24,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -147,7 +147,7 @@ spec: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/pod-delete/experiment_cron.yaml b/experiments/pod-delete/experiment_cron.yaml index 4cccd5f0f..200df80f0 100644 --- a/experiments/pod-delete/experiment_cron.yaml +++ b/experiments/pod-delete/experiment_cron.yaml @@ -28,8 +28,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -151,7 +151,7 @@ spec: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/pod-memory-hog/experiment.yaml b/experiments/pod-memory-hog/experiment.yaml index 4d3738889..cef318ff1 100644 --- a/experiments/pod-memory-hog/experiment.yaml +++ b/experiments/pod-memory-hog/experiment.yaml @@ -24,8 +24,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -144,7 +144,7 @@ spec: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/pod-memory-hog/experiment_cron.yaml b/experiments/pod-memory-hog/experiment_cron.yaml index 119c897ed..26bc167fa 100644 --- a/experiments/pod-memory-hog/experiment_cron.yaml +++ b/experiments/pod-memory-hog/experiment_cron.yaml @@ -28,8 +28,8 @@ spec: template: install-chaos-faults - - name: run-chaos template: run-chaos - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: install-chaos-faults inputs: @@ -148,7 +148,7 @@ spec: image: litmuschaos/litmus-checker:latest args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/podtato-head/experiment.yaml b/experiments/podtato-head/experiment.yaml index 8418751c9..00836ed9e 100644 --- a/experiments/podtato-head/experiment.yaml +++ b/experiments/podtato-head/experiment.yaml @@ -24,8 +24,8 @@ spec: template: install-chaos-faults - - name: pod-delete template: pod-delete - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: delete-application template: delete-application @@ -104,7 +104,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=delete","-app=podtato-head"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/podtato-head/experiment_cron.yaml b/experiments/podtato-head/experiment_cron.yaml index b91480af3..cdd470c3b 100644 --- a/experiments/podtato-head/experiment_cron.yaml +++ b/experiments/podtato-head/experiment_cron.yaml @@ -28,8 +28,8 @@ spec: template: install-chaos-faults - - name: pod-delete template: pod-delete - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: delete-application template: delete-application @@ -108,7 +108,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace={{workflow.parameters.adminModeNamespace}}","-typeName=resilient","-operation=delete","-app=podtato-head"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/sock-shop-promProbe/experiment.yaml b/experiments/sock-shop-promProbe/experiment.yaml index b0b6cedf8..af7b03679 100644 --- a/experiments/sock-shop-promProbe/experiment.yaml +++ b/experiments/sock-shop-promProbe/experiment.yaml @@ -36,8 +36,8 @@ spec: template: pod-memory-hog - - name: disk-fill template: disk-fill - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources # - name: delete-application # template: delete-application - name: delete-loadtest @@ -426,7 +426,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=loadtest","-operation=delete", "-app=loadtest"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/sock-shop-promProbe/experiment_cron.yaml b/experiments/sock-shop-promProbe/experiment_cron.yaml index c5292c6c7..cdc68e917 100644 --- a/experiments/sock-shop-promProbe/experiment_cron.yaml +++ b/experiments/sock-shop-promProbe/experiment_cron.yaml @@ -40,8 +40,8 @@ spec: template: pod-memory-hog - - name: disk-fill template: disk-fill - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources # - name: delete-application # template: delete-application - name: delete-loadtest @@ -430,7 +430,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=loadtest","-operation=delete", "-app=loadtest"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/sock-shop/experiment.yaml b/experiments/sock-shop/experiment.yaml index 83048763b..1343349a4 100644 --- a/experiments/sock-shop/experiment.yaml +++ b/experiments/sock-shop/experiment.yaml @@ -36,8 +36,8 @@ spec: template: pod-memory-hog - - name: disk-fill template: disk-fill - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources # - name: delete-application # template: delete-application - name: delete-loadtest @@ -430,7 +430,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=loadtest","-operation=delete", "-app=loadtest"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/experiments/sock-shop/experiment_cron.yaml b/experiments/sock-shop/experiment_cron.yaml index 19db013e3..ddd87f784 100644 --- a/experiments/sock-shop/experiment_cron.yaml +++ b/experiments/sock-shop/experiment_cron.yaml @@ -40,8 +40,8 @@ spec: template: pod-memory-hog - - name: disk-fill template: disk-fill - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources # - name: delete-application # template: delete-application - name: delete-loadtest @@ -434,7 +434,7 @@ spec: image: litmuschaos/litmus-app-deployer:latest args: ["-namespace=loadtest","-operation=delete", "-app=loadtest"] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest command: [sh, -c] diff --git a/service-accounts/argowf-chaos-admin.yaml b/service-accounts/argowf-chaos-admin.yaml index 92cb1313c..61a3582b9 100644 --- a/service-accounts/argowf-chaos-admin.yaml +++ b/service-accounts/argowf-chaos-admin.yaml @@ -22,8 +22,8 @@ spec: template: run-chaos - name: run-benchmark template: run-benchmark - - - name: revert-chaos - template: revert-chaos + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources - name: run-chaos inputs: @@ -105,7 +105,7 @@ spec: command: [sh, -c] args: ['kubectl apply -f /tmp/bench.yaml -n {{workflow.parameters.appNamespace}}'] - - name: revert-chaos + - name: cleanup-chaos-resources container: image: alpine/k8s:1.18.2 command: [sh, -c] From ec90d6e95370603fe3711ad98df897c9cecdefd6 Mon Sep 17 00:00:00 2001 From: neelanjan00 Date: Fri, 7 Jul 2023 17:09:20 +0530 Subject: [PATCH 06/16] updates generateName to name in metadata Signed-off-by: neelanjan00 --- experiments/bank-of-anthos/experiment.yaml | 2 +- experiments/bank-of-anthos/experiment_cron.yaml | 2 +- experiments/namespaced-scope-chaos/experiment.yaml | 2 +- experiments/node-cpu-hog/experiment.yaml | 2 +- experiments/node-memory-hog/experiment.yaml | 2 +- experiments/pod-cpu-hog/experiment.yaml | 2 +- experiments/pod-delete/experiment.yaml | 2 +- experiments/pod-memory-hog/experiment.yaml | 2 +- experiments/podtato-head/experiment.yaml | 2 +- experiments/sock-shop-promProbe/experiment.yaml | 2 +- experiments/sock-shop-promProbe/experiment_cron.yaml | 2 +- experiments/sock-shop/experiment.yaml | 2 +- experiments/sock-shop/experiment_cron.yaml | 2 +- service-accounts/argowf-chaos-admin.yaml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/experiments/bank-of-anthos/experiment.yaml b/experiments/bank-of-anthos/experiment.yaml index 56bc2a746..7d086dcea 100644 --- a/experiments/bank-of-anthos/experiment.yaml +++ b/experiments/bank-of-anthos/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos-bank-of-anthos-resiliency- + name: argowf-chaos-bank-of-anthos-resiliency- namespace: litmus labels: subject: "{{workflow.parameters.appNamespace}}_bank-of-anthos" diff --git a/experiments/bank-of-anthos/experiment_cron.yaml b/experiments/bank-of-anthos/experiment_cron.yaml index d54251171..3222b997f 100644 --- a/experiments/bank-of-anthos/experiment_cron.yaml +++ b/experiments/bank-of-anthos/experiment_cron.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: CronWorkflow metadata: - generateName: argowf-chaos-bank-of-anthos-resiliency-cron-wf- + name: argowf-chaos-bank-of-anthos-resiliency-cron-wf- namespace: litmus labels: subject: "{{workflow.parameters.appNamespace}}_bank-of-anthos" diff --git a/experiments/namespaced-scope-chaos/experiment.yaml b/experiments/namespaced-scope-chaos/experiment.yaml index 4c962ef04..f6b41828d 100644 --- a/experiments/namespaced-scope-chaos/experiment.yaml +++ b/experiments/namespaced-scope-chaos/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos-hello-world-pod-delete- + name: argowf-chaos-hello-world-pod-delete- labels: subject: "{{workflow.parameters.adminModeNamespace}}_hello-world" spec: diff --git a/experiments/node-cpu-hog/experiment.yaml b/experiments/node-cpu-hog/experiment.yaml index 0e949bfdd..9dca37e24 100644 --- a/experiments/node-cpu-hog/experiment.yaml +++ b/experiments/node-cpu-hog/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos-node-cpu-hog- + name: argowf-chaos-node-cpu-hog- namespace: litmus labels: subject: "{{workflow.parameters.context}}" diff --git a/experiments/node-memory-hog/experiment.yaml b/experiments/node-memory-hog/experiment.yaml index b5f7eb3ba..9dafa96e2 100644 --- a/experiments/node-memory-hog/experiment.yaml +++ b/experiments/node-memory-hog/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos-node-memory-hog- + name: argowf-chaos-node-memory-hog- namespace: litmus labels: subject: "{{workflow.parameters.context}}" diff --git a/experiments/pod-cpu-hog/experiment.yaml b/experiments/pod-cpu-hog/experiment.yaml index b0b506781..1a30127e6 100644 --- a/experiments/pod-cpu-hog/experiment.yaml +++ b/experiments/pod-cpu-hog/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos-pod-cpu-hog- + name: argowf-chaos-pod-cpu-hog- namespace: litmus labels: subject: "{{workflow.parameters.appNamespace}}_kube-proxy" diff --git a/experiments/pod-delete/experiment.yaml b/experiments/pod-delete/experiment.yaml index a7fbe3007..b36dd891a 100644 --- a/experiments/pod-delete/experiment.yaml +++ b/experiments/pod-delete/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos-pod-delete- + name: argowf-chaos-pod-delete- namespace: litmus labels: subject: "{{workflow.parameters.appNamespace}}_kube-proxy" diff --git a/experiments/pod-memory-hog/experiment.yaml b/experiments/pod-memory-hog/experiment.yaml index cef318ff1..ec1b99114 100644 --- a/experiments/pod-memory-hog/experiment.yaml +++ b/experiments/pod-memory-hog/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos-pod-memory-hog- + name: argowf-chaos-pod-memory-hog- namespace: litmus labels: subject: "{{workflow.parameters.appNamespace}}_kube-proxy" diff --git a/experiments/podtato-head/experiment.yaml b/experiments/podtato-head/experiment.yaml index 00836ed9e..21c91e903 100644 --- a/experiments/podtato-head/experiment.yaml +++ b/experiments/podtato-head/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-podtato-head-chaos- + name: argowf-podtato-head-chaos- namespace: litmus labels: subject : "{{workflow.parameters.adminModeNamespace}}_podtato-main" diff --git a/experiments/sock-shop-promProbe/experiment.yaml b/experiments/sock-shop-promProbe/experiment.yaml index af7b03679..6c6f74ecf 100644 --- a/experiments/sock-shop-promProbe/experiment.yaml +++ b/experiments/sock-shop-promProbe/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos-sock-shop-resiliency- + name: argowf-chaos-sock-shop-resiliency- namespace: litmus labels: subject: "{{workflow.parameters.appNamespace}}_sock-shop" diff --git a/experiments/sock-shop-promProbe/experiment_cron.yaml b/experiments/sock-shop-promProbe/experiment_cron.yaml index cdc68e917..ab218e334 100644 --- a/experiments/sock-shop-promProbe/experiment_cron.yaml +++ b/experiments/sock-shop-promProbe/experiment_cron.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: CronWorkflow metadata: - generateName: argowf-chaos-sock-shop-resiliency-cron-wf- + name: argowf-chaos-sock-shop-resiliency-cron-wf- namespace: litmus labels: subject: "{{workflow.parameters.appNamespace}}_sock-shop" diff --git a/experiments/sock-shop/experiment.yaml b/experiments/sock-shop/experiment.yaml index 1343349a4..4a3c544e3 100644 --- a/experiments/sock-shop/experiment.yaml +++ b/experiments/sock-shop/experiment.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos-sock-shop-resiliency- + name: argowf-chaos-sock-shop-resiliency- namespace: litmus labels: subject: "{{workflow.parameters.appNamespace}}_sock-shop" diff --git a/experiments/sock-shop/experiment_cron.yaml b/experiments/sock-shop/experiment_cron.yaml index ddd87f784..096674074 100644 --- a/experiments/sock-shop/experiment_cron.yaml +++ b/experiments/sock-shop/experiment_cron.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: CronWorkflow metadata: - generateName: argowf-chaos-sock-shop-resiliency-cron-wf- + name: argowf-chaos-sock-shop-resiliency-cron-wf- namespace: litmus labels: subject: "{{workflow.parameters.appNamespace}}_sock-shop" diff --git a/service-accounts/argowf-chaos-admin.yaml b/service-accounts/argowf-chaos-admin.yaml index 61a3582b9..140ec2022 100644 --- a/service-accounts/argowf-chaos-admin.yaml +++ b/service-accounts/argowf-chaos-admin.yaml @@ -1,7 +1,7 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - generateName: argowf-chaos- + name: argowf-chaos- spec: entrypoint: argowf-chaos serviceAccountName: argo-chaos From 2cb4a10e6978c7ee247fba69d11ee547b739590f Mon Sep 17 00:00:00 2001 From: neelanjan00 Date: Thu, 20 Jul 2023 12:25:20 +0530 Subject: [PATCH 07/16] updates go-runner image tags to 3.0.0-beta3 Signed-off-by: neelanjan00 --- experiments/namespaced-scope-chaos/experiment.yaml | 2 +- experiments/namespaced-scope-chaos/experiment_cron.yaml | 2 +- experiments/node-cpu-hog/experiment.yaml | 4 ++-- experiments/node-cpu-hog/experiment_cron.yaml | 4 ++-- experiments/node-memory-hog/experiment.yaml | 4 ++-- experiments/node-memory-hog/experiment_cron.yaml | 4 ++-- experiments/pod-cpu-hog/experiment.yaml | 2 +- experiments/pod-cpu-hog/experiment_cron.yaml | 2 +- experiments/pod-delete/experiment.yaml | 2 +- experiments/pod-delete/experiment_cron.yaml | 2 +- experiments/pod-memory-hog/experiment.yaml | 2 +- experiments/pod-memory-hog/experiment_cron.yaml | 2 +- faults/aws/aws-ssm-chaos-by-id/fault.yaml | 2 +- faults/aws/aws-ssm-chaos-by-tag/fault.yaml | 2 +- faults/aws/ebs-loss-by-id/fault.yaml | 2 +- faults/aws/ebs-loss-by-tag/fault.yaml | 2 +- faults/aws/ec2-stop-by-tag/fault.yaml | 2 +- faults/aws/ec2-terminate-by-id/fault.yaml | 2 +- faults/azure/azure-disk-loss/fault.yaml | 2 +- faults/azure/azure-instance-stop/fault.yaml | 2 +- faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml | 2 +- faults/gcp/gcp-vm-disk-loss/fault.yaml | 2 +- faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml | 2 +- faults/gcp/gcp-vm-instance-stop/fault.yaml | 2 +- faults/kubernetes/container-kill/fault.yaml | 2 +- faults/kubernetes/disk-fill/fault.yaml | 2 +- faults/kubernetes/docker-service-kill/fault.yaml | 2 +- faults/kubernetes/kubelet-service-kill/fault.yaml | 2 +- faults/kubernetes/node-cpu-hog/fault.yaml | 2 +- faults/kubernetes/node-drain/fault.yaml | 2 +- faults/kubernetes/node-io-stress/fault.yaml | 2 +- faults/kubernetes/node-memory-hog/fault.yaml | 2 +- faults/kubernetes/node-poweroff/fault.yaml | 4 ++-- faults/kubernetes/node-restart/fault.yaml | 2 +- faults/kubernetes/node-taint/fault.yaml | 2 +- faults/kubernetes/pod-autoscaler/fault.yaml | 2 +- faults/kubernetes/pod-cpu-hog-exec/fault.yaml | 2 +- faults/kubernetes/pod-cpu-hog/fault.yaml | 2 +- faults/kubernetes/pod-delete/fault.yaml | 2 +- faults/kubernetes/pod-dns-error/fault.yaml | 2 +- faults/kubernetes/pod-dns-spoof/fault.yaml | 2 +- faults/kubernetes/pod-http-latency/fault.yaml | 2 +- faults/kubernetes/pod-http-modify-body/fault.yaml | 2 +- faults/kubernetes/pod-http-modify-header/fault.yaml | 2 +- faults/kubernetes/pod-http-reset-peer/fault.yaml | 2 +- faults/kubernetes/pod-http-status-code/fault.yaml | 2 +- faults/kubernetes/pod-io-stress/fault.yaml | 2 +- faults/kubernetes/pod-memory-hog-exec/fault.yaml | 2 +- faults/kubernetes/pod-memory-hog/fault.yaml | 2 +- faults/kubernetes/pod-network-corruption/fault.yaml | 2 +- faults/kubernetes/pod-network-duplication/fault.yaml | 2 +- faults/kubernetes/pod-network-latency/fault.yaml | 2 +- faults/kubernetes/pod-network-loss/fault.yaml | 2 +- faults/kubernetes/pod-network-partition/fault.yaml | 2 +- faults/spring-boot/spring-boot-app-kill/fault.yaml | 2 +- faults/spring-boot/spring-boot-cpu-stress/fault.yaml | 2 +- faults/spring-boot/spring-boot-exceptions/fault.yaml | 2 +- faults/spring-boot/spring-boot-faults/fault.yaml | 2 +- faults/spring-boot/spring-boot-latency/fault.yaml | 2 +- faults/spring-boot/spring-boot-memory-stress/fault.yaml | 2 +- faults/vmware/vm-poweroff/fault.yaml | 2 +- 61 files changed, 66 insertions(+), 66 deletions(-) diff --git a/experiments/namespaced-scope-chaos/experiment.yaml b/experiments/namespaced-scope-chaos/experiment.yaml index f6b41828d..d52fef56c 100644 --- a/experiments/namespaced-scope-chaos/experiment.yaml +++ b/experiments/namespaced-scope-chaos/experiment.yaml @@ -71,7 +71,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/experiments/namespaced-scope-chaos/experiment_cron.yaml b/experiments/namespaced-scope-chaos/experiment_cron.yaml index 9d41f9861..7527adb6d 100644 --- a/experiments/namespaced-scope-chaos/experiment_cron.yaml +++ b/experiments/namespaced-scope-chaos/experiment_cron.yaml @@ -75,7 +75,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/experiments/node-cpu-hog/experiment.yaml b/experiments/node-cpu-hog/experiment.yaml index 9dca37e24..3ddec4ffe 100644 --- a/experiments/node-cpu-hog/experiment.yaml +++ b/experiments/node-cpu-hog/experiment.yaml @@ -72,7 +72,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c @@ -95,7 +95,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + value: 'litmuschaos/go-runner:3.0.0-beta3' labels: name: node-cpu-hog diff --git a/experiments/node-cpu-hog/experiment_cron.yaml b/experiments/node-cpu-hog/experiment_cron.yaml index 64586d8c8..2837ed86c 100644 --- a/experiments/node-cpu-hog/experiment_cron.yaml +++ b/experiments/node-cpu-hog/experiment_cron.yaml @@ -76,7 +76,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c @@ -99,7 +99,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + value: 'litmuschaos/go-runner:3.0.0-beta3' labels: name: node-cpu-hog diff --git a/experiments/node-memory-hog/experiment.yaml b/experiments/node-memory-hog/experiment.yaml index 9dafa96e2..2fcab66b7 100644 --- a/experiments/node-memory-hog/experiment.yaml +++ b/experiments/node-memory-hog/experiment.yaml @@ -72,7 +72,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c @@ -95,7 +95,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + value: 'litmuschaos/go-runner:3.0.0-beta3' labels: name: node-memory-hog diff --git a/experiments/node-memory-hog/experiment_cron.yaml b/experiments/node-memory-hog/experiment_cron.yaml index 98163751f..88292e7cf 100644 --- a/experiments/node-memory-hog/experiment_cron.yaml +++ b/experiments/node-memory-hog/experiment_cron.yaml @@ -75,7 +75,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c @@ -94,7 +94,7 @@ spec: value: '' # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + value: 'litmuschaos/go-runner:3.0.0-beta3' labels: name: node-memory-hog container: diff --git a/experiments/pod-cpu-hog/experiment.yaml b/experiments/pod-cpu-hog/experiment.yaml index 1a30127e6..28c5eaabc 100644 --- a/experiments/pod-cpu-hog/experiment.yaml +++ b/experiments/pod-cpu-hog/experiment.yaml @@ -64,7 +64,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/experiments/pod-cpu-hog/experiment_cron.yaml b/experiments/pod-cpu-hog/experiment_cron.yaml index 6ccc7acd0..b5c085c0a 100644 --- a/experiments/pod-cpu-hog/experiment_cron.yaml +++ b/experiments/pod-cpu-hog/experiment_cron.yaml @@ -68,7 +68,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/experiments/pod-delete/experiment.yaml b/experiments/pod-delete/experiment.yaml index b36dd891a..9cc33be82 100644 --- a/experiments/pod-delete/experiment.yaml +++ b/experiments/pod-delete/experiment.yaml @@ -74,7 +74,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/experiments/pod-delete/experiment_cron.yaml b/experiments/pod-delete/experiment_cron.yaml index 200df80f0..49b659988 100644 --- a/experiments/pod-delete/experiment_cron.yaml +++ b/experiments/pod-delete/experiment_cron.yaml @@ -78,7 +78,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/experiments/pod-memory-hog/experiment.yaml b/experiments/pod-memory-hog/experiment.yaml index ec1b99114..61b19e936 100644 --- a/experiments/pod-memory-hog/experiment.yaml +++ b/experiments/pod-memory-hog/experiment.yaml @@ -64,7 +64,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" args: - -c - ./experiments -name pod-memory-hog diff --git a/experiments/pod-memory-hog/experiment_cron.yaml b/experiments/pod-memory-hog/experiment_cron.yaml index 26bc167fa..a4b70ed7d 100644 --- a/experiments/pod-memory-hog/experiment_cron.yaml +++ b/experiments/pod-memory-hog/experiment_cron.yaml @@ -68,7 +68,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" args: - -c - ./experiments -name pod-memory-hog diff --git a/faults/aws/aws-ssm-chaos-by-id/fault.yaml b/faults/aws/aws-ssm-chaos-by-id/fault.yaml index f26d694ed..ee9910202 100644 --- a/faults/aws/aws-ssm-chaos-by-id/fault.yaml +++ b/faults/aws/aws-ssm-chaos-by-id/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/aws/aws-ssm-chaos-by-tag/fault.yaml b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml index 219675b0a..aae4bf7a7 100644 --- a/faults/aws/aws-ssm-chaos-by-tag/fault.yaml +++ b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ebs-loss-by-id/fault.yaml b/faults/aws/ebs-loss-by-id/fault.yaml index 186f86ea7..ca094aaf7 100644 --- a/faults/aws/ebs-loss-by-id/fault.yaml +++ b/faults/aws/ebs-loss-by-id/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ebs-loss-by-tag/fault.yaml b/faults/aws/ebs-loss-by-tag/fault.yaml index a65a96530..9a7629dab 100644 --- a/faults/aws/ebs-loss-by-tag/fault.yaml +++ b/faults/aws/ebs-loss-by-tag/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ec2-stop-by-tag/fault.yaml b/faults/aws/ec2-stop-by-tag/fault.yaml index d2e5bbfc6..55741fc6f 100644 --- a/faults/aws/ec2-stop-by-tag/fault.yaml +++ b/faults/aws/ec2-stop-by-tag/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ec2-terminate-by-id/fault.yaml b/faults/aws/ec2-terminate-by-id/fault.yaml index 1af237736..8213a4a1f 100644 --- a/faults/aws/ec2-terminate-by-id/fault.yaml +++ b/faults/aws/ec2-terminate-by-id/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/azure/azure-disk-loss/fault.yaml b/faults/azure/azure-disk-loss/fault.yaml index ba25816ae..2bd659f9d 100644 --- a/faults/azure/azure-disk-loss/fault.yaml +++ b/faults/azure/azure-disk-loss/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/azure/azure-instance-stop/fault.yaml b/faults/azure/azure-instance-stop/fault.yaml index 915389447..099a562ba 100644 --- a/faults/azure/azure-instance-stop/fault.yaml +++ b/faults/azure/azure-instance-stop/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml index c618e4ecb..e173d72c4 100644 --- a/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml +++ b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-disk-loss/fault.yaml b/faults/gcp/gcp-vm-disk-loss/fault.yaml index a9a69df8f..eeca9a8dc 100644 --- a/faults/gcp/gcp-vm-disk-loss/fault.yaml +++ b/faults/gcp/gcp-vm-disk-loss/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml index 5d3a69234..45645f440 100644 --- a/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml +++ b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-instance-stop/fault.yaml b/faults/gcp/gcp-vm-instance-stop/fault.yaml index 7f8e5dfaa..73ac9cadb 100644 --- a/faults/gcp/gcp-vm-instance-stop/fault.yaml +++ b/faults/gcp/gcp-vm-instance-stop/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/container-kill/fault.yaml b/faults/kubernetes/container-kill/fault.yaml index 6afd4ed19..4df4f6f71 100644 --- a/faults/kubernetes/container-kill/fault.yaml +++ b/faults/kubernetes/container-kill/fault.yaml @@ -58,7 +58,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/disk-fill/fault.yaml b/faults/kubernetes/disk-fill/fault.yaml index bf905f1bb..2dfaca15f 100644 --- a/faults/kubernetes/disk-fill/fault.yaml +++ b/faults/kubernetes/disk-fill/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/docker-service-kill/fault.yaml b/faults/kubernetes/docker-service-kill/fault.yaml index b7870c05c..38cf17162 100644 --- a/faults/kubernetes/docker-service-kill/fault.yaml +++ b/faults/kubernetes/docker-service-kill/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/kubelet-service-kill/fault.yaml b/faults/kubernetes/kubelet-service-kill/fault.yaml index d0526f6ea..39ea495fb 100644 --- a/faults/kubernetes/kubelet-service-kill/fault.yaml +++ b/faults/kubernetes/kubelet-service-kill/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-cpu-hog/fault.yaml b/faults/kubernetes/node-cpu-hog/fault.yaml index 679b67794..0dae26053 100644 --- a/faults/kubernetes/node-cpu-hog/fault.yaml +++ b/faults/kubernetes/node-cpu-hog/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-drain/fault.yaml b/faults/kubernetes/node-drain/fault.yaml index 75e8cb10f..da0ecf372 100644 --- a/faults/kubernetes/node-drain/fault.yaml +++ b/faults/kubernetes/node-drain/fault.yaml @@ -51,7 +51,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "patch"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-io-stress/fault.yaml b/faults/kubernetes/node-io-stress/fault.yaml index 8cb1549b6..4deeacd6e 100644 --- a/faults/kubernetes/node-io-stress/fault.yaml +++ b/faults/kubernetes/node-io-stress/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-memory-hog/fault.yaml b/faults/kubernetes/node-memory-hog/fault.yaml index 5e53f3c6e..137b5cb8d 100644 --- a/faults/kubernetes/node-memory-hog/fault.yaml +++ b/faults/kubernetes/node-memory-hog/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-poweroff/fault.yaml b/faults/kubernetes/node-poweroff/fault.yaml index fb7fc3f63..9da2dbefe 100644 --- a/faults/kubernetes/node-poweroff/fault.yaml +++ b/faults/kubernetes/node-poweroff/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c @@ -70,7 +70,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" + value: "litmuschaos/go-runner:3.0.0-beta3" # ENTER THE TARGET NODE NAME - name: TARGET_NODE diff --git a/faults/kubernetes/node-restart/fault.yaml b/faults/kubernetes/node-restart/fault.yaml index 5192667e7..b82b68467 100644 --- a/faults/kubernetes/node-restart/fault.yaml +++ b/faults/kubernetes/node-restart/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-taint/fault.yaml b/faults/kubernetes/node-taint/fault.yaml index bc328a914..1ec22d018 100644 --- a/faults/kubernetes/node-taint/fault.yaml +++ b/faults/kubernetes/node-taint/fault.yaml @@ -51,7 +51,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "patch", "update"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-autoscaler/fault.yaml b/faults/kubernetes/pod-autoscaler/fault.yaml index 84e8d0139..19fe55a25 100644 --- a/faults/kubernetes/pod-autoscaler/fault.yaml +++ b/faults/kubernetes/pod-autoscaler/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-cpu-hog-exec/fault.yaml b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml index 49dd2b266..fe1691d45 100644 --- a/faults/kubernetes/pod-cpu-hog-exec/fault.yaml +++ b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-cpu-hog/fault.yaml b/faults/kubernetes/pod-cpu-hog/fault.yaml index 76f924005..5906ed4f4 100644 --- a/faults/kubernetes/pod-cpu-hog/fault.yaml +++ b/faults/kubernetes/pod-cpu-hog/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-delete/fault.yaml b/faults/kubernetes/pod-delete/fault.yaml index 922e1b65d..47a3347e1 100644 --- a/faults/kubernetes/pod-delete/fault.yaml +++ b/faults/kubernetes/pod-delete/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-dns-error/fault.yaml b/faults/kubernetes/pod-dns-error/fault.yaml index 0cbc752c4..fbaea493c 100644 --- a/faults/kubernetes/pod-dns-error/fault.yaml +++ b/faults/kubernetes/pod-dns-error/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" args: - -c - ./experiments -name pod-dns-error diff --git a/faults/kubernetes/pod-dns-spoof/fault.yaml b/faults/kubernetes/pod-dns-spoof/fault.yaml index 174848024..6695743c6 100644 --- a/faults/kubernetes/pod-dns-spoof/fault.yaml +++ b/faults/kubernetes/pod-dns-spoof/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" args: - -c - ./experiments -name pod-dns-spoof diff --git a/faults/kubernetes/pod-http-latency/fault.yaml b/faults/kubernetes/pod-http-latency/fault.yaml index 8a30b27c0..70a309bb4 100644 --- a/faults/kubernetes/pod-http-latency/fault.yaml +++ b/faults/kubernetes/pod-http-latency/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-modify-body/fault.yaml b/faults/kubernetes/pod-http-modify-body/fault.yaml index aedfe01d4..118c8f58e 100644 --- a/faults/kubernetes/pod-http-modify-body/fault.yaml +++ b/faults/kubernetes/pod-http-modify-body/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-modify-header/fault.yaml b/faults/kubernetes/pod-http-modify-header/fault.yaml index e67c5bc0f..525d1f875 100644 --- a/faults/kubernetes/pod-http-modify-header/fault.yaml +++ b/faults/kubernetes/pod-http-modify-header/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-reset-peer/fault.yaml b/faults/kubernetes/pod-http-reset-peer/fault.yaml index c6fa912fd..f4d05ff17 100644 --- a/faults/kubernetes/pod-http-reset-peer/fault.yaml +++ b/faults/kubernetes/pod-http-reset-peer/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-status-code/fault.yaml b/faults/kubernetes/pod-http-status-code/fault.yaml index 87bc2b311..bc9cd939e 100644 --- a/faults/kubernetes/pod-http-status-code/fault.yaml +++ b/faults/kubernetes/pod-http-status-code/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-io-stress/fault.yaml b/faults/kubernetes/pod-io-stress/fault.yaml index ddbcba19a..94a77bb3c 100644 --- a/faults/kubernetes/pod-io-stress/fault.yaml +++ b/faults/kubernetes/pod-io-stress/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-memory-hog-exec/fault.yaml b/faults/kubernetes/pod-memory-hog-exec/fault.yaml index b0bf3f9be..11e1382f5 100644 --- a/faults/kubernetes/pod-memory-hog-exec/fault.yaml +++ b/faults/kubernetes/pod-memory-hog-exec/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-memory-hog/fault.yaml b/faults/kubernetes/pod-memory-hog/fault.yaml index 75c012481..d09441240 100644 --- a/faults/kubernetes/pod-memory-hog/fault.yaml +++ b/faults/kubernetes/pod-memory-hog/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-corruption/fault.yaml b/faults/kubernetes/pod-network-corruption/fault.yaml index 827a2745e..831c7f1f9 100644 --- a/faults/kubernetes/pod-network-corruption/fault.yaml +++ b/faults/kubernetes/pod-network-corruption/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-duplication/fault.yaml b/faults/kubernetes/pod-network-duplication/fault.yaml index 2438f6d79..1e91ef185 100644 --- a/faults/kubernetes/pod-network-duplication/fault.yaml +++ b/faults/kubernetes/pod-network-duplication/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-latency/fault.yaml b/faults/kubernetes/pod-network-latency/fault.yaml index 1673ab537..fea616d26 100644 --- a/faults/kubernetes/pod-network-latency/fault.yaml +++ b/faults/kubernetes/pod-network-latency/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-loss/fault.yaml b/faults/kubernetes/pod-network-loss/fault.yaml index 68ae9b576..b14a9dce8 100644 --- a/faults/kubernetes/pod-network-loss/fault.yaml +++ b/faults/kubernetes/pod-network-loss/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-partition/fault.yaml b/faults/kubernetes/pod-network-partition/fault.yaml index ce724ee54..d373ebfb1 100644 --- a/faults/kubernetes/pod-network-partition/fault.yaml +++ b/faults/kubernetes/pod-network-partition/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-app-kill/fault.yaml b/faults/spring-boot/spring-boot-app-kill/fault.yaml index 52db1334b..7c9cf9a2f 100644 --- a/faults/spring-boot/spring-boot-app-kill/fault.yaml +++ b/faults/spring-boot/spring-boot-app-kill/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-cpu-stress/fault.yaml b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml index a98431c53..4e5b4f170 100644 --- a/faults/spring-boot/spring-boot-cpu-stress/fault.yaml +++ b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-exceptions/fault.yaml b/faults/spring-boot/spring-boot-exceptions/fault.yaml index 5ee073e18..d2089b564 100644 --- a/faults/spring-boot/spring-boot-exceptions/fault.yaml +++ b/faults/spring-boot/spring-boot-exceptions/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-faults/fault.yaml b/faults/spring-boot/spring-boot-faults/fault.yaml index 5e502684a..1dbe94f62 100644 --- a/faults/spring-boot/spring-boot-faults/fault.yaml +++ b/faults/spring-boot/spring-boot-faults/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-latency/fault.yaml b/faults/spring-boot/spring-boot-latency/fault.yaml index eb627561a..cf9b40a9e 100644 --- a/faults/spring-boot/spring-boot-latency/fault.yaml +++ b/faults/spring-boot/spring-boot-latency/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-memory-stress/fault.yaml b/faults/spring-boot/spring-boot-memory-stress/fault.yaml index 7f708d7dc..729b0e5c8 100644 --- a/faults/spring-boot/spring-boot-memory-stress/fault.yaml +++ b/faults/spring-boot/spring-boot-memory-stress/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c diff --git a/faults/vmware/vm-poweroff/fault.yaml b/faults/vmware/vm-poweroff/fault.yaml index 89b1041ab..09f23adf4 100644 --- a/faults/vmware/vm-poweroff/fault.yaml +++ b/faults/vmware/vm-poweroff/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:ci" + image: "litmuschaos/go-runner:3.0.0-beta3" imagePullPolicy: Always args: - -c From ff78e5b029c28d8484a785ebdbcc4f9bee524f92 Mon Sep 17 00:00:00 2001 From: neelanjan00 Date: Thu, 31 Aug 2023 14:35:52 +0530 Subject: [PATCH 08/16] updates go-runner image tags to 3.0.0-beta10 Signed-off-by: neelanjan00 --- experiments/namespaced-scope-chaos/experiment.yaml | 2 +- experiments/namespaced-scope-chaos/experiment_cron.yaml | 2 +- experiments/node-cpu-hog/experiment.yaml | 4 ++-- experiments/node-cpu-hog/experiment_cron.yaml | 4 ++-- experiments/node-memory-hog/experiment.yaml | 4 ++-- experiments/node-memory-hog/experiment_cron.yaml | 4 ++-- experiments/pod-cpu-hog/experiment.yaml | 2 +- experiments/pod-cpu-hog/experiment_cron.yaml | 2 +- experiments/pod-delete/experiment.yaml | 2 +- experiments/pod-delete/experiment_cron.yaml | 2 +- experiments/pod-memory-hog/experiment.yaml | 2 +- experiments/pod-memory-hog/experiment_cron.yaml | 2 +- faults/aws/aws-ssm-chaos-by-id/fault.yaml | 2 +- faults/aws/aws-ssm-chaos-by-tag/fault.yaml | 2 +- faults/aws/ebs-loss-by-id/fault.yaml | 2 +- faults/aws/ebs-loss-by-tag/fault.yaml | 2 +- faults/aws/ec2-stop-by-tag/fault.yaml | 2 +- faults/aws/ec2-terminate-by-id/fault.yaml | 2 +- faults/azure/azure-disk-loss/fault.yaml | 2 +- faults/azure/azure-instance-stop/fault.yaml | 2 +- faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml | 2 +- faults/gcp/gcp-vm-disk-loss/fault.yaml | 2 +- faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml | 2 +- faults/gcp/gcp-vm-instance-stop/fault.yaml | 2 +- faults/kubernetes/container-kill/fault.yaml | 2 +- faults/kubernetes/disk-fill/fault.yaml | 2 +- faults/kubernetes/docker-service-kill/fault.yaml | 2 +- faults/kubernetes/kubelet-service-kill/fault.yaml | 2 +- faults/kubernetes/node-cpu-hog/fault.yaml | 2 +- faults/kubernetes/node-drain/fault.yaml | 2 +- faults/kubernetes/node-io-stress/fault.yaml | 2 +- faults/kubernetes/node-memory-hog/fault.yaml | 2 +- faults/kubernetes/node-poweroff/fault.yaml | 4 ++-- faults/kubernetes/node-restart/fault.yaml | 2 +- faults/kubernetes/node-taint/fault.yaml | 2 +- faults/kubernetes/pod-autoscaler/fault.yaml | 2 +- faults/kubernetes/pod-cpu-hog-exec/fault.yaml | 2 +- faults/kubernetes/pod-cpu-hog/fault.yaml | 2 +- faults/kubernetes/pod-delete/fault.yaml | 2 +- faults/kubernetes/pod-dns-error/fault.yaml | 2 +- faults/kubernetes/pod-dns-spoof/fault.yaml | 2 +- faults/kubernetes/pod-http-latency/fault.yaml | 2 +- faults/kubernetes/pod-http-modify-body/fault.yaml | 2 +- faults/kubernetes/pod-http-modify-header/fault.yaml | 2 +- faults/kubernetes/pod-http-reset-peer/fault.yaml | 2 +- faults/kubernetes/pod-http-status-code/fault.yaml | 2 +- faults/kubernetes/pod-io-stress/fault.yaml | 2 +- faults/kubernetes/pod-memory-hog-exec/fault.yaml | 2 +- faults/kubernetes/pod-memory-hog/fault.yaml | 2 +- faults/kubernetes/pod-network-corruption/fault.yaml | 2 +- faults/kubernetes/pod-network-duplication/fault.yaml | 2 +- faults/kubernetes/pod-network-latency/fault.yaml | 2 +- faults/kubernetes/pod-network-loss/fault.yaml | 2 +- faults/kubernetes/pod-network-partition/fault.yaml | 2 +- faults/spring-boot/spring-boot-app-kill/fault.yaml | 2 +- faults/spring-boot/spring-boot-cpu-stress/fault.yaml | 2 +- faults/spring-boot/spring-boot-exceptions/fault.yaml | 2 +- faults/spring-boot/spring-boot-faults/fault.yaml | 2 +- faults/spring-boot/spring-boot-latency/fault.yaml | 2 +- faults/spring-boot/spring-boot-memory-stress/fault.yaml | 2 +- faults/vmware/vm-poweroff/fault.yaml | 2 +- 61 files changed, 66 insertions(+), 66 deletions(-) diff --git a/experiments/namespaced-scope-chaos/experiment.yaml b/experiments/namespaced-scope-chaos/experiment.yaml index d52fef56c..d53ff5ea5 100644 --- a/experiments/namespaced-scope-chaos/experiment.yaml +++ b/experiments/namespaced-scope-chaos/experiment.yaml @@ -71,7 +71,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/experiments/namespaced-scope-chaos/experiment_cron.yaml b/experiments/namespaced-scope-chaos/experiment_cron.yaml index 7527adb6d..89d5f1d44 100644 --- a/experiments/namespaced-scope-chaos/experiment_cron.yaml +++ b/experiments/namespaced-scope-chaos/experiment_cron.yaml @@ -75,7 +75,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/experiments/node-cpu-hog/experiment.yaml b/experiments/node-cpu-hog/experiment.yaml index 3ddec4ffe..d35e7c5cf 100644 --- a/experiments/node-cpu-hog/experiment.yaml +++ b/experiments/node-cpu-hog/experiment.yaml @@ -72,7 +72,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c @@ -95,7 +95,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:3.0.0-beta3' + value: 'litmuschaos/go-runner:3.0.0-beta10' labels: name: node-cpu-hog diff --git a/experiments/node-cpu-hog/experiment_cron.yaml b/experiments/node-cpu-hog/experiment_cron.yaml index 2837ed86c..f23a962fb 100644 --- a/experiments/node-cpu-hog/experiment_cron.yaml +++ b/experiments/node-cpu-hog/experiment_cron.yaml @@ -76,7 +76,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c @@ -99,7 +99,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:3.0.0-beta3' + value: 'litmuschaos/go-runner:3.0.0-beta10' labels: name: node-cpu-hog diff --git a/experiments/node-memory-hog/experiment.yaml b/experiments/node-memory-hog/experiment.yaml index 2fcab66b7..5e2837e18 100644 --- a/experiments/node-memory-hog/experiment.yaml +++ b/experiments/node-memory-hog/experiment.yaml @@ -72,7 +72,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c @@ -95,7 +95,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:3.0.0-beta3' + value: 'litmuschaos/go-runner:3.0.0-beta10' labels: name: node-memory-hog diff --git a/experiments/node-memory-hog/experiment_cron.yaml b/experiments/node-memory-hog/experiment_cron.yaml index 88292e7cf..b5cc8c29f 100644 --- a/experiments/node-memory-hog/experiment_cron.yaml +++ b/experiments/node-memory-hog/experiment_cron.yaml @@ -75,7 +75,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c @@ -94,7 +94,7 @@ spec: value: '' # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:3.0.0-beta3' + value: 'litmuschaos/go-runner:3.0.0-beta10' labels: name: node-memory-hog container: diff --git a/experiments/pod-cpu-hog/experiment.yaml b/experiments/pod-cpu-hog/experiment.yaml index 28c5eaabc..448b2c485 100644 --- a/experiments/pod-cpu-hog/experiment.yaml +++ b/experiments/pod-cpu-hog/experiment.yaml @@ -64,7 +64,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/experiments/pod-cpu-hog/experiment_cron.yaml b/experiments/pod-cpu-hog/experiment_cron.yaml index b5c085c0a..4ff0a8b53 100644 --- a/experiments/pod-cpu-hog/experiment_cron.yaml +++ b/experiments/pod-cpu-hog/experiment_cron.yaml @@ -68,7 +68,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/experiments/pod-delete/experiment.yaml b/experiments/pod-delete/experiment.yaml index 9cc33be82..910bd7ce9 100644 --- a/experiments/pod-delete/experiment.yaml +++ b/experiments/pod-delete/experiment.yaml @@ -74,7 +74,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/experiments/pod-delete/experiment_cron.yaml b/experiments/pod-delete/experiment_cron.yaml index 49b659988..f7791ef77 100644 --- a/experiments/pod-delete/experiment_cron.yaml +++ b/experiments/pod-delete/experiment_cron.yaml @@ -78,7 +78,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/experiments/pod-memory-hog/experiment.yaml b/experiments/pod-memory-hog/experiment.yaml index 61b19e936..6ee65167f 100644 --- a/experiments/pod-memory-hog/experiment.yaml +++ b/experiments/pod-memory-hog/experiment.yaml @@ -64,7 +64,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" args: - -c - ./experiments -name pod-memory-hog diff --git a/experiments/pod-memory-hog/experiment_cron.yaml b/experiments/pod-memory-hog/experiment_cron.yaml index a4b70ed7d..a1a2476d5 100644 --- a/experiments/pod-memory-hog/experiment_cron.yaml +++ b/experiments/pod-memory-hog/experiment_cron.yaml @@ -68,7 +68,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" args: - -c - ./experiments -name pod-memory-hog diff --git a/faults/aws/aws-ssm-chaos-by-id/fault.yaml b/faults/aws/aws-ssm-chaos-by-id/fault.yaml index ee9910202..91e0b4f87 100644 --- a/faults/aws/aws-ssm-chaos-by-id/fault.yaml +++ b/faults/aws/aws-ssm-chaos-by-id/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/aws/aws-ssm-chaos-by-tag/fault.yaml b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml index aae4bf7a7..c72688552 100644 --- a/faults/aws/aws-ssm-chaos-by-tag/fault.yaml +++ b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ebs-loss-by-id/fault.yaml b/faults/aws/ebs-loss-by-id/fault.yaml index ca094aaf7..5f2df483c 100644 --- a/faults/aws/ebs-loss-by-id/fault.yaml +++ b/faults/aws/ebs-loss-by-id/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ebs-loss-by-tag/fault.yaml b/faults/aws/ebs-loss-by-tag/fault.yaml index 9a7629dab..770ad5242 100644 --- a/faults/aws/ebs-loss-by-tag/fault.yaml +++ b/faults/aws/ebs-loss-by-tag/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ec2-stop-by-tag/fault.yaml b/faults/aws/ec2-stop-by-tag/fault.yaml index 55741fc6f..1405f6846 100644 --- a/faults/aws/ec2-stop-by-tag/fault.yaml +++ b/faults/aws/ec2-stop-by-tag/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/aws/ec2-terminate-by-id/fault.yaml b/faults/aws/ec2-terminate-by-id/fault.yaml index 8213a4a1f..5f207ecbd 100644 --- a/faults/aws/ec2-terminate-by-id/fault.yaml +++ b/faults/aws/ec2-terminate-by-id/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/azure/azure-disk-loss/fault.yaml b/faults/azure/azure-disk-loss/fault.yaml index 2bd659f9d..5d3a04fdb 100644 --- a/faults/azure/azure-disk-loss/fault.yaml +++ b/faults/azure/azure-disk-loss/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/azure/azure-instance-stop/fault.yaml b/faults/azure/azure-instance-stop/fault.yaml index 099a562ba..d83364514 100644 --- a/faults/azure/azure-instance-stop/fault.yaml +++ b/faults/azure/azure-instance-stop/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml index e173d72c4..386987912 100644 --- a/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml +++ b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-disk-loss/fault.yaml b/faults/gcp/gcp-vm-disk-loss/fault.yaml index eeca9a8dc..afb65a68c 100644 --- a/faults/gcp/gcp-vm-disk-loss/fault.yaml +++ b/faults/gcp/gcp-vm-disk-loss/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml index 45645f440..514641c52 100644 --- a/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml +++ b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/gcp/gcp-vm-instance-stop/fault.yaml b/faults/gcp/gcp-vm-instance-stop/fault.yaml index 73ac9cadb..78ae5a027 100644 --- a/faults/gcp/gcp-vm-instance-stop/fault.yaml +++ b/faults/gcp/gcp-vm-instance-stop/fault.yaml @@ -43,7 +43,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/container-kill/fault.yaml b/faults/kubernetes/container-kill/fault.yaml index 4df4f6f71..19d170ecc 100644 --- a/faults/kubernetes/container-kill/fault.yaml +++ b/faults/kubernetes/container-kill/fault.yaml @@ -58,7 +58,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/disk-fill/fault.yaml b/faults/kubernetes/disk-fill/fault.yaml index 2dfaca15f..22b8ae211 100644 --- a/faults/kubernetes/disk-fill/fault.yaml +++ b/faults/kubernetes/disk-fill/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/docker-service-kill/fault.yaml b/faults/kubernetes/docker-service-kill/fault.yaml index 38cf17162..d2eb9ea40 100644 --- a/faults/kubernetes/docker-service-kill/fault.yaml +++ b/faults/kubernetes/docker-service-kill/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/kubelet-service-kill/fault.yaml b/faults/kubernetes/kubelet-service-kill/fault.yaml index 39ea495fb..85570dd94 100644 --- a/faults/kubernetes/kubelet-service-kill/fault.yaml +++ b/faults/kubernetes/kubelet-service-kill/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-cpu-hog/fault.yaml b/faults/kubernetes/node-cpu-hog/fault.yaml index 0dae26053..ba027949a 100644 --- a/faults/kubernetes/node-cpu-hog/fault.yaml +++ b/faults/kubernetes/node-cpu-hog/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-drain/fault.yaml b/faults/kubernetes/node-drain/fault.yaml index da0ecf372..785c80b63 100644 --- a/faults/kubernetes/node-drain/fault.yaml +++ b/faults/kubernetes/node-drain/fault.yaml @@ -51,7 +51,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "patch"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-io-stress/fault.yaml b/faults/kubernetes/node-io-stress/fault.yaml index 4deeacd6e..75f86228e 100644 --- a/faults/kubernetes/node-io-stress/fault.yaml +++ b/faults/kubernetes/node-io-stress/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-memory-hog/fault.yaml b/faults/kubernetes/node-memory-hog/fault.yaml index 137b5cb8d..1505e79bc 100644 --- a/faults/kubernetes/node-memory-hog/fault.yaml +++ b/faults/kubernetes/node-memory-hog/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-poweroff/fault.yaml b/faults/kubernetes/node-poweroff/fault.yaml index 9da2dbefe..582531129 100644 --- a/faults/kubernetes/node-poweroff/fault.yaml +++ b/faults/kubernetes/node-poweroff/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get","list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c @@ -70,7 +70,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: "litmuschaos/go-runner:3.0.0-beta3" + value: "litmuschaos/go-runner:3.0.0-beta10" # ENTER THE TARGET NODE NAME - name: TARGET_NODE diff --git a/faults/kubernetes/node-restart/fault.yaml b/faults/kubernetes/node-restart/fault.yaml index b82b68467..ce8c492d1 100644 --- a/faults/kubernetes/node-restart/fault.yaml +++ b/faults/kubernetes/node-restart/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/node-taint/fault.yaml b/faults/kubernetes/node-taint/fault.yaml index 1ec22d018..6dd935d31 100644 --- a/faults/kubernetes/node-taint/fault.yaml +++ b/faults/kubernetes/node-taint/fault.yaml @@ -51,7 +51,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "patch", "update"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-autoscaler/fault.yaml b/faults/kubernetes/pod-autoscaler/fault.yaml index 19fe55a25..f589d5771 100644 --- a/faults/kubernetes/pod-autoscaler/fault.yaml +++ b/faults/kubernetes/pod-autoscaler/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-cpu-hog-exec/fault.yaml b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml index fe1691d45..faaa46c06 100644 --- a/faults/kubernetes/pod-cpu-hog-exec/fault.yaml +++ b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-cpu-hog/fault.yaml b/faults/kubernetes/pod-cpu-hog/fault.yaml index 5906ed4f4..9fc054d76 100644 --- a/faults/kubernetes/pod-cpu-hog/fault.yaml +++ b/faults/kubernetes/pod-cpu-hog/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-delete/fault.yaml b/faults/kubernetes/pod-delete/fault.yaml index 47a3347e1..5b6ba5722 100644 --- a/faults/kubernetes/pod-delete/fault.yaml +++ b/faults/kubernetes/pod-delete/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-dns-error/fault.yaml b/faults/kubernetes/pod-dns-error/fault.yaml index fbaea493c..8985b6a44 100644 --- a/faults/kubernetes/pod-dns-error/fault.yaml +++ b/faults/kubernetes/pod-dns-error/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" args: - -c - ./experiments -name pod-dns-error diff --git a/faults/kubernetes/pod-dns-spoof/fault.yaml b/faults/kubernetes/pod-dns-spoof/fault.yaml index 6695743c6..ff1acc0c0 100644 --- a/faults/kubernetes/pod-dns-spoof/fault.yaml +++ b/faults/kubernetes/pod-dns-spoof/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" args: - -c - ./experiments -name pod-dns-spoof diff --git a/faults/kubernetes/pod-http-latency/fault.yaml b/faults/kubernetes/pod-http-latency/fault.yaml index 70a309bb4..15c216d45 100644 --- a/faults/kubernetes/pod-http-latency/fault.yaml +++ b/faults/kubernetes/pod-http-latency/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-modify-body/fault.yaml b/faults/kubernetes/pod-http-modify-body/fault.yaml index 118c8f58e..66d82fb74 100644 --- a/faults/kubernetes/pod-http-modify-body/fault.yaml +++ b/faults/kubernetes/pod-http-modify-body/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-modify-header/fault.yaml b/faults/kubernetes/pod-http-modify-header/fault.yaml index 525d1f875..6d6164d2f 100644 --- a/faults/kubernetes/pod-http-modify-header/fault.yaml +++ b/faults/kubernetes/pod-http-modify-header/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-reset-peer/fault.yaml b/faults/kubernetes/pod-http-reset-peer/fault.yaml index f4d05ff17..c3bf945ad 100644 --- a/faults/kubernetes/pod-http-reset-peer/fault.yaml +++ b/faults/kubernetes/pod-http-reset-peer/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-http-status-code/fault.yaml b/faults/kubernetes/pod-http-status-code/fault.yaml index bc9cd939e..20736f448 100644 --- a/faults/kubernetes/pod-http-status-code/fault.yaml +++ b/faults/kubernetes/pod-http-status-code/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-io-stress/fault.yaml b/faults/kubernetes/pod-io-stress/fault.yaml index 94a77bb3c..37c9cfe20 100644 --- a/faults/kubernetes/pod-io-stress/fault.yaml +++ b/faults/kubernetes/pod-io-stress/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-memory-hog-exec/fault.yaml b/faults/kubernetes/pod-memory-hog-exec/fault.yaml index 11e1382f5..f1ae4777f 100644 --- a/faults/kubernetes/pod-memory-hog-exec/fault.yaml +++ b/faults/kubernetes/pod-memory-hog-exec/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-memory-hog/fault.yaml b/faults/kubernetes/pod-memory-hog/fault.yaml index d09441240..385508b98 100644 --- a/faults/kubernetes/pod-memory-hog/fault.yaml +++ b/faults/kubernetes/pod-memory-hog/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-corruption/fault.yaml b/faults/kubernetes/pod-network-corruption/fault.yaml index 831c7f1f9..9f4c653cd 100644 --- a/faults/kubernetes/pod-network-corruption/fault.yaml +++ b/faults/kubernetes/pod-network-corruption/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-duplication/fault.yaml b/faults/kubernetes/pod-network-duplication/fault.yaml index 1e91ef185..4014deced 100644 --- a/faults/kubernetes/pod-network-duplication/fault.yaml +++ b/faults/kubernetes/pod-network-duplication/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-latency/fault.yaml b/faults/kubernetes/pod-network-latency/fault.yaml index fea616d26..3e3ff5b77 100644 --- a/faults/kubernetes/pod-network-latency/fault.yaml +++ b/faults/kubernetes/pod-network-latency/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-loss/fault.yaml b/faults/kubernetes/pod-network-loss/fault.yaml index b14a9dce8..6bfc055ba 100644 --- a/faults/kubernetes/pod-network-loss/fault.yaml +++ b/faults/kubernetes/pod-network-loss/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/kubernetes/pod-network-partition/fault.yaml b/faults/kubernetes/pod-network-partition/fault.yaml index d373ebfb1..65f9a2cc8 100644 --- a/faults/kubernetes/pod-network-partition/fault.yaml +++ b/faults/kubernetes/pod-network-partition/fault.yaml @@ -47,7 +47,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-app-kill/fault.yaml b/faults/spring-boot/spring-boot-app-kill/fault.yaml index 7c9cf9a2f..49aea8662 100644 --- a/faults/spring-boot/spring-boot-app-kill/fault.yaml +++ b/faults/spring-boot/spring-boot-app-kill/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-cpu-stress/fault.yaml b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml index 4e5b4f170..433ce7955 100644 --- a/faults/spring-boot/spring-boot-cpu-stress/fault.yaml +++ b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-exceptions/fault.yaml b/faults/spring-boot/spring-boot-exceptions/fault.yaml index d2089b564..5a0e34271 100644 --- a/faults/spring-boot/spring-boot-exceptions/fault.yaml +++ b/faults/spring-boot/spring-boot-exceptions/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-faults/fault.yaml b/faults/spring-boot/spring-boot-faults/fault.yaml index 1dbe94f62..2702c43b8 100644 --- a/faults/spring-boot/spring-boot-faults/fault.yaml +++ b/faults/spring-boot/spring-boot-faults/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-latency/fault.yaml b/faults/spring-boot/spring-boot-latency/fault.yaml index cf9b40a9e..40cd81324 100644 --- a/faults/spring-boot/spring-boot-latency/fault.yaml +++ b/faults/spring-boot/spring-boot-latency/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/spring-boot/spring-boot-memory-stress/fault.yaml b/faults/spring-boot/spring-boot-memory-stress/fault.yaml index 729b0e5c8..06b2b8867 100644 --- a/faults/spring-boot/spring-boot-memory-stress/fault.yaml +++ b/faults/spring-boot/spring-boot-memory-stress/fault.yaml @@ -39,7 +39,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c diff --git a/faults/vmware/vm-poweroff/fault.yaml b/faults/vmware/vm-poweroff/fault.yaml index 09f23adf4..dc1d20ada 100644 --- a/faults/vmware/vm-poweroff/fault.yaml +++ b/faults/vmware/vm-poweroff/fault.yaml @@ -59,7 +59,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta3" + image: "litmuschaos/go-runner:3.0.0-beta10" imagePullPolicy: Always args: - -c From 0488947ce66f790392acbd926d0f18e41304664d Mon Sep 17 00:00:00 2001 From: Amit Kumar Das Date: Thu, 21 Sep 2023 16:17:04 +0800 Subject: [PATCH 09/16] Add files via upload --- faults/aws/icons/aws.png | Bin 0 -> 3152 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 faults/aws/icons/aws.png diff --git a/faults/aws/icons/aws.png b/faults/aws/icons/aws.png new file mode 100644 index 0000000000000000000000000000000000000000..fd09e34f6cd5c49336db1bb357ebf14d82201274 GIT binary patch literal 3152 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 Date: Thu, 21 Sep 2023 16:18:30 +0800 Subject: [PATCH 10/16] Add files via upload --- faults/kubernetes/icons/kubernetes.png | Bin 0 -> 12130 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 faults/kubernetes/icons/kubernetes.png diff --git a/faults/kubernetes/icons/kubernetes.png b/faults/kubernetes/icons/kubernetes.png new file mode 100644 index 0000000000000000000000000000000000000000..5d13f6b2fde28f9f5851dda3b8508814821df434 GIT binary patch literal 12130 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 Date: Thu, 21 Sep 2023 16:20:00 +0800 Subject: [PATCH 11/16] Add files via upload --- faults/vmware/icons/vmware.png | Bin 0 -> 74909 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 faults/vmware/icons/vmware.png diff --git a/faults/vmware/icons/vmware.png b/faults/vmware/icons/vmware.png new file mode 100644 index 0000000000000000000000000000000000000000..50807e52d29dd34e61cb79965092ada938a64a67 GIT binary patch literal 74909 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 ZwA;&cO|19@`9tudrJ;K@U(F)qzW`eC3Ge^_ literal 0 HcmV?d00001 From fb5c66d45175278eb6d98a2b55a725657a14a6d8 Mon Sep 17 00:00:00 2001 From: Amit Kumar Das Date: Thu, 21 Sep 2023 16:20:25 +0800 Subject: [PATCH 12/16] Add files via upload --- faults/spring-boot/icons/spring-boot.png | Bin 0 -> 2047 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 faults/spring-boot/icons/spring-boot.png diff --git a/faults/spring-boot/icons/spring-boot.png b/faults/spring-boot/icons/spring-boot.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8728f1a7fc2774700515a50cdf0f39f8959365 GIT binary patch literal 2047 zcmVv6S3^7!xh{P>Z?bmH&ZfxKPJ;=tDE z%$v!9-0Re#%!!A;WsAXVtkIXI&yan(SLgBJx7Vgxs~L5-OqIrYlfbv|000MCNkltS2%Dzw!<=bnnoA|MS9!Ud#r2+c^`j7uLfDj9 z<)y8A`Z1^A^R7e%0szhcAVhs4>a_hQ*48T=N$HpY1c}JGZ<{sn5<=HVM{+9iyTwy? z`2#5Iu)aW8(gl`iy@c(_s>w}BZiCtj*+F5aVrRcnr$EoL4%B^S(6cK)NE;{Tr5&le z#q+%65UpDs)hIJi+-DC=;E1{11^z-S0a$Ccl~PRic{}_`+?UWzJQ277lI_v@CHtM$ zQ9_S0deYO99rx0TGnTsvR=v1<2Xlhkdd+Pd^BXj}Js+B5b8WER;`P2aA``Gtx*Ri> zUTVY*-py=?0p}v@>bvZsx5$X%@L&+y@j}REC0tUnM1<7;iA`^muLH& zU%zXWrE^#vY!;J7-nOkUS506WJl1qS_R zzmesHw?+)G7vBz}oK-EigyffM&0!L2yqwJ*<(4G6JXVOAt#iJ(&7%Dfk>XOAt!X7U z{RUmXNb4V@xrF9(epurTFkB?M84;Hi#j-cjXxO44mc*f%c&Fuf1|7mO4a>2*|c#vJ8<8_Zrn^!i+5=>>nHZ##)vq1J!pF%-x45$0<^kXv+okUTmByY((MOS z_=%OeL79@XeR%Kf7}zU8$QbbTRwm5HGY2s4sSwz4_0oFr{a*rovPaHda@u?rMsPQn z)2U>+rq}1nao-c;MgiT86!80(m83Vy~rk);nrBKE*3> z;`XrEkK_^2b4flE`2g$HlgawzeF3ZegHmxCwfry9Mc%vRwkw&wfkefDvPU&~h~9bP z{q!l0sor_xmgZqU+fXs>P#JzxwbbT20=g3cVg6O0S7E>CxDI4~Im|7(k-A(g2f!n!8be zP#hfgC~>>N_ErMl_2^`iAQtI~NWz=pFjv#L(SH#&OESL(VJu6}q-AmOeiE*#;d_&d zNlkTmu^6!e_F;9dF_Vh^Ex=Z@@Tu~joJrrX0?LYW`@Al%$s}ZMWj0Tz_9?d9(VYRM zGK z(?O*xpKRA_ya)U$A5)Xq(j*;@^(gr#bIR>Z(hte2(7x^?wX-Wh#9_ts)mnpZX(@%4 zC;XhBHHl+~m*wZ`?at2r?H9v39$L_>#Wwp9_>W(godNUjx(n%V*No!pk&0XQU!OPW zzpAs}xIX%?&YSedQtb`I(W!63474n>(TR;SQ%1cCTVKLa2&(3w*kJK%M^D`DnJ_2y zQ&vQ~U$h$F^ICwRcKVQlsPFc+V|27>ErxH?4FUhPSS8V%*{k{z0Z+R+i;ARalA_Gj dV$~P7`Uea#Uq;u%XJh~X002ovPDHLkV1mt58$tj8 literal 0 HcmV?d00001 From 3f2c0b0aeb71bd2684a85ae1236c59b46fed9a0a Mon Sep 17 00:00:00 2001 From: Amit Kumar Das Date: Thu, 21 Sep 2023 16:21:05 +0800 Subject: [PATCH 13/16] Add files via upload --- faults/azure/icons/azure.png | Bin 0 -> 22398 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 faults/azure/icons/azure.png diff --git a/faults/azure/icons/azure.png b/faults/azure/icons/azure.png new file mode 100644 index 0000000000000000000000000000000000000000..5baec5e1850d10cf4b49c165957ed4c7a4739f3c GIT binary patch literal 22398 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 Date: Thu, 21 Sep 2023 16:22:21 +0800 Subject: [PATCH 14/16] Add files via upload --- faults/gcp/icons/gcp.png | Bin 0 -> 30752 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 faults/gcp/icons/gcp.png diff --git a/faults/gcp/icons/gcp.png b/faults/gcp/icons/gcp.png new file mode 100644 index 0000000000000000000000000000000000000000..577f8bad34919c9b7d0487c966c323ed6ed4bcb5 GIT binary patch literal 30752 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%0DeSB+8VaA6;s|>>DYk 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 literal 0 HcmV?d00001 From 26c87550d7fb33192fdb6a439eccb2b591258476 Mon Sep 17 00:00:00 2001 From: Saranya-jena Date: Fri, 22 Sep 2023 13:58:05 +0530 Subject: [PATCH 15/16] updated the tags to latest Signed-off-by: Saranya-jena --- .../namespaced-scope-chaos/experiment.yaml | 4 +- .../experiment_cron.yaml | 4 +- experiments/node-cpu-hog/experiment.yaml | 8 +- experiments/node-cpu-hog/experiment_cron.yaml | 10 +-- experiments/node-memory-hog/experiment.yaml | 8 +- .../node-memory-hog/experiment_cron.yaml | 8 +- experiments/pod-cpu-hog/experiment.yaml | 4 +- experiments/pod-cpu-hog/experiment_cron.yaml | 8 +- experiments/pod-delete/experiment.yaml | 6 +- experiments/pod-delete/experiment_cron.yaml | 6 +- experiments/pod-memory-hog/experiment.yaml | 4 +- .../pod-memory-hog/experiment_cron.yaml | 4 +- faults/aws/aws-ssm-chaos-by-id/fault.yaml | 45 ++++++----- faults/aws/aws-ssm-chaos-by-tag/fault.yaml | 47 ++++++----- faults/aws/ebs-loss-by-id/fault.yaml | 29 ++++--- faults/aws/ebs-loss-by-tag/fault.yaml | 31 +++++--- faults/aws/ec2-stop-by-tag/fault.yaml | 35 +++++---- faults/aws/ec2-terminate-by-id/fault.yaml | 31 +++++--- faults/azure/azure-disk-loss/fault.yaml | 31 +++++--- faults/azure/azure-instance-stop/fault.yaml | 31 +++++--- .../gcp/gcp-vm-disk-loss-by-label/fault.yaml | 29 ++++--- faults/gcp/gcp-vm-disk-loss/fault.yaml | 31 +++++--- .../gcp-vm-instance-stop-by-label/fault.yaml | 31 +++++--- faults/gcp/gcp-vm-instance-stop/fault.yaml | 33 +++++--- faults/kubernetes/container-kill/fault.yaml | 39 ++++++---- faults/kubernetes/disk-fill/fault.yaml | 39 ++++++---- .../kubernetes/docker-service-kill/fault.yaml | 25 ++++-- .../kubelet-service-kill/fault.yaml | 25 ++++-- faults/kubernetes/node-cpu-hog/fault.yaml | 33 +++++--- faults/kubernetes/node-drain/fault.yaml | 23 ++++-- faults/kubernetes/node-io-stress/fault.yaml | 39 ++++++---- faults/kubernetes/node-memory-hog/fault.yaml | 35 +++++---- faults/kubernetes/node-poweroff/fault.yaml | 77 +++++++++++-------- faults/kubernetes/node-restart/fault.yaml | 29 ++++--- faults/kubernetes/node-taint/fault.yaml | 25 ++++-- faults/kubernetes/pod-autoscaler/fault.yaml | 21 +++-- faults/kubernetes/pod-cpu-hog-exec/fault.yaml | 29 ++++--- faults/kubernetes/pod-cpu-hog/fault.yaml | 41 ++++++---- faults/kubernetes/pod-delete/fault.yaml | 33 +++++--- faults/kubernetes/pod-dns-error/fault.yaml | 19 +++-- faults/kubernetes/pod-dns-spoof/fault.yaml | 19 +++-- faults/kubernetes/pod-http-latency/fault.yaml | 37 +++++---- .../pod-http-modify-body/fault.yaml | 41 ++++++---- .../pod-http-modify-header/fault.yaml | 39 ++++++---- .../kubernetes/pod-http-reset-peer/fault.yaml | 37 +++++---- .../pod-http-status-code/fault.yaml | 43 +++++++---- faults/kubernetes/pod-io-stress/fault.yaml | 43 +++++++---- .../kubernetes/pod-memory-hog-exec/fault.yaml | 29 ++++--- faults/kubernetes/pod-memory-hog/fault.yaml | 41 ++++++---- .../pod-network-corruption/fault.yaml | 45 ++++++----- .../pod-network-duplication/fault.yaml | 45 ++++++----- .../kubernetes/pod-network-latency/fault.yaml | 47 ++++++----- faults/kubernetes/pod-network-loss/fault.yaml | 45 ++++++----- .../pod-network-partition/fault.yaml | 31 +++++--- .../spring-boot-app-kill/fault.yaml | 27 ++++--- .../spring-boot-cpu-stress/fault.yaml | 31 +++++--- .../spring-boot-exceptions/fault.yaml | 33 +++++--- .../spring-boot/spring-boot-faults/fault.yaml | 51 +++++++----- .../spring-boot-latency/fault.yaml | 31 +++++--- .../spring-boot-memory-stress/fault.yaml | 31 +++++--- faults/vmware/vm-poweroff/fault.yaml | 25 ++++-- 61 files changed, 1111 insertions(+), 670 deletions(-) diff --git a/experiments/namespaced-scope-chaos/experiment.yaml b/experiments/namespaced-scope-chaos/experiment.yaml index d53ff5ea5..73273d93b 100644 --- a/experiments/namespaced-scope-chaos/experiment.yaml +++ b/experiments/namespaced-scope-chaos/experiment.yaml @@ -71,7 +71,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -96,7 +96,7 @@ spec: - name: CHAOS_INTERVAL value: '5' - + labels: name: pod-delete container: diff --git a/experiments/namespaced-scope-chaos/experiment_cron.yaml b/experiments/namespaced-scope-chaos/experiment_cron.yaml index 89d5f1d44..5f4fde015 100644 --- a/experiments/namespaced-scope-chaos/experiment_cron.yaml +++ b/experiments/namespaced-scope-chaos/experiment_cron.yaml @@ -75,7 +75,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -100,7 +100,7 @@ spec: - name: CHAOS_INTERVAL value: '5' - + labels: name: pod-delete container: diff --git a/experiments/node-cpu-hog/experiment.yaml b/experiments/node-cpu-hog/experiment.yaml index d35e7c5cf..4a6380766 100644 --- a/experiments/node-cpu-hog/experiment.yaml +++ b/experiments/node-cpu-hog/experiment.yaml @@ -16,7 +16,7 @@ spec: - name: adminModeNamespace value: "litmus" - name: context - value: "node-cpu-hog_infra" + value: "node-cpu-hog_infra" templates: - name: argowf-chaos steps: @@ -72,7 +72,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -95,7 +95,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:3.0.0-beta10' + value: 'litmuschaos/go-runner:latest' labels: name: node-cpu-hog @@ -137,7 +137,7 @@ spec: value: '60' # in seconds container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: diff --git a/experiments/node-cpu-hog/experiment_cron.yaml b/experiments/node-cpu-hog/experiment_cron.yaml index f23a962fb..d8b574bbd 100644 --- a/experiments/node-cpu-hog/experiment_cron.yaml +++ b/experiments/node-cpu-hog/experiment_cron.yaml @@ -20,7 +20,7 @@ spec: - name: adminModeNamespace value: "litmus" - name: context - value: "node-cpu-hog_infra" + value: "node-cpu-hog_infra" templates: - name: argowf-chaos steps: @@ -76,7 +76,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -99,7 +99,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:3.0.0-beta10' + value: 'litmuschaos/go-runner:latest' labels: name: node-cpu-hog @@ -141,7 +141,7 @@ spec: value: '60' # in seconds container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: @@ -150,4 +150,4 @@ spec: args: [ "kubectl delete chaosengine kube-proxy-node-cpu-hog-chaos -n {{workflow.parameters.adminModeNamespace}}", - ] \ No newline at end of file + ] diff --git a/experiments/node-memory-hog/experiment.yaml b/experiments/node-memory-hog/experiment.yaml index 5e2837e18..1003d4606 100644 --- a/experiments/node-memory-hog/experiment.yaml +++ b/experiments/node-memory-hog/experiment.yaml @@ -16,7 +16,7 @@ spec: - name: adminModeNamespace value: "litmus" - name: context - value: "node-memory-hog_infra" + value: "node-memory-hog_infra" templates: - name: argowf-chaos steps: @@ -72,7 +72,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -95,7 +95,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:3.0.0-beta10' + value: 'litmuschaos/go-runner:latest' labels: name: node-memory-hog @@ -137,7 +137,7 @@ spec: value: '60' # in seconds container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: diff --git a/experiments/node-memory-hog/experiment_cron.yaml b/experiments/node-memory-hog/experiment_cron.yaml index b5cc8c29f..67ce99d1f 100644 --- a/experiments/node-memory-hog/experiment_cron.yaml +++ b/experiments/node-memory-hog/experiment_cron.yaml @@ -75,7 +75,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -94,7 +94,7 @@ spec: value: '' # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:3.0.0-beta10' + value: 'litmuschaos/go-runner:latest' labels: name: node-memory-hog container: @@ -133,7 +133,7 @@ spec: value: '60' # in seconds container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: image: litmuschaos/k8s:latest @@ -141,4 +141,4 @@ spec: args: [ "kubectl delete chaosengine kube-proxy-node-memory-hog-chaos -n {{workflow.parameters.adminModeNamespace}}", - ] \ No newline at end of file + ] diff --git a/experiments/pod-cpu-hog/experiment.yaml b/experiments/pod-cpu-hog/experiment.yaml index 448b2c485..40e7eb5f7 100644 --- a/experiments/pod-cpu-hog/experiment.yaml +++ b/experiments/pod-cpu-hog/experiment.yaml @@ -64,7 +64,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -143,7 +143,7 @@ spec: value: "kill -9 $(ps afx | grep \"[md5sum] /dev/zero\" | awk '{print$1}' | tr '\n' ' ')" container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: diff --git a/experiments/pod-cpu-hog/experiment_cron.yaml b/experiments/pod-cpu-hog/experiment_cron.yaml index 4ff0a8b53..2925ff2c8 100644 --- a/experiments/pod-cpu-hog/experiment_cron.yaml +++ b/experiments/pod-cpu-hog/experiment_cron.yaml @@ -20,7 +20,7 @@ spec: - name: adminModeNamespace value: "litmus" - name: appNamespace - value: "kube-system" + value: "kube-system" templates: - name: argowf-chaos steps: @@ -68,7 +68,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -147,7 +147,7 @@ spec: value: "kill -9 $(ps afx | grep \"[md5sum] /dev/zero\" | awk '{print$1}' | tr '\n' ' ')" container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: @@ -156,4 +156,4 @@ spec: args: [ "kubectl delete chaosengine kube-proxy-pod-cpu-hog-chaos -n {{workflow.parameters.adminModeNamespace}}", - ] \ No newline at end of file + ] diff --git a/experiments/pod-delete/experiment.yaml b/experiments/pod-delete/experiment.yaml index 910bd7ce9..5e38c3418 100644 --- a/experiments/pod-delete/experiment.yaml +++ b/experiments/pod-delete/experiment.yaml @@ -74,7 +74,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -99,7 +99,7 @@ spec: - name: CHAOS_INTERVAL value: '5' - + labels: name: pod-delete container: @@ -145,7 +145,7 @@ spec: value: "false" container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: diff --git a/experiments/pod-delete/experiment_cron.yaml b/experiments/pod-delete/experiment_cron.yaml index f7791ef77..9016feee6 100644 --- a/experiments/pod-delete/experiment_cron.yaml +++ b/experiments/pod-delete/experiment_cron.yaml @@ -78,7 +78,7 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -103,7 +103,7 @@ spec: - name: CHAOS_INTERVAL value: '5' - + labels: name: pod-delete container: @@ -149,7 +149,7 @@ spec: value: "false" container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: diff --git a/experiments/pod-memory-hog/experiment.yaml b/experiments/pod-memory-hog/experiment.yaml index 6ee65167f..35e4d6f61 100644 --- a/experiments/pod-memory-hog/experiment.yaml +++ b/experiments/pod-memory-hog/experiment.yaml @@ -64,7 +64,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" args: - -c - ./experiments -name pod-memory-hog @@ -142,7 +142,7 @@ spec: value: "kill -9 $(ps afx | grep \"[dd] if /dev/zero\" | awk '{print $1}' | tr '\n' ' ')" container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: diff --git a/experiments/pod-memory-hog/experiment_cron.yaml b/experiments/pod-memory-hog/experiment_cron.yaml index a1a2476d5..979365f51 100644 --- a/experiments/pod-memory-hog/experiment_cron.yaml +++ b/experiments/pod-memory-hog/experiment_cron.yaml @@ -68,7 +68,7 @@ spec: - "patch" - "update" - "delete" - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" args: - -c - ./experiments -name pod-memory-hog @@ -146,7 +146,7 @@ spec: value: "kill -9 $(ps afx | grep \"[dd] if /dev/zero\" | awk '{print $1}' | tr '\n' ' ')" container: image: litmuschaos/litmus-checker:latest - args: ["-file=/tmp/chaosengine.yaml","-saveName=/tmp/engine-name"] + args: ["-file=/tmp/chaosengine.yaml", "-saveName=/tmp/engine-name"] - name: cleanup-chaos-resources container: diff --git a/faults/aws/aws-ssm-chaos-by-id/fault.yaml b/faults/aws/aws-ssm-chaos-by-id/fault.yaml index 91e0b4f87..429cb6f10 100644 --- a/faults/aws/aws-ssm-chaos-by-id/fault.yaml +++ b/faults/aws/aws-ssm-chaos-by-id/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -43,7 +52,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -52,71 +61,71 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" - name: CHAOS_INTERVAL - value: '60' + value: "60" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # Instance ID of the target EC2 instance # Multiple IDs can also be provided as comma separated values ex: id1,id2 - name: EC2_INSTANCE_ID - value: '' + value: "" - name: REGION - value: '' + value: "" # it defines the sequence of chaos execution for multiple target instances # supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" # Provide the path of AWS credentials mounted from secret - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' + value: "/tmp/cloud_config.yml" # provide the number of workers for memory stress - name: NUMBER_OF_WORKERS - value: '1' + value: "1" # provide the percentage of available memory to stress - name: MEMORY_PERCENTAGE - value: '80' + value: "80" # provide the CPU chores to be consumed # 0 will consume all the available CPU cores - name: CPU_CORE - value: '0' + value: "0" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # Provide the name of SSM doc # if not using the default stress docs - name: DOCUMENT_NAME - value: 'LitmusChaos-AWS-SSM-Doc' + value: "LitmusChaos-AWS-SSM-Doc" # Provide the type of SSM doc # if not using the default stress docs - name: DOCUMENT_TYPE - value: 'Command' + value: "Command" # Provide the format of SSM doc # if not using the default stress docs - name: DOCUMENT_FORMAT - value: 'YAML' + value: "YAML" # Provide the path of SSM doc # if not using the default stress docs - name: DOCUMENT_PATH - value: 'Litmus-AWS-SSM-Docs-For-EC2-CPU-Hog.yml' + value: "Litmus-AWS-SSM-Docs-For-EC2-CPU-Hog.yml" # if you want to install dependencies to run default SSM docs - name: INSTALL_DEPENDENCIES - value: 'True' + value: "True" labels: name: aws-ssm-chaos-by-id diff --git a/faults/aws/aws-ssm-chaos-by-tag/fault.yaml b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml index c72688552..f258222f4 100644 --- a/faults/aws/aws-ssm-chaos-by-tag/fault.yaml +++ b/faults/aws/aws-ssm-chaos-by-tag/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -43,7 +52,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -52,75 +61,75 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" - name: CHAOS_INTERVAL - value: '60' + value: "60" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # provide tag of the target EC2 instances # ex: team:devops (key:value) - name: EC2_INSTANCE_TAG - value: '' + value: "" - name: REGION - value: '' + value: "" # it defines the sequence of chaos execution for multiple target instances # supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" # Provide the path of AWS credentials mounted from secret - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' + value: "/tmp/cloud_config.yml" # percentage of total instance to target - name: INSTANCE_AFFECTED_PERC - value: '' + value: "" # provide the number of workers for memory stress - name: NUMBER_OF_WORKERS - value: '1' + value: "1" # provide the percentage of available memory to stress - name: MEMORY_PERCENTAGE - value: '80' + value: "80" # provide the CPU chores to comsumed # 0 will consume all the available CPU cores - name: CPU_CORE - value: '0' + value: "0" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # Provide the name of SSM doc # if not using the default stress docs - name: DOCUMENT_NAME - value: 'LitmusChaos-AWS-SSM-Doc' + value: "LitmusChaos-AWS-SSM-Doc" # Provide the type of SSM doc # if not using the default stress docs - name: DOCUMENT_TYPE - value: 'Command' + value: "Command" # Provide the format of SSM doc # if not using the default stress docs - name: DOCUMENT_FORMAT - value: 'YAML' + value: "YAML" # Provide the path of SSM doc # if not using the default stress docs - name: DOCUMENT_PATH - value: 'Litmus-AWS-SSM-Docs-For-EC2-CPU-Hog.yml' + value: "Litmus-AWS-SSM-Docs-For-EC2-CPU-Hog.yml" # if you want to install dependencies to run default SSM docs - name: INSTALL_DEPENDENCIES - value: 'True' + value: "True" labels: name: aws-ssm-chaos-by-tag diff --git a/faults/aws/ebs-loss-by-id/fault.yaml b/faults/aws/ebs-loss-by-id/fault.yaml index 5f2df483c..4f9eb734a 100644 --- a/faults/aws/ebs-loss-by-id/fault.yaml +++ b/faults/aws/ebs-loss-by-id/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -43,7 +52,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -52,30 +61,30 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" - name: CHAOS_INTERVAL - value: '30' + value: "30" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: EBS_VOLUME_ID - value: '' + value: "" - name: REGION - value: '' + value: "" - name: SEQUENCE - value: 'parallel' + value: "parallel" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # Provide the path of AWS credentials mounted from secret - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' + value: "/tmp/cloud_config.yml" labels: name: ebs-loss-by-id diff --git a/faults/aws/ebs-loss-by-tag/fault.yaml b/faults/aws/ebs-loss-by-tag/fault.yaml index 770ad5242..e58834389 100644 --- a/faults/aws/ebs-loss-by-tag/fault.yaml +++ b/faults/aws/ebs-loss-by-tag/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -43,7 +52,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -52,32 +61,32 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" - name: CHAOS_INTERVAL - value: '30' + value: "30" - name: RAMP_TIME - value: '' + value: "" - name: EBS_VOLUME_TAG - value: '' + value: "" - name: REGION - value: '' + value: "" - name: SEQUENCE - value: 'parallel' + value: "parallel" - name: VOLUME_AFFECTED_PERC - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # Provide the path of AWS credentials mounted from secret - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' + value: "/tmp/cloud_config.yml" labels: name: ebs-loss-by-tag diff --git a/faults/aws/ec2-stop-by-tag/fault.yaml b/faults/aws/ec2-stop-by-tag/fault.yaml index 1405f6846..68665a066 100644 --- a/faults/aws/ec2-stop-by-tag/fault.yaml +++ b/faults/aws/ec2-stop-by-tag/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,42 +65,42 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" - name: CHAOS_INTERVAL - value: '30' + value: "30" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # Provide a common tag to target ec2 instances - name: EC2_INSTANCE_TAG - value: '' + value: "" # enable it if the target instance is a part of self-managed nodegroup. - name: MANAGED_NODEGROUP - value: 'disable' + value: "disable" - name: REGION - value: '' + value: "" # Target the percentage of instance filtered from tag - name: INSTANCE_AFFECTED_PERC - value: '' + value: "" - name: SEQUENCE - value: 'parallel' + value: "parallel" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # Provide the path of AWS credentials mounted from secret - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' + value: "/tmp/cloud_config.yml" - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: ec2-stop-by-tag diff --git a/faults/aws/ec2-terminate-by-id/fault.yaml b/faults/aws/ec2-terminate-by-id/fault.yaml index 5f207ecbd..4c6711c00 100644 --- a/faults/aws/ec2-terminate-by-id/fault.yaml +++ b/faults/aws/ec2-terminate-by-id/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,36 +65,36 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" - name: CHAOS_INTERVAL - value: '30' + value: "30" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # enable it if the target instance is a part of self-managed nodegroup. - name: MANAGED_NODEGROUP - value: 'disable' + value: "disable" # Instance ID of the target EC2 instance # Multiple IDs can also be provided as comma separated values ex: id1,id2 - name: EC2_INSTANCE_ID - value: '' + value: "" - name: REGION - value: '' + value: "" - name: SEQUENCE - value: 'parallel' + value: "parallel" # Provide the path of AWS credentials mounted from secret - name: AWS_SHARED_CREDENTIALS_FILE - value: '/tmp/cloud_config.yml' + value: "/tmp/cloud_config.yml" labels: name: ec2-terminate-by-id diff --git a/faults/azure/azure-disk-loss/fault.yaml b/faults/azure/azure-disk-loss/fault.yaml index 5d3a04fdb..9106ea189 100644 --- a/faults/azure/azure-disk-loss/fault.yaml +++ b/faults/azure/azure-disk-loss/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -43,7 +52,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -52,37 +61,37 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" - name: CHAOS_INTERVAL - value: '30' + value: "30" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # provide the resource group of the instance - name: RESOURCE_GROUP - value: '' + value: "" # accepts enable/disable, default is disable - name: SCALE_SET - value: '' + value: "" # provide the virtual disk names (comma separated if multiple) - name: VIRTUAL_DISK_NAMES - value: '' + value: "" # provide the sequence type for the run. Options: serial/parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" # provide the path to aks credentials mounted from secret - name: AZURE_AUTH_LOCATION - value: '/tmp/azure.auth' + value: "/tmp/azure.auth" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: azure-disk-loss diff --git a/faults/azure/azure-instance-stop/fault.yaml b/faults/azure/azure-instance-stop/fault.yaml index d83364514..86a0b490c 100644 --- a/faults/azure/azure-instance-stop/fault.yaml +++ b/faults/azure/azure-instance-stop/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -43,7 +52,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -52,36 +61,36 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" - name: CHAOS_INTERVAL - value: '30' + value: "30" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # provide the target instance name(s) (comma separated if multiple) - name: AZURE_INSTANCE_NAMES - value: '' + value: "" # provide the resource group of the instance - name: RESOURCE_GROUP - value: '' + value: "" # accepts enable/disable, default is disable - name: SCALE_SET - value: '' + value: "" # Provide the path of aks credentials mounted from secret - name: AZURE_AUTH_LOCATION - value: '/tmp/azure.auth' + value: "/tmp/azure.auth" - name: SEQUENCE - value: 'parallel' + value: "parallel" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: azure-instance-stop diff --git a/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml index 386987912..59c222036 100644 --- a/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml +++ b/faults/gcp/gcp-vm-disk-loss-by-label/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -39,7 +48,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -49,35 +58,35 @@ spec: env: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL - value: '30' + value: "30" # set the GCP project id - name: GCP_PROJECT_ID - value: '' + value: "" # set the zone in which all the disks are created # all the disks must exist in the same zone - name: ZONES - value: '' + value: "" # set the label of the target disk volumes - name: DISK_VOLUME_LABEL - value: '' + value: "" # set the percentage value of the disks with the given label # which should be targeted as part of the chaos injection - name: DISK_AFFECTED_PERC - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: gcp-vm-disk-loss-by-label diff --git a/faults/gcp/gcp-vm-disk-loss/fault.yaml b/faults/gcp/gcp-vm-disk-loss/fault.yaml index afb65a68c..53b2d89d4 100644 --- a/faults/gcp/gcp-vm-disk-loss/fault.yaml +++ b/faults/gcp/gcp-vm-disk-loss/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -39,7 +48,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -48,40 +57,40 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" - name: CHAOS_INTERVAL - value: '30' + value: "30" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # parallel or serial; determines how chaos is injected - name: SEQUENCE - value: 'parallel' + value: "parallel" # set the GCP project id - name: GCP_PROJECT_ID - value: '' + value: "" # set the disk volume name(s) as comma seperated values # eg. volume1,volume2,... - name: DISK_VOLUME_NAMES - value: '' + value: "" # set the disk zone(s) as comma seperated values in the corresponding # order of DISK_VOLUME_NAME # eg. zone1,zone2,... - name: ZONES - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # parallel or serial; determines how chaos is injected - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: gcp-vm-disk-loss diff --git a/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml index 514641c52..e8f6f9632 100644 --- a/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml +++ b/faults/gcp/gcp-vm-instance-stop-by-label/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -43,7 +52,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -53,39 +62,39 @@ spec: env: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL - value: '30' + value: "30" - name: SEQUENCE - value: 'parallel' + value: "parallel" # GCP project ID to which the VM instances belong - name: GCP_PROJECT_ID - value: '' + value: "" # Label of the target VM instance(s) - name: INSTANCE_LABEL - value: '' + value: "" # Zone in which the target VM instance(s) filtered by the label exist # all the instances should lie in a single zone - name: ZONES - value: '' + value: "" # enable it if the target instance is a part of a managed instance group - name: MANAGED_INSTANCE_GROUP - value: 'disable' + value: "disable" # set the percentage value of the instances with the given label # which should be targeted as part of the chaos injection - name: INSTANCE_AFFECTED_PERC - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: gcp-vm-instance-stop-by-label diff --git a/faults/gcp/gcp-vm-instance-stop/fault.yaml b/faults/gcp/gcp-vm-instance-stop/fault.yaml index 78ae5a027..395cae2f7 100644 --- a/faults/gcp/gcp-vm-instance-stop/fault.yaml +++ b/faults/gcp/gcp-vm-instance-stop/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -43,7 +52,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -52,44 +61,44 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" - name: CHAOS_INTERVAL - value: '30' + value: "30" # parallel or serial; determines how the VM instances are terminated, all at once or one at a time - name: SEQUENCE - value: 'parallel' + value: "parallel" # period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # enable or disable; shall be set to enable if the target instances are a part of a managed instance group - name: MANAGED_INSTANCE_GROUP - value: 'disable' + value: "disable" # Instance name of the target VM instance(s) # Multiple instance names can be provided as comma separated values ex: instance1,instance2 - name: VM_INSTANCE_NAMES - value: '' + value: "" # GCP project ID to which the VM instances belong - name: GCP_PROJECT_ID - value: '' + value: "" # Instance zone(s) of the target VM instance(s) # If more than one instance is targetted, provide zone for each in the order of their # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 - name: ZONES - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # parallel or serial; determines how chaos is injected - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: gcp-vm-instance-stop diff --git a/faults/kubernetes/container-kill/fault.yaml b/faults/kubernetes/container-kill/fault.yaml index 19d170ecc..65333ab41 100644 --- a/faults/kubernetes/container-kill/fault.yaml +++ b/faults/kubernetes/container-kill/fault.yaml @@ -17,7 +17,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -58,7 +67,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -67,53 +76,53 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" # provide the chaos interval - name: CHAOS_INTERVAL - value: '10' + value: "10" - name: SIGNAL - value: 'SIGKILL' + value: "SIGKILL" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" # provide the name of container runtime # it supports docker, containerd, crio - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the total chaos duration - name: TOTAL_CHAOS_DURATION - value: '20' + value: "20" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: container-kill diff --git a/faults/kubernetes/disk-fill/fault.yaml b/faults/kubernetes/disk-fill/fault.yaml index 22b8ae211..638e4801c 100644 --- a/faults/kubernetes/disk-fill/fault.yaml +++ b/faults/kubernetes/disk-fill/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,52 +77,52 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" - name: FILL_PERCENTAGE - value: '80' + value: "80" - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # provide the data block size # supported unit is KB - name: DATA_BLOCK_SIZE - value: '256' + value: "256" - name: TARGET_PODS - value: '' + value: "" - name: EPHEMERAL_STORAGE_MEBIBYTES - value: '' + value: "" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" # Provide the container runtime path # Default set to docker container path - name: CONTAINER_PATH - value: '/var/lib/docker/containers' + value: "/var/lib/docker/containers" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: disk-fill diff --git a/faults/kubernetes/docker-service-kill/fault.yaml b/faults/kubernetes/docker-service-kill/fault.yaml index d2eb9ea40..601a96cb5 100644 --- a/faults/kubernetes/docker-service-kill/fault.yaml +++ b/faults/kubernetes/docker-service-kill/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,25 +65,25 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '90' # in seconds + value: "90" # in seconds # Period to wait before injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: NODE_LABEL - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'ubuntu:16.04' + value: "ubuntu:16.04" # provide the target node name - name: TARGET_NODE - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: docker-service-kill diff --git a/faults/kubernetes/kubelet-service-kill/fault.yaml b/faults/kubernetes/kubelet-service-kill/fault.yaml index 85570dd94..2f9c56eb1 100644 --- a/faults/kubernetes/kubelet-service-kill/fault.yaml +++ b/faults/kubernetes/kubelet-service-kill/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,25 +65,25 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: NODE_LABEL - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'ubuntu:16.04' + value: "ubuntu:16.04" # provide the target node name - name: TARGET_NODE - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: kubelet-service-kill diff --git a/faults/kubernetes/node-cpu-hog/fault.yaml b/faults/kubernetes/node-cpu-hog/fault.yaml index ba027949a..15d3c3d6d 100644 --- a/faults/kubernetes/node-cpu-hog/fault.yaml +++ b/faults/kubernetes/node-cpu-hog/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,44 +65,44 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" ## ENTER THE NUMBER OF CORES OF CPU FOR CPU HOGGING ## OPTIONAL VALUE IN CASE OF EMPTY VALUE IT WILL TAKE NODE CPU CAPACITY - name: NODE_CPU_CORE - value: '' + value: "" ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - name: CPU_LOAD - value: '100' + value: "100" # ENTER THE COMMA SEPARATED TARGET NODES NAME - name: TARGET_NODES - value: '' + value: "" - name: NODE_LABEL - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" ## percentage of total nodes to target - name: NODES_AFFECTED_PERC - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" ## it defines the sequence of chaos execution for multiple target nodes ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: node-cpu-hog diff --git a/faults/kubernetes/node-drain/fault.yaml b/faults/kubernetes/node-drain/fault.yaml index 785c80b63..e0de21d3e 100644 --- a/faults/kubernetes/node-drain/fault.yaml +++ b/faults/kubernetes/node-drain/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -51,7 +60,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "patch"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -60,20 +69,20 @@ spec: - /bin/bash env: - name: TARGET_NODE - value: '' + value: "" - name: NODE_LABEL - value: '' + value: "" - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: node-drain diff --git a/faults/kubernetes/node-io-stress/fault.yaml b/faults/kubernetes/node-io-stress/fault.yaml index 75f86228e..1adba998f 100644 --- a/faults/kubernetes/node-io-stress/fault.yaml +++ b/faults/kubernetes/node-io-stress/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,56 +65,56 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '120' + value: "120" ## specify the size as percentage of free space on the file system ## default value 90 (in percentage) - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' + value: "10" ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - name: FILESYSTEM_UTILIZATION_BYTES - value: '' + value: "" ## Number of core of CPU - name: CPU - value: '1' + value: "1" ## Total number of workers default value is 4 - name: NUMBER_OF_WORKERS - value: '4' + value: "4" ## Total number of VM workers - name: VM_WORKERS - value: '1' + value: "1" ## enter the comma separated target nodes name - name: TARGET_NODES - value: '' + value: "" - name: NODE_LABEL - value: '' + value: "" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" ## percentage of total nodes to target - name: NODES_AFFECTED_PERC - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" ## it defines the sequence of chaos execution for multiple target nodes ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: node-io-stress diff --git a/faults/kubernetes/node-memory-hog/fault.yaml b/faults/kubernetes/node-memory-hog/fault.yaml index 1505e79bc..ed06bcdb5 100644 --- a/faults/kubernetes/node-memory-hog/fault.yaml +++ b/faults/kubernetes/node-memory-hog/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,47 +65,47 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '120' + value: "120" ## Specify the size as percent of total node capacity Ex: '30' ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty - name: MEMORY_CONSUMPTION_PERCENTAGE - value: '' + value: "" ## Specify the amount of memory to be consumed in mebibytes ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty - name: MEMORY_CONSUMPTION_MEBIBYTES - value: '' + value: "" - name: NUMBER_OF_WORKERS - value: '1' + value: "1" # ENTER THE COMMA SEPARATED TARGET NODES NAME - name: TARGET_NODES - value: '' + value: "" - name: NODE_LABEL - value: '' + value: "" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" ## percentage of total nodes to target - name: NODES_AFFECTED_PERC - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target nodes ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: node-memory-hog diff --git a/faults/kubernetes/node-poweroff/fault.yaml b/faults/kubernetes/node-poweroff/fault.yaml index 582531129..238f6a0a8 100644 --- a/faults/kubernetes/node-poweroff/fault.yaml +++ b/faults/kubernetes/node-poweroff/fault.yaml @@ -18,70 +18,79 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] - verbs: ["create","get","list","patch","update"] + verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - apiGroups: [""] - resources: ["configmaps","secrets"] - verbs: ["get","list",] + resources: ["configmaps", "secrets"] + verbs: ["get", "list"] # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] + verbs: ["get", "list", "watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] resources: ["pods/exec"] - verbs: ["get","list","create"] + verbs: ["get", "list", "create"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] + verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] + resources: ["chaosengines", "chaosexperiments", "chaosresults"] + verbs: ["create", "list", "get", "patch", "update", "delete"] # for experiment to perform node status checks - apiGroups: [""] resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + verbs: ["get", "list"] + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - - -c - - ./experiments -name node-restart + - -c + - ./experiments -name node-restart command: - - /bin/bash + - /bin/bash env: - - name: SSH_USER - value: 'root' + - name: SSH_USER + value: "root" - - name: TOTAL_CHAOS_DURATION - value: '60' + - name: TOTAL_CHAOS_DURATION + value: "60" - - name: REBOOT_COMMAND - value: '-o ServerAliveInterval=1 -o ServerAliveCountMax=1 "sudo systemctl poweroff --force --force" ; true' + - name: REBOOT_COMMAND + value: '-o ServerAliveInterval=1 -o ServerAliveCountMax=1 "sudo systemctl poweroff --force --force" ; true' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: "" - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:3.0.0-beta10" + # provide lib image + - name: LIB_IMAGE + value: "litmuschaos/go-runner:latest" - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' + # ENTER THE TARGET NODE NAME + - name: TARGET_NODE + value: "" - - name: NODE_LABEL - value: '' + - name: NODE_LABEL + value: "" - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP - value: '' + # ENTER THE TARGET NODE IP + - name: TARGET_NODE_IP + value: "" labels: name: node-poweroff diff --git a/faults/kubernetes/node-restart/fault.yaml b/faults/kubernetes/node-restart/fault.yaml index ce8c492d1..aa8d8f574 100644 --- a/faults/kubernetes/node-restart/fault.yaml +++ b/faults/kubernetes/node-restart/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,16 +65,16 @@ spec: - /bin/bash env: - name: SSH_USER - value: 'root' + value: "root" - name: REBOOT_COMMAND - value: 'sudo systemctl reboot; true' + value: "sudo systemctl reboot; true" - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # provide lib image - name: LIB_IMAGE @@ -73,17 +82,17 @@ spec: # ENTER THE TARGET NODE NAME - name: TARGET_NODE - value: '' + value: "" - name: NODE_LABEL - value: '' + value: "" # ENTER THE TARGET NODE IP - name: TARGET_NODE_IP - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: node-restart diff --git a/faults/kubernetes/node-taint/fault.yaml b/faults/kubernetes/node-taint/fault.yaml index 6dd935d31..60aac574b 100644 --- a/faults/kubernetes/node-taint/fault.yaml +++ b/faults/kubernetes/node-taint/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -51,7 +60,7 @@ spec: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "patch", "update"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -60,25 +69,25 @@ spec: - /bin/bash env: - name: TARGET_NODE - value: '' + value: "" - name: NODE_LABEL - value: '' + value: "" - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # set taint label & effect # key=value:effect or key:effect - name: TAINTS - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: node-taint diff --git a/faults/kubernetes/pod-autoscaler/fault.yaml b/faults/kubernetes/pod-autoscaler/fault.yaml index f589d5771..6e152aac0 100644 --- a/faults/kubernetes/pod-autoscaler/fault.yaml +++ b/faults/kubernetes/pod-autoscaler/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,18 +65,18 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # Number of replicas to scale - name: REPLICA_COUNT - value: '5' + value: "5" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: pod-autoscaler diff --git a/faults/kubernetes/pod-cpu-hog-exec/fault.yaml b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml index faaa46c06..f3ea4ddb4 100644 --- a/faults/kubernetes/pod-cpu-hog-exec/fault.yaml +++ b/faults/kubernetes/pod-cpu-hog-exec/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,37 +77,37 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" ## Number of CPU cores to stress - name: CPU_CORES - value: '1' + value: "1" ## Percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # The command to kill the chaos process - name: CHAOS_KILL_COMMAND value: "kill $(find /proc -name exe -lname '*/md5sum' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}')" - name: TARGET_CONTAINER - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-cpu-hog-exec diff --git a/faults/kubernetes/pod-cpu-hog/fault.yaml b/faults/kubernetes/pod-cpu-hog/fault.yaml index 9fc054d76..03722ffcd 100644 --- a/faults/kubernetes/pod-cpu-hog/fault.yaml +++ b/faults/kubernetes/pod-cpu-hog/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,58 +77,58 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" ## Number of CPU cores to stress - name: CPU_CORES - value: '1' + value: "1" ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - name: CPU_LOAD - value: '100' + value: "100" ## Percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" ## It is used in pumba lib only - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" ## It is used in pumba lib only - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' + value: "alexeiled/stress-ng:latest-ubuntu" ## provide the cluster runtime - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" - name: TARGET_CONTAINER - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-cpu-hog diff --git a/faults/kubernetes/pod-delete/fault.yaml b/faults/kubernetes/pod-delete/fault.yaml index 5b6ba5722..7db0c1372 100644 --- a/faults/kubernetes/pod-delete/fault.yaml +++ b/faults/kubernetes/pod-delete/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,39 +77,39 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '15' + value: "15" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: FORCE - value: 'true' + value: "true" - name: CHAOS_INTERVAL - value: '5' + value: "5" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: TARGET_CONTAINER - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-delete diff --git a/faults/kubernetes/pod-dns-error/fault.yaml b/faults/kubernetes/pod-dns-error/fault.yaml index 8985b6a44..edad30086 100644 --- a/faults/kubernetes/pod-dns-error/fault.yaml +++ b/faults/kubernetes/pod-dns-error/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" args: - -c - ./experiments -name pod-dns-error @@ -74,7 +83,7 @@ spec: value: "chaosnative/go-runner:ci" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" - name: TOTAL_CHAOS_DURATION value: "60" # in seconds @@ -92,11 +101,11 @@ spec: # provide the name of container runtime, it supports docker, containerd, crio - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel diff --git a/faults/kubernetes/pod-dns-spoof/fault.yaml b/faults/kubernetes/pod-dns-spoof/fault.yaml index ff1acc0c0..e4309bcc9 100644 --- a/faults/kubernetes/pod-dns-spoof/fault.yaml +++ b/faults/kubernetes/pod-dns-spoof/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" args: - -c - ./experiments -name pod-dns-spoof @@ -74,7 +83,7 @@ spec: value: "chaosnative/go-runner:ci" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" - name: TOTAL_CHAOS_DURATION value: "60" # in seconds @@ -92,11 +101,11 @@ spec: # provide the name of container runtime, it supports docker, containerd, crio - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel diff --git a/faults/kubernetes/pod-http-latency/fault.yaml b/faults/kubernetes/pod-http-latency/fault.yaml index 15c216d45..ce0498509 100644 --- a/faults/kubernetes/pod-http-latency/fault.yaml +++ b/faults/kubernetes/pod-http-latency/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,14 +77,14 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" - name: LATENCY - value: '2000' #in ms + value: "2000" #in ms # port of the target service - name: TARGET_SERVICE_PORT @@ -96,40 +105,40 @@ spec: value: "eth0" - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-http-latency diff --git a/faults/kubernetes/pod-http-modify-body/fault.yaml b/faults/kubernetes/pod-http-modify-body/fault.yaml index 66d82fb74..13cccf1d2 100644 --- a/faults/kubernetes/pod-http-modify-body/fault.yaml +++ b/faults/kubernetes/pod-http-modify-body/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,26 +77,26 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" # provide the body string to overwrite the response body # if no value is provided, response will be an empty body. - name: RESPONSE_BODY - value: '' + value: "" # provide the encoding type for the response body # currently supported value are gzip, deflate # if empty no encoding will be applied - name: CONTENT_ENCODING - value: '' + value: "" # provide the content type for the response body - name: CONTENT_TYPE - value: 'text/plain' + value: "text/plain" # port of the target service - name: TARGET_SERVICE_PORT @@ -108,40 +117,40 @@ spec: value: "eth0" - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-http-modify-body diff --git a/faults/kubernetes/pod-http-modify-header/fault.yaml b/faults/kubernetes/pod-http-modify-header/fault.yaml index 6d6164d2f..18f59801d 100644 --- a/faults/kubernetes/pod-http-modify-header/fault.yaml +++ b/faults/kubernetes/pod-http-modify-header/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,20 +77,20 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} - name: HEADERS_MAP - value: '{}' + value: "{}" # whether to modify response headers or request headers. Accepted values: request, response - name: HEADER_MODE - value: 'response' + value: "response" # port of the target service - name: TARGET_SERVICE_PORT @@ -102,40 +111,40 @@ spec: value: "eth0" - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-http-modify-header diff --git a/faults/kubernetes/pod-http-reset-peer/fault.yaml b/faults/kubernetes/pod-http-reset-peer/fault.yaml index c3bf945ad..fa7e3ba23 100644 --- a/faults/kubernetes/pod-http-reset-peer/fault.yaml +++ b/faults/kubernetes/pod-http-reset-peer/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,15 +77,15 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" # reset timeout specifies after how much duration to reset the connection - name: RESET_TIMEOUT - value: '0' #in ms + value: "0" #in ms # port of the target service - name: TARGET_SERVICE_PORT @@ -97,40 +106,40 @@ spec: value: "eth0" - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-http-reset-peer diff --git a/faults/kubernetes/pod-http-status-code/fault.yaml b/faults/kubernetes/pod-http-status-code/fault.yaml index 20736f448..088b8d72f 100644 --- a/faults/kubernetes/pod-http-status-code/fault.yaml +++ b/faults/kubernetes/pod-http-status-code/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,18 +77,18 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" # modified status code for the HTTP response # if no value is provided, a random status code from the supported code list will selected # if an invalid status code is provided, the experiment will fail # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504] - name: STATUS_CODE - value: '' + value: "" # whether to modify the body as per the status code provided - name: "MODIFY_RESPONSE_BODY" @@ -87,17 +96,17 @@ spec: # provide the body string to overwrite the response body. This will be used only if MODIFY_RESPONSE_BODY is set to true - name: RESPONSE_BODY - value: '' + value: "" # provide the encoding type for the response body # currently supported value are gzip, deflate # if empty no encoding will be applied - name: CONTENT_ENCODING - value: '' + value: "" # provide the content type for the response body - name: CONTENT_TYPE - value: 'text/plain' + value: "text/plain" # port of the target service - name: TARGET_SERVICE_PORT @@ -118,40 +127,40 @@ spec: value: "eth0" - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-http-status-code diff --git a/faults/kubernetes/pod-io-stress/fault.yaml b/faults/kubernetes/pod-io-stress/fault.yaml index 37c9cfe20..8441093dc 100644 --- a/faults/kubernetes/pod-io-stress/fault.yaml +++ b/faults/kubernetes/pod-io-stress/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,64 +77,64 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '120' + value: "120" ## specify the size as percentage of free space on the file system ## default value 90 (in percentage) - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' + value: "10" ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - name: FILESYSTEM_UTILIZATION_BYTES - value: '' + value: "" ## Total number of workers default value is 4 - name: NUMBER_OF_WORKERS - value: '4' + value: "4" ## Percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" # provide volume mount path - name: VOLUME_MOUNT_PATH - value: '' + value: "" - name: TARGET_CONTAINER - value: '' + value: "" ## specify the comma separated target pods - name: TARGET_PODS - value: '' + value: "" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" # Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" ## provide the cluster runtime - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-io-stress diff --git a/faults/kubernetes/pod-memory-hog-exec/fault.yaml b/faults/kubernetes/pod-memory-hog-exec/fault.yaml index f1ae4777f..142f0196d 100644 --- a/faults/kubernetes/pod-memory-hog-exec/fault.yaml +++ b/faults/kubernetes/pod-memory-hog-exec/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,19 +77,19 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" ## enter the amount of memory in megabytes to be consumed by the application pod - name: MEMORY_CONSUMPTION - value: '500' + value: "500" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" # The command to kill the chaos process - name: CHAOS_KILL_COMMAND @@ -89,16 +98,16 @@ spec: ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" - name: TARGET_CONTAINER - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" labels: name: pod-memory-hog-exec diff --git a/faults/kubernetes/pod-memory-hog/fault.yaml b/faults/kubernetes/pod-memory-hog/fault.yaml index 385508b98..f3a4667db 100644 --- a/faults/kubernetes/pod-memory-hog/fault.yaml +++ b/faults/kubernetes/pod-memory-hog/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,57 +77,57 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" ## enter the amount of memory in megabytes to be consumed by the application pod - name: MEMORY_CONSUMPTION - value: '500' + value: "500" ## Number of workers to perform stress - name: NUMBER_OF_WORKERS - value: '1' + value: "1" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" ## It is used in pumba lib only - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" ## It is used in pumba lib only - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' + value: "alexeiled/stress-ng:latest-ubuntu" ## provide the cluster runtime - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" - name: TARGET_CONTAINER - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" labels: name: pod-memory-hog diff --git a/faults/kubernetes/pod-network-corruption/fault.yaml b/faults/kubernetes/pod-network-corruption/fault.yaml index 9f4c653cd..3e23a07d9 100644 --- a/faults/kubernetes/pod-network-corruption/fault.yaml +++ b/faults/kubernetes/pod-network-corruption/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,66 +77,66 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" - name: NETWORK_INTERFACE - value: 'eth0' + value: "eth0" - name: TC_IMAGE - value: 'gaiadocker/iproute2' + value: "gaiadocker/iproute2" - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE - value: '100' #in PERCENTAGE + value: "100" #in PERCENTAGE - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the destination ips # chaos injection will be triggered for these destination ips - name: DESTINATION_IPS - value: '' + value: "" # provide the destination hosts # chaos injection will be triggered for these destination hosts - name: DESTINATION_HOSTS - value: '' + value: "" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-network-corruption diff --git a/faults/kubernetes/pod-network-duplication/fault.yaml b/faults/kubernetes/pod-network-duplication/fault.yaml index 4014deced..64787374d 100644 --- a/faults/kubernetes/pod-network-duplication/fault.yaml +++ b/faults/kubernetes/pod-network-duplication/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,64 +77,64 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' + value: "60" - name: RAMP_TIME - value: '' + value: "" - name: TARGET_CONTAINER - value: '' + value: "" - name: TC_IMAGE - value: 'gaiadocker/iproute2' + value: "gaiadocker/iproute2" - name: NETWORK_INTERFACE - value: 'eth0' + value: "eth0" - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE - value: '100' # in percentage + value: "100" # in percentage - name: TARGET_PODS - value: '' + value: "" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # provide the destination ips # chaos injection will be triggered for these destination ips - name: DESTINATION_IPS - value: '' + value: "" # provide the destination hosts # chaos injection will be triggered for these destination hosts - name: DESTINATION_HOSTS - value: '' + value: "" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-network-duplication diff --git a/faults/kubernetes/pod-network-latency/fault.yaml b/faults/kubernetes/pod-network-latency/fault.yaml index 3e3ff5b77..92d92bb68 100644 --- a/faults/kubernetes/pod-network-latency/fault.yaml +++ b/faults/kubernetes/pod-network-latency/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,69 +77,69 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" - name: NETWORK_INTERFACE - value: 'eth0' + value: "eth0" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" - name: TC_IMAGE - value: 'gaiadocker/iproute2' + value: "gaiadocker/iproute2" - name: NETWORK_LATENCY - value: '2000' #in ms + value: "2000" #in ms - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: JITTER - value: '0' + value: "0" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: TARGET_PODS - value: '' + value: "" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # provide the destination ips # chaos injection will be triggered for these destination ips - name: DESTINATION_IPS - value: '' + value: "" # provide the destination hosts # chaos injection will be triggered for these destination hosts - name: DESTINATION_HOSTS - value: '' + value: "" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-network-latency diff --git a/faults/kubernetes/pod-network-loss/fault.yaml b/faults/kubernetes/pod-network-loss/fault.yaml index 6bfc055ba..5095fe9ef 100644 --- a/faults/kubernetes/pod-network-loss/fault.yaml +++ b/faults/kubernetes/pod-network-loss/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,66 +77,66 @@ spec: - /bin/bash env: - name: TARGET_CONTAINER - value: '' + value: "" # provide lib image - name: LIB_IMAGE - value: 'chaosnative/go-runner:ci' + value: "chaosnative/go-runner:ci" - name: NETWORK_INTERFACE - value: 'eth0' + value: "eth0" - name: TC_IMAGE - value: 'gaiadocker/iproute2' + value: "gaiadocker/iproute2" - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' #in PERCENTAGE + value: "100" #in PERCENTAGE - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" - name: TARGET_PODS - value: '' + value: "" # To select pods on specific node(s) - name: NODE_LABEL - value: '' + value: "" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME - value: 'containerd' + value: "containerd" # provide the destination ips # chaos injection will be triggered for these destination ips - name: DESTINATION_IPS - value: '' + value: "" # provide the destination hosts # chaos injection will be triggered for these destination hosts - name: DESTINATION_HOSTS - value: '' + value: "" # provide the socket file path - name: SOCKET_PATH - value: '/run/containerd/containerd.sock' + value: "/run/containerd/containerd.sock" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: pod-network-loss diff --git a/faults/kubernetes/pod-network-partition/fault.yaml b/faults/kubernetes/pod-network-partition/fault.yaml index 65f9a2cc8..6fbc1e4e3 100644 --- a/faults/kubernetes/pod-network-partition/fault.yaml +++ b/faults/kubernetes/pod-network-partition/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -47,7 +56,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -56,41 +65,41 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + value: "60" # in seconds # time period to wait before and after injection of chaos in sec - name: RAMP_TIME - value: '' + value: "" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" # provide the destination ips # chaos injection will be triggered for these destination ips - name: DESTINATION_IPS - value: '' + value: "" # provide the destination hosts # chaos injection will be triggered for these destination hosts - name: DESTINATION_HOSTS - value: '' + value: "" # provide network policy type # support ingress, egress, all values - name: POLICY_TYPES - value: 'all' + value: "all" # provide labels of the destination pods - name: POD_SELECTOR - value: '' + value: "" # provide labels the destination namespaces - name: NAMESPACE_SELECTOR - value: '' + value: "" # provide comma separated ports - name: PORTS - value: '' + value: "" labels: name: pod-network-partition diff --git a/faults/spring-boot/spring-boot-app-kill/fault.yaml b/faults/spring-boot/spring-boot-app-kill/fault.yaml index 49aea8662..c18511b07 100644 --- a/faults/spring-boot/spring-boot-app-kill/fault.yaml +++ b/faults/spring-boot/spring-boot-app-kill/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -39,7 +48,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -49,34 +58,34 @@ spec: env: # port of the spring boot application - name: CM_PORT - value: '' + value: "" #it contains number of requests are to be attacked # n value means nth request will be affected - name: CM_LEVEL - value: '1' + value: "1" # it limits watched packages/classes/methods - name: CM_WATCHED_CUSTOM_SERVICES - value: '' + value: "" # provide name of watcher # it supports controller, restController, service, repository, component, webClient - name: CM_WATCHERS - value: 'restController' + value: "restController" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos - name: RAMP_TIME - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: spring-boot-app-kill diff --git a/faults/spring-boot/spring-boot-cpu-stress/fault.yaml b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml index 433ce7955..a86043d99 100644 --- a/faults/spring-boot/spring-boot-cpu-stress/fault.yaml +++ b/faults/spring-boot/spring-boot-cpu-stress/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -39,7 +48,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -50,41 +59,41 @@ spec: # it contains fraction of cpu to be stressed(0.95 equals 95%) # it supports value in range [0.1,1.0] - name: CPU_LOAD_FRACTION - value: '0.9' + value: "0.9" # port of the spring boot application - name: CM_PORT - value: '' + value: "" #it contains number of requests are to be attacked # n value means nth request will be affected - name: CM_LEVEL - value: '1' + value: "1" # it limits watched packages/classes/methods - name: CM_WATCHED_CUSTOM_SERVICES - value: '' + value: "" # provide name of watcher # it supports controller, restController, service, repository, component, webClient - name: CM_WATCHERS - value: 'restController' + value: "restController" - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos - name: RAMP_TIME - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: spring-boot-cpu-stress diff --git a/faults/spring-boot/spring-boot-exceptions/fault.yaml b/faults/spring-boot/spring-boot-exceptions/fault.yaml index 5a0e34271..13463773b 100644 --- a/faults/spring-boot/spring-boot-exceptions/fault.yaml +++ b/faults/spring-boot/spring-boot-exceptions/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -39,7 +48,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -49,45 +58,45 @@ spec: env: # Type of raised exception - name: CM_EXCEPTIONS_TYPE - value: 'java.lang.IllegalArgumentException' + value: "java.lang.IllegalArgumentException" # Argument of raised exception - name: CM_EXCEPTIONS_ARGUMENTS - value: 'java.lang.String:custom illegal argument exception' + value: "java.lang.String:custom illegal argument exception" # port of the spring boot application - name: CM_PORT - value: '' + value: "" #it contains number of requests are to be attacked # n value means nth request will be affected - name: CM_LEVEL - value: '1' + value: "1" # it limits watched packages/classes/methods - name: CM_WATCHED_CUSTOM_SERVICES - value: '' + value: "" # provide name of watcher # it supports controller, restController, service, repository, component, webClient - name: CM_WATCHERS - value: 'restController' + value: "restController" - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos - name: RAMP_TIME - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: spring-boot-exceptions diff --git a/faults/spring-boot/spring-boot-faults/fault.yaml b/faults/spring-boot/spring-boot-faults/fault.yaml index 2702c43b8..cefa2639c 100644 --- a/faults/spring-boot/spring-boot-faults/fault.yaml +++ b/faults/spring-boot/spring-boot-faults/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -39,7 +48,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -49,84 +58,84 @@ spec: env: # it enables spring app-kill fault - name: CM_KILL_APPLICATION_ACTIVE - value: '' + value: "" - # it enables spring-boot latency fault + # it enables spring-boot latency fault - name: CM_LATENCY_ACTIVE - value: '' + value: "" # provide the latency (ms) # it is applicable when latency is active - name: LATENCY - value: '2000' + value: "2000" # it enables spring-boot memory stress fault - name: CM_MEMORY_ACTIVE - value: '' + value: "" # it contains fraction of memory to be stressed(0.70 equals 70%) # it supports value in range [0.01,0.95] # it is applicable when memory is active - name: MEMORY_FILL_FRACTION - value: '0.70' + value: "0.70" # it enables spring-boot cpu stress fault - name: CM_CPU_ACTIVE - value: '' + value: "" # it contains fraction of cpu to be stressed(0.95 equals 95%) # it supports value in range [0.1,1.0] # it is applicable when cpu is active - name: CPU_LOAD_FRACTION - value: '0.9' + value: "0.9" # it enables spring-boot exceptions fault - name: CM_EXCEPTIONS_ACTIVE - value: '' + value: "" # Type of raised exception # it is applicable when exceptions is active - name: CM_EXCEPTIONS_TYPE - value: 'java.lang.IllegalArgumentException' + value: "java.lang.IllegalArgumentException" # Argument of raised exception # it is applicable when exceptions is active - name: CM_EXCEPTIONS_ARGUMENTS - value: 'java.lang.String:custom illegal argument exception' + value: "java.lang.String:custom illegal argument exception" # port of the spring boot application - name: CM_PORT - value: '' + value: "" #it contains number of requests are to be attacked # n value means nth request will be affected - name: CM_LEVEL - value: '1' + value: "1" # it limits watched packages/classes/methods - name: CM_WATCHED_CUSTOM_SERVICES - value: '' + value: "" # provide name of watcher # it supports controller, restController, service, repository, component, webClient - name: CM_WATCHERS - value: 'restController' + value: "restController" - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos - name: RAMP_TIME - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: spring-boot-faults diff --git a/faults/spring-boot/spring-boot-latency/fault.yaml b/faults/spring-boot/spring-boot-latency/fault.yaml index 40cd81324..149f8c22c 100644 --- a/faults/spring-boot/spring-boot-latency/fault.yaml +++ b/faults/spring-boot/spring-boot-latency/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -39,7 +48,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -49,41 +58,41 @@ spec: env: # provide the latency (ms) - name: LATENCY - value: '2000' + value: "2000" # port of the spring boot application - name: CM_PORT - value: '' + value: "" # it contains number of requests are to be attacked # n value means nth request will be affected - name: CM_LEVEL - value: '1' + value: "1" # it limits watched packages/classes/methods - name: CM_WATCHED_CUSTOM_SERVICES - value: '' + value: "" # provide name of watcher # it supports controller, restController, service, repository, component, webClient - name: CM_WATCHERS - value: 'restController' + value: "restController" - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos - name: RAMP_TIME - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: spring-boot-latency diff --git a/faults/spring-boot/spring-boot-memory-stress/fault.yaml b/faults/spring-boot/spring-boot-memory-stress/fault.yaml index 06b2b8867..43ba3c150 100644 --- a/faults/spring-boot/spring-boot-memory-stress/fault.yaml +++ b/faults/spring-boot/spring-boot-memory-stress/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -39,7 +48,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -50,41 +59,41 @@ spec: # it contains fraction of memory to be stressed(0.70 equals 70%) # it supports value in range [0.01,0.95] - name: MEMORY_FILL_FRACTION - value: '0.70' + value: "0.70" # port of the spring boot application - name: CM_PORT - value: '' + value: "" # it contains number of requests are to be attacked # n value means nth request will be affected - name: CM_LEVEL - value: '1' + value: "1" # it limits watched packages/classes/methods - name: CM_WATCHED_CUSTOM_SERVICES - value: '' + value: "" # provide name of watcher # it supports controller, restController, service, repository, component, webClient - name: CM_WATCHERS - value: 'restController' + value: "restController" - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: '' + value: "" ## Period to wait before and after injection of chaos - name: RAMP_TIME - value: '' + value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: 'parallel' + value: "parallel" labels: name: spring-boot-memory-stress diff --git a/faults/vmware/vm-poweroff/fault.yaml b/faults/vmware/vm-poweroff/fault.yaml index dc1d20ada..5cd52baa5 100644 --- a/faults/vmware/vm-poweroff/fault.yaml +++ b/faults/vmware/vm-poweroff/fault.yaml @@ -18,7 +18,16 @@ spec: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] - verbs: ["create", "delete", "get", "list", "patch", "update", "deletecollection"] + verbs: + [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "deletecollection", + ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] @@ -59,7 +68,7 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] - image: "litmuschaos/go-runner:3.0.0-beta10" + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c @@ -68,13 +77,13 @@ spec: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: "30" - name: CHAOS_INTERVAL - value: '10' + value: "10" - name: RAMP_TIME - value: '' + value: "" - name: VCENTERSERVER valueFrom: @@ -95,13 +104,13 @@ spec: key: VCENTERPASS - name: APP_VM_MOIDS - value: '' + value: "" - name: SEQUENCE - value: 'parallel' + value: "parallel" - name: DEFAULT_HEALTH_CHECK - value: 'false' + value: "false" labels: name: vmware-vm-poweroff From 71bc8e9848ff853e348d78f472553482c1b6e4bb Mon Sep 17 00:00:00 2001 From: Saranya-jena Date: Fri, 22 Sep 2023 16:38:23 +0530 Subject: [PATCH 16/16] updated github actions Signed-off-by: Saranya-jena --- scripts/combine-all-crs.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/combine-all-crs.go b/scripts/combine-all-crs.go index 9df0b2b27..202812a5b 100644 --- a/scripts/combine-all-crs.go +++ b/scripts/combine-all-crs.go @@ -16,7 +16,7 @@ import ( func main() { - directories, err := GetAllSubDirectories("./../charts") + directories, err := GetAllSubDirectories("./../faults") if err != nil { log.Fatalf("unable to get chart categories details, err: %v", err) } @@ -41,21 +41,21 @@ func main() { // get the list of all sub-directories subDirectories, err := GetAllSubDirectories(directory) if err != nil { - log.Fatalf("unable to get experiment details, err: %v", err) + log.Fatalf("unable to get fault details, err: %v", err) } for _, subdirectory := range subDirectories { - isFileExist := IsFileExist(subdirectory + "/experiment.yaml") + isFileExist := IsFileExist(subdirectory + "/fault.yaml") if isFileExist { - CRName, err := GetCRName(subdirectory + "/experiment.yaml") + CRName, err := GetCRName(subdirectory + "/fault.yaml") if err != nil || CRName == "" { - log.Fatalf("unable to extract the CR name for %v file, err: %v", subdirectory+"/experiment.yaml", err) + log.Fatalf("unable to extract the CR name for %v file, err: %v", subdirectory+"/fault.yaml", err) } if !Contains(CRName, CRNames) { - if err := CopyData(filePath, subdirectory+"/experiment.yaml"); err != nil { - log.Fatalf("unable to copy data for %v experiment, err: %v", subdirectory, err) + if err := CopyData(filePath, subdirectory+"/fault.yaml"); err != nil { + log.Fatalf("unable to copy data for %v fault, err: %v", subdirectory, err) } CRNames = append(CRNames, CRName) }