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 | 127 +- .../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, 6787 insertions(+), 43442 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 bc01916..0000000 --- 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 1133a5a..0000000 --- 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 ce4b100..0000000 --- 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 72db75e..0000000 --- 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 fea5b08..0000000 --- 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 19d294b..0000000 --- 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 a0d6b95..0000000 --- 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 473d902..0000000 --- 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 ebfb1a8..0000000 --- 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 cfae7ec..0000000 --- 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 4e9da4b..0000000 --- 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 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 - 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 7c27b7a..0000000 --- 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 zcmafacRZWl8#a+>q(&04l{8}S)mp6}Mo_hD6`{4;QfgLh5_?uCic-6%Dy>bd7NxD( zQew7hRgIc&zQ6bV|2>~iJc%ctoO7OYpZmV<>$(ro*hrTN!VRIJp<%-5VNI#mf&X4$ z0QE0QMR|~VVer@I%WIaSLj5PqPut4R+}+RXE{!o(2dVY&F5d6KLk;^@ z5$a9W|88nL@^gFe@PBvBA3X5#MQZ5sdu#e?(OIP;64ovIOn5? zsA%2iNoi^6NpU^g7svGT`p2(yZwUwsm^RB%k>-oq(jwZKE7!6dmO;r_w4nQnQGlX(lQO+5@ua4O#pDf`Wm72n_Q7UZ5heff0<_AQfzk#%5hCn;%4FmE8Hx zHIyXHPU@Hq{8q=rW}Gx3RTL+J^OAUbMCK^#}e zXfMu-)FE+SR$D0tM(c8Cz-^sSd>N_PR8NHRvUUcu2Kb&%5O>5$UOETWm)eL zZF2|&9-BNNu&AfGl{psqX!nC3C!UE;ffFO6IR)i}sPM$na#tTNlcX8CcR|3|COQg$ zZk;AYgkg0$cbTSGW%Ku3U?yZT+ix;u+m>n|E>mDN13Nq-S2KV{xf{zcL zEY|!8PH>3IR}3`#I3R4e-lCY>gI>h4#jg~8@CXTTEe?8~RVW%Buvkswe zu5R)n?s2McXWz!ncpuN?hv@3AzgTWL|I+dPaNo8cJvxJ0zm7C^^zxI1xocm9ya;-Q z9zy%XcMISGb>Id2n1qb8?UjwT#l45C0UdkCEf?|{?UABVbOf8rL6RQ(4lzjh~} z1tI!MP+AayunN%wbo-(;DAsUWTzEu&Z_GkO^4XvL(=En?iygZo0dc*ZD!>m&BvkLR zuMuNjzzXn*|MFbN`Pruf&qLb6%Maf*a7rmkW-pHTbnKsY{L4S5 z+>$ywYMMZ6CeqaeXXh0bjz*eduRqYG)G9s z?nb~|P+XHWsotzx6_Z263dA@bNv?zXcKRZ}8-fsA|g>}k&e!f9l?JYvD z?Z>@e+h3|!YUfT?YFpP0?%jC61XI3p1rA97yhCa(yi2dk!V;`AQq#Aif#@_KP~jrb z$gi$tcON%{-}t^l>1X+)oBdZ(K5Y#u(QsKsfx2US?=wCB(YD)jpl(&8X!m{;XO*mY z<^8wh4~0`7{bok3z2CHkt!|bs{`gSZ^d4sOsy|{PBN7k3V!&5+*N)DPpHFOFom8s6y&h4B|2w)N5@o4s!_3QKb9!{NwjZZ{T`kyg#&&(S zssG|)uFt|Iw~ChXo5ohnPGf8W%ARpnL(q~RvFjaE<-Zb$z>4Jy|hX9WO7+0z=J-^Vzke(mL&j<>h|4YVYr>6)Gv(%4X2q7yvs3EL{3;KN z!g;Ka(Mr-o(*n>G1sT=|J(?(EXZD@Jy$e6izdf&ZEtpeBYIr^}PJRNd%yeJxP9e zw9^n6Pa=_sB8S@_YFN};j67$M#FFm$?%ProGNzb71&*1Kv$DyjO$WJyn5|j7sS|~7 z$EtWpNl@Ni(}=bqtLza&v`U#9FYDd*!nZAlv*IR$+cktt23Ex}LIef~xAKs%;W0Sw7ruIM)K&D^01<>OtSkBzofFwT zIj}49(U}5D=i~hfIlyid-fljbUs{pn(S!=E*vYyY?XWqS0u3>Rzv{%E9F6Tg5A$zm zO6W4xYtlo#yMwfpaLJXGNSt$OKA7g{57<&>vk(ra8_&@Wr;Vu{kPnPNdyzQg(bpI< z(54Q*A3yQ_Gp&(C{~Z$^t`P6rooC@9R7g{gM0b*GIDYf{{`)Xj6B1WyIi)vVTJkr# z2Md>v@saqJfN$RI$A)*~`6exi{F=%pp`W zAtXDm<6}gU?|1aE0nstYi7eOmT*yASesZGm?VUNN@%tgPWpV7%fIH<)SAt1=amI2_ z)#P!HmhuZZcl_s!G{f)#M;T5=dIKg2MH$XK5tCx9ekLccs=xRDYi{M26KE54Y#LX@ z`W{L8tE(uT-FXfMSl1SbBUWRSUko|-#?sQ#ssu8qw>;h`hIfj=<-l3vD9Y(HIFjIkxRX=6<=gVjU;5G&A0-=~#m{hD_$Y2* zL?)YRpyR1Vr6DVCVmxGuOpo-7ZPU8m`f&ZIt<)tPAfjYiGMaB{43%VOO%U;aFyr&> z{G@MZqeZJ1-ViAz1j!iix|?8@?j27jE1haK1A2o#1(7R5Pw<2(7@56tJU@aFU0?#Sq2 zOD!5hof<_;QpSzlV@h_-f3~+jz-E~vM@q=b_>osm zJ&r<}^uY_Tx%2s5mg{YA?SEsq5S{Z*YY$=O#<|$Sc>?CUj_5GXAHS7QrQ5W%VQEI- zl{L{Oid|DnlPp-7-~RZ4kw6n=j;oY|2`*K!uw0+!XDR%`tRf0y-jBczNG(zVD=@St%GVz-h0+{jaIDJ~~*Nn7jX7(-Dp1XojZT z?fW=*u`Y|tRuEE#hFC0(BIu5*#E)A zF>HvaD$(jv&kJ$4l103+mE<7&NWnHQ3Lj0Q{^Wes!LCjA_wQ=1%i%(AB56D@f!#B1 z=}y|O^Gh1($NTr9T0#!CzCR*i4S~2ro1C3QHI|znMKO2yss_4pG31)4o~i&AT_FH! zex`O3c_@tL3U{2jjeC}xEeTKFx=kS!y8@|`}UzM<*i<^4a zE^CUiQbtGPlV?ife)F;7tm3e#DbEaeU*$1tW!-f{_U?x+4K@pNAMXK6 zi@SZk;1WF;C$ImLCh6<3?*b57( zfea!xTC_VuYWSF!9uDkT{&atHR-Hz3YhfMNol6s3jRSZYR923AGzRSMA8iMY(c8k( zX)H{$qH&Dq1+JVOCtNuVE|8fH2E&o4?{HpQ8`8CNbXUIyY9jeqKi#z#_N8aI0|hgJ z5ve;Ae`+$q*V|8Ha#^p zm1Y`%C=j=ei8s`DdTH)>DYeogOwnH5daDbvg(=4b>XS&)Tu{PfUmlLuNrqE~XZB?2 z%Y|E;5?}l?5*Odg-2B3B{21pEj{f4+AFr2L(z_m~tJ}1H)DsoqXNDzW7;b)Kzlo+8 z;AkRH+G+ywZ@YEOy$JEIBiI>W>n}esXJ@lmJKw$YqA)x%(n$cyNWZIxY?WI1E&3Lq zffU1Wg#BCm$bY+Kl07?Dj`T=hzWt7jRl{06_Cs={aH9lZJR#8LZJ>=NT#QE$RH|Rx=p!N8=)3TtCnII6#u5`RofT9aD4}Lj zZoHFAk}o@~jD)=JSbA{1J^0a9;7~EcvjHz{Z1R*`nOiK654;+lre^ZZhlgKHtu@s3 zf{mwJlz#9s!X+n7#vly^f@Ki0p8^>*@GHnGVgQMx{f$>2kNc0q(bROTm^!OcZy{w#8iDJkxuX%?x}Nf=)!K)P6FL%WElf_QpBFsw-0?6 ziZt2*pKm#w50_1D&fj*bl>Q#PMTGmryTIh>aKQjQh?EI-SYa{tZpek?&CS`C;Lux1 zpGooMVz_V&@+}Hg@RX};3E_g%)6)w?TY3j-;!Q20c-l}Y_W~Z&usqo0rk=d^JJf5E$Y*tLTvoi|K`8&H0`HYODvh|h^pOu8$Sfpi${n86roTNSRzGqlHYU128h^PFP03jRsi-JJY(+@~If}H8?Z5Utp5|mHHDs!)|AW41{Zn zvL_%DA>?6*C90oyUAVe+sj0V@JNw4C4Nrp5E*xc4kI|49^0=GzI(&Jfg$n0wGJ{KV z%S-gS<a&@oO)=g%qE@9{YIB^qcK!)M-XWaRM_;4-7=OCMx@KHy8m3 zgpbdqJDN|o%V+MmnL8W|+)Mj>3mb2L9$X15nka>h}d2QH#y$n9k5C1Urt*mC`ugI!f6 zIz5nf=MAS`w*-Uje__jn^3FWtZ?W9K8+_RKgV|}GA}V>}`n8j*0ZwRakvvipZ00QX~-;dpBHt{R9bSa_LRUu+N`PEaVllR1L`4|LX3oe66WSl=I!G1uW^W$Op@59#MU zjh5Vbj09XR#ZJiv>KJO$DA;ZcVAp`!;6}l9LlVy)aJ=V*>g0V135!pO@t7huNX8IaIh6^ii8LbS z-0c$$;flgPpsolIB6NM6WV-LdG5B_Z&d$KnZ;i9}Y z-b5T08}0HqD@cdT3Q39`f2Qxqly+#s0?1#?pgfXyO=7vV1NbiC%8TofFZfzHSJ$(h^*H0MRvpw))E7PbsAl)cw1sv&cy zYamC9V zzH5{35WWg3#`bc1H7);|TNb})_tVP#mz0ErH{2Smj$For} z7oW-XI``hfVzFuhD3q8>cSO2@p@i};lWau^8_&hDu{qc0lY=;M6>Hbu6_55RsYyIj z3^gmatt^*Y;J|f@LLlZsd4K%Ps_B||`WIIZ*6s#@<#$RsVfH+}eSZ;rMwIiv+3N4Z znx*poPB7|CJcU8oq~SYiy#h{Jf{}t_pf^_%>x^(7*MwR4cxPvLD$U1n==S1Fpa_?@ zUU7U>RL`VArle7oT6aUAMNL09`+@x9!1XQwt4RyRa4`<29T890{K8AQ zH4#e;w4ss!fwDMBpU0!8FV+t>d${SnAhIwhG(+cqV2L@N-+u0V=_qP1c!PVqH969d z7B4bXeP_6?uC8F7NFdY@2)c%5CE>ZbEpM1jZQta-jJWg8Ztnc=?pr%13tSRc2EjCj z$|I(C8w|$6>$4=qARWfHY|EK?iT+aj`z#06nlG?1LP!Xoom?%)L)Je>9gxR$8wnHi<{ zM*nUa1FKzM8TaH0f#-}? z7%v2&ee~f}s8+Zwm%jaGjPKU^rN)(ffyc*gK?fREDaIf{5uqX^qV{8F6+4txR@9U* zpPa*l_*s}ae)4Ya-@*AmX{%Q%_P2ur+SG!p4j$}TESMy0UMfa`dyF`wop!9k(Q4@+ z=-AITSrhv5i#F!`gDP52lNJ6-RnFa>eHW4))pE@7;1&;w8hhwkj%@viI3TvH0@pY3Q?K0Dg#*t=&X!#)yTez`Dq$kXZU z9Bw4v&?kZXNN+UJdfuhGUZ3#RzSh>$Lh&W4Kt?YO=+-w0bL%#Qe@Z1kMZ2Vjw@+D1 zX9v8pyA=Fj|8#;^n85yv+)s=j{(Z&a*zmbP7+2oBM@7*{WzTw@K-I| zMa>1XKPbaFd;E7de{t;Ew25Rfj;SWMWdJNndtdu)pnJ{^0H<`JZ@BkE`PGG)dO$(IIBz46#ZHiXt{Xw>B)9i&m$f#vDa~Ps&aD-H8PIIGJ+^7 z??Yytp>U-KMi7W!>%!r=mnxaKk2YFPH|cJDwwl0=uPN+lI6^GEBR>bZPg82|5((m8Vz31 zV?F@wETVpBaw0`Rv2P>o0U={=dGse zr_p_p;vN? z0&fgeQKhFZKoYnZ;a#_+e!9JSY*6#riL23%6&EAGQ6>s4s158kr8BtUk-MXoPSQ>y z=DJw-yA?fN-I#sg;HJ7bgXitPBcYFp6)SdXPlw;yPWTD=s8~MIy0rC9r|Yt~S=Q-~G=e7vE0ZQ`qxCesycV!zWG) z*a3h*y|HLMc_h&lNShYXjq$Fd`i_>P?DLc7Cp!<$euZd#^dQ&Rm20KZ)A6veQDN$v zA)2Tl<_i|)3m^pjMeT(AN76}+EpGj94j!mCf2kmdX=3|dQsMV42{qFarBX*AcS#1# z^B>p${cMbyFAy33s(n?zTPG(HfFc-V((E=uAn|2-@it$JUs_wxrjxP)OBz9Ss@3Ov zVduixKD9BgU1|?_5}a_V_(rF)2OK@w+v>E!<%GHdciHIjIiF(* z^Y8u!p*MqM6n2N3>gUkJTr{`=zbPwSM81WXkN^`T7@#$hu?E@x=ik&%Pk%gq<`5J1 zC%-A6g6~moF*{awedPU}*YlY}Q*ul0C;3XH=7WM}%hegY^~Y!9ZEcEym`fipRIg<( z8$lv{!NyaOM?zYD)xpgte+HAdr3$GJTwjV;8IUE4WM^k@AW#!2CxI3Bn4FlTf!sZx zAbi^SPRH?=riL@2e~Uj3M?#Xcb-ZPeeRaw4ob+$0l0Ie+2xB`x`=(Op{ z3b`&GA71FBh3w39 zu~IVGIWTq-!ocstIO2|m9sc$4pWW(6`k;8W8FDgnU+V4#G?q^gM4Q}CWgv)Lpg6Wy(%`I8wgaG^v1I473GMTb=SR=m57>Fy=GZ#U zH=5eVZrUUX@LfaP(Sm5{yp?la*{1G&>!8FMK8sB9xNT*IRMhQFzPXOz-TQ0JF^S{D z>(s6jqa*8JV1&7YnSq?nWB-=0z&-m(%|(a^?A=n~pW-_Ox*D{Qcr%nxFt>DBbiw{` z@1gq1)v)i}%@I=F>c_(e?X!JF9)Iilx{$rhlGkio^ZtW!Xf**5&hLQnC>;?Y!->eem)mNv zj%su`pM3D|$+?h&l(U_y^t3OTVt+hId2oBmXOHi_9ZC?BDPnI#<)+{+6a!_D2t!Hc zWt0d}OaI_z@`LZ{YSvnvlC4+hYNuW^wQ$)wQ1V~J;DrSqaxMihT;-QIUu1c5Rv7wX z>7q>~76^|0tKsS5DNQ0O=oCI1iOlK2n!;URWicbwzCOYRV=W3EZWT|N?`>SVkff`+ z(k$E)Q@N9$&~twBiKD~CKf%$^d9UjC$(Mj5VV0xU9k)wwds+xD=d-da+C7vEiatc`<#l$zrQjVVIOf0O?VJO8N{< z-)K~mYS8!LQm?Hf3hfqKs5|rT^V6M?NL`2~{bAdWvm}F-8fBcIhy5KLX?rBYCp`dq zArsv?b>7d@s(=fg`x$yRd$8+bX%VnEilp79VUE*cb|G*vE$<}ulue5u(s^y%7V;Z+ zG>c+-VEdn+cR%m)45O|6?VWfHZ;&exhhhMrjc(*|uW3EXm)i|JYm)o%%gg*x0PSp| z$L(7vF%e@y6d*FkHhAnf?)luwZ$36Rd9&)?c^b-fE}sv1m!%Sd`i64HXy9c-HsHrk z$Un{~Q7PA3z7Vp~`m~(dGv9{8J<|huD{wau(CBAxQPcV;_i+oK;GAV~>CLk-{#JZp zXS6A)=fL5<^hVIUmH8vM(==)!F|W(Az4Jx-b}2&DQqQzRPSk{}()Qh>$A33xGrob| zD1+z$AX*@R*2Tc?`fefvz%7;$6m4d)y>oWB8g}6FK(*M_u3}gKH9{l?$qDM~QBc1y zcp*q3p>eKdCOo!#x67gB%6SI=lY`#boNgP9h;j2)njfL=4^kF`s?vjtUI~fzTEa&L z*jcq95apB$C_Y^f@v{j)5H(@$PA+n3cpe(Onvr(5Rm+OCOvMl5HErdnZzs2#s3@{# zXo{hg{dsBb-|y}IjwADyNj(lCPX;x;lP0Ux!v&>`VUC}Nbck@1Y3Rq@QPb0-S7+%aeYO2>q+n~`Qs38?8|yxRw}`Xy5hvg zwyTux)EoaOo+yfxvl85_LKiSys)1upm!3&)oc8eB@t7Lt0}MrIL$;3|wfmO7_!Nr{q2rTon>-gu1d{h9+QFD5RITD6XYe)W_5ONFLT8R%s}%Q;=W@cX>Oy{2O~j%2xRYzbZ`53>9lAjSrh#T{j}@l*xIbG>_cJy24{H=IO8JB zx-v0pMphT24V()UFUzFXJ!NKV4jM@L(eAT84{WT)&!pP;6pYLRVE;89Sy>M7N@4*n zYeSap=>B?b+vB~PXI&qCb-vO>xH|%w$}RV7rMLIEc5Q@i-*iwYiLV(eAabpd^7v+5e zDQa>1 zEK5_svYYoD)tec{`Us#^}E(?R|x4@PW~rbfGMI6x2}nfauv>D3e8 zzQ=ZcW3VhmKDgjQq8BX#3mPwO>$RL&39NSp#hJYg0lXnGb8!IsNpw*0oXA0eE&iR0W7611^cAP1nq#6+7O zk?19D`7!_LR(tST3T2 z)We!Sy-JKRt;i}#)^{>sHPWVPHCQz)YkTgr2>4+7vZqJ|$Ma|BX8{gD?kpw))iE`Z zX<|#JtgYZ$hmJo^;(PVL8){G(m3W8<&+8F*Nbl-*;F#5g0m>3XMCvlE#EHvw$1B5& zDVw}fc!odW++agMG%>K#j(ax|7tcGSld5yLtlJcJG!i%TY9EW#hwtbus@;RZd~~S% z5t(j=qPda@5%Kxpv&9v=kX3u_`~`J&>{I#ZeI2X}1j@scfw$%Z9G;wwi~A;3p~uM; zgnk$gPDwgt9#9J4Rh9ZYST3?}g$_q}Ft*KXhCG+PKc{N18ONOY(@PI8K&9FaKnA*wIN%+wfY#Em&S0@2!t*HW?K2W z6|oUf-C{q*hc_io)<121U-tu>chYe(B2vVph(UenGWAT_f4X#^pHuRA+#Bvnf5WWd z!W|0|siUBUv5ZCci;q~@+M%-9{YZmE60GJs9BA|EozIPgYy4@o8 zT=DDA9BN4t9Yc0eIXWIBs8Zp@$jx0-i7a0-M{IpRT>J8@>6QS3fMYZELVWtrDKB&> z;8lHn8{uiuh~SS?6gf|3j`%662&hM)VcTTI8$4`&Q06L| zC>+&0=T&Mg*)#Z%Q@^Fh={#xj7ytR#E++O;mzn^Vo1ctGlEUxEOQRm-InR^9roa3B zO&kHM7dC<)qBJO}*vk}iqPGJagBfDg>%J4<1G0L<8l~?GjPU>|&=T=1Ziy55=gvEQ zSD9Tq4j!#E-uxD2tw0zXtq*t7^5f-f=3U9jpxRr*CziwI5dQCNA=x+?9*aD)VsZvS zOe}9x%tT+b)Nf3i0@2GK>|M6~Vwksp1$PtEzaze|pn>Z=xBzP4_m1o9;huU;7OcKu31HB$JWABuYBTwc1I8^|LqQgSqCti3|L4qUIv( z(TW!@GSbV7notZFdyU_e$IvpliNqF{Hokef^7^CJfiYw6>#@66D$PyYYf8p{1=t7e z=>7=#2T}YxZU`-h6FjU%#pSy7`kv-qj7qmmsQSty?Qp!gC*JdifP*6$QlNy3cN2Cq zIfoVn@#*rUzxZaKf;b(YoE)ojIDt~KE7yYtpx@-U@WXVq3*w|*S`9WfbR zg`}yzL5g~1R>nv+m|%#Cak`>jL}E`6AYI0KxQF0#E9=M#M7L9z!GAI_dA_#yz*rmw z5NHNvq6FmRV9|(X&4$dG;hlq54yXH#)2;WP-oKR>XD!|PUPA=s z&mBv2QTX56hA+2jzPf372s>YNbUm57x_`FahFE4|J{d+rxR!zgeEB7$>>da&Y_^<1S$PYD(Pliq!|Or`mgG0xWz8Y z<4Vb}s#KHHT*}XL?>XaVc|P-cyX^DTAnOn~k z+dD!S%PDp2;OH7^`Bs{<(}*5`lW|2Hy#RwiSlmTtwttQtp3V030CK2Ba5S_LG!bM$ zYOs%p#;>k!{W#v<*Ene9xZ;^SVU@reHLOFGB7q9DXj)?Dz9Wwt9wVf$TwWZX7D;VU zQBhhR6I{X1BwJcs?v&5fI(!Q{ZG6!B=Awxlt9<7bHjxRmw}u7{7f1(8dh6LNWgk}1 zmOuM9olN$(0F{+^Q6CxA=tHT|X0<+xfi0%twc-oQw!Y~smQCKaphZ$rpN*2B3@0J& z9h&YFN#r|oLdU;p)veG&uAXXarv_OQPFt-+F~Or~sRd*>%)IvAgoNk~Qv*}tH8j3T z#OKFn3B|86GQTA~%Ys`TKH8^TePwq#aiGq{)ptd6a?UVhQz?(}&D3QlcZdxsz@?d@ z5DYVUdDW#wTCJ(6N$q-teb4CA(BITwyUf4?fqCM4)Fh}5Yyp5n@MT5UOtcK@zpoEF z9P4U~nSufBFi<2E*=d&^;rdFYLDk^Nlf{M<^^Vnlk2p)8avEDDJgd^kjBnN>>3IoS zZ`$oVp0H`4ug2o^DU3UyF|$D#M93&-n@7*t=H~g{{@EvW74w^A`Q=_SQ~vU{i~&q! z!GH<@js}~N*Ofk9)zoLc@|W9Y^ZVJ~hUu$u|Ay*#b*;-S*pOEc69^QaIJM+Z%?KW2 zM#1Bhw9-RjS6<)eD>(TzGFB73X(0nmh0v|EGbeqN-TqxOKYTM;y}8XQix$^L!=tZ_ zl)4-ZNJ?@_kJgPozT>+bll$q~kTZv;6l%yCV*9GJLP0B|w!~95c}x26@79xzaUb!% zE4FW}Z}RBxGH)=~m&hcVLQHGe8>*@09xl29Y<8?)eWl1jSx?it2==n|?2oF|p#g zHfjnf#VSPIq-e_yxL29b-OJvLd6a1q%(r0tkW({FDz`z*Kfg#G<>ta@cTG)6>3hf3 zAy>}?AF@Zy-W&rhKo%GgQ(jmBh7{EF|OG0&TVT>Svfo%?7710>ps-L{$yul z=R#95$8VeA58NJt4KL%Z#9=!aBHY%cSpHCx10;}%VC6!LnQ+_&f)KlG>y%xOctDg!*2!TK%cI>;qPY=t~&zB}NTIK02 zmdFqX5mwS=sWe=(zvEN6;)(>8D{j*QPIj^nf+yWAqwOt4e`qj$eIq2{br-!EvDZYCj ze!b(k=@N3=_cOS-hf_!P3b%W2E2${LKShP+sPJ?_#gjp0v(t;Y6gKeLAh9Z22P2D+ zfZ_@_XCH7xG`!hSpf@-Q8;V=cSxnPlW100A|sd)B4?(fdo>t zw+?(4B z8f)Ix5fb%j^ZU9UwVuL117XN}ah+Dmm;!T=%gtDR_$Y8~`L#u1p>8$TRToonWdIvj z5K_nvZKnrMNkv3t*7-kfwW31{x|{w-$JpWm^{Frctp*LKU`=?M*mk`wWP9WWAcpkcYm5d~D2g+louKb0FD7DHU5KGp=tWWzG0h~hsHmK6dUzDWsBzLI z;}L2$sg{#RONtX*VC)sl_UhwmTjB}eP(R+D0PABfU%pa;vV-rwF`ciwj0~rP6hosi zad+#jmbZSq-}yNU8tRI~3LZdhyvY^i`UpLW!T-WA@zoTc$IxI=$|lny;Hfb-EySi& zo1W}u8P7%y_I4uwwY+# zSea@u5$CpMTduy+FS;z|>La!Sz=h}a2hnT2Rgz{&-1Nv#t>0t&GyA(Wp!WP%!#tPs zg-RrCbTfM8CkWtD6JB>2qzRC8l#a<22)mof{{hX z&7H<2m21tW7n8Sst~s{bDGRW}J;E`jc7pnuNP0$kvvRD)PB^AoR4o>$6Hnr#S`PQx z_Wa@YHZ&C|@|c)+0lnapE@HCjEWWxEBb0m3gif^8>(+IZ51$@9o|CP)o5(b5(Yq{r zbJ&n@2zk$$b+%&0^^x*^(8A4;q6wxf4tKo#`icYKQ7G^ z*p12S(srU16NOoO_N)pA?S45urHPW4Bg$m=sY$-WRI^1l+?h!gGmUk4G8Goo!Y^@a zxkwmpIhZCulmzvMyT9C#iOK<{0v33`Mdkf1X|Y(Z+VSqV#6R*>SIa?@rA=Hkjok!= za;hoB5*rW&;c2N;-dGuE!j*9Ay{HgfoF0M~QD963-OZmIg{Ga-8903PE!wPNDsu<> z1^9WF^1pfM-LZghW2yX^8H9)4lv=|y?0oCObcxEz-lw^sb9-l!w!-B;ojm<+tZ3;_ zEG092JCI&}49LLXepkikQ>u$ix+zm4?{|0I!rVjt%Ie=?0( zytl(}CF(t3R zK~>W*z?pbKu3io2BL?9(73IAAyg=S8u@^aMYgvEIOZD%$-J_@9t)qM-DdIT6F2g!E z?!}TTH|N^2?a7Y2oYPL?ESZ16NLD^!*0;b?ky2yR!N|)WpQ=>vPYg#n%tl|fHG@o9Vg#xVdcO6eJv2bnCFG@Xcw{$T#9Wh>Edx&WLfq_!2) z_GrmUS9f>3@@};3N9Ut-^9=36^uOk0Ed+wE-w=J77G_mlQK5)r@X-6Xn9VRvTS#*mQ5iWPX!H|cS6IrczxmRt!O1%{_nzI0o5{*5jzQ#R z()8|xOLx4Wn7LkOnt<=q__&<795Z+-5Zir+xBv88fR~xIbGp2e07FNG;Tw8Ndo>YL zzu+BvlXSW?`Ft++Ro87M6jjO42LP0mI2m1>^b;@59T6O6?Psr5yfo>;OEyvDuLKj8AP)+uY_3eBORC4!kb)Zf&lOA3Xe^H#`;IqI~sxxu|wSM58BA zKvS9F`|@7s;Ek;T);&z<2w9zYC^8&?Xm~lVi3dx?4pdhZqV%zu5H>Jbz>gM_ z*<(X?dn9UA-vWPRQZq2cuG`bqHd}N%=M()xr3?LwR52841bov_(~F=Oibq=WKL5S7 zMVI4kPd!W$U6a?(l_N74{WzkA&`lrLD5d+xoUQ5U-oe(aO}&d)K9#?=f$@#sF*SFn zKCJ2p+ua}YAZ?9irzc|OyJJv7y_VQ|6E$Q(xTXZA5IS~)%UJxGkh}SZH#x39ud5tU zm7blbAOFrKUpYLGYx|5_notq|#0xu7IaM@GKk??tvA?KU{J(7iIlY2ZavjM?SoBUlALC`*pBNz4CiFQEF!>#4z( z#5be0nx{qqaxRSxW#@akTTd2~_|G1kubzaRU%jx!yOs1?Mj^QW<%MUNk)`_jIt?_H zK=46Uq=*Fv@DWS3cC#LYY{yslxxc09e%SH1A9=&AhS|B-{_-thO?@o8gD5_5IK~j} z^Bg@g#p8+@Yw?^0-<$i^dJy>N_rKTe`zyk6{J(b_SG}u1_xix};+=XbVhVmPv>F#n zpaTMoY6U?a0AI0i6Df`kkuNH83;9nw3`|l))@+aqGP)m2>kJ zqlSJiXvB!$0-6^oAsb8KCXYii-m(UU9d)`cE;cU@Nc*M>@45U&aWqEvKidfIt#PV=- z~KU)A0wa>tQy?Fp4z&fogY`}=Ezw!yCW%zWbrNr<{grMNqpCr zPs!R=KgoD-c5pr(KxIXgwuEP~A2CAK4 z1+zGL#VzCYQ4=23^|fl}ca%@QIV8O(gy?$#A*fErPPNMB@PETGjoxC1<-1|$%N;-X z1K7tY#yFxd`~MWMojSt*DdoGOnrfo91wu(c2qp9qAR@g7!i)5l1f_%`ARVL#CQ&lO*|~=JFIGagy?)g$Kj8E z^yQ@oovvJ-j+XrJO{>{F`R5ZfBeDAXk23O*iSZ8^s?)hwlrcJ`a0L=)$An9dmdlVv zX^e*)CdheV3F9mZ=O>+oCX5KP6QbOn)0z%?N%mFS;P%6=vTJrHZ zs(s!g#09=k;)oKhw?{>_W()n7k^ak#*Tg?+!B_7?U7wii_1>WmevL6h36OH8tdf&s zKi&|&RqltW!{3r)yxE#Dh%*vgSzYBD6Hq{tZ_<%&j*vjgl%g@1F;i_4p|2DTi;aE$ z71P3SARc-KbYlZK@?wmPqDg42^}wC_84EFRv!>HVDanKoMRcOC{_yQz zOA!ev#O;%RSAS5CyjcI{;eQJ*`nrs@#p-5j^mMF-jYPAE@k|*K$I6ekucu6i9jPtZ z<*Q@Wug#0UK^}p)O~Q?=p=oPAXx2P+h&JlE@#_^I53fF}digh>r7w3!uWbsOgxsLh zAeO3OD+@U`X+tr_mo+z@CYl3x*}|?j0#ZHxt;kQIp`@dVsuY6Ptg~{6!)s7C=?sP` z<}@J?22W)6=6EmB=>jAfQz`Bwi@_2)mqt9?gMzq{xNpo{`&jADdJID z-^Kf|(@XKOnHk$VT+NSKi*TIHk3#r$&q1vpXWWaovoIC9`F-p$>x8dC_n-Hrf6J^=B+tjSxDuewomxca|;~_6C>Jwp~M34^O@Y+w`xh zoYbA*CkXbQ-h*j_;3O6#4T@VE6Ql4m%1Xzp_DH;DR#)jeis9VQ^ol~Xm0G1idzuqn z2x2Ng=Y?bFWK(4rM(4YCmW%T*u5G@Yd<)&z!Js!_<$IO2uhgRjTJ@f8++7sWae;on$E?zJ~q3z0dBK zT+OV85H6){-nzGaben&)Eans){4yNyv$h5qgG^uFlxS|kCc?P2A1?Sm+3Rxke}0f} z`7$s?D+7_L9zLbgGg{!a?W|QmAu{(qiFNPoG=7wmX2%)U!I-Eg z6BlxOGS}X~l93xOMj1;5r*?M4eX;iJM0DePEOt5Qi}-(57aqRGbBl~c{I)$Mhz1SQ z?Nr&^V6b`dv&_f&p*nda+>9lXyn{kcBJ3=Rv=fd}6W2{1oV4EmF~R#sg+ZyiDcMqY zq*(PsZnzodb2JcDgQR5Qhrx`o+Q>vqQ-Hret1|5(H`cOciXXM);FJ{77Np#W+lHt9 zvdV*q@mu;di zz17$s_>%4BMya3wYw+iNAYSA<*xtc`5}L5#oc?xKpM$&Yu5j%#e#`uB|M?^{n<%8v z(M%mXQ_9?dr@gb#>|_wSoqn#@e>{9}O`yoF;wufu1^G>~O{gw@6?!nUHLYst;4l;o z;RZwFpco`&B)i+$`A#D(C^3GHGtQI3*6Cgk-Xq*=APy1n#e%jaBRVG80ywbme}WcL z@mjX{*_pf2@gWb&v%7;JYhj94OehgOwFH=lBP%F-PMvH|*Y{$mV{}duhXCj~CZ>#% zA%(a%qXm!zC0nZsCQAczQ>JI)HAh?i`!9YArdijSE^#~B#nJOjCi+n5my*lmx$=sJ zop$P7|1vqT6YqvU$-GImoy(e36R*JvbSZ&~8>y#*MC*`s(G^1lXtD;I?rk_KAJ5ok z*&@+2#n?u+xb*hP7~_aUC2P7iyXDh}c!3W_uZj~yf^DR(PUj{X5B4-DJm>EEl{166 zrNsu7fd=@@Oa6gs^SSk{kx(?qj(*m1YERB4qe`5g@ z&&U>b7nrZT(qdR4jt94Gli#LN9N1-MF^|?|S=%*{ zr$JLSSU59uEt{;%b|lZ9?QeeTC!R|nHCW6mq5&;TyZY+8v>D8Rs#yd$Qq!L>${Thz z#rF43DLF7f)A*x5%?zg=EZ`HrL8&4{lRD5uzmr-_U<+^;tP}Y9_Yb=l=hsS`!_8*6 z9EdKvhP|1Gddpoj51Cd>=f!)kcD2*Wy|9Zk)nnCOg*S@T;PiaP!9u!m5sX1or{Ih# ztS%lq{Pp;Y?MVS_?gg@EM8U&$gQoFNlBUp2IOU%YmEvti1pK~G!NhEq%>;h+#rnmU zlkar^F@Zs>{oJIg;0nsyYII29;(WI1%j4baRW{p|VvK03IVvBx9)bsEloZFr%+cr* z?s2dqW4y*SE{9C`{!Lq}Fg0gE9Fj|U%lUnm=E&wxDbr+M;vjse|9hh9vvm@BA;(a} z2M-+7^jh zP!L1Y0jHbNgJ)vU01)$b%8ueMRgRAps7xUVK|%c-am!|B;QyC(nkOe~Q#ZOR!-^gE z*W;KjrM$_6k^f*sYlYy?O*!Z}CG7FQyc^U@$p`zwX=p+d-?>-DYF0foxcBzNcH`{8 zrsQ4l-MAcdjSIaB;HbJ%Do`&L*7-I&06N6|IbZN4>-bTDWY#N(d`k~vwkvPHb*4K* zTY@&Tsli+K#I`jG!G0p1_QBz4KaoJY`tNk6j{8&2*m@EDcJ^7EVrMGS1fIK)^F_lAdRyY$4J#1UzU3hYRZs_T6 z!v?kA->u0T!QmDrO;S3nk(p+ptQ;Lm4N_;n?RveFd@w9rG~5;Oj#bz~Gf&^Fj8+3QPJLC!tcZqW4NjfaWlPC`uYvqfgfrK0feAE} zb8(m1z7US8Ti7=aH1QU``A(X34FbJ2AR63zhj>+TC+O_w)dS<9G zsl;9X9Q(IRHV%+-ua3oq;P;QVg1qtI9)^xc$dz0Ud;FJ=_$`1)s9fxp88*6jn%gyk zrbAQYbZh$k1!~1hzILuzU=BXnuHW0EwM5t#zRcp*Yl97t{)=$0VKQH&#UOt^gd@v= ze%?jGv-D^r%zSMiI#~OY}8g&{vLREE9Mv4HG>vHX%)sSN=r{Lroc@4i5 zoBBsG*nFq^P3Gc@|7j!mCQIw1>VTeqQng>TXW;BD42;EdizI_jl~ zD#3As8i>xT$UCcNV|>L=a{J-L7Pjl%%HBdt{pXYJihAVMG0xq%y2S_1JtvV7$knfcYH2 z{Pvz^eVliCA%r$XyOSk2%_d*v%J*5c0o-&T8c{zOSe@w+)4;+Xlyj!6rluCQU$d?+ zb=m&JZn36i((}`BAm0R!IgEzIoW)a#Sr01!($NrS3r-IyZxWy%UmEeJ9`5yQ5ulI8 z-9!@TsiCsm!Vf(sXfP3$xT(UYM^6(Mb|k|53P&EcA;oC`|1WF!9M3H1!_|z^f+_{=IN__T#j|D6@UI$-1leC<`FGl z-}x^cP`xqbNQVSGxhR7f#Q)p??yQY8pSo;ipehM@bJBnP>50v%1l!)br|p!w&@4o9 zm!>UBAU?gQ!toeC?P!7+A_y;n9ZS5_nc|X3!9)$M6RA~{fpZp|0H>NZ<*+_MG3E!) z`jitl6*4ujHkHj%gHR+RRW!nO>&;~1=N)O!C!fo7Q!Lw5Yjo~vIe%SmiiE&3ZI<|b z#eMa*Bnj&5i#;|Py?ax7-FtqJcdVIGEA7V~CFgEFTFkv!;1G=Q$Ecwi7C?;d4OS}4 z_-ec>Z|v&x$iVBQ)s;p5&D}>vBH5C{8ZQ2y(f)MqU6JMFa3M?jRPcpoixAtKXVi^C z!QldRmy(+_KGo1qTXYn_`J7<6XL%5}`h`>)C8NJx%gyhf1_c=azoSe!fXHEEV9bV@ z!D}rIQMtg=#D>(6pF#Rj`eyr^Z?K?-HZ3pRcI5#50R<0!oPcKw;T<04Ns(dUq2ki| z=7+)phi>z0DZaits=wDdkdiS{9XvuA33)lO^jls^5OBj-<4r2!lCKj4bB}9Iz1&>G%Xni{+X(fd} zP!oMtBwzTmlfCWbwDsu2*;IjUWI9P6MSR*Zv4)iFGVc&)Q>vbxWW6cC);X?2FFOv6 zs_P&SNVR5~t@fVWHe1W%n=2ukmq$B>y$6G|?D+yrOhC%2+fm_UAgbF!&{B$r)e9vd z@nI(?C8w8}-x}u%Tb4fmo-^87>9U!aw@Pw|9dvfN-;wpt? zhqscNg-OMuBbHXOV=eN3J#Oho*Lg!&9PhQ>kO-c@@4wO*tDm0sx%le(Z{UI8;v|y0 zSHBKcZK6D=s`a$_oqG_Pfl($S%{qSdLYa?r0&loF`108JAb@UyHBbQLWV~ag%Qwlm z&E6Ii;Mu~;Ah;@Q}@aM~gHg)DN@P^tx>Rv8FOrs1&a z>|(sRHP)CMc6m0|FnMg(=d;nO=r4rd7$`S{v%uMy7dSwcRef=J#f3M&HE1svJWcD4 zhvX}J`o?u6d96fHL5qZStkUgux`r)cib571l<6QHEmmH*DVJQ0Ur3ITQ^*ZR(DOtp zV*t0Si_D$b>Gt8Qd?Ccnu;065p{KW313M3PJB5cDX1?nOS3i6G0a2c$h36sA_%a+S zv?<34OdurvS>GB>Gu#PvKV5b$2_+U4=*p6zP;@FD$?+z*$X0rcL^xN4DP z7ItUBT6s3+14seXJGHARQYbjK;;WkSPohDdEsCz*n6&eyP*DPS=petMztgF3d_F`Q zX@;}eecCnbTOwT=IGxCSY(OGea=o&OJpAI`mn?SqtzVv9>=*uJ1xxBfCv9M4vH|l{ zmfTWPJ|8J6#=X&KvJa5NalnZvm2A&^!`5ZznHupls^oh7GNM%WLyV|E@O=p$0HyQ= z00tOK_cC}H%)yyS(M~JZ-bJz6xvxf?TYYid*?)HU`pMCfk6*B)U7lZ|U}XC|6$~du zhO*tTVZOTj8^Ra3rcx3}7<5&;Ufbem-7+FC7~wUOR+pJchaytw$;c=%yVeF-l+`Ji(xmY@IokdZrkwGAMi zDtlvGp~_)E-mQE_Hmox3tDV)(|d|IWNGzMZhQSo`h%qgv+Z3NNGKX z=kI81%LcI8Grz(S#Wiv_MzG97GI#B(!KDDsnezRivn_^0rBPbN$zy}peli@ - 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 3406523..0000000 --- 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 24c37e1..0000000 --- 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 452dffe..0000000 --- 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 27c2072..0000000 --- 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 c4a68d1..0000000 --- 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 f14399d..0000000 --- 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 f37f8f7..0000000 --- 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 facab7d..0000000 --- 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 6b8aab2..0000000 --- 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 0592ea9..0000000 --- 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 bcf249e..0000000 --- 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 14db31c..0000000 --- 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 399084c..0000000 --- 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 df1430a..0000000 --- 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 905c73a..0000000 --- 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 12de772..0000000 --- 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 ccea310..0000000 --- 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 461b164..0000000 --- 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 e5b202c..0000000 --- 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 5245c86..0000000 --- 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 1f5e0a2..0000000 --- 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 e7aa880..0000000 --- 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 37a9d9a..0000000 --- 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 0f629dd..0000000 --- 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 cc1c8a9..0000000 --- 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 1972a97..0000000 --- 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 9af5b9c..0000000 --- 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 9042fb0..0000000 --- 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 3dd250d..0000000 --- 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 c1ddf8c..0000000 --- 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 e16cbd8..0000000 --- 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 eec95f0..0000000 --- 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 2f990bc..0000000 --- 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 ab12913..0000000 --- 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 a6858e7..0000000 --- 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 94912ad..0000000 --- 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 f6d7cf1..0000000 --- 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 a6002c5..0000000 --- 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 74cd3eb..0000000 --- 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 68ac3a7..0000000 --- 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 566ca14..0000000 --- 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 93abac3..0000000 --- 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 16898df..0000000 --- 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 71e3d70..0000000 --- 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 4eceec8..0000000 --- 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 b21b60b..0000000 --- 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 9b48dd1..0000000 --- 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 3313490..0000000 --- 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 6e19973..0000000 --- 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 1188ec7..0000000 --- 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 8981a55..0000000 --- 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 2ad3058..0000000 --- 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 a22bc4c..0000000 --- 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 49a03ac..0000000 --- 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 19114f1..0000000 --- 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 c793410..0000000 --- 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 744d7ec..0000000 --- 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 65ef4e8..0000000 --- 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 f1733be..0000000 --- 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 9e80151..0000000 --- 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 dfa9bbb..0000000 --- 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 b379903..0000000 --- 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 5206115..0000000 --- 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 8952968..0000000 --- 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 f045de3..0000000 --- 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 871f8f2..0000000 --- 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 86a289a..0000000 --- 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 f53e37b..0000000 --- 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 6a1535b..0000000 --- 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 c211c73..0000000 --- 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 043113f..0000000 --- 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 c82ab84..0000000 --- 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 b5e42b6..0000000 --- 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 d80a29d..0000000 --- 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 350173d..0000000 --- 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 e494e6b..0000000 --- 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 a3f4f5c..0000000 --- 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 5ff2c83..0000000 --- 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 4ece88e..0000000 --- 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 1e8bbfd..0000000 --- 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 84dc894..0000000 --- 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 b179d30..0000000 --- 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 106c044..0000000 --- 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 6d2c76d..0000000 --- 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 83f891e..0000000 --- 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 0a4fb57..0000000 --- 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 d39adc4..0000000 --- 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 3b472ee..0000000 --- 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 6c46d88..0000000 --- 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 fa5305d..0000000 --- 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 81ec27e..0000000 --- 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 1a66390..0000000 --- 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 2869bde..0000000 --- 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 584be62..0000000 --- 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 84ee278..0000000 --- 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 8a9deca..0000000 --- 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 c34601a..0000000 --- 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 fb35617..0000000 --- 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 5f9208f..0000000 --- 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 f89099c..0000000 --- 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 5758eae..0000000 --- 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 5c22b38..0000000 --- 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 0c71681..0000000 --- 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 7162037..0000000 --- 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 af809c9..0000000 --- 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 8318ccd..0000000 --- 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 5f117f5..0000000 --- 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 8f7a010..0000000 --- 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 755512a..0000000 --- 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 e80025d..0000000 --- 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 5bc6b0d..0000000 --- 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 2e37699..0000000 --- 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 eb39cec..0000000 --- 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 d4da0ca..0000000 --- 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 d039dee..0000000 --- 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 958f9e4..0000000 --- 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 3ad222d..0000000 --- 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 61445c9..0000000 --- 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 af626a1..0000000 --- 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 c4991a9..0000000 --- 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 685855b..0000000 --- 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 f0319df..0000000 --- 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 21627d0..0000000 --- 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 cec3785..0000000 --- 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 01acf1a..0000000 --- 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 d225750..0000000 --- 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 aa4396c..0000000 --- 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 1159c20..0000000 --- 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 8e40c7a..0000000 --- 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 ee147c7..0000000 --- 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 4b65e6b..0000000 --- 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 aefe99e..0000000 --- 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 71ae971..0000000 --- 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 d3af1b8..0000000 --- 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 caa0918..0000000 --- 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 06ee41e..0000000 --- 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 89b3957..0000000 --- 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 9335123..0000000 --- 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 e2a0ae7..0000000 --- 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 1632138..0000000 --- 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 3d2284c..0000000 --- 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 9946442..0000000 --- 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 73c8661..0000000 --- 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 52a1c57..0000000 --- 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 95eca97..0000000 --- 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 aa652e6..0000000 --- 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 52ad320..0000000 --- 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 b8de45f..0000000 --- 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 efceae8..0000000 --- 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 21b6bbf..0000000 --- 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 0f7fb1c..0000000 --- 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 1caf610..0000000 --- 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 15cb10c..0000000 --- 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 e03101d..0000000 --- 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 032637f..0000000 --- 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 db03f2e..0000000 --- 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 f386c6c..0000000 --- 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 e69de29..0000000 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 1ad30e8..0000000 --- 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 929722e..0000000 --- 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 6e5864b..0000000 --- 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 991ef22..0000000 --- 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 184c530..0000000 --- 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 4c4f030..0000000 --- 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 812ec5b..0000000 --- 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 a040b37..0000000 --- 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 d0b4732..0000000 --- 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 6ef38ba..0000000 --- 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 ac9e8ee..0000000 --- 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 8f47e56..0000000 --- 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 3a124c9..0000000 --- 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 78e5055..0000000 --- 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 3ae2dc4..0000000 --- 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 91b9639..0000000 --- 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 f8553bd..0000000 --- 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 80be563..0000000 --- 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 4b46775..0000000 --- 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 568687c..0000000 --- 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 5f2409e..0000000 --- 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 57f67db..0000000 --- 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 a9fa88a..0000000 --- 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 cab2259..0000000 --- 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 4bbd8ee..0000000 --- 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 0b2ad00..0000000 --- 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 8c4ed26..0000000 --- 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 bc01916..0000000 --- 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 1133a5a..0000000 --- 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 c0f9996..0000000 --- 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 72db75e..0000000 --- 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 fea5b08..0000000 --- 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 19d294b..0000000 --- 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 2ca8c45..0000000 --- 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 473d902..0000000 --- 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 38f76a8..0000000 --- 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 cfae7ec..0000000 --- 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 6915473..0000000 --- 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 904710a..0000000 --- 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 06d46d2..0000000 --- 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 zcmafacRZWl8#a+>q(&04l{8}S)mp6}Mo_hD6`{4;QfgLh5_?uCic-6%Dy>bd7NxD( zQew7hRgIc&zQ6bV|2>~iJc%ctoO7OYpZmV<>$(ro*hrTN!VRIJp<%-5VNI#mf&X4$ z0QE0QMR|~VVer@I%WIaSLj5PqPut4R+}+RXE{!o(2dVY&F5d6KLk;^@ z5$a9W|88nL@^gFe@PBvBA3X5#MQZ5sdu#e?(OIP;64ovIOn5? zsA%2iNoi^6NpU^g7svGT`p2(yZwUwsm^RB%k>-oq(jwZKE7!6dmO;r_w4nQnQGlX(lQO+5@ua4O#pDf`Wm72n_Q7UZ5heff0<_AQfzk#%5hCn;%4FmE8Hx zHIyXHPU@Hq{8q=rW}Gx3RTL+J^OAUbMCK^#}e zXfMu-)FE+SR$D0tM(c8Cz-^sSd>N_PR8NHRvUUcu2Kb&%5O>5$UOETWm)eL zZF2|&9-BNNu&AfGl{psqX!nC3C!UE;ffFO6IR)i}sPM$na#tTNlcX8CcR|3|COQg$ zZk;AYgkg0$cbTSGW%Ku3U?yZT+ix;u+m>n|E>mDN13Nq-S2KV{xf{zcL zEY|!8PH>3IR}3`#I3R4e-lCY>gI>h4#jg~8@CXTTEe?8~RVW%Buvkswe zu5R)n?s2McXWz!ncpuN?hv@3AzgTWL|I+dPaNo8cJvxJ0zm7C^^zxI1xocm9ya;-Q z9zy%XcMISGb>Id2n1qb8?UjwT#l45C0UdkCEf?|{?UABVbOf8rL6RQ(4lzjh~} z1tI!MP+AayunN%wbo-(;DAsUWTzEu&Z_GkO^4XvL(=En?iygZo0dc*ZD!>m&BvkLR zuMuNjzzXn*|MFbN`Pruf&qLb6%Maf*a7rmkW-pHTbnKsY{L4S5 z+>$ywYMMZ6CeqaeXXh0bjz*eduRqYG)G9s z?nb~|P+XHWsotzx6_Z263dA@bNv?zXcKRZ}8-fsA|g>}k&e!f9l?JYvD z?Z>@e+h3|!YUfT?YFpP0?%jC61XI3p1rA97yhCa(yi2dk!V;`AQq#Aif#@_KP~jrb z$gi$tcON%{-}t^l>1X+)oBdZ(K5Y#u(QsKsfx2US?=wCB(YD)jpl(&8X!m{;XO*mY z<^8wh4~0`7{bok3z2CHkt!|bs{`gSZ^d4sOsy|{PBN7k3V!&5+*N)DPpHFOFom8s6y&h4B|2w)N5@o4s!_3QKb9!{NwjZZ{T`kyg#&&(S zssG|)uFt|Iw~ChXo5ohnPGf8W%ARpnL(q~RvFjaE<-Zb$z>4Jy|hX9WO7+0z=J-^Vzke(mL&j<>h|4YVYr>6)Gv(%4X2q7yvs3EL{3;KN z!g;Ka(Mr-o(*n>G1sT=|J(?(EXZD@Jy$e6izdf&ZEtpeBYIr^}PJRNd%yeJxP9e zw9^n6Pa=_sB8S@_YFN};j67$M#FFm$?%ProGNzb71&*1Kv$DyjO$WJyn5|j7sS|~7 z$EtWpNl@Ni(}=bqtLza&v`U#9FYDd*!nZAlv*IR$+cktt23Ex}LIef~xAKs%;W0Sw7ruIM)K&D^01<>OtSkBzofFwT zIj}49(U}5D=i~hfIlyid-fljbUs{pn(S!=E*vYyY?XWqS0u3>Rzv{%E9F6Tg5A$zm zO6W4xYtlo#yMwfpaLJXGNSt$OKA7g{57<&>vk(ra8_&@Wr;Vu{kPnPNdyzQg(bpI< z(54Q*A3yQ_Gp&(C{~Z$^t`P6rooC@9R7g{gM0b*GIDYf{{`)Xj6B1WyIi)vVTJkr# z2Md>v@saqJfN$RI$A)*~`6exi{F=%pp`W zAtXDm<6}gU?|1aE0nstYi7eOmT*yASesZGm?VUNN@%tgPWpV7%fIH<)SAt1=amI2_ z)#P!HmhuZZcl_s!G{f)#M;T5=dIKg2MH$XK5tCx9ekLccs=xRDYi{M26KE54Y#LX@ z`W{L8tE(uT-FXfMSl1SbBUWRSUko|-#?sQ#ssu8qw>;h`hIfj=<-l3vD9Y(HIFjIkxRX=6<=gVjU;5G&A0-=~#m{hD_$Y2* zL?)YRpyR1Vr6DVCVmxGuOpo-7ZPU8m`f&ZIt<)tPAfjYiGMaB{43%VOO%U;aFyr&> z{G@MZqeZJ1-ViAz1j!iix|?8@?j27jE1haK1A2o#1(7R5Pw<2(7@56tJU@aFU0?#Sq2 zOD!5hof<_;QpSzlV@h_-f3~+jz-E~vM@q=b_>osm zJ&r<}^uY_Tx%2s5mg{YA?SEsq5S{Z*YY$=O#<|$Sc>?CUj_5GXAHS7QrQ5W%VQEI- zl{L{Oid|DnlPp-7-~RZ4kw6n=j;oY|2`*K!uw0+!XDR%`tRf0y-jBczNG(zVD=@St%GVz-h0+{jaIDJ~~*Nn7jX7(-Dp1XojZT z?fW=*u`Y|tRuEE#hFC0(BIu5*#E)A zF>HvaD$(jv&kJ$4l103+mE<7&NWnHQ3Lj0Q{^Wes!LCjA_wQ=1%i%(AB56D@f!#B1 z=}y|O^Gh1($NTr9T0#!CzCR*i4S~2ro1C3QHI|znMKO2yss_4pG31)4o~i&AT_FH! zex`O3c_@tL3U{2jjeC}xEeTKFx=kS!y8@|`}UzM<*i<^4a zE^CUiQbtGPlV?ife)F;7tm3e#DbEaeU*$1tW!-f{_U?x+4K@pNAMXK6 zi@SZk;1WF;C$ImLCh6<3?*b57( zfea!xTC_VuYWSF!9uDkT{&atHR-Hz3YhfMNol6s3jRSZYR923AGzRSMA8iMY(c8k( zX)H{$qH&Dq1+JVOCtNuVE|8fH2E&o4?{HpQ8`8CNbXUIyY9jeqKi#z#_N8aI0|hgJ z5ve;Ae`+$q*V|8Ha#^p zm1Y`%C=j=ei8s`DdTH)>DYeogOwnH5daDbvg(=4b>XS&)Tu{PfUmlLuNrqE~XZB?2 z%Y|E;5?}l?5*Odg-2B3B{21pEj{f4+AFr2L(z_m~tJ}1H)DsoqXNDzW7;b)Kzlo+8 z;AkRH+G+ywZ@YEOy$JEIBiI>W>n}esXJ@lmJKw$YqA)x%(n$cyNWZIxY?WI1E&3Lq zffU1Wg#BCm$bY+Kl07?Dj`T=hzWt7jRl{06_Cs={aH9lZJR#8LZJ>=NT#QE$RH|Rx=p!N8=)3TtCnII6#u5`RofT9aD4}Lj zZoHFAk}o@~jD)=JSbA{1J^0a9;7~EcvjHz{Z1R*`nOiK654;+lre^ZZhlgKHtu@s3 zf{mwJlz#9s!X+n7#vly^f@Ki0p8^>*@GHnGVgQMx{f$>2kNc0q(bROTm^!OcZy{w#8iDJkxuX%?x}Nf=)!K)P6FL%WElf_QpBFsw-0?6 ziZt2*pKm#w50_1D&fj*bl>Q#PMTGmryTIh>aKQjQh?EI-SYa{tZpek?&CS`C;Lux1 zpGooMVz_V&@+}Hg@RX};3E_g%)6)w?TY3j-;!Q20c-l}Y_W~Z&usqo0rk=d^JJf5E$Y*tLTvoi|K`8&H0`HYODvh|h^pOu8$Sfpi${n86roTNSRzGqlHYU128h^PFP03jRsi-JJY(+@~If}H8?Z5Utp5|mHHDs!)|AW41{Zn zvL_%DA>?6*C90oyUAVe+sj0V@JNw4C4Nrp5E*xc4kI|49^0=GzI(&Jfg$n0wGJ{KV z%S-gS<a&@oO)=g%qE@9{YIB^qcK!)M-XWaRM_;4-7=OCMx@KHy8m3 zgpbdqJDN|o%V+MmnL8W|+)Mj>3mb2L9$X15nka>h}d2QH#y$n9k5C1Urt*mC`ugI!f6 zIz5nf=MAS`w*-Uje__jn^3FWtZ?W9K8+_RKgV|}GA}V>}`n8j*0ZwRakvvipZ00QX~-;dpBHt{R9bSa_LRUu+N`PEaVllR1L`4|LX3oe66WSl=I!G1uW^W$Op@59#MU zjh5Vbj09XR#ZJiv>KJO$DA;ZcVAp`!;6}l9LlVy)aJ=V*>g0V135!pO@t7huNX8IaIh6^ii8LbS z-0c$$;flgPpsolIB6NM6WV-LdG5B_Z&d$KnZ;i9}Y z-b5T08}0HqD@cdT3Q39`f2Qxqly+#s0?1#?pgfXyO=7vV1NbiC%8TofFZfzHSJ$(h^*H0MRvpw))E7PbsAl)cw1sv&cy zYamC9V zzH5{35WWg3#`bc1H7);|TNb})_tVP#mz0ErH{2Smj$For} z7oW-XI``hfVzFuhD3q8>cSO2@p@i};lWau^8_&hDu{qc0lY=;M6>Hbu6_55RsYyIj z3^gmatt^*Y;J|f@LLlZsd4K%Ps_B||`WIIZ*6s#@<#$RsVfH+}eSZ;rMwIiv+3N4Z znx*poPB7|CJcU8oq~SYiy#h{Jf{}t_pf^_%>x^(7*MwR4cxPvLD$U1n==S1Fpa_?@ zUU7U>RL`VArle7oT6aUAMNL09`+@x9!1XQwt4RyRa4`<29T890{K8AQ zH4#e;w4ss!fwDMBpU0!8FV+t>d${SnAhIwhG(+cqV2L@N-+u0V=_qP1c!PVqH969d z7B4bXeP_6?uC8F7NFdY@2)c%5CE>ZbEpM1jZQta-jJWg8Ztnc=?pr%13tSRc2EjCj z$|I(C8w|$6>$4=qARWfHY|EK?iT+aj`z#06nlG?1LP!Xoom?%)L)Je>9gxR$8wnHi<{ zM*nUa1FKzM8TaH0f#-}? z7%v2&ee~f}s8+Zwm%jaGjPKU^rN)(ffyc*gK?fREDaIf{5uqX^qV{8F6+4txR@9U* zpPa*l_*s}ae)4Ya-@*AmX{%Q%_P2ur+SG!p4j$}TESMy0UMfa`dyF`wop!9k(Q4@+ z=-AITSrhv5i#F!`gDP52lNJ6-RnFa>eHW4))pE@7;1&;w8hhwkj%@viI3TvH0@pY3Q?K0Dg#*t=&X!#)yTez`Dq$kXZU z9Bw4v&?kZXNN+UJdfuhGUZ3#RzSh>$Lh&W4Kt?YO=+-w0bL%#Qe@Z1kMZ2Vjw@+D1 zX9v8pyA=Fj|8#;^n85yv+)s=j{(Z&a*zmbP7+2oBM@7*{WzTw@K-I| zMa>1XKPbaFd;E7de{t;Ew25Rfj;SWMWdJNndtdu)pnJ{^0H<`JZ@BkE`PGG)dO$(IIBz46#ZHiXt{Xw>B)9i&m$f#vDa~Ps&aD-H8PIIGJ+^7 z??Yytp>U-KMi7W!>%!r=mnxaKk2YFPH|cJDwwl0=uPN+lI6^GEBR>bZPg82|5((m8Vz31 zV?F@wETVpBaw0`Rv2P>o0U={=dGse zr_p_p;vN? z0&fgeQKhFZKoYnZ;a#_+e!9JSY*6#riL23%6&EAGQ6>s4s158kr8BtUk-MXoPSQ>y z=DJw-yA?fN-I#sg;HJ7bgXitPBcYFp6)SdXPlw;yPWTD=s8~MIy0rC9r|Yt~S=Q-~G=e7vE0ZQ`qxCesycV!zWG) z*a3h*y|HLMc_h&lNShYXjq$Fd`i_>P?DLc7Cp!<$euZd#^dQ&Rm20KZ)A6veQDN$v zA)2Tl<_i|)3m^pjMeT(AN76}+EpGj94j!mCf2kmdX=3|dQsMV42{qFarBX*AcS#1# z^B>p${cMbyFAy33s(n?zTPG(HfFc-V((E=uAn|2-@it$JUs_wxrjxP)OBz9Ss@3Ov zVduixKD9BgU1|?_5}a_V_(rF)2OK@w+v>E!<%GHdciHIjIiF(* z^Y8u!p*MqM6n2N3>gUkJTr{`=zbPwSM81WXkN^`T7@#$hu?E@x=ik&%Pk%gq<`5J1 zC%-A6g6~moF*{awedPU}*YlY}Q*ul0C;3XH=7WM}%hegY^~Y!9ZEcEym`fipRIg<( z8$lv{!NyaOM?zYD)xpgte+HAdr3$GJTwjV;8IUE4WM^k@AW#!2CxI3Bn4FlTf!sZx zAbi^SPRH?=riL@2e~Uj3M?#Xcb-ZPeeRaw4ob+$0l0Ie+2xB`x`=(Op{ z3b`&GA71FBh3w39 zu~IVGIWTq-!ocstIO2|m9sc$4pWW(6`k;8W8FDgnU+V4#G?q^gM4Q}CWgv)Lpg6Wy(%`I8wgaG^v1I473GMTb=SR=m57>Fy=GZ#U zH=5eVZrUUX@LfaP(Sm5{yp?la*{1G&>!8FMK8sB9xNT*IRMhQFzPXOz-TQ0JF^S{D z>(s6jqa*8JV1&7YnSq?nWB-=0z&-m(%|(a^?A=n~pW-_Ox*D{Qcr%nxFt>DBbiw{` z@1gq1)v)i}%@I=F>c_(e?X!JF9)Iilx{$rhlGkio^ZtW!Xf**5&hLQnC>;?Y!->eem)mNv zj%su`pM3D|$+?h&l(U_y^t3OTVt+hId2oBmXOHi_9ZC?BDPnI#<)+{+6a!_D2t!Hc zWt0d}OaI_z@`LZ{YSvnvlC4+hYNuW^wQ$)wQ1V~J;DrSqaxMihT;-QIUu1c5Rv7wX z>7q>~76^|0tKsS5DNQ0O=oCI1iOlK2n!;URWicbwzCOYRV=W3EZWT|N?`>SVkff`+ z(k$E)Q@N9$&~twBiKD~CKf%$^d9UjC$(Mj5VV0xU9k)wwds+xD=d-da+C7vEiatc`<#l$zrQjVVIOf0O?VJO8N{< z-)K~mYS8!LQm?Hf3hfqKs5|rT^V6M?NL`2~{bAdWvm}F-8fBcIhy5KLX?rBYCp`dq zArsv?b>7d@s(=fg`x$yRd$8+bX%VnEilp79VUE*cb|G*vE$<}ulue5u(s^y%7V;Z+ zG>c+-VEdn+cR%m)45O|6?VWfHZ;&exhhhMrjc(*|uW3EXm)i|JYm)o%%gg*x0PSp| z$L(7vF%e@y6d*FkHhAnf?)luwZ$36Rd9&)?c^b-fE}sv1m!%Sd`i64HXy9c-HsHrk z$Un{~Q7PA3z7Vp~`m~(dGv9{8J<|huD{wau(CBAxQPcV;_i+oK;GAV~>CLk-{#JZp zXS6A)=fL5<^hVIUmH8vM(==)!F|W(Az4Jx-b}2&DQqQzRPSk{}()Qh>$A33xGrob| zD1+z$AX*@R*2Tc?`fefvz%7;$6m4d)y>oWB8g}6FK(*M_u3}gKH9{l?$qDM~QBc1y zcp*q3p>eKdCOo!#x67gB%6SI=lY`#boNgP9h;j2)njfL=4^kF`s?vjtUI~fzTEa&L z*jcq95apB$C_Y^f@v{j)5H(@$PA+n3cpe(Onvr(5Rm+OCOvMl5HErdnZzs2#s3@{# zXo{hg{dsBb-|y}IjwADyNj(lCPX;x;lP0Ux!v&>`VUC}Nbck@1Y3Rq@QPb0-S7+%aeYO2>q+n~`Qs38?8|yxRw}`Xy5hvg zwyTux)EoaOo+yfxvl85_LKiSys)1upm!3&)oc8eB@t7Lt0}MrIL$;3|wfmO7_!Nr{q2rTon>-gu1d{h9+QFD5RITD6XYe)W_5ONFLT8R%s}%Q;=W@cX>Oy{2O~j%2xRYzbZ`53>9lAjSrh#T{j}@l*xIbG>_cJy24{H=IO8JB zx-v0pMphT24V()UFUzFXJ!NKV4jM@L(eAT84{WT)&!pP;6pYLRVE;89Sy>M7N@4*n zYeSap=>B?b+vB~PXI&qCb-vO>xH|%w$}RV7rMLIEc5Q@i-*iwYiLV(eAabpd^7v+5e zDQa>1 zEK5_svYYoD)tec{`Us#^}E(?R|x4@PW~rbfGMI6x2}nfauv>D3e8 zzQ=ZcW3VhmKDgjQq8BX#3mPwO>$RL&39NSp#hJYg0lXnGb8!IsNpw*0oXA0eE&iR0W7611^cAP1nq#6+7O zk?19D`7!_LR(tST3T2 z)We!Sy-JKRt;i}#)^{>sHPWVPHCQz)YkTgr2>4+7vZqJ|$Ma|BX8{gD?kpw))iE`Z zX<|#JtgYZ$hmJo^;(PVL8){G(m3W8<&+8F*Nbl-*;F#5g0m>3XMCvlE#EHvw$1B5& zDVw}fc!odW++agMG%>K#j(ax|7tcGSld5yLtlJcJG!i%TY9EW#hwtbus@;RZd~~S% z5t(j=qPda@5%Kxpv&9v=kX3u_`~`J&>{I#ZeI2X}1j@scfw$%Z9G;wwi~A;3p~uM; zgnk$gPDwgt9#9J4Rh9ZYST3?}g$_q}Ft*KXhCG+PKc{N18ONOY(@PI8K&9FaKnA*wIN%+wfY#Em&S0@2!t*HW?K2W z6|oUf-C{q*hc_io)<121U-tu>chYe(B2vVph(UenGWAT_f4X#^pHuRA+#Bvnf5WWd z!W|0|siUBUv5ZCci;q~@+M%-9{YZmE60GJs9BA|EozIPgYy4@o8 zT=DDA9BN4t9Yc0eIXWIBs8Zp@$jx0-i7a0-M{IpRT>J8@>6QS3fMYZELVWtrDKB&> z;8lHn8{uiuh~SS?6gf|3j`%662&hM)VcTTI8$4`&Q06L| zC>+&0=T&Mg*)#Z%Q@^Fh={#xj7ytR#E++O;mzn^Vo1ctGlEUxEOQRm-InR^9roa3B zO&kHM7dC<)qBJO}*vk}iqPGJagBfDg>%J4<1G0L<8l~?GjPU>|&=T=1Ziy55=gvEQ zSD9Tq4j!#E-uxD2tw0zXtq*t7^5f-f=3U9jpxRr*CziwI5dQCNA=x+?9*aD)VsZvS zOe}9x%tT+b)Nf3i0@2GK>|M6~Vwksp1$PtEzaze|pn>Z=xBzP4_m1o9;huU;7OcKu31HB$JWABuYBTwc1I8^|LqQgSqCti3|L4qUIv( z(TW!@GSbV7notZFdyU_e$IvpliNqF{Hokef^7^CJfiYw6>#@66D$PyYYf8p{1=t7e z=>7=#2T}YxZU`-h6FjU%#pSy7`kv-qj7qmmsQSty?Qp!gC*JdifP*6$QlNy3cN2Cq zIfoVn@#*rUzxZaKf;b(YoE)ojIDt~KE7yYtpx@-U@WXVq3*w|*S`9WfbR zg`}yzL5g~1R>nv+m|%#Cak`>jL}E`6AYI0KxQF0#E9=M#M7L9z!GAI_dA_#yz*rmw z5NHNvq6FmRV9|(X&4$dG;hlq54yXH#)2;WP-oKR>XD!|PUPA=s z&mBv2QTX56hA+2jzPf372s>YNbUm57x_`FahFE4|J{d+rxR!zgeEB7$>>da&Y_^<1S$PYD(Pliq!|Or`mgG0xWz8Y z<4Vb}s#KHHT*}XL?>XaVc|P-cyX^DTAnOn~k z+dD!S%PDp2;OH7^`Bs{<(}*5`lW|2Hy#RwiSlmTtwttQtp3V030CK2Ba5S_LG!bM$ zYOs%p#;>k!{W#v<*Ene9xZ;^SVU@reHLOFGB7q9DXj)?Dz9Wwt9wVf$TwWZX7D;VU zQBhhR6I{X1BwJcs?v&5fI(!Q{ZG6!B=Awxlt9<7bHjxRmw}u7{7f1(8dh6LNWgk}1 zmOuM9olN$(0F{+^Q6CxA=tHT|X0<+xfi0%twc-oQw!Y~smQCKaphZ$rpN*2B3@0J& z9h&YFN#r|oLdU;p)veG&uAXXarv_OQPFt-+F~Or~sRd*>%)IvAgoNk~Qv*}tH8j3T z#OKFn3B|86GQTA~%Ys`TKH8^TePwq#aiGq{)ptd6a?UVhQz?(}&D3QlcZdxsz@?d@ z5DYVUdDW#wTCJ(6N$q-teb4CA(BITwyUf4?fqCM4)Fh}5Yyp5n@MT5UOtcK@zpoEF z9P4U~nSufBFi<2E*=d&^;rdFYLDk^Nlf{M<^^Vnlk2p)8avEDDJgd^kjBnN>>3IoS zZ`$oVp0H`4ug2o^DU3UyF|$D#M93&-n@7*t=H~g{{@EvW74w^A`Q=_SQ~vU{i~&q! z!GH<@js}~N*Ofk9)zoLc@|W9Y^ZVJ~hUu$u|Ay*#b*;-S*pOEc69^QaIJM+Z%?KW2 zM#1Bhw9-RjS6<)eD>(TzGFB73X(0nmh0v|EGbeqN-TqxOKYTM;y}8XQix$^L!=tZ_ zl)4-ZNJ?@_kJgPozT>+bll$q~kTZv;6l%yCV*9GJLP0B|w!~95c}x26@79xzaUb!% zE4FW}Z}RBxGH)=~m&hcVLQHGe8>*@09xl29Y<8?)eWl1jSx?it2==n|?2oF|p#g zHfjnf#VSPIq-e_yxL29b-OJvLd6a1q%(r0tkW({FDz`z*Kfg#G<>ta@cTG)6>3hf3 zAy>}?AF@Zy-W&rhKo%GgQ(jmBh7{EF|OG0&TVT>Svfo%?7710>ps-L{$yul z=R#95$8VeA58NJt4KL%Z#9=!aBHY%cSpHCx10;}%VC6!LnQ+_&f)KlG>y%xOctDg!*2!TK%cI>;qPY=t~&zB}NTIK02 zmdFqX5mwS=sWe=(zvEN6;)(>8D{j*QPIj^nf+yWAqwOt4e`qj$eIq2{br-!EvDZYCj ze!b(k=@N3=_cOS-hf_!P3b%W2E2${LKShP+sPJ?_#gjp0v(t;Y6gKeLAh9Z22P2D+ zfZ_@_XCH7xG`!hSpf@-Q8;V=cSxnPlW100A|sd)B4?(fdo>t zw+?(4B z8f)Ix5fb%j^ZU9UwVuL117XN}ah+Dmm;!T=%gtDR_$Y8~`L#u1p>8$TRToonWdIvj z5K_nvZKnrMNkv3t*7-kfwW31{x|{w-$JpWm^{Frctp*LKU`=?M*mk`wWP9WWAcpkcYm5d~D2g+louKb0FD7DHU5KGp=tWWzG0h~hsHmK6dUzDWsBzLI z;}L2$sg{#RONtX*VC)sl_UhwmTjB}eP(R+D0PABfU%pa;vV-rwF`ciwj0~rP6hosi zad+#jmbZSq-}yNU8tRI~3LZdhyvY^i`UpLW!T-WA@zoTc$IxI=$|lny;Hfb-EySi& zo1W}u8P7%y_I4uwwY+# zSea@u5$CpMTduy+FS;z|>La!Sz=h}a2hnT2Rgz{&-1Nv#t>0t&GyA(Wp!WP%!#tPs zg-RrCbTfM8CkWtD6JB>2qzRC8l#a<22)mof{{hX z&7H<2m21tW7n8Sst~s{bDGRW}J;E`jc7pnuNP0$kvvRD)PB^AoR4o>$6Hnr#S`PQx z_Wa@YHZ&C|@|c)+0lnapE@HCjEWWxEBb0m3gif^8>(+IZ51$@9o|CP)o5(b5(Yq{r zbJ&n@2zk$$b+%&0^^x*^(8A4;q6wxf4tKo#`icYKQ7G^ z*p12S(srU16NOoO_N)pA?S45urHPW4Bg$m=sY$-WRI^1l+?h!gGmUk4G8Goo!Y^@a zxkwmpIhZCulmzvMyT9C#iOK<{0v33`Mdkf1X|Y(Z+VSqV#6R*>SIa?@rA=Hkjok!= za;hoB5*rW&;c2N;-dGuE!j*9Ay{HgfoF0M~QD963-OZmIg{Ga-8903PE!wPNDsu<> z1^9WF^1pfM-LZghW2yX^8H9)4lv=|y?0oCObcxEz-lw^sb9-l!w!-B;ojm<+tZ3;_ zEG092JCI&}49LLXepkikQ>u$ix+zm4?{|0I!rVjt%Ie=?0( zytl(}CF(t3R zK~>W*z?pbKu3io2BL?9(73IAAyg=S8u@^aMYgvEIOZD%$-J_@9t)qM-DdIT6F2g!E z?!}TTH|N^2?a7Y2oYPL?ESZ16NLD^!*0;b?ky2yR!N|)WpQ=>vPYg#n%tl|fHG@o9Vg#xVdcO6eJv2bnCFG@Xcw{$T#9Wh>Edx&WLfq_!2) z_GrmUS9f>3@@};3N9Ut-^9=36^uOk0Ed+wE-w=J77G_mlQK5)r@X-6Xn9VRvTS#*mQ5iWPX!H|cS6IrczxmRt!O1%{_nzI0o5{*5jzQ#R z()8|xOLx4Wn7LkOnt<=q__&<795Z+-5Zir+xBv88fR~xIbGp2e07FNG;Tw8Ndo>YL zzu+BvlXSW?`Ft++Ro87M6jjO42LP0mI2m1>^b;@59T6O6?Psr5yfo>;OEyvDuLKj8AP)+uY_3eBORC4!kb)Zf&lOA3Xe^H#`;IqI~sxxu|wSM58BA zKvS9F`|@7s;Ek;T);&z<2w9zYC^8&?Xm~lVi3dx?4pdhZqV%zu5H>Jbz>gM_ z*<(X?dn9UA-vWPRQZq2cuG`bqHd}N%=M()xr3?LwR52841bov_(~F=Oibq=WKL5S7 zMVI4kPd!W$U6a?(l_N74{WzkA&`lrLD5d+xoUQ5U-oe(aO}&d)K9#?=f$@#sF*SFn zKCJ2p+ua}YAZ?9irzc|OyJJv7y_VQ|6E$Q(xTXZA5IS~)%UJxGkh}SZH#x39ud5tU zm7blbAOFrKUpYLGYx|5_notq|#0xu7IaM@GKk??tvA?KU{J(7iIlY2ZavjM?SoBUlALC`*pBNz4CiFQEF!>#4z( z#5be0nx{qqaxRSxW#@akTTd2~_|G1kubzaRU%jx!yOs1?Mj^QW<%MUNk)`_jIt?_H zK=46Uq=*Fv@DWS3cC#LYY{yslxxc09e%SH1A9=&AhS|B-{_-thO?@o8gD5_5IK~j} z^Bg@g#p8+@Yw?^0-<$i^dJy>N_rKTe`zyk6{J(b_SG}u1_xix};+=XbVhVmPv>F#n zpaTMoY6U?a0AI0i6Df`kkuNH83;9nw3`|l))@+aqGP)m2>kJ zqlSJiXvB!$0-6^oAsb8KCXYii-m(UU9d)`cE;cU@Nc*M>@45U&aWqEvKidfIt#PV=- z~KU)A0wa>tQy?Fp4z&fogY`}=Ezw!yCW%zWbrNr<{grMNqpCr zPs!R=KgoD-c5pr(KxIXgwuEP~A2CAK4 z1+zGL#VzCYQ4=23^|fl}ca%@QIV8O(gy?$#A*fErPPNMB@PETGjoxC1<-1|$%N;-X z1K7tY#yFxd`~MWMojSt*DdoGOnrfo91wu(c2qp9qAR@g7!i)5l1f_%`ARVL#CQ&lO*|~=JFIGagy?)g$Kj8E z^yQ@oovvJ-j+XrJO{>{F`R5ZfBeDAXk23O*iSZ8^s?)hwlrcJ`a0L=)$An9dmdlVv zX^e*)CdheV3F9mZ=O>+oCX5KP6QbOn)0z%?N%mFS;P%6=vTJrHZ zs(s!g#09=k;)oKhw?{>_W()n7k^ak#*Tg?+!B_7?U7wii_1>WmevL6h36OH8tdf&s zKi&|&RqltW!{3r)yxE#Dh%*vgSzYBD6Hq{tZ_<%&j*vjgl%g@1F;i_4p|2DTi;aE$ z71P3SARc-KbYlZK@?wmPqDg42^}wC_84EFRv!>HVDanKoMRcOC{_yQz zOA!ev#O;%RSAS5CyjcI{;eQJ*`nrs@#p-5j^mMF-jYPAE@k|*K$I6ekucu6i9jPtZ z<*Q@Wug#0UK^}p)O~Q?=p=oPAXx2P+h&JlE@#_^I53fF}digh>r7w3!uWbsOgxsLh zAeO3OD+@U`X+tr_mo+z@CYl3x*}|?j0#ZHxt;kQIp`@dVsuY6Ptg~{6!)s7C=?sP` z<}@J?22W)6=6EmB=>jAfQz`Bwi@_2)mqt9?gMzq{xNpo{`&jADdJID z-^Kf|(@XKOnHk$VT+NSKi*TIHk3#r$&q1vpXWWaovoIC9`F-p$>x8dC_n-Hrf6J^=B+tjSxDuewomxca|;~_6C>Jwp~M34^O@Y+w`xh zoYbA*CkXbQ-h*j_;3O6#4T@VE6Ql4m%1Xzp_DH;DR#)jeis9VQ^ol~Xm0G1idzuqn z2x2Ng=Y?bFWK(4rM(4YCmW%T*u5G@Yd<)&z!Js!_<$IO2uhgRjTJ@f8++7sWae;on$E?zJ~q3z0dBK zT+OV85H6){-nzGaben&)Eans){4yNyv$h5qgG^uFlxS|kCc?P2A1?Sm+3Rxke}0f} z`7$s?D+7_L9zLbgGg{!a?W|QmAu{(qiFNPoG=7wmX2%)U!I-Eg z6BlxOGS}X~l93xOMj1;5r*?M4eX;iJM0DePEOt5Qi}-(57aqRGbBl~c{I)$Mhz1SQ z?Nr&^V6b`dv&_f&p*nda+>9lXyn{kcBJ3=Rv=fd}6W2{1oV4EmF~R#sg+ZyiDcMqY zq*(PsZnzodb2JcDgQR5Qhrx`o+Q>vqQ-Hret1|5(H`cOciXXM);FJ{77Np#W+lHt9 zvdV*q@mu;di zz17$s_>%4BMya3wYw+iNAYSA<*xtc`5}L5#oc?xKpM$&Yu5j%#e#`uB|M?^{n<%8v z(M%mXQ_9?dr@gb#>|_wSoqn#@e>{9}O`yoF;wufu1^G>~O{gw@6?!nUHLYst;4l;o z;RZwFpco`&B)i+$`A#D(C^3GHGtQI3*6Cgk-Xq*=APy1n#e%jaBRVG80ywbme}WcL z@mjX{*_pf2@gWb&v%7;JYhj94OehgOwFH=lBP%F-PMvH|*Y{$mV{}duhXCj~CZ>#% zA%(a%qXm!zC0nZsCQAczQ>JI)HAh?i`!9YArdijSE^#~B#nJOjCi+n5my*lmx$=sJ zop$P7|1vqT6YqvU$-GImoy(e36R*JvbSZ&~8>y#*MC*`s(G^1lXtD;I?rk_KAJ5ok z*&@+2#n?u+xb*hP7~_aUC2P7iyXDh}c!3W_uZj~yf^DR(PUj{X5B4-DJm>EEl{166 zrNsu7fd=@@Oa6gs^SSk{kx(?qj(*m1YERB4qe`5g@ z&&U>b7nrZT(qdR4jt94Gli#LN9N1-MF^|?|S=%*{ zr$JLSSU59uEt{;%b|lZ9?QeeTC!R|nHCW6mq5&;TyZY+8v>D8Rs#yd$Qq!L>${Thz z#rF43DLF7f)A*x5%?zg=EZ`HrL8&4{lRD5uzmr-_U<+^;tP}Y9_Yb=l=hsS`!_8*6 z9EdKvhP|1Gddpoj51Cd>=f!)kcD2*Wy|9Zk)nnCOg*S@T;PiaP!9u!m5sX1or{Ih# ztS%lq{Pp;Y?MVS_?gg@EM8U&$gQoFNlBUp2IOU%YmEvti1pK~G!NhEq%>;h+#rnmU zlkar^F@Zs>{oJIg;0nsyYII29;(WI1%j4baRW{p|VvK03IVvBx9)bsEloZFr%+cr* z?s2dqW4y*SE{9C`{!Lq}Fg0gE9Fj|U%lUnm=E&wxDbr+M;vjse|9hh9vvm@BA;(a} z2M-+7^jh zP!L1Y0jHbNgJ)vU01)$b%8ueMRgRAps7xUVK|%c-am!|B;QyC(nkOe~Q#ZOR!-^gE z*W;KjrM$_6k^f*sYlYy?O*!Z}CG7FQyc^U@$p`zwX=p+d-?>-DYF0foxcBzNcH`{8 zrsQ4l-MAcdjSIaB;HbJ%Do`&L*7-I&06N6|IbZN4>-bTDWY#N(d`k~vwkvPHb*4K* zTY@&Tsli+K#I`jG!G0p1_QBz4KaoJY`tNk6j{8&2*m@EDcJ^7EVrMGS1fIK)^F_lAdRyY$4J#1UzU3hYRZs_T6 z!v?kA->u0T!QmDrO;S3nk(p+ptQ;Lm4N_;n?RveFd@w9rG~5;Oj#bz~Gf&^Fj8+3QPJLC!tcZqW4NjfaWlPC`uYvqfgfrK0feAE} zb8(m1z7US8Ti7=aH1QU``A(X34FbJ2AR63zhj>+TC+O_w)dS<9G zsl;9X9Q(IRHV%+-ua3oq;P;QVg1qtI9)^xc$dz0Ud;FJ=_$`1)s9fxp88*6jn%gyk zrbAQYbZh$k1!~1hzILuzU=BXnuHW0EwM5t#zRcp*Yl97t{)=$0VKQH&#UOt^gd@v= ze%?jGv-D^r%zSMiI#~OY}8g&{vLREE9Mv4HG>vHX%)sSN=r{Lroc@4i5 zoBBsG*nFq^P3Gc@|7j!mCQIw1>VTeqQng>TXW;BD42;EdizI_jl~ zD#3As8i>xT$UCcNV|>L=a{J-L7Pjl%%HBdt{pXYJihAVMG0xq%y2S_1JtvV7$knfcYH2 z{Pvz^eVliCA%r$XyOSk2%_d*v%J*5c0o-&T8c{zOSe@w+)4;+Xlyj!6rluCQU$d?+ zb=m&JZn36i((}`BAm0R!IgEzIoW)a#Sr01!($NrS3r-IyZxWy%UmEeJ9`5yQ5ulI8 z-9!@TsiCsm!Vf(sXfP3$xT(UYM^6(Mb|k|53P&EcA;oC`|1WF!9M3H1!_|z^f+_{=IN__T#j|D6@UI$-1leC<`FGl z-}x^cP`xqbNQVSGxhR7f#Q)p??yQY8pSo;ipehM@bJBnP>50v%1l!)br|p!w&@4o9 zm!>UBAU?gQ!toeC?P!7+A_y;n9ZS5_nc|X3!9)$M6RA~{fpZp|0H>NZ<*+_MG3E!) z`jitl6*4ujHkHj%gHR+RRW!nO>&;~1=N)O!C!fo7Q!Lw5Yjo~vIe%SmiiE&3ZI<|b z#eMa*Bnj&5i#;|Py?ax7-FtqJcdVIGEA7V~CFgEFTFkv!;1G=Q$Ecwi7C?;d4OS}4 z_-ec>Z|v&x$iVBQ)s;p5&D}>vBH5C{8ZQ2y(f)MqU6JMFa3M?jRPcpoixAtKXVi^C z!QldRmy(+_KGo1qTXYn_`J7<6XL%5}`h`>)C8NJx%gyhf1_c=azoSe!fXHEEV9bV@ z!D}rIQMtg=#D>(6pF#Rj`eyr^Z?K?-HZ3pRcI5#50R<0!oPcKw;T<04Ns(dUq2ki| z=7+)phi>z0DZaits=wDdkdiS{9XvuA33)lO^jls^5OBj-<4r2!lCKj4bB}9Iz1&>G%Xni{+X(fd} zP!oMtBwzTmlfCWbwDsu2*;IjUWI9P6MSR*Zv4)iFGVc&)Q>vbxWW6cC);X?2FFOv6 zs_P&SNVR5~t@fVWHe1W%n=2ukmq$B>y$6G|?D+yrOhC%2+fm_UAgbF!&{B$r)e9vd z@nI(?C8w8}-x}u%Tb4fmo-^87>9U!aw@Pw|9dvfN-;wpt? zhqscNg-OMuBbHXOV=eN3J#Oho*Lg!&9PhQ>kO-c@@4wO*tDm0sx%le(Z{UI8;v|y0 zSHBKcZK6D=s`a$_oqG_Pfl($S%{qSdLYa?r0&loF`108JAb@UyHBbQLWV~ag%Qwlm z&E6Ii;Mu~;Ah;@Q}@aM~gHg)DN@P^tx>Rv8FOrs1&a z>|(sRHP)CMc6m0|FnMg(=d;nO=r4rd7$`S{v%uMy7dSwcRef=J#f3M&HE1svJWcD4 zhvX}J`o?u6d96fHL5qZStkUgux`r)cib571l<6QHEmmH*DVJQ0Ur3ITQ^*ZR(DOtp zV*t0Si_D$b>Gt8Qd?Ccnu;065p{KW313M3PJB5cDX1?nOS3i6G0a2c$h36sA_%a+S zv?<34OdurvS>GB>Gu#PvKV5b$2_+U4=*p6zP;@FD$?+z*$X0rcL^xN4DP z7ItUBT6s3+14seXJGHARQYbjK;;WkSPohDdEsCz*n6&eyP*DPS=petMztgF3d_F`Q zX@;}eecCnbTOwT=IGxCSY(OGea=o&OJpAI`mn?SqtzVv9>=*uJ1xxBfCv9M4vH|l{ zmfTWPJ|8J6#=X&KvJa5NalnZvm2A&^!`5ZznHupls^oh7GNM%WLyV|E@O=p$0HyQ= z00tOK_cC}H%)yyS(M~JZ-bJz6xvxf?TYYid*?)HU`pMCfk6*B)U7lZ|U}XC|6$~du zhO*tTVZOTj8^Ra3rcx3}7<5&;Ufbem-7+FC7~wUOR+pJchaytw$;c=%yVeF-l+`Ji(xmY@IokdZrkwGAMi zDtlvGp~_)E-mQE_Hmox3tDV)(|d|IWNGzMZhQSo`h%qgv+Z3NNGKX z=kI81%LcI8Grz(S#Wiv_MzG97GI#B(!KDDsnezRivn_^0rBPbN$zy}peli@q(&04l{8}S)mp6}Mo_hD6`{4;QfgLh5_?uCic-6%Dy>bd7NxD( zQew7hRgIc&zQ6bV|2>~iJc%ctoO7OYpZmV<>$(ro*hrTN!VRIJp<%-5VNI#mf&X4$ z0QE0QMR|~VVer@I%WIaSLj5PqPut4R+}+RXE{!o(2dVY&F5d6KLk;^@ z5$a9W|88nL@^gFe@PBvBA3X5#MQZ5sdu#e?(OIP;64ovIOn5? zsA%2iNoi^6NpU^g7svGT`p2(yZwUwsm^RB%k>-oq(jwZKE7!6dmO;r_w4nQnQGlX(lQO+5@ua4O#pDf`Wm72n_Q7UZ5heff0<_AQfzk#%5hCn;%4FmE8Hx zHIyXHPU@Hq{8q=rW}Gx3RTL+J^OAUbMCK^#}e zXfMu-)FE+SR$D0tM(c8Cz-^sSd>N_PR8NHRvUUcu2Kb&%5O>5$UOETWm)eL zZF2|&9-BNNu&AfGl{psqX!nC3C!UE;ffFO6IR)i}sPM$na#tTNlcX8CcR|3|COQg$ zZk;AYgkg0$cbTSGW%Ku3U?yZT+ix;u+m>n|E>mDN13Nq-S2KV{xf{zcL zEY|!8PH>3IR}3`#I3R4e-lCY>gI>h4#jg~8@CXTTEe?8~RVW%Buvkswe zu5R)n?s2McXWz!ncpuN?hv@3AzgTWL|I+dPaNo8cJvxJ0zm7C^^zxI1xocm9ya;-Q z9zy%XcMISGb>Id2n1qb8?UjwT#l45C0UdkCEf?|{?UABVbOf8rL6RQ(4lzjh~} z1tI!MP+AayunN%wbo-(;DAsUWTzEu&Z_GkO^4XvL(=En?iygZo0dc*ZD!>m&BvkLR zuMuNjzzXn*|MFbN`Pruf&qLb6%Maf*a7rmkW-pHTbnKsY{L4S5 z+>$ywYMMZ6CeqaeXXh0bjz*eduRqYG)G9s z?nb~|P+XHWsotzx6_Z263dA@bNv?zXcKRZ}8-fsA|g>}k&e!f9l?JYvD z?Z>@e+h3|!YUfT?YFpP0?%jC61XI3p1rA97yhCa(yi2dk!V;`AQq#Aif#@_KP~jrb z$gi$tcON%{-}t^l>1X+)oBdZ(K5Y#u(QsKsfx2US?=wCB(YD)jpl(&8X!m{;XO*mY z<^8wh4~0`7{bok3z2CHkt!|bs{`gSZ^d4sOsy|{PBN7k3V!&5+*N)DPpHFOFom8s6y&h4B|2w)N5@o4s!_3QKb9!{NwjZZ{T`kyg#&&(S zssG|)uFt|Iw~ChXo5ohnPGf8W%ARpnL(q~RvFjaE<-Zb$z>4Jy|hX9WO7+0z=J-^Vzke(mL&j<>h|4YVYr>6)Gv(%4X2q7yvs3EL{3;KN z!g;Ka(Mr-o(*n>G1sT=|J(?(EXZD@Jy$e6izdf&ZEtpeBYIr^}PJRNd%yeJxP9e zw9^n6Pa=_sB8S@_YFN};j67$M#FFm$?%ProGNzb71&*1Kv$DyjO$WJyn5|j7sS|~7 z$EtWpNl@Ni(}=bqtLza&v`U#9FYDd*!nZAlv*IR$+cktt23Ex}LIef~xAKs%;W0Sw7ruIM)K&D^01<>OtSkBzofFwT zIj}49(U}5D=i~hfIlyid-fljbUs{pn(S!=E*vYyY?XWqS0u3>Rzv{%E9F6Tg5A$zm zO6W4xYtlo#yMwfpaLJXGNSt$OKA7g{57<&>vk(ra8_&@Wr;Vu{kPnPNdyzQg(bpI< z(54Q*A3yQ_Gp&(C{~Z$^t`P6rooC@9R7g{gM0b*GIDYf{{`)Xj6B1WyIi)vVTJkr# z2Md>v@saqJfN$RI$A)*~`6exi{F=%pp`W zAtXDm<6}gU?|1aE0nstYi7eOmT*yASesZGm?VUNN@%tgPWpV7%fIH<)SAt1=amI2_ z)#P!HmhuZZcl_s!G{f)#M;T5=dIKg2MH$XK5tCx9ekLccs=xRDYi{M26KE54Y#LX@ z`W{L8tE(uT-FXfMSl1SbBUWRSUko|-#?sQ#ssu8qw>;h`hIfj=<-l3vD9Y(HIFjIkxRX=6<=gVjU;5G&A0-=~#m{hD_$Y2* zL?)YRpyR1Vr6DVCVmxGuOpo-7ZPU8m`f&ZIt<)tPAfjYiGMaB{43%VOO%U;aFyr&> z{G@MZqeZJ1-ViAz1j!iix|?8@?j27jE1haK1A2o#1(7R5Pw<2(7@56tJU@aFU0?#Sq2 zOD!5hof<_;QpSzlV@h_-f3~+jz-E~vM@q=b_>osm zJ&r<}^uY_Tx%2s5mg{YA?SEsq5S{Z*YY$=O#<|$Sc>?CUj_5GXAHS7QrQ5W%VQEI- zl{L{Oid|DnlPp-7-~RZ4kw6n=j;oY|2`*K!uw0+!XDR%`tRf0y-jBczNG(zVD=@St%GVz-h0+{jaIDJ~~*Nn7jX7(-Dp1XojZT z?fW=*u`Y|tRuEE#hFC0(BIu5*#E)A zF>HvaD$(jv&kJ$4l103+mE<7&NWnHQ3Lj0Q{^Wes!LCjA_wQ=1%i%(AB56D@f!#B1 z=}y|O^Gh1($NTr9T0#!CzCR*i4S~2ro1C3QHI|znMKO2yss_4pG31)4o~i&AT_FH! zex`O3c_@tL3U{2jjeC}xEeTKFx=kS!y8@|`}UzM<*i<^4a zE^CUiQbtGPlV?ife)F;7tm3e#DbEaeU*$1tW!-f{_U?x+4K@pNAMXK6 zi@SZk;1WF;C$ImLCh6<3?*b57( zfea!xTC_VuYWSF!9uDkT{&atHR-Hz3YhfMNol6s3jRSZYR923AGzRSMA8iMY(c8k( zX)H{$qH&Dq1+JVOCtNuVE|8fH2E&o4?{HpQ8`8CNbXUIyY9jeqKi#z#_N8aI0|hgJ z5ve;Ae`+$q*V|8Ha#^p zm1Y`%C=j=ei8s`DdTH)>DYeogOwnH5daDbvg(=4b>XS&)Tu{PfUmlLuNrqE~XZB?2 z%Y|E;5?}l?5*Odg-2B3B{21pEj{f4+AFr2L(z_m~tJ}1H)DsoqXNDzW7;b)Kzlo+8 z;AkRH+G+ywZ@YEOy$JEIBiI>W>n}esXJ@lmJKw$YqA)x%(n$cyNWZIxY?WI1E&3Lq zffU1Wg#BCm$bY+Kl07?Dj`T=hzWt7jRl{06_Cs={aH9lZJR#8LZJ>=NT#QE$RH|Rx=p!N8=)3TtCnII6#u5`RofT9aD4}Lj zZoHFAk}o@~jD)=JSbA{1J^0a9;7~EcvjHz{Z1R*`nOiK654;+lre^ZZhlgKHtu@s3 zf{mwJlz#9s!X+n7#vly^f@Ki0p8^>*@GHnGVgQMx{f$>2kNc0q(bROTm^!OcZy{w#8iDJkxuX%?x}Nf=)!K)P6FL%WElf_QpBFsw-0?6 ziZt2*pKm#w50_1D&fj*bl>Q#PMTGmryTIh>aKQjQh?EI-SYa{tZpek?&CS`C;Lux1 zpGooMVz_V&@+}Hg@RX};3E_g%)6)w?TY3j-;!Q20c-l}Y_W~Z&usqo0rk=d^JJf5E$Y*tLTvoi|K`8&H0`HYODvh|h^pOu8$Sfpi${n86roTNSRzGqlHYU128h^PFP03jRsi-JJY(+@~If}H8?Z5Utp5|mHHDs!)|AW41{Zn zvL_%DA>?6*C90oyUAVe+sj0V@JNw4C4Nrp5E*xc4kI|49^0=GzI(&Jfg$n0wGJ{KV z%S-gS<a&@oO)=g%qE@9{YIB^qcK!)M-XWaRM_;4-7=OCMx@KHy8m3 zgpbdqJDN|o%V+MmnL8W|+)Mj>3mb2L9$X15nka>h}d2QH#y$n9k5C1Urt*mC`ugI!f6 zIz5nf=MAS`w*-Uje__jn^3FWtZ?W9K8+_RKgV|}GA}V>}`n8j*0ZwRakvvipZ00QX~-;dpBHt{R9bSa_LRUu+N`PEaVllR1L`4|LX3oe66WSl=I!G1uW^W$Op@59#MU zjh5Vbj09XR#ZJiv>KJO$DA;ZcVAp`!;6}l9LlVy)aJ=V*>g0V135!pO@t7huNX8IaIh6^ii8LbS z-0c$$;flgPpsolIB6NM6WV-LdG5B_Z&d$KnZ;i9}Y z-b5T08}0HqD@cdT3Q39`f2Qxqly+#s0?1#?pgfXyO=7vV1NbiC%8TofFZfzHSJ$(h^*H0MRvpw))E7PbsAl)cw1sv&cy zYamC9V zzH5{35WWg3#`bc1H7);|TNb})_tVP#mz0ErH{2Smj$For} z7oW-XI``hfVzFuhD3q8>cSO2@p@i};lWau^8_&hDu{qc0lY=;M6>Hbu6_55RsYyIj z3^gmatt^*Y;J|f@LLlZsd4K%Ps_B||`WIIZ*6s#@<#$RsVfH+}eSZ;rMwIiv+3N4Z znx*poPB7|CJcU8oq~SYiy#h{Jf{}t_pf^_%>x^(7*MwR4cxPvLD$U1n==S1Fpa_?@ zUU7U>RL`VArle7oT6aUAMNL09`+@x9!1XQwt4RyRa4`<29T890{K8AQ zH4#e;w4ss!fwDMBpU0!8FV+t>d${SnAhIwhG(+cqV2L@N-+u0V=_qP1c!PVqH969d z7B4bXeP_6?uC8F7NFdY@2)c%5CE>ZbEpM1jZQta-jJWg8Ztnc=?pr%13tSRc2EjCj z$|I(C8w|$6>$4=qARWfHY|EK?iT+aj`z#06nlG?1LP!Xoom?%)L)Je>9gxR$8wnHi<{ zM*nUa1FKzM8TaH0f#-}? z7%v2&ee~f}s8+Zwm%jaGjPKU^rN)(ffyc*gK?fREDaIf{5uqX^qV{8F6+4txR@9U* zpPa*l_*s}ae)4Ya-@*AmX{%Q%_P2ur+SG!p4j$}TESMy0UMfa`dyF`wop!9k(Q4@+ z=-AITSrhv5i#F!`gDP52lNJ6-RnFa>eHW4))pE@7;1&;w8hhwkj%@viI3TvH0@pY3Q?K0Dg#*t=&X!#)yTez`Dq$kXZU z9Bw4v&?kZXNN+UJdfuhGUZ3#RzSh>$Lh&W4Kt?YO=+-w0bL%#Qe@Z1kMZ2Vjw@+D1 zX9v8pyA=Fj|8#;^n85yv+)s=j{(Z&a*zmbP7+2oBM@7*{WzTw@K-I| zMa>1XKPbaFd;E7de{t;Ew25Rfj;SWMWdJNndtdu)pnJ{^0H<`JZ@BkE`PGG)dO$(IIBz46#ZHiXt{Xw>B)9i&m$f#vDa~Ps&aD-H8PIIGJ+^7 z??Yytp>U-KMi7W!>%!r=mnxaKk2YFPH|cJDwwl0=uPN+lI6^GEBR>bZPg82|5((m8Vz31 zV?F@wETVpBaw0`Rv2P>o0U={=dGse zr_p_p;vN? z0&fgeQKhFZKoYnZ;a#_+e!9JSY*6#riL23%6&EAGQ6>s4s158kr8BtUk-MXoPSQ>y z=DJw-yA?fN-I#sg;HJ7bgXitPBcYFp6)SdXPlw;yPWTD=s8~MIy0rC9r|Yt~S=Q-~G=e7vE0ZQ`qxCesycV!zWG) z*a3h*y|HLMc_h&lNShYXjq$Fd`i_>P?DLc7Cp!<$euZd#^dQ&Rm20KZ)A6veQDN$v zA)2Tl<_i|)3m^pjMeT(AN76}+EpGj94j!mCf2kmdX=3|dQsMV42{qFarBX*AcS#1# z^B>p${cMbyFAy33s(n?zTPG(HfFc-V((E=uAn|2-@it$JUs_wxrjxP)OBz9Ss@3Ov zVduixKD9BgU1|?_5}a_V_(rF)2OK@w+v>E!<%GHdciHIjIiF(* z^Y8u!p*MqM6n2N3>gUkJTr{`=zbPwSM81WXkN^`T7@#$hu?E@x=ik&%Pk%gq<`5J1 zC%-A6g6~moF*{awedPU}*YlY}Q*ul0C;3XH=7WM}%hegY^~Y!9ZEcEym`fipRIg<( z8$lv{!NyaOM?zYD)xpgte+HAdr3$GJTwjV;8IUE4WM^k@AW#!2CxI3Bn4FlTf!sZx zAbi^SPRH?=riL@2e~Uj3M?#Xcb-ZPeeRaw4ob+$0l0Ie+2xB`x`=(Op{ z3b`&GA71FBh3w39 zu~IVGIWTq-!ocstIO2|m9sc$4pWW(6`k;8W8FDgnU+V4#G?q^gM4Q}CWgv)Lpg6Wy(%`I8wgaG^v1I473GMTb=SR=m57>Fy=GZ#U zH=5eVZrUUX@LfaP(Sm5{yp?la*{1G&>!8FMK8sB9xNT*IRMhQFzPXOz-TQ0JF^S{D z>(s6jqa*8JV1&7YnSq?nWB-=0z&-m(%|(a^?A=n~pW-_Ox*D{Qcr%nxFt>DBbiw{` z@1gq1)v)i}%@I=F>c_(e?X!JF9)Iilx{$rhlGkio^ZtW!Xf**5&hLQnC>;?Y!->eem)mNv zj%su`pM3D|$+?h&l(U_y^t3OTVt+hId2oBmXOHi_9ZC?BDPnI#<)+{+6a!_D2t!Hc zWt0d}OaI_z@`LZ{YSvnvlC4+hYNuW^wQ$)wQ1V~J;DrSqaxMihT;-QIUu1c5Rv7wX z>7q>~76^|0tKsS5DNQ0O=oCI1iOlK2n!;URWicbwzCOYRV=W3EZWT|N?`>SVkff`+ z(k$E)Q@N9$&~twBiKD~CKf%$^d9UjC$(Mj5VV0xU9k)wwds+xD=d-da+C7vEiatc`<#l$zrQjVVIOf0O?VJO8N{< z-)K~mYS8!LQm?Hf3hfqKs5|rT^V6M?NL`2~{bAdWvm}F-8fBcIhy5KLX?rBYCp`dq zArsv?b>7d@s(=fg`x$yRd$8+bX%VnEilp79VUE*cb|G*vE$<}ulue5u(s^y%7V;Z+ zG>c+-VEdn+cR%m)45O|6?VWfHZ;&exhhhMrjc(*|uW3EXm)i|JYm)o%%gg*x0PSp| z$L(7vF%e@y6d*FkHhAnf?)luwZ$36Rd9&)?c^b-fE}sv1m!%Sd`i64HXy9c-HsHrk z$Un{~Q7PA3z7Vp~`m~(dGv9{8J<|huD{wau(CBAxQPcV;_i+oK;GAV~>CLk-{#JZp zXS6A)=fL5<^hVIUmH8vM(==)!F|W(Az4Jx-b}2&DQqQzRPSk{}()Qh>$A33xGrob| zD1+z$AX*@R*2Tc?`fefvz%7;$6m4d)y>oWB8g}6FK(*M_u3}gKH9{l?$qDM~QBc1y zcp*q3p>eKdCOo!#x67gB%6SI=lY`#boNgP9h;j2)njfL=4^kF`s?vjtUI~fzTEa&L z*jcq95apB$C_Y^f@v{j)5H(@$PA+n3cpe(Onvr(5Rm+OCOvMl5HErdnZzs2#s3@{# zXo{hg{dsBb-|y}IjwADyNj(lCPX;x;lP0Ux!v&>`VUC}Nbck@1Y3Rq@QPb0-S7+%aeYO2>q+n~`Qs38?8|yxRw}`Xy5hvg zwyTux)EoaOo+yfxvl85_LKiSys)1upm!3&)oc8eB@t7Lt0}MrIL$;3|wfmO7_!Nr{q2rTon>-gu1d{h9+QFD5RITD6XYe)W_5ONFLT8R%s}%Q;=W@cX>Oy{2O~j%2xRYzbZ`53>9lAjSrh#T{j}@l*xIbG>_cJy24{H=IO8JB zx-v0pMphT24V()UFUzFXJ!NKV4jM@L(eAT84{WT)&!pP;6pYLRVE;89Sy>M7N@4*n zYeSap=>B?b+vB~PXI&qCb-vO>xH|%w$}RV7rMLIEc5Q@i-*iwYiLV(eAabpd^7v+5e zDQa>1 zEK5_svYYoD)tec{`Us#^}E(?R|x4@PW~rbfGMI6x2}nfauv>D3e8 zzQ=ZcW3VhmKDgjQq8BX#3mPwO>$RL&39NSp#hJYg0lXnGb8!IsNpw*0oXA0eE&iR0W7611^cAP1nq#6+7O zk?19D`7!_LR(tST3T2 z)We!Sy-JKRt;i}#)^{>sHPWVPHCQz)YkTgr2>4+7vZqJ|$Ma|BX8{gD?kpw))iE`Z zX<|#JtgYZ$hmJo^;(PVL8){G(m3W8<&+8F*Nbl-*;F#5g0m>3XMCvlE#EHvw$1B5& zDVw}fc!odW++agMG%>K#j(ax|7tcGSld5yLtlJcJG!i%TY9EW#hwtbus@;RZd~~S% z5t(j=qPda@5%Kxpv&9v=kX3u_`~`J&>{I#ZeI2X}1j@scfw$%Z9G;wwi~A;3p~uM; zgnk$gPDwgt9#9J4Rh9ZYST3?}g$_q}Ft*KXhCG+PKc{N18ONOY(@PI8K&9FaKnA*wIN%+wfY#Em&S0@2!t*HW?K2W z6|oUf-C{q*hc_io)<121U-tu>chYe(B2vVph(UenGWAT_f4X#^pHuRA+#Bvnf5WWd z!W|0|siUBUv5ZCci;q~@+M%-9{YZmE60GJs9BA|EozIPgYy4@o8 zT=DDA9BN4t9Yc0eIXWIBs8Zp@$jx0-i7a0-M{IpRT>J8@>6QS3fMYZELVWtrDKB&> z;8lHn8{uiuh~SS?6gf|3j`%662&hM)VcTTI8$4`&Q06L| zC>+&0=T&Mg*)#Z%Q@^Fh={#xj7ytR#E++O;mzn^Vo1ctGlEUxEOQRm-InR^9roa3B zO&kHM7dC<)qBJO}*vk}iqPGJagBfDg>%J4<1G0L<8l~?GjPU>|&=T=1Ziy55=gvEQ zSD9Tq4j!#E-uxD2tw0zXtq*t7^5f-f=3U9jpxRr*CziwI5dQCNA=x+?9*aD)VsZvS zOe}9x%tT+b)Nf3i0@2GK>|M6~Vwksp1$PtEzaze|pn>Z=xBzP4_m1o9;huU;7OcKu31HB$JWABuYBTwc1I8^|LqQgSqCti3|L4qUIv( z(TW!@GSbV7notZFdyU_e$IvpliNqF{Hokef^7^CJfiYw6>#@66D$PyYYf8p{1=t7e z=>7=#2T}YxZU`-h6FjU%#pSy7`kv-qj7qmmsQSty?Qp!gC*JdifP*6$QlNy3cN2Cq zIfoVn@#*rUzxZaKf;b(YoE)ojIDt~KE7yYtpx@-U@WXVq3*w|*S`9WfbR zg`}yzL5g~1R>nv+m|%#Cak`>jL}E`6AYI0KxQF0#E9=M#M7L9z!GAI_dA_#yz*rmw z5NHNvq6FmRV9|(X&4$dG;hlq54yXH#)2;WP-oKR>XD!|PUPA=s z&mBv2QTX56hA+2jzPf372s>YNbUm57x_`FahFE4|J{d+rxR!zgeEB7$>>da&Y_^<1S$PYD(Pliq!|Or`mgG0xWz8Y z<4Vb}s#KHHT*}XL?>XaVc|P-cyX^DTAnOn~k z+dD!S%PDp2;OH7^`Bs{<(}*5`lW|2Hy#RwiSlmTtwttQtp3V030CK2Ba5S_LG!bM$ zYOs%p#;>k!{W#v<*Ene9xZ;^SVU@reHLOFGB7q9DXj)?Dz9Wwt9wVf$TwWZX7D;VU zQBhhR6I{X1BwJcs?v&5fI(!Q{ZG6!B=Awxlt9<7bHjxRmw}u7{7f1(8dh6LNWgk}1 zmOuM9olN$(0F{+^Q6CxA=tHT|X0<+xfi0%twc-oQw!Y~smQCKaphZ$rpN*2B3@0J& z9h&YFN#r|oLdU;p)veG&uAXXarv_OQPFt-+F~Or~sRd*>%)IvAgoNk~Qv*}tH8j3T z#OKFn3B|86GQTA~%Ys`TKH8^TePwq#aiGq{)ptd6a?UVhQz?(}&D3QlcZdxsz@?d@ z5DYVUdDW#wTCJ(6N$q-teb4CA(BITwyUf4?fqCM4)Fh}5Yyp5n@MT5UOtcK@zpoEF z9P4U~nSufBFi<2E*=d&^;rdFYLDk^Nlf{M<^^Vnlk2p)8avEDDJgd^kjBnN>>3IoS zZ`$oVp0H`4ug2o^DU3UyF|$D#M93&-n@7*t=H~g{{@EvW74w^A`Q=_SQ~vU{i~&q! z!GH<@js}~N*Ofk9)zoLc@|W9Y^ZVJ~hUu$u|Ay*#b*;-S*pOEc69^QaIJM+Z%?KW2 zM#1Bhw9-RjS6<)eD>(TzGFB73X(0nmh0v|EGbeqN-TqxOKYTM;y}8XQix$^L!=tZ_ zl)4-ZNJ?@_kJgPozT>+bll$q~kTZv;6l%yCV*9GJLP0B|w!~95c}x26@79xzaUb!% zE4FW}Z}RBxGH)=~m&hcVLQHGe8>*@09xl29Y<8?)eWl1jSx?it2==n|?2oF|p#g zHfjnf#VSPIq-e_yxL29b-OJvLd6a1q%(r0tkW({FDz`z*Kfg#G<>ta@cTG)6>3hf3 zAy>}?AF@Zy-W&rhKo%GgQ(jmBh7{EF|OG0&TVT>Svfo%?7710>ps-L{$yul z=R#95$8VeA58NJt4KL%Z#9=!aBHY%cSpHCx10;}%VC6!LnQ+_&f)KlG>y%xOctDg!*2!TK%cI>;qPY=t~&zB}NTIK02 zmdFqX5mwS=sWe=(zvEN6;)(>8D{j*QPIj^nf+yWAqwOt4e`qj$eIq2{br-!EvDZYCj ze!b(k=@N3=_cOS-hf_!P3b%W2E2${LKShP+sPJ?_#gjp0v(t;Y6gKeLAh9Z22P2D+ zfZ_@_XCH7xG`!hSpf@-Q8;V=cSxnPlW100A|sd)B4?(fdo>t zw+?(4B z8f)Ix5fb%j^ZU9UwVuL117XN}ah+Dmm;!T=%gtDR_$Y8~`L#u1p>8$TRToonWdIvj z5K_nvZKnrMNkv3t*7-kfwW31{x|{w-$JpWm^{Frctp*LKU`=?M*mk`wWP9WWAcpkcYm5d~D2g+louKb0FD7DHU5KGp=tWWzG0h~hsHmK6dUzDWsBzLI z;}L2$sg{#RONtX*VC)sl_UhwmTjB}eP(R+D0PABfU%pa;vV-rwF`ciwj0~rP6hosi zad+#jmbZSq-}yNU8tRI~3LZdhyvY^i`UpLW!T-WA@zoTc$IxI=$|lny;Hfb-EySi& zo1W}u8P7%y_I4uwwY+# zSea@u5$CpMTduy+FS;z|>La!Sz=h}a2hnT2Rgz{&-1Nv#t>0t&GyA(Wp!WP%!#tPs zg-RrCbTfM8CkWtD6JB>2qzRC8l#a<22)mof{{hX z&7H<2m21tW7n8Sst~s{bDGRW}J;E`jc7pnuNP0$kvvRD)PB^AoR4o>$6Hnr#S`PQx z_Wa@YHZ&C|@|c)+0lnapE@HCjEWWxEBb0m3gif^8>(+IZ51$@9o|CP)o5(b5(Yq{r zbJ&n@2zk$$b+%&0^^x*^(8A4;q6wxf4tKo#`icYKQ7G^ z*p12S(srU16NOoO_N)pA?S45urHPW4Bg$m=sY$-WRI^1l+?h!gGmUk4G8Goo!Y^@a zxkwmpIhZCulmzvMyT9C#iOK<{0v33`Mdkf1X|Y(Z+VSqV#6R*>SIa?@rA=Hkjok!= za;hoB5*rW&;c2N;-dGuE!j*9Ay{HgfoF0M~QD963-OZmIg{Ga-8903PE!wPNDsu<> z1^9WF^1pfM-LZghW2yX^8H9)4lv=|y?0oCObcxEz-lw^sb9-l!w!-B;ojm<+tZ3;_ zEG092JCI&}49LLXepkikQ>u$ix+zm4?{|0I!rVjt%Ie=?0( zytl(}CF(t3R zK~>W*z?pbKu3io2BL?9(73IAAyg=S8u@^aMYgvEIOZD%$-J_@9t)qM-DdIT6F2g!E z?!}TTH|N^2?a7Y2oYPL?ESZ16NLD^!*0;b?ky2yR!N|)WpQ=>vPYg#n%tl|fHG@o9Vg#xVdcO6eJv2bnCFG@Xcw{$T#9Wh>Edx&WLfq_!2) z_GrmUS9f>3@@};3N9Ut-^9=36^uOk0Ed+wE-w=J77G_mlQK5)r@X-6Xn9VRvTS#*mQ5iWPX!H|cS6IrczxmRt!O1%{_nzI0o5{*5jzQ#R z()8|xOLx4Wn7LkOnt<=q__&<795Z+-5Zir+xBv88fR~xIbGp2e07FNG;Tw8Ndo>YL zzu+BvlXSW?`Ft++Ro87M6jjO42LP0mI2m1>^b;@59T6O6?Psr5yfo>;OEyvDuLKj8AP)+uY_3eBORC4!kb)Zf&lOA3Xe^H#`;IqI~sxxu|wSM58BA zKvS9F`|@7s;Ek;T);&z<2w9zYC^8&?Xm~lVi3dx?4pdhZqV%zu5H>Jbz>gM_ z*<(X?dn9UA-vWPRQZq2cuG`bqHd}N%=M()xr3?LwR52841bov_(~F=Oibq=WKL5S7 zMVI4kPd!W$U6a?(l_N74{WzkA&`lrLD5d+xoUQ5U-oe(aO}&d)K9#?=f$@#sF*SFn zKCJ2p+ua}YAZ?9irzc|OyJJv7y_VQ|6E$Q(xTXZA5IS~)%UJxGkh}SZH#x39ud5tU zm7blbAOFrKUpYLGYx|5_notq|#0xu7IaM@GKk??tvA?KU{J(7iIlY2ZavjM?SoBUlALC`*pBNz4CiFQEF!>#4z( z#5be0nx{qqaxRSxW#@akTTd2~_|G1kubzaRU%jx!yOs1?Mj^QW<%MUNk)`_jIt?_H zK=46Uq=*Fv@DWS3cC#LYY{yslxxc09e%SH1A9=&AhS|B-{_-thO?@o8gD5_5IK~j} z^Bg@g#p8+@Yw?^0-<$i^dJy>N_rKTe`zyk6{J(b_SG}u1_xix};+=XbVhVmPv>F#n zpaTMoY6U?a0AI0i6Df`kkuNH83;9nw3`|l))@+aqGP)m2>kJ zqlSJiXvB!$0-6^oAsb8KCXYii-m(UU9d)`cE;cU@Nc*M>@45U&aWqEvKidfIt#PV=- z~KU)A0wa>tQy?Fp4z&fogY`}=Ezw!yCW%zWbrNr<{grMNqpCr zPs!R=KgoD-c5pr(KxIXgwuEP~A2CAK4 z1+zGL#VzCYQ4=23^|fl}ca%@QIV8O(gy?$#A*fErPPNMB@PETGjoxC1<-1|$%N;-X z1K7tY#yFxd`~MWMojSt*DdoGOnrfo91wu(c2qp9qAR@g7!i)5l1f_%`ARVL#CQ&lO*|~=JFIGagy?)g$Kj8E z^yQ@oovvJ-j+XrJO{>{F`R5ZfBeDAXk23O*iSZ8^s?)hwlrcJ`a0L=)$An9dmdlVv zX^e*)CdheV3F9mZ=O>+oCX5KP6QbOn)0z%?N%mFS;P%6=vTJrHZ zs(s!g#09=k;)oKhw?{>_W()n7k^ak#*Tg?+!B_7?U7wii_1>WmevL6h36OH8tdf&s zKi&|&RqltW!{3r)yxE#Dh%*vgSzYBD6Hq{tZ_<%&j*vjgl%g@1F;i_4p|2DTi;aE$ z71P3SARc-KbYlZK@?wmPqDg42^}wC_84EFRv!>HVDanKoMRcOC{_yQz zOA!ev#O;%RSAS5CyjcI{;eQJ*`nrs@#p-5j^mMF-jYPAE@k|*K$I6ekucu6i9jPtZ z<*Q@Wug#0UK^}p)O~Q?=p=oPAXx2P+h&JlE@#_^I53fF}digh>r7w3!uWbsOgxsLh zAeO3OD+@U`X+tr_mo+z@CYl3x*}|?j0#ZHxt;kQIp`@dVsuY6Ptg~{6!)s7C=?sP` z<}@J?22W)6=6EmB=>jAfQz`Bwi@_2)mqt9?gMzq{xNpo{`&jADdJID z-^Kf|(@XKOnHk$VT+NSKi*TIHk3#r$&q1vpXWWaovoIC9`F-p$>x8dC_n-Hrf6J^=B+tjSxDuewomxca|;~_6C>Jwp~M34^O@Y+w`xh zoYbA*CkXbQ-h*j_;3O6#4T@VE6Ql4m%1Xzp_DH;DR#)jeis9VQ^ol~Xm0G1idzuqn z2x2Ng=Y?bFWK(4rM(4YCmW%T*u5G@Yd<)&z!Js!_<$IO2uhgRjTJ@f8++7sWae;on$E?zJ~q3z0dBK zT+OV85H6){-nzGaben&)Eans){4yNyv$h5qgG^uFlxS|kCc?P2A1?Sm+3Rxke}0f} z`7$s?D+7_L9zLbgGg{!a?W|QmAu{(qiFNPoG=7wmX2%)U!I-Eg z6BlxOGS}X~l93xOMj1;5r*?M4eX;iJM0DePEOt5Qi}-(57aqRGbBl~c{I)$Mhz1SQ z?Nr&^V6b`dv&_f&p*nda+>9lXyn{kcBJ3=Rv=fd}6W2{1oV4EmF~R#sg+ZyiDcMqY zq*(PsZnzodb2JcDgQR5Qhrx`o+Q>vqQ-Hret1|5(H`cOciXXM);FJ{77Np#W+lHt9 zvdV*q@mu;di zz17$s_>%4BMya3wYw+iNAYSA<*xtc`5}L5#oc?xKpM$&Yu5j%#e#`uB|M?^{n<%8v z(M%mXQ_9?dr@gb#>|_wSoqn#@e>{9}O`yoF;wufu1^G>~O{gw@6?!nUHLYst;4l;o z;RZwFpco`&B)i+$`A#D(C^3GHGtQI3*6Cgk-Xq*=APy1n#e%jaBRVG80ywbme}WcL z@mjX{*_pf2@gWb&v%7;JYhj94OehgOwFH=lBP%F-PMvH|*Y{$mV{}duhXCj~CZ>#% zA%(a%qXm!zC0nZsCQAczQ>JI)HAh?i`!9YArdijSE^#~B#nJOjCi+n5my*lmx$=sJ zop$P7|1vqT6YqvU$-GImoy(e36R*JvbSZ&~8>y#*MC*`s(G^1lXtD;I?rk_KAJ5ok z*&@+2#n?u+xb*hP7~_aUC2P7iyXDh}c!3W_uZj~yf^DR(PUj{X5B4-DJm>EEl{166 zrNsu7fd=@@Oa6gs^SSk{kx(?qj(*m1YERB4qe`5g@ z&&U>b7nrZT(qdR4jt94Gli#LN9N1-MF^|?|S=%*{ zr$JLSSU59uEt{;%b|lZ9?QeeTC!R|nHCW6mq5&;TyZY+8v>D8Rs#yd$Qq!L>${Thz z#rF43DLF7f)A*x5%?zg=EZ`HrL8&4{lRD5uzmr-_U<+^;tP}Y9_Yb=l=hsS`!_8*6 z9EdKvhP|1Gddpoj51Cd>=f!)kcD2*Wy|9Zk)nnCOg*S@T;PiaP!9u!m5sX1or{Ih# ztS%lq{Pp;Y?MVS_?gg@EM8U&$gQoFNlBUp2IOU%YmEvti1pK~G!NhEq%>;h+#rnmU zlkar^F@Zs>{oJIg;0nsyYII29;(WI1%j4baRW{p|VvK03IVvBx9)bsEloZFr%+cr* z?s2dqW4y*SE{9C`{!Lq}Fg0gE9Fj|U%lUnm=E&wxDbr+M;vjse|9hh9vvm@BA;(a} z2M-+7^jh zP!L1Y0jHbNgJ)vU01)$b%8ueMRgRAps7xUVK|%c-am!|B;QyC(nkOe~Q#ZOR!-^gE z*W;KjrM$_6k^f*sYlYy?O*!Z}CG7FQyc^U@$p`zwX=p+d-?>-DYF0foxcBzNcH`{8 zrsQ4l-MAcdjSIaB;HbJ%Do`&L*7-I&06N6|IbZN4>-bTDWY#N(d`k~vwkvPHb*4K* zTY@&Tsli+K#I`jG!G0p1_QBz4KaoJY`tNk6j{8&2*m@EDcJ^7EVrMGS1fIK)^F_lAdRyY$4J#1UzU3hYRZs_T6 z!v?kA->u0T!QmDrO;S3nk(p+ptQ;Lm4N_;n?RveFd@w9rG~5;Oj#bz~Gf&^Fj8+3QPJLC!tcZqW4NjfaWlPC`uYvqfgfrK0feAE} zb8(m1z7US8Ti7=aH1QU``A(X34FbJ2AR63zhj>+TC+O_w)dS<9G zsl;9X9Q(IRHV%+-ua3oq;P;QVg1qtI9)^xc$dz0Ud;FJ=_$`1)s9fxp88*6jn%gyk zrbAQYbZh$k1!~1hzILuzU=BXnuHW0EwM5t#zRcp*Yl97t{)=$0VKQH&#UOt^gd@v= ze%?jGv-D^r%zSMiI#~OY}8g&{vLREE9Mv4HG>vHX%)sSN=r{Lroc@4i5 zoBBsG*nFq^P3Gc@|7j!mCQIw1>VTeqQng>TXW;BD42;EdizI_jl~ zD#3As8i>xT$UCcNV|>L=a{J-L7Pjl%%HBdt{pXYJihAVMG0xq%y2S_1JtvV7$knfcYH2 z{Pvz^eVliCA%r$XyOSk2%_d*v%J*5c0o-&T8c{zOSe@w+)4;+Xlyj!6rluCQU$d?+ zb=m&JZn36i((}`BAm0R!IgEzIoW)a#Sr01!($NrS3r-IyZxWy%UmEeJ9`5yQ5ulI8 z-9!@TsiCsm!Vf(sXfP3$xT(UYM^6(Mb|k|53P&EcA;oC`|1WF!9M3H1!_|z^f+_{=IN__T#j|D6@UI$-1leC<`FGl z-}x^cP`xqbNQVSGxhR7f#Q)p??yQY8pSo;ipehM@bJBnP>50v%1l!)br|p!w&@4o9 zm!>UBAU?gQ!toeC?P!7+A_y;n9ZS5_nc|X3!9)$M6RA~{fpZp|0H>NZ<*+_MG3E!) z`jitl6*4ujHkHj%gHR+RRW!nO>&;~1=N)O!C!fo7Q!Lw5Yjo~vIe%SmiiE&3ZI<|b z#eMa*Bnj&5i#;|Py?ax7-FtqJcdVIGEA7V~CFgEFTFkv!;1G=Q$Ecwi7C?;d4OS}4 z_-ec>Z|v&x$iVBQ)s;p5&D}>vBH5C{8ZQ2y(f)MqU6JMFa3M?jRPcpoixAtKXVi^C z!QldRmy(+_KGo1qTXYn_`J7<6XL%5}`h`>)C8NJx%gyhf1_c=azoSe!fXHEEV9bV@ z!D}rIQMtg=#D>(6pF#Rj`eyr^Z?K?-HZ3pRcI5#50R<0!oPcKw;T<04Ns(dUq2ki| z=7+)phi>z0DZaits=wDdkdiS{9XvuA33)lO^jls^5OBj-<4r2!lCKj4bB}9Iz1&>G%Xni{+X(fd} zP!oMtBwzTmlfCWbwDsu2*;IjUWI9P6MSR*Zv4)iFGVc&)Q>vbxWW6cC);X?2FFOv6 zs_P&SNVR5~t@fVWHe1W%n=2ukmq$B>y$6G|?D+yrOhC%2+fm_UAgbF!&{B$r)e9vd z@nI(?C8w8}-x}u%Tb4fmo-^87>9U!aw@Pw|9dvfN-;wpt? zhqscNg-OMuBbHXOV=eN3J#Oho*Lg!&9PhQ>kO-c@@4wO*tDm0sx%le(Z{UI8;v|y0 zSHBKcZK6D=s`a$_oqG_Pfl($S%{qSdLYa?r0&loF`108JAb@UyHBbQLWV~ag%Qwlm z&E6Ii;Mu~;Ah;@Q}@aM~gHg)DN@P^tx>Rv8FOrs1&a z>|(sRHP)CMc6m0|FnMg(=d;nO=r4rd7$`S{v%uMy7dSwcRef=J#f3M&HE1svJWcD4 zhvX}J`o?u6d96fHL5qZStkUgux`r)cib571l<6QHEmmH*DVJQ0Ur3ITQ^*ZR(DOtp zV*t0Si_D$b>Gt8Qd?Ccnu;065p{KW313M3PJB5cDX1?nOS3i6G0a2c$h36sA_%a+S zv?<34OdurvS>GB>Gu#PvKV5b$2_+U4=*p6zP;@FD$?+z*$X0rcL^xN4DP z7ItUBT6s3+14seXJGHARQYbjK;;WkSPohDdEsCz*n6&eyP*DPS=petMztgF3d_F`Q zX@;}eecCnbTOwT=IGxCSY(OGea=o&OJpAI`mn?SqtzVv9>=*uJ1xxBfCv9M4vH|l{ zmfTWPJ|8J6#=X&KvJa5NalnZvm2A&^!`5ZznHupls^oh7GNM%WLyV|E@O=p$0HyQ= z00tOK_cC}H%)yyS(M~JZ-bJz6xvxf?TYYid*?)HU`pMCfk6*B)U7lZ|U}XC|6$~du zhO*tTVZOTj8^Ra3rcx3}7<5&;Ufbem-7+FC7~wUOR+pJchaytw$;c=%yVeF-l+`Ji(xmY@IokdZrkwGAMi zDtlvGp~_)E-mQE_Hmox3tDV)(|d|IWNGzMZhQSo`h%qgv+Z3NNGKX z=kI81%LcI8Grz(S#Wiv_MzG97GI#B(!KDDsnezRivn_^0rBPbN$zy}peli@q(&04l{8}S)mp6}Mo_hD6`{4;QfgLh5_?uCic-6%Dy>bd7NxD( zQew7hRgIc&zQ6bV|2>~iJc%ctoO7OYpZmV<>$(ro*hrTN!VRIJp<%-5VNI#mf&X4$ z0QE0QMR|~VVer@I%WIaSLj5PqPut4R+}+RXE{!o(2dVY&F5d6KLk;^@ z5$a9W|88nL@^gFe@PBvBA3X5#MQZ5sdu#e?(OIP;64ovIOn5? zsA%2iNoi^6NpU^g7svGT`p2(yZwUwsm^RB%k>-oq(jwZKE7!6dmO;r_w4nQnQGlX(lQO+5@ua4O#pDf`Wm72n_Q7UZ5heff0<_AQfzk#%5hCn;%4FmE8Hx zHIyXHPU@Hq{8q=rW}Gx3RTL+J^OAUbMCK^#}e zXfMu-)FE+SR$D0tM(c8Cz-^sSd>N_PR8NHRvUUcu2Kb&%5O>5$UOETWm)eL zZF2|&9-BNNu&AfGl{psqX!nC3C!UE;ffFO6IR)i}sPM$na#tTNlcX8CcR|3|COQg$ zZk;AYgkg0$cbTSGW%Ku3U?yZT+ix;u+m>n|E>mDN13Nq-S2KV{xf{zcL zEY|!8PH>3IR}3`#I3R4e-lCY>gI>h4#jg~8@CXTTEe?8~RVW%Buvkswe zu5R)n?s2McXWz!ncpuN?hv@3AzgTWL|I+dPaNo8cJvxJ0zm7C^^zxI1xocm9ya;-Q z9zy%XcMISGb>Id2n1qb8?UjwT#l45C0UdkCEf?|{?UABVbOf8rL6RQ(4lzjh~} z1tI!MP+AayunN%wbo-(;DAsUWTzEu&Z_GkO^4XvL(=En?iygZo0dc*ZD!>m&BvkLR zuMuNjzzXn*|MFbN`Pruf&qLb6%Maf*a7rmkW-pHTbnKsY{L4S5 z+>$ywYMMZ6CeqaeXXh0bjz*eduRqYG)G9s z?nb~|P+XHWsotzx6_Z263dA@bNv?zXcKRZ}8-fsA|g>}k&e!f9l?JYvD z?Z>@e+h3|!YUfT?YFpP0?%jC61XI3p1rA97yhCa(yi2dk!V;`AQq#Aif#@_KP~jrb z$gi$tcON%{-}t^l>1X+)oBdZ(K5Y#u(QsKsfx2US?=wCB(YD)jpl(&8X!m{;XO*mY z<^8wh4~0`7{bok3z2CHkt!|bs{`gSZ^d4sOsy|{PBN7k3V!&5+*N)DPpHFOFom8s6y&h4B|2w)N5@o4s!_3QKb9!{NwjZZ{T`kyg#&&(S zssG|)uFt|Iw~ChXo5ohnPGf8W%ARpnL(q~RvFjaE<-Zb$z>4Jy|hX9WO7+0z=J-^Vzke(mL&j<>h|4YVYr>6)Gv(%4X2q7yvs3EL{3;KN z!g;Ka(Mr-o(*n>G1sT=|J(?(EXZD@Jy$e6izdf&ZEtpeBYIr^}PJRNd%yeJxP9e zw9^n6Pa=_sB8S@_YFN};j67$M#FFm$?%ProGNzb71&*1Kv$DyjO$WJyn5|j7sS|~7 z$EtWpNl@Ni(}=bqtLza&v`U#9FYDd*!nZAlv*IR$+cktt23Ex}LIef~xAKs%;W0Sw7ruIM)K&D^01<>OtSkBzofFwT zIj}49(U}5D=i~hfIlyid-fljbUs{pn(S!=E*vYyY?XWqS0u3>Rzv{%E9F6Tg5A$zm zO6W4xYtlo#yMwfpaLJXGNSt$OKA7g{57<&>vk(ra8_&@Wr;Vu{kPnPNdyzQg(bpI< z(54Q*A3yQ_Gp&(C{~Z$^t`P6rooC@9R7g{gM0b*GIDYf{{`)Xj6B1WyIi)vVTJkr# z2Md>v@saqJfN$RI$A)*~`6exi{F=%pp`W zAtXDm<6}gU?|1aE0nstYi7eOmT*yASesZGm?VUNN@%tgPWpV7%fIH<)SAt1=amI2_ z)#P!HmhuZZcl_s!G{f)#M;T5=dIKg2MH$XK5tCx9ekLccs=xRDYi{M26KE54Y#LX@ z`W{L8tE(uT-FXfMSl1SbBUWRSUko|-#?sQ#ssu8qw>;h`hIfj=<-l3vD9Y(HIFjIkxRX=6<=gVjU;5G&A0-=~#m{hD_$Y2* zL?)YRpyR1Vr6DVCVmxGuOpo-7ZPU8m`f&ZIt<)tPAfjYiGMaB{43%VOO%U;aFyr&> z{G@MZqeZJ1-ViAz1j!iix|?8@?j27jE1haK1A2o#1(7R5Pw<2(7@56tJU@aFU0?#Sq2 zOD!5hof<_;QpSzlV@h_-f3~+jz-E~vM@q=b_>osm zJ&r<}^uY_Tx%2s5mg{YA?SEsq5S{Z*YY$=O#<|$Sc>?CUj_5GXAHS7QrQ5W%VQEI- zl{L{Oid|DnlPp-7-~RZ4kw6n=j;oY|2`*K!uw0+!XDR%`tRf0y-jBczNG(zVD=@St%GVz-h0+{jaIDJ~~*Nn7jX7(-Dp1XojZT z?fW=*u`Y|tRuEE#hFC0(BIu5*#E)A zF>HvaD$(jv&kJ$4l103+mE<7&NWnHQ3Lj0Q{^Wes!LCjA_wQ=1%i%(AB56D@f!#B1 z=}y|O^Gh1($NTr9T0#!CzCR*i4S~2ro1C3QHI|znMKO2yss_4pG31)4o~i&AT_FH! zex`O3c_@tL3U{2jjeC}xEeTKFx=kS!y8@|`}UzM<*i<^4a zE^CUiQbtGPlV?ife)F;7tm3e#DbEaeU*$1tW!-f{_U?x+4K@pNAMXK6 zi@SZk;1WF;C$ImLCh6<3?*b57( zfea!xTC_VuYWSF!9uDkT{&atHR-Hz3YhfMNol6s3jRSZYR923AGzRSMA8iMY(c8k( zX)H{$qH&Dq1+JVOCtNuVE|8fH2E&o4?{HpQ8`8CNbXUIyY9jeqKi#z#_N8aI0|hgJ z5ve;Ae`+$q*V|8Ha#^p zm1Y`%C=j=ei8s`DdTH)>DYeogOwnH5daDbvg(=4b>XS&)Tu{PfUmlLuNrqE~XZB?2 z%Y|E;5?}l?5*Odg-2B3B{21pEj{f4+AFr2L(z_m~tJ}1H)DsoqXNDzW7;b)Kzlo+8 z;AkRH+G+ywZ@YEOy$JEIBiI>W>n}esXJ@lmJKw$YqA)x%(n$cyNWZIxY?WI1E&3Lq zffU1Wg#BCm$bY+Kl07?Dj`T=hzWt7jRl{06_Cs={aH9lZJR#8LZJ>=NT#QE$RH|Rx=p!N8=)3TtCnII6#u5`RofT9aD4}Lj zZoHFAk}o@~jD)=JSbA{1J^0a9;7~EcvjHz{Z1R*`nOiK654;+lre^ZZhlgKHtu@s3 zf{mwJlz#9s!X+n7#vly^f@Ki0p8^>*@GHnGVgQMx{f$>2kNc0q(bROTm^!OcZy{w#8iDJkxuX%?x}Nf=)!K)P6FL%WElf_QpBFsw-0?6 ziZt2*pKm#w50_1D&fj*bl>Q#PMTGmryTIh>aKQjQh?EI-SYa{tZpek?&CS`C;Lux1 zpGooMVz_V&@+}Hg@RX};3E_g%)6)w?TY3j-;!Q20c-l}Y_W~Z&usqo0rk=d^JJf5E$Y*tLTvoi|K`8&H0`HYODvh|h^pOu8$Sfpi${n86roTNSRzGqlHYU128h^PFP03jRsi-JJY(+@~If}H8?Z5Utp5|mHHDs!)|AW41{Zn zvL_%DA>?6*C90oyUAVe+sj0V@JNw4C4Nrp5E*xc4kI|49^0=GzI(&Jfg$n0wGJ{KV z%S-gS<a&@oO)=g%qE@9{YIB^qcK!)M-XWaRM_;4-7=OCMx@KHy8m3 zgpbdqJDN|o%V+MmnL8W|+)Mj>3mb2L9$X15nka>h}d2QH#y$n9k5C1Urt*mC`ugI!f6 zIz5nf=MAS`w*-Uje__jn^3FWtZ?W9K8+_RKgV|}GA}V>}`n8j*0ZwRakvvipZ00QX~-;dpBHt{R9bSa_LRUu+N`PEaVllR1L`4|LX3oe66WSl=I!G1uW^W$Op@59#MU zjh5Vbj09XR#ZJiv>KJO$DA;ZcVAp`!;6}l9LlVy)aJ=V*>g0V135!pO@t7huNX8IaIh6^ii8LbS z-0c$$;flgPpsolIB6NM6WV-LdG5B_Z&d$KnZ;i9}Y z-b5T08}0HqD@cdT3Q39`f2Qxqly+#s0?1#?pgfXyO=7vV1NbiC%8TofFZfzHSJ$(h^*H0MRvpw))E7PbsAl)cw1sv&cy zYamC9V zzH5{35WWg3#`bc1H7);|TNb})_tVP#mz0ErH{2Smj$For} z7oW-XI``hfVzFuhD3q8>cSO2@p@i};lWau^8_&hDu{qc0lY=;M6>Hbu6_55RsYyIj z3^gmatt^*Y;J|f@LLlZsd4K%Ps_B||`WIIZ*6s#@<#$RsVfH+}eSZ;rMwIiv+3N4Z znx*poPB7|CJcU8oq~SYiy#h{Jf{}t_pf^_%>x^(7*MwR4cxPvLD$U1n==S1Fpa_?@ zUU7U>RL`VArle7oT6aUAMNL09`+@x9!1XQwt4RyRa4`<29T890{K8AQ zH4#e;w4ss!fwDMBpU0!8FV+t>d${SnAhIwhG(+cqV2L@N-+u0V=_qP1c!PVqH969d z7B4bXeP_6?uC8F7NFdY@2)c%5CE>ZbEpM1jZQta-jJWg8Ztnc=?pr%13tSRc2EjCj z$|I(C8w|$6>$4=qARWfHY|EK?iT+aj`z#06nlG?1LP!Xoom?%)L)Je>9gxR$8wnHi<{ zM*nUa1FKzM8TaH0f#-}? z7%v2&ee~f}s8+Zwm%jaGjPKU^rN)(ffyc*gK?fREDaIf{5uqX^qV{8F6+4txR@9U* zpPa*l_*s}ae)4Ya-@*AmX{%Q%_P2ur+SG!p4j$}TESMy0UMfa`dyF`wop!9k(Q4@+ z=-AITSrhv5i#F!`gDP52lNJ6-RnFa>eHW4))pE@7;1&;w8hhwkj%@viI3TvH0@pY3Q?K0Dg#*t=&X!#)yTez`Dq$kXZU z9Bw4v&?kZXNN+UJdfuhGUZ3#RzSh>$Lh&W4Kt?YO=+-w0bL%#Qe@Z1kMZ2Vjw@+D1 zX9v8pyA=Fj|8#;^n85yv+)s=j{(Z&a*zmbP7+2oBM@7*{WzTw@K-I| zMa>1XKPbaFd;E7de{t;Ew25Rfj;SWMWdJNndtdu)pnJ{^0H<`JZ@BkE`PGG)dO$(IIBz46#ZHiXt{Xw>B)9i&m$f#vDa~Ps&aD-H8PIIGJ+^7 z??Yytp>U-KMi7W!>%!r=mnxaKk2YFPH|cJDwwl0=uPN+lI6^GEBR>bZPg82|5((m8Vz31 zV?F@wETVpBaw0`Rv2P>o0U={=dGse zr_p_p;vN? z0&fgeQKhFZKoYnZ;a#_+e!9JSY*6#riL23%6&EAGQ6>s4s158kr8BtUk-MXoPSQ>y z=DJw-yA?fN-I#sg;HJ7bgXitPBcYFp6)SdXPlw;yPWTD=s8~MIy0rC9r|Yt~S=Q-~G=e7vE0ZQ`qxCesycV!zWG) z*a3h*y|HLMc_h&lNShYXjq$Fd`i_>P?DLc7Cp!<$euZd#^dQ&Rm20KZ)A6veQDN$v zA)2Tl<_i|)3m^pjMeT(AN76}+EpGj94j!mCf2kmdX=3|dQsMV42{qFarBX*AcS#1# z^B>p${cMbyFAy33s(n?zTPG(HfFc-V((E=uAn|2-@it$JUs_wxrjxP)OBz9Ss@3Ov zVduixKD9BgU1|?_5}a_V_(rF)2OK@w+v>E!<%GHdciHIjIiF(* z^Y8u!p*MqM6n2N3>gUkJTr{`=zbPwSM81WXkN^`T7@#$hu?E@x=ik&%Pk%gq<`5J1 zC%-A6g6~moF*{awedPU}*YlY}Q*ul0C;3XH=7WM}%hegY^~Y!9ZEcEym`fipRIg<( z8$lv{!NyaOM?zYD)xpgte+HAdr3$GJTwjV;8IUE4WM^k@AW#!2CxI3Bn4FlTf!sZx zAbi^SPRH?=riL@2e~Uj3M?#Xcb-ZPeeRaw4ob+$0l0Ie+2xB`x`=(Op{ z3b`&GA71FBh3w39 zu~IVGIWTq-!ocstIO2|m9sc$4pWW(6`k;8W8FDgnU+V4#G?q^gM4Q}CWgv)Lpg6Wy(%`I8wgaG^v1I473GMTb=SR=m57>Fy=GZ#U zH=5eVZrUUX@LfaP(Sm5{yp?la*{1G&>!8FMK8sB9xNT*IRMhQFzPXOz-TQ0JF^S{D z>(s6jqa*8JV1&7YnSq?nWB-=0z&-m(%|(a^?A=n~pW-_Ox*D{Qcr%nxFt>DBbiw{` z@1gq1)v)i}%@I=F>c_(e?X!JF9)Iilx{$rhlGkio^ZtW!Xf**5&hLQnC>;?Y!->eem)mNv zj%su`pM3D|$+?h&l(U_y^t3OTVt+hId2oBmXOHi_9ZC?BDPnI#<)+{+6a!_D2t!Hc zWt0d}OaI_z@`LZ{YSvnvlC4+hYNuW^wQ$)wQ1V~J;DrSqaxMihT;-QIUu1c5Rv7wX z>7q>~76^|0tKsS5DNQ0O=oCI1iOlK2n!;URWicbwzCOYRV=W3EZWT|N?`>SVkff`+ z(k$E)Q@N9$&~twBiKD~CKf%$^d9UjC$(Mj5VV0xU9k)wwds+xD=d-da+C7vEiatc`<#l$zrQjVVIOf0O?VJO8N{< z-)K~mYS8!LQm?Hf3hfqKs5|rT^V6M?NL`2~{bAdWvm}F-8fBcIhy5KLX?rBYCp`dq zArsv?b>7d@s(=fg`x$yRd$8+bX%VnEilp79VUE*cb|G*vE$<}ulue5u(s^y%7V;Z+ zG>c+-VEdn+cR%m)45O|6?VWfHZ;&exhhhMrjc(*|uW3EXm)i|JYm)o%%gg*x0PSp| z$L(7vF%e@y6d*FkHhAnf?)luwZ$36Rd9&)?c^b-fE}sv1m!%Sd`i64HXy9c-HsHrk z$Un{~Q7PA3z7Vp~`m~(dGv9{8J<|huD{wau(CBAxQPcV;_i+oK;GAV~>CLk-{#JZp zXS6A)=fL5<^hVIUmH8vM(==)!F|W(Az4Jx-b}2&DQqQzRPSk{}()Qh>$A33xGrob| zD1+z$AX*@R*2Tc?`fefvz%7;$6m4d)y>oWB8g}6FK(*M_u3}gKH9{l?$qDM~QBc1y zcp*q3p>eKdCOo!#x67gB%6SI=lY`#boNgP9h;j2)njfL=4^kF`s?vjtUI~fzTEa&L z*jcq95apB$C_Y^f@v{j)5H(@$PA+n3cpe(Onvr(5Rm+OCOvMl5HErdnZzs2#s3@{# zXo{hg{dsBb-|y}IjwADyNj(lCPX;x;lP0Ux!v&>`VUC}Nbck@1Y3Rq@QPb0-S7+%aeYO2>q+n~`Qs38?8|yxRw}`Xy5hvg zwyTux)EoaOo+yfxvl85_LKiSys)1upm!3&)oc8eB@t7Lt0}MrIL$;3|wfmO7_!Nr{q2rTon>-gu1d{h9+QFD5RITD6XYe)W_5ONFLT8R%s}%Q;=W@cX>Oy{2O~j%2xRYzbZ`53>9lAjSrh#T{j}@l*xIbG>_cJy24{H=IO8JB zx-v0pMphT24V()UFUzFXJ!NKV4jM@L(eAT84{WT)&!pP;6pYLRVE;89Sy>M7N@4*n zYeSap=>B?b+vB~PXI&qCb-vO>xH|%w$}RV7rMLIEc5Q@i-*iwYiLV(eAabpd^7v+5e zDQa>1 zEK5_svYYoD)tec{`Us#^}E(?R|x4@PW~rbfGMI6x2}nfauv>D3e8 zzQ=ZcW3VhmKDgjQq8BX#3mPwO>$RL&39NSp#hJYg0lXnGb8!IsNpw*0oXA0eE&iR0W7611^cAP1nq#6+7O zk?19D`7!_LR(tST3T2 z)We!Sy-JKRt;i}#)^{>sHPWVPHCQz)YkTgr2>4+7vZqJ|$Ma|BX8{gD?kpw))iE`Z zX<|#JtgYZ$hmJo^;(PVL8){G(m3W8<&+8F*Nbl-*;F#5g0m>3XMCvlE#EHvw$1B5& zDVw}fc!odW++agMG%>K#j(ax|7tcGSld5yLtlJcJG!i%TY9EW#hwtbus@;RZd~~S% z5t(j=qPda@5%Kxpv&9v=kX3u_`~`J&>{I#ZeI2X}1j@scfw$%Z9G;wwi~A;3p~uM; zgnk$gPDwgt9#9J4Rh9ZYST3?}g$_q}Ft*KXhCG+PKc{N18ONOY(@PI8K&9FaKnA*wIN%+wfY#Em&S0@2!t*HW?K2W z6|oUf-C{q*hc_io)<121U-tu>chYe(B2vVph(UenGWAT_f4X#^pHuRA+#Bvnf5WWd z!W|0|siUBUv5ZCci;q~@+M%-9{YZmE60GJs9BA|EozIPgYy4@o8 zT=DDA9BN4t9Yc0eIXWIBs8Zp@$jx0-i7a0-M{IpRT>J8@>6QS3fMYZELVWtrDKB&> z;8lHn8{uiuh~SS?6gf|3j`%662&hM)VcTTI8$4`&Q06L| zC>+&0=T&Mg*)#Z%Q@^Fh={#xj7ytR#E++O;mzn^Vo1ctGlEUxEOQRm-InR^9roa3B zO&kHM7dC<)qBJO}*vk}iqPGJagBfDg>%J4<1G0L<8l~?GjPU>|&=T=1Ziy55=gvEQ zSD9Tq4j!#E-uxD2tw0zXtq*t7^5f-f=3U9jpxRr*CziwI5dQCNA=x+?9*aD)VsZvS zOe}9x%tT+b)Nf3i0@2GK>|M6~Vwksp1$PtEzaze|pn>Z=xBzP4_m1o9;huU;7OcKu31HB$JWABuYBTwc1I8^|LqQgSqCti3|L4qUIv( z(TW!@GSbV7notZFdyU_e$IvpliNqF{Hokef^7^CJfiYw6>#@66D$PyYYf8p{1=t7e z=>7=#2T}YxZU`-h6FjU%#pSy7`kv-qj7qmmsQSty?Qp!gC*JdifP*6$QlNy3cN2Cq zIfoVn@#*rUzxZaKf;b(YoE)ojIDt~KE7yYtpx@-U@WXVq3*w|*S`9WfbR zg`}yzL5g~1R>nv+m|%#Cak`>jL}E`6AYI0KxQF0#E9=M#M7L9z!GAI_dA_#yz*rmw z5NHNvq6FmRV9|(X&4$dG;hlq54yXH#)2;WP-oKR>XD!|PUPA=s z&mBv2QTX56hA+2jzPf372s>YNbUm57x_`FahFE4|J{d+rxR!zgeEB7$>>da&Y_^<1S$PYD(Pliq!|Or`mgG0xWz8Y z<4Vb}s#KHHT*}XL?>XaVc|P-cyX^DTAnOn~k z+dD!S%PDp2;OH7^`Bs{<(}*5`lW|2Hy#RwiSlmTtwttQtp3V030CK2Ba5S_LG!bM$ zYOs%p#;>k!{W#v<*Ene9xZ;^SVU@reHLOFGB7q9DXj)?Dz9Wwt9wVf$TwWZX7D;VU zQBhhR6I{X1BwJcs?v&5fI(!Q{ZG6!B=Awxlt9<7bHjxRmw}u7{7f1(8dh6LNWgk}1 zmOuM9olN$(0F{+^Q6CxA=tHT|X0<+xfi0%twc-oQw!Y~smQCKaphZ$rpN*2B3@0J& z9h&YFN#r|oLdU;p)veG&uAXXarv_OQPFt-+F~Or~sRd*>%)IvAgoNk~Qv*}tH8j3T z#OKFn3B|86GQTA~%Ys`TKH8^TePwq#aiGq{)ptd6a?UVhQz?(}&D3QlcZdxsz@?d@ z5DYVUdDW#wTCJ(6N$q-teb4CA(BITwyUf4?fqCM4)Fh}5Yyp5n@MT5UOtcK@zpoEF z9P4U~nSufBFi<2E*=d&^;rdFYLDk^Nlf{M<^^Vnlk2p)8avEDDJgd^kjBnN>>3IoS zZ`$oVp0H`4ug2o^DU3UyF|$D#M93&-n@7*t=H~g{{@EvW74w^A`Q=_SQ~vU{i~&q! z!GH<@js}~N*Ofk9)zoLc@|W9Y^ZVJ~hUu$u|Ay*#b*;-S*pOEc69^QaIJM+Z%?KW2 zM#1Bhw9-RjS6<)eD>(TzGFB73X(0nmh0v|EGbeqN-TqxOKYTM;y}8XQix$^L!=tZ_ zl)4-ZNJ?@_kJgPozT>+bll$q~kTZv;6l%yCV*9GJLP0B|w!~95c}x26@79xzaUb!% zE4FW}Z}RBxGH)=~m&hcVLQHGe8>*@09xl29Y<8?)eWl1jSx?it2==n|?2oF|p#g zHfjnf#VSPIq-e_yxL29b-OJvLd6a1q%(r0tkW({FDz`z*Kfg#G<>ta@cTG)6>3hf3 zAy>}?AF@Zy-W&rhKo%GgQ(jmBh7{EF|OG0&TVT>Svfo%?7710>ps-L{$yul z=R#95$8VeA58NJt4KL%Z#9=!aBHY%cSpHCx10;}%VC6!LnQ+_&f)KlG>y%xOctDg!*2!TK%cI>;qPY=t~&zB}NTIK02 zmdFqX5mwS=sWe=(zvEN6;)(>8D{j*QPIj^nf+yWAqwOt4e`qj$eIq2{br-!EvDZYCj ze!b(k=@N3=_cOS-hf_!P3b%W2E2${LKShP+sPJ?_#gjp0v(t;Y6gKeLAh9Z22P2D+ zfZ_@_XCH7xG`!hSpf@-Q8;V=cSxnPlW100A|sd)B4?(fdo>t zw+?(4B z8f)Ix5fb%j^ZU9UwVuL117XN}ah+Dmm;!T=%gtDR_$Y8~`L#u1p>8$TRToonWdIvj z5K_nvZKnrMNkv3t*7-kfwW31{x|{w-$JpWm^{Frctp*LKU`=?M*mk`wWP9WWAcpkcYm5d~D2g+louKb0FD7DHU5KGp=tWWzG0h~hsHmK6dUzDWsBzLI z;}L2$sg{#RONtX*VC)sl_UhwmTjB}eP(R+D0PABfU%pa;vV-rwF`ciwj0~rP6hosi zad+#jmbZSq-}yNU8tRI~3LZdhyvY^i`UpLW!T-WA@zoTc$IxI=$|lny;Hfb-EySi& zo1W}u8P7%y_I4uwwY+# zSea@u5$CpMTduy+FS;z|>La!Sz=h}a2hnT2Rgz{&-1Nv#t>0t&GyA(Wp!WP%!#tPs zg-RrCbTfM8CkWtD6JB>2qzRC8l#a<22)mof{{hX z&7H<2m21tW7n8Sst~s{bDGRW}J;E`jc7pnuNP0$kvvRD)PB^AoR4o>$6Hnr#S`PQx z_Wa@YHZ&C|@|c)+0lnapE@HCjEWWxEBb0m3gif^8>(+IZ51$@9o|CP)o5(b5(Yq{r zbJ&n@2zk$$b+%&0^^x*^(8A4;q6wxf4tKo#`icYKQ7G^ z*p12S(srU16NOoO_N)pA?S45urHPW4Bg$m=sY$-WRI^1l+?h!gGmUk4G8Goo!Y^@a zxkwmpIhZCulmzvMyT9C#iOK<{0v33`Mdkf1X|Y(Z+VSqV#6R*>SIa?@rA=Hkjok!= za;hoB5*rW&;c2N;-dGuE!j*9Ay{HgfoF0M~QD963-OZmIg{Ga-8903PE!wPNDsu<> z1^9WF^1pfM-LZghW2yX^8H9)4lv=|y?0oCObcxEz-lw^sb9-l!w!-B;ojm<+tZ3;_ zEG092JCI&}49LLXepkikQ>u$ix+zm4?{|0I!rVjt%Ie=?0( zytl(}CF(t3R zK~>W*z?pbKu3io2BL?9(73IAAyg=S8u@^aMYgvEIOZD%$-J_@9t)qM-DdIT6F2g!E z?!}TTH|N^2?a7Y2oYPL?ESZ16NLD^!*0;b?ky2yR!N|)WpQ=>vPYg#n%tl|fHG@o9Vg#xVdcO6eJv2bnCFG@Xcw{$T#9Wh>Edx&WLfq_!2) z_GrmUS9f>3@@};3N9Ut-^9=36^uOk0Ed+wE-w=J77G_mlQK5)r@X-6Xn9VRvTS#*mQ5iWPX!H|cS6IrczxmRt!O1%{_nzI0o5{*5jzQ#R z()8|xOLx4Wn7LkOnt<=q__&<795Z+-5Zir+xBv88fR~xIbGp2e07FNG;Tw8Ndo>YL zzu+BvlXSW?`Ft++Ro87M6jjO42LP0mI2m1>^b;@59T6O6?Psr5yfo>;OEyvDuLKj8AP)+uY_3eBORC4!kb)Zf&lOA3Xe^H#`;IqI~sxxu|wSM58BA zKvS9F`|@7s;Ek;T);&z<2w9zYC^8&?Xm~lVi3dx?4pdhZqV%zu5H>Jbz>gM_ z*<(X?dn9UA-vWPRQZq2cuG`bqHd}N%=M()xr3?LwR52841bov_(~F=Oibq=WKL5S7 zMVI4kPd!W$U6a?(l_N74{WzkA&`lrLD5d+xoUQ5U-oe(aO}&d)K9#?=f$@#sF*SFn zKCJ2p+ua}YAZ?9irzc|OyJJv7y_VQ|6E$Q(xTXZA5IS~)%UJxGkh}SZH#x39ud5tU zm7blbAOFrKUpYLGYx|5_notq|#0xu7IaM@GKk??tvA?KU{J(7iIlY2ZavjM?SoBUlALC`*pBNz4CiFQEF!>#4z( z#5be0nx{qqaxRSxW#@akTTd2~_|G1kubzaRU%jx!yOs1?Mj^QW<%MUNk)`_jIt?_H zK=46Uq=*Fv@DWS3cC#LYY{yslxxc09e%SH1A9=&AhS|B-{_-thO?@o8gD5_5IK~j} z^Bg@g#p8+@Yw?^0-<$i^dJy>N_rKTe`zyk6{J(b_SG}u1_xix};+=XbVhVmPv>F#n zpaTMoY6U?a0AI0i6Df`kkuNH83;9nw3`|l))@+aqGP)m2>kJ zqlSJiXvB!$0-6^oAsb8KCXYii-m(UU9d)`cE;cU@Nc*M>@45U&aWqEvKidfIt#PV=- z~KU)A0wa>tQy?Fp4z&fogY`}=Ezw!yCW%zWbrNr<{grMNqpCr zPs!R=KgoD-c5pr(KxIXgwuEP~A2CAK4 z1+zGL#VzCYQ4=23^|fl}ca%@QIV8O(gy?$#A*fErPPNMB@PETGjoxC1<-1|$%N;-X z1K7tY#yFxd`~MWMojSt*DdoGOnrfo91wu(c2qp9qAR@g7!i)5l1f_%`ARVL#CQ&lO*|~=JFIGagy?)g$Kj8E z^yQ@oovvJ-j+XrJO{>{F`R5ZfBeDAXk23O*iSZ8^s?)hwlrcJ`a0L=)$An9dmdlVv zX^e*)CdheV3F9mZ=O>+oCX5KP6QbOn)0z%?N%mFS;P%6=vTJrHZ zs(s!g#09=k;)oKhw?{>_W()n7k^ak#*Tg?+!B_7?U7wii_1>WmevL6h36OH8tdf&s zKi&|&RqltW!{3r)yxE#Dh%*vgSzYBD6Hq{tZ_<%&j*vjgl%g@1F;i_4p|2DTi;aE$ z71P3SARc-KbYlZK@?wmPqDg42^}wC_84EFRv!>HVDanKoMRcOC{_yQz zOA!ev#O;%RSAS5CyjcI{;eQJ*`nrs@#p-5j^mMF-jYPAE@k|*K$I6ekucu6i9jPtZ z<*Q@Wug#0UK^}p)O~Q?=p=oPAXx2P+h&JlE@#_^I53fF}digh>r7w3!uWbsOgxsLh zAeO3OD+@U`X+tr_mo+z@CYl3x*}|?j0#ZHxt;kQIp`@dVsuY6Ptg~{6!)s7C=?sP` z<}@J?22W)6=6EmB=>jAfQz`Bwi@_2)mqt9?gMzq{xNpo{`&jADdJID z-^Kf|(@XKOnHk$VT+NSKi*TIHk3#r$&q1vpXWWaovoIC9`F-p$>x8dC_n-Hrf6J^=B+tjSxDuewomxca|;~_6C>Jwp~M34^O@Y+w`xh zoYbA*CkXbQ-h*j_;3O6#4T@VE6Ql4m%1Xzp_DH;DR#)jeis9VQ^ol~Xm0G1idzuqn z2x2Ng=Y?bFWK(4rM(4YCmW%T*u5G@Yd<)&z!Js!_<$IO2uhgRjTJ@f8++7sWae;on$E?zJ~q3z0dBK zT+OV85H6){-nzGaben&)Eans){4yNyv$h5qgG^uFlxS|kCc?P2A1?Sm+3Rxke}0f} z`7$s?D+7_L9zLbgGg{!a?W|QmAu{(qiFNPoG=7wmX2%)U!I-Eg z6BlxOGS}X~l93xOMj1;5r*?M4eX;iJM0DePEOt5Qi}-(57aqRGbBl~c{I)$Mhz1SQ z?Nr&^V6b`dv&_f&p*nda+>9lXyn{kcBJ3=Rv=fd}6W2{1oV4EmF~R#sg+ZyiDcMqY zq*(PsZnzodb2JcDgQR5Qhrx`o+Q>vqQ-Hret1|5(H`cOciXXM);FJ{77Np#W+lHt9 zvdV*q@mu;di zz17$s_>%4BMya3wYw+iNAYSA<*xtc`5}L5#oc?xKpM$&Yu5j%#e#`uB|M?^{n<%8v z(M%mXQ_9?dr@gb#>|_wSoqn#@e>{9}O`yoF;wufu1^G>~O{gw@6?!nUHLYst;4l;o z;RZwFpco`&B)i+$`A#D(C^3GHGtQI3*6Cgk-Xq*=APy1n#e%jaBRVG80ywbme}WcL z@mjX{*_pf2@gWb&v%7;JYhj94OehgOwFH=lBP%F-PMvH|*Y{$mV{}duhXCj~CZ>#% zA%(a%qXm!zC0nZsCQAczQ>JI)HAh?i`!9YArdijSE^#~B#nJOjCi+n5my*lmx$=sJ zop$P7|1vqT6YqvU$-GImoy(e36R*JvbSZ&~8>y#*MC*`s(G^1lXtD;I?rk_KAJ5ok z*&@+2#n?u+xb*hP7~_aUC2P7iyXDh}c!3W_uZj~yf^DR(PUj{X5B4-DJm>EEl{166 zrNsu7fd=@@Oa6gs^SSk{kx(?qj(*m1YERB4qe`5g@ z&&U>b7nrZT(qdR4jt94Gli#LN9N1-MF^|?|S=%*{ zr$JLSSU59uEt{;%b|lZ9?QeeTC!R|nHCW6mq5&;TyZY+8v>D8Rs#yd$Qq!L>${Thz z#rF43DLF7f)A*x5%?zg=EZ`HrL8&4{lRD5uzmr-_U<+^;tP}Y9_Yb=l=hsS`!_8*6 z9EdKvhP|1Gddpoj51Cd>=f!)kcD2*Wy|9Zk)nnCOg*S@T;PiaP!9u!m5sX1or{Ih# ztS%lq{Pp;Y?MVS_?gg@EM8U&$gQoFNlBUp2IOU%YmEvti1pK~G!NhEq%>;h+#rnmU zlkar^F@Zs>{oJIg;0nsyYII29;(WI1%j4baRW{p|VvK03IVvBx9)bsEloZFr%+cr* z?s2dqW4y*SE{9C`{!Lq}Fg0gE9Fj|U%lUnm=E&wxDbr+M;vjse|9hh9vvm@BA;(a} z2M-+7^jh zP!L1Y0jHbNgJ)vU01)$b%8ueMRgRAps7xUVK|%c-am!|B;QyC(nkOe~Q#ZOR!-^gE z*W;KjrM$_6k^f*sYlYy?O*!Z}CG7FQyc^U@$p`zwX=p+d-?>-DYF0foxcBzNcH`{8 zrsQ4l-MAcdjSIaB;HbJ%Do`&L*7-I&06N6|IbZN4>-bTDWY#N(d`k~vwkvPHb*4K* zTY@&Tsli+K#I`jG!G0p1_QBz4KaoJY`tNk6j{8&2*m@EDcJ^7EVrMGS1fIK)^F_lAdRyY$4J#1UzU3hYRZs_T6 z!v?kA->u0T!QmDrO;S3nk(p+ptQ;Lm4N_;n?RveFd@w9rG~5;Oj#bz~Gf&^Fj8+3QPJLC!tcZqW4NjfaWlPC`uYvqfgfrK0feAE} zb8(m1z7US8Ti7=aH1QU``A(X34FbJ2AR63zhj>+TC+O_w)dS<9G zsl;9X9Q(IRHV%+-ua3oq;P;QVg1qtI9)^xc$dz0Ud;FJ=_$`1)s9fxp88*6jn%gyk zrbAQYbZh$k1!~1hzILuzU=BXnuHW0EwM5t#zRcp*Yl97t{)=$0VKQH&#UOt^gd@v= ze%?jGv-D^r%zSMiI#~OY}8g&{vLREE9Mv4HG>vHX%)sSN=r{Lroc@4i5 zoBBsG*nFq^P3Gc@|7j!mCQIw1>VTeqQng>TXW;BD42;EdizI_jl~ zD#3As8i>xT$UCcNV|>L=a{J-L7Pjl%%HBdt{pXYJihAVMG0xq%y2S_1JtvV7$knfcYH2 z{Pvz^eVliCA%r$XyOSk2%_d*v%J*5c0o-&T8c{zOSe@w+)4;+Xlyj!6rluCQU$d?+ zb=m&JZn36i((}`BAm0R!IgEzIoW)a#Sr01!($NrS3r-IyZxWy%UmEeJ9`5yQ5ulI8 z-9!@TsiCsm!Vf(sXfP3$xT(UYM^6(Mb|k|53P&EcA;oC`|1WF!9M3H1!_|z^f+_{=IN__T#j|D6@UI$-1leC<`FGl z-}x^cP`xqbNQVSGxhR7f#Q)p??yQY8pSo;ipehM@bJBnP>50v%1l!)br|p!w&@4o9 zm!>UBAU?gQ!toeC?P!7+A_y;n9ZS5_nc|X3!9)$M6RA~{fpZp|0H>NZ<*+_MG3E!) z`jitl6*4ujHkHj%gHR+RRW!nO>&;~1=N)O!C!fo7Q!Lw5Yjo~vIe%SmiiE&3ZI<|b z#eMa*Bnj&5i#;|Py?ax7-FtqJcdVIGEA7V~CFgEFTFkv!;1G=Q$Ecwi7C?;d4OS}4 z_-ec>Z|v&x$iVBQ)s;p5&D}>vBH5C{8ZQ2y(f)MqU6JMFa3M?jRPcpoixAtKXVi^C z!QldRmy(+_KGo1qTXYn_`J7<6XL%5}`h`>)C8NJx%gyhf1_c=azoSe!fXHEEV9bV@ z!D}rIQMtg=#D>(6pF#Rj`eyr^Z?K?-HZ3pRcI5#50R<0!oPcKw;T<04Ns(dUq2ki| z=7+)phi>z0DZaits=wDdkdiS{9XvuA33)lO^jls^5OBj-<4r2!lCKj4bB}9Iz1&>G%Xni{+X(fd} zP!oMtBwzTmlfCWbwDsu2*;IjUWI9P6MSR*Zv4)iFGVc&)Q>vbxWW6cC);X?2FFOv6 zs_P&SNVR5~t@fVWHe1W%n=2ukmq$B>y$6G|?D+yrOhC%2+fm_UAgbF!&{B$r)e9vd z@nI(?C8w8}-x}u%Tb4fmo-^87>9U!aw@Pw|9dvfN-;wpt? zhqscNg-OMuBbHXOV=eN3J#Oho*Lg!&9PhQ>kO-c@@4wO*tDm0sx%le(Z{UI8;v|y0 zSHBKcZK6D=s`a$_oqG_Pfl($S%{qSdLYa?r0&loF`108JAb@UyHBbQLWV~ag%Qwlm z&E6Ii;Mu~;Ah;@Q}@aM~gHg)DN@P^tx>Rv8FOrs1&a z>|(sRHP)CMc6m0|FnMg(=d;nO=r4rd7$`S{v%uMy7dSwcRef=J#f3M&HE1svJWcD4 zhvX}J`o?u6d96fHL5qZStkUgux`r)cib571l<6QHEmmH*DVJQ0Ur3ITQ^*ZR(DOtp zV*t0Si_D$b>Gt8Qd?Ccnu;065p{KW313M3PJB5cDX1?nOS3i6G0a2c$h36sA_%a+S zv?<34OdurvS>GB>Gu#PvKV5b$2_+U4=*p6zP;@FD$?+z*$X0rcL^xN4DP z7ItUBT6s3+14seXJGHARQYbjK;;WkSPohDdEsCz*n6&eyP*DPS=petMztgF3d_F`Q zX@;}eecCnbTOwT=IGxCSY(OGea=o&OJpAI`mn?SqtzVv9>=*uJ1xxBfCv9M4vH|l{ zmfTWPJ|8J6#=X&KvJa5NalnZvm2A&^!`5ZznHupls^oh7GNM%WLyV|E@O=p$0HyQ= z00tOK_cC}H%)yyS(M~JZ-bJz6xvxf?TYYid*?)HU`pMCfk6*B)U7lZ|U}XC|6$~du zhO*tTVZOTj8^Ra3rcx3}7<5&;Ufbem-7+FC7~wUOR+pJchaytw$;c=%yVeF-l+`Ji(xmY@IokdZrkwGAMi zDtlvGp~_)E-mQE_Hmox3tDV)(|d|IWNGzMZhQSo`h%qgv+Z3NNGKX z=kI81%LcI8Grz(S#Wiv_MzG97GI#B(!KDDsnezRivn_^0rBPbN$zy}peli@ + 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 d0288b4..0000000 --- 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 329bdef..0000000 --- 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 44edb19..0000000 --- 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 00fe7db..0000000 --- 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 dbe4fc8..0000000 --- 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 9fa1e66..0000000 --- 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 46c81be..0000000 --- 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 c262a5d..0000000 --- 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 827a47e..0000000 --- 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 773443c..0000000 --- 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 2aa5bee..0000000 --- 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 3406523..0000000 --- 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 71a4b35..0000000 --- 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 dc9fa37..0000000 --- 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 452dffe..0000000 --- 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 27c2072..0000000 --- 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 34bf1be..0000000 --- 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 4091b8f..0000000 --- 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 f14399d..0000000 --- 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 f37f8f7..0000000 --- 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 3966faa..0000000 --- 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 f1a60ab..0000000 --- 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 6b8aab2..0000000 --- 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 0592ea9..0000000 --- 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 ed3d603..0000000 --- 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 28c1b33..0000000 --- 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 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-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 14db31c..0000000 --- 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 df1430a..0000000 --- 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 bf60b7d..0000000 --- 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 12de772..0000000 --- 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 ccea310..0000000 --- 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 461b164..0000000 --- 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 e5b202c..0000000 --- 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 74f62b9..0000000 --- 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 e7aa880..0000000 --- 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 37a9d9a..0000000 --- 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 0f629dd..0000000 --- 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 cfc1d1a..0000000 --- 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 056f9a6..0000000 --- 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 cc1c8a9..0000000 --- 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 1972a97..0000000 --- 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 c232721..0000000 --- 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 a8b31b6..0000000 --- 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 c1ddf8c..0000000 --- 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 e16cbd8..0000000 --- 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 938949f..0000000 --- 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 0e46e7f..0000000 --- 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 2f990bc..0000000 --- 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 ab12913..0000000 --- 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 a6858e7..0000000 --- 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 8e6b01c..0000000 --- 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 f5f7b59..0000000 --- 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 f6d7cf1..0000000 --- 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 a6002c5..0000000 --- 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 74cd3eb..0000000 --- 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 d598147..0000000 --- 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 566ca14..0000000 --- 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 93abac3..0000000 --- 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 16898df..0000000 --- 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 f36bf82..0000000 --- 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 4eceec8..0000000 --- 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 b21b60b..0000000 --- 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 9b48dd1..0000000 --- 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 44cfc24..0000000 --- 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 6e19973..0000000 --- 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 1188ec7..0000000 --- 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 8981a55..0000000 --- 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 65dfbf1..0000000 --- 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 a22bc4c..0000000 --- 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 49a03ac..0000000 --- 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 19114f1..0000000 --- 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 a04eda9..0000000 --- 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 65ef4e8..0000000 --- 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 f1733be..0000000 --- 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 9e80151..0000000 --- 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 e49ce0b..0000000 --- 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 5206115..0000000 --- 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 8952968..0000000 --- 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 f045de3..0000000 --- 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 871f8f2..0000000 --- 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 86a289a..0000000 --- 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 f53e37b..0000000 --- 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 6a1535b..0000000 --- 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 c211c73..0000000 --- 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 043113f..0000000 --- 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 b5e42b6..0000000 --- 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 c211c73..0000000 --- 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 d80a29d..0000000 --- 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 350173d..0000000 --- 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 e494e6b..0000000 --- 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 a3f4f5c..0000000 --- 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 5ff2c83..0000000 --- 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 83fd6bb..0000000 --- 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 4ece88e..0000000 --- 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 1e8bbfd..0000000 --- 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 84dc894..0000000 --- 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 a468d88..0000000 --- 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 b179d30..0000000 --- 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 106c044..0000000 --- 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 6d2c76d..0000000 --- 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 f7ae573..0000000 --- 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 d39adc4..0000000 --- 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 3b472ee..0000000 --- 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 6c46d88..0000000 --- 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 13cd635..0000000 --- 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 0cf4247..0000000 --- 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 d871fd9..0000000 --- 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 16ec269..0000000 --- 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 77dd74d..0000000 --- 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 c34601a..0000000 --- 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 fb35617..0000000 --- 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 5f9208f..0000000 --- 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 a052368..0000000 --- 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 f497c53..0000000 --- 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 fcf3b56..0000000 --- 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 5c22b38..0000000 --- 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 0c71681..0000000 --- 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 1aa1218..0000000 --- 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 d649d92..0000000 --- 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 fad76f3..0000000 --- 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 58d13cd..0000000 --- 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 8716759..0000000 --- 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 4b49e1d..0000000 --- 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 8f7a010..0000000 --- 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 755512a..0000000 --- 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 e80025d..0000000 --- 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 2e37699..0000000 --- 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 eb39cec..0000000 --- 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 d4da0ca..0000000 --- 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 958f9e4..0000000 --- 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 3ad222d..0000000 --- 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 61445c9..0000000 --- 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 63570ea..0000000 --- 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 9285a54..0000000 --- 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 c4991a9..0000000 --- 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 685855b..0000000 --- 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 f0319df..0000000 --- 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 7c1faed..0000000 --- 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 8ca79e3..0000000 --- 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 cec3785..0000000 --- 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 01acf1a..0000000 --- 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 d225750..0000000 --- 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 4b62332..0000000 --- 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 8e40c7a..0000000 --- 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 ee147c7..0000000 --- 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 4b65e6b..0000000 --- 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 96599ae..0000000 --- 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 1a3da51..0000000 --- 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 71ae971..0000000 --- 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 d3af1b8..0000000 --- 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 caa0918..0000000 --- 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 ef656e1..0000000 --- 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 7c2cde2..0000000 --- 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 89b3957..0000000 --- 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 9335123..0000000 --- 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 e2a0ae7..0000000 --- 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 1632138..0000000 --- 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 a7afbbc..0000000 --- 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 921723b..0000000 --- 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 3d2284c..0000000 --- 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 9946442..0000000 --- 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 cdb3010..0000000 --- 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 143caf4..0000000 --- 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 52a1c57..0000000 --- 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 95eca97..0000000 --- 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 a9212ef..0000000 --- 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 54a4710..0000000 --- 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 52ad320..0000000 --- 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 b8de45f..0000000 --- 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 003f18d..0000000 --- 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 0f7fb1c..0000000 --- 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 1caf610..0000000 --- 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 6ed309d..0000000 --- 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 4356893..0000000 --- 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 e03101d..0000000 --- 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 22918b0..0000000 --- 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 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 - 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 db03f2e..0000000 --- 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 f386c6c..0000000 --- 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 e69de29..0000000 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 c1ae23b..0000000 --- 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 e37fbdb..0000000 --- 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 e69de29..0000000 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 zcmeGDRaD$Tvp0+m?j*rA5Zv7-1PCsJyE}vXKuGX}1lQp1u7g8xx53@r0|W^EO`dO` zcfU91Vqct#v(}!qSj>v zkPc125%H@z;nV6s6Uz82EV4E)znonY*LNi9=WSO$|ytcyIG|fWs zkUG)ehR3u@^mM1QgM}JJqa;b`JiF7$reRu{=Pz{ye zTll1OK}sSP&W;>rmd@r@9NvyD@YwS zL0ljgNh`3eoR6E8hL5tQg^#_3uqBPy2h8{0B5($dRvu>5-i{7V?jqizH2>i%0)PMS zYfc*K{|xc47p2h!sZvWiyIE25aqw|)u}gc~LU?FCU{b$#v$Pgbmy-D}7VuA^G++-8 z7ZFZQFE1|+FJ2C3HyciFVPRoTE*?%E9(MQ$cK1(C9%kO`PVTh-Sp2^{q^#U6+-zMu zY@MB`|M4_4clPuUrJ;e-ssD@lKLz|B?oRIiB?P!QIR8;NxjDEv|L@@*w$}e&hX14d z_wauYi>TUqTRG@T**aP|xx=R*O2f+~^dDybP1XCqsodQEq5k6}BJXHsW2Iwj=>h)l z$NrljXJu;xhOdP8|9(Wp&DIJogMX_PrQxRG{3l7y{}Lr!Go1fNHUH%E|NGbf{>cAG z#{Vm>{}tE&NCN+(!T-Cv{#RW8BMJPE2LJEw`u{I+Vg5I`vvPtXIxjeMlN$`6fWtmy z_mA?L=9pP6oqQ;T+!?T*z zRg0|Om7l#J-EX3vT*l|0Fc{7KyPh+iylDi?EpF3=GOI=FY~EXBIjOV`IM%b3c-ms* z%f0Ds=V+$tWFx{v$p%<%st@Yq0OFBL13vC)OgywD(Y;(}J+q<#l3KIBeq1QF=m7b! zc~<_N*rh6SFL9^0#%WqX38)O`ANP)%FLejK7(Rz)j~9&pOyC!vO)6z56G;-$QJ(|6 z;V9y<8ctwuQS-z|VAd!EfKuR}39{jDl~NG-;3Q^^0QlS5U9QO2xs^e1VjKcEy{sJP zA1MS*;jwbJQjmlX*SiF;ANWLxWbV`-8BU8O`IrCK@A=&=o3On3$2cs9c`lzMRV2wA zeC5Hx5`-B4VOS_cWd6^1L1lr64xU&RCMJ_cAsct0>v${7HLhmVqQu>dW&5p~R)%7R zec*h64Eo`vG$ZNA`$Q4qLY|v6_%h~ms}L@4UmkB+hMRX7&RnjH`Dxbj6i{{MCNvXx z&Gxs_W$(}ZBTY0j_FtZFMTYk?`frPJ)301PKtu(a1pY1im^@|G;7Klvh%QgghuZ0p zUnfc1)CUNwzNZE2dPu;RzY)1N%t zdt0bs?mF>FdWXNV0GTdv^>;VYiYyW6m2SflinU^X4h0vLeHLOXf@^AB% zwGU^s)gj$<;hOs>HTskTu~4CI1J>)leH(4E1XZr#7J!POM!)XCwRQtZVG!aKwdK@r z5Agw4Q(Fd89=9h@9??AOo)u2}!k4}~2e_#{2 z0m=wVQwYh&EnovjUH$J`^>RNO!IU6l$)1u=Y*+xcwNznK`qiNM`Avb;n{CD4Q$m1B z{AqVr4Zd(1)-F2IS0~9oLuB|>6>_*w73wqrMF93tz?_5N<^hhTTuN{*R$J*=31WpX z8u0rvWzuupYI_4!u*9|q_opN*#X7Foz#(_KQ7bKgAiX&L8|rJ4XA;6rrkrXAEPg)- z{jkPHM55~&2Yd~fO?b$VC&L8_qit#JBfv_*ha_9axP(|ldJj6(qPdNOXci_e2Bf^N zxsLUd=EQFU_%q1H(`y;WS#RoBAVWK7rPz(ebD2=>X;+`j+Mw26~st=}!ypTJ9c^MPMS^OlgEPu1`_<-hSYgANpC7ZwV#I zJA0*at=qK*QZ5q0`9cc~dYTOw@QY}e43x9oDF6XoN||}~OtpA`>}*H#*+u%WW>6KuOPV0~G)=rj1TD z=`<~bt$D{L#q86Yi?G7@D(uHO9+q%WpjHxhTmlRSFU>b`S<5=q+I6hGVv7VZ%xMgr z7^f9;_o$3FyeeL-xkyg7#s^r|BjZbWL$LeMr{~mmRAJdg-%;|mkSptEtX_fu<}^kZ zAbgU5S1V!VUlA9jD%+*8S4j>$*(kH=aeBKKlD!=a95o~7AJeI}M>+D2GJRT-5xK3d z&Jr>%Z}-!DtDyJ+iiNB;X z-to6i^(`qp!lsvk1h1^j9I(Bey}9dA*K;Mn#M<1y=8Tvc=T;o8_+vqe!-1atB)HSyhog) zm*XA=5F1gNqXotp)tT|L39*xFuZ9@ana(Z&0LQrxYROu47IzLl+QC|NIX125Rrg^C zzI{z!q7c~2y!^(&autvp0vKWy2BH};Z~kUyl4k$@{G#!4w5ZM>)MnXQrt#UOM9<1* zYw%O&D8!-7it{i2y{u-Mj%Z&TA89KQ@#!mF% zgNvI3FXzV70J8G)?P8e-*#&RH>cHdAC-2SA5!V(5 z=4!%G+cm5YcrnOe{wVU|j?&!c(x@f*cC2jF!1(1eEBgq$jitw1CTfAe?VDODFkK)G1i5Mq5YZ{jOV0TvImi z2WmK01hEE&?`t`!0v7qn#~N{>9rcJEU$vDtR;bQTI0CVHiix_qSIoo~3g)LWf#j(0 zoLA!yHmBDHX$;jMACCXbb|gDO;?#b|B2;karPYNyOT^@I{>Gvf9YECIxil+4#)zY` zZkJ$R+)=)DIvs{)xP7EOyk+I}OfLKS;PRXxW^r6% zC(4ipcFdL>*QU()t-%#!l}qEt?5O^q9ZXeAr`R;ixG8WZPGx0Fy2&}EtkfXZhEYsPmstJn7{So+spL}-ilG@ zrdzp8$4=Lb93{I({*$BNE4+BkoiaRGGQ1E8^QwgrY;H z-wHejcj9L!Wr9KvM>xunEDP)RYN^*HQ5jQx5ZFKHHdqgP)CuunUaL%c``F3{Gpvo%Zrifl^M6 z_mn4N!~;#<>T0aoi(n@;NM5 zK~vWI&?O4AyEL9|AFYnlQcg1ol)#QUB0;}k-7NmXve#Bx&9TGzfy=|jZ@=Yf?YzR2 zt0>$@U7;9|&>p!$x_Vo=DPWe+<(lyez(+jqZoKwmTZD<+Z+~o z`xgPRc~b#FIBJv_6YWXS$Sif5o87s%jPkyBc5eGRH(jMN`N0-4nA$~<%p5K|*_5tx z>V{O6sUv|CB8WC%tUtIHj2H1(Fe11chBDx)+Q&THKmY#NPn;lI+R}zleQ&xHfR3ow zI%Q_zXQV`D$nsi40LumVaz#4+@&(m`_S@C>A|{H8ca4of-4b0ED$@Xgev&2SaCije zoa8N!@r?fJ^1**-RsVM+i0AEoJwVlc;&;ZicZ+xkYvbkEepNeq0U{4Z!~>6@;$cKQ zQkqfC?;|SXt-s+GI}kVBj*d^eQTKap>7D%~lCz@H@JLseFGpe}YARq)@n$=P7iwEw z$3+c%Zi|SY7-{l0mUzfN1W}_{#-}VpObsztZA{wLh^6qFE*iqG#IiQG{N_-vEFxyYcJaGR`TDxP~#pUr6>HaGfQD3DR?z==| zMT>0-4B`paYSzRSYVPK|pB?G6FUknV>+4dRb9Uuv&s_bmEq*w<+OLs#d^?xl#LXP_ zcYxPb_{q7=u5E9B>@NTWNO55&jOpt*fScUTjdlPCUp0V;wOY$WTkUQ{c<$Ue_m63- zh9Vh$@$3nvu!Yqx>F8|x7QU63Gq?LmrzzKjeN0t*1IM;46?4U0&va#hmvEC0r^8!1 z;zYE&6UYBFQU43oR}AYxP0J`D*=RDHkxxS%iRzB>JFX1>-PR!zXrZQgnd(V4L4yU^{ zs-XaEb^2T>(*3W9s-7=UqB?|b;>-w>`<&T|{>f0-9fiFWr9C<5SJtH4?z-kFF1BCDaY^?BVRf; z(QDh&WN&*M!=msvPHdPWwJ2UBbaSHel9yA&0C(^2rRPbPshh33io}kF@0ULG&2%}? zej^tHcFt{rEY)QuZik)rx^8%n%*Q%WJWGkj;U3h;R#6lZJP&JFx+=;6UEzct6mE+M zc}4BEq$Qmw?TUit)jtcb{9Q!A^>eAh8dVxQF}FQi)hZ|$L!W_5RAv*5(<-(YuYIuQ zVGlkcOkPN5Rh=$8d?zpchg4M3>7d`>7BjHP>11~N+nOo)nhh~h!oLyF2JZG*)NIuTE&j(<>JfhP z!c^By-4+t68)*s=;48egJfDb&RW@>WHPV#RtMr?5`Mt*@EvYxkww%rMbWQZ@w!^mr zYZO2o&*R;`cw=4P|EIE}sL{>T>qV>(jKj6u))5-q(faM9YtjCBFiC3l%qsuEIico^yNpv& z`9?tTsly~oQG$>CdnXD~fx`5wNVz(Wz&w#>&&iJe~i8zxBwC5&kf$K&DT+=0UJ+Q~@ z!VZG~2yYR`Wx{BsE;zwn{gw&*o9t*zgel_{M&Nyk`MlIy*Y_vQ3F-?`>{?>(6llbp zzn*c>6=S>RX4ZKxjuf3MajkGaJR!vX}k#winLv)dxUmQE#I5=ne< z0XD8|aYu;L{&Eo^-?~8lAvhP?&e*{Y+V5!u`$9fi)6}=?IbY4Oq#zdF73MYX`rE7V zW0z7jp9ZgFJ=8BSP$D}dn#0+r^oQu0=K|Dh*744=uYP~)3iLCF-;TXxz?}@YJhkEv z?~v2bu*6$5v5wH0VG%aQ_oJNRfVI8z3#}Y8a_Er^-KCVpWf;^yi+`WTsA4KM51(Lb$t9FiuNL0SZkG^E+uik z=IR3X^0xANZIYI&p35G%ZB@Xk8a^-eA(gLxz#t~5AkkGZOYFEny0_*7N9;MPn(IL=;n7S=5edNBq4lm)%F7g|UDakkZl>L~Jo$usf-Sjdo66H}OmzBiQKRP2*&vIZ<4ezo%27`)F zM{2Aq^K9d3wzxb9I~mF(D`2qlkZ;;X&1v|nE=#zW=R`Fxi#V`ZiY4V%PRV05aIo%@ z5SjkGR|WS$qt0e}qgH5wgLo^r$5zNxSoq#Ocz&ZP!_OWO$+~N*7(j91ALshpdCLm` z+w#kF7%Alh@`vm*ywFb?v?n+n3)@l^5x~77BQnPYU7MJp|LCJD$1;kNH z0NJ^FVJE{-W&FJY-hLR|x6bGfk|c{thWBM$1g6Nf#Ow8xupl$==A;Q1l7?!13rwM! zK{g1F1XUJkMWssF&sHd7B$RJoEE#^OTmZ2D$i^9>YI-iMq)Fdi0dq8_FF$(_dwB8* zj+1SD#8uc#o=NUEJ*z4nEMiN#a#Xa#NRV5VW6Qpih;)xCG>A_Oo)fX{(nbip2zXay zakYl}hkUaor7NPQzDkHB)dILiJDt3QrxJJ3uq?kCv$HdJA}*Q~ut$8twj8G*UlD>> zCvP}58hx*W_$S;0F*q+njWiWdT-;$pcI=~M1=6}=wx^t30_*HTcg}WF<~Fw!@>SAD zn1N^@-K+8vb%B1aO}j!~N(QUz!x%0(S#o4+HIh_7VR6SRB%p;T4n(lZa6%s8^yArH z52$DlVX^#jvd~R?@mIZ3ohHuy4;k#RvCrhxpBIOSyT7tIS_&?rLAtLA7J@ z@nJ>VJ}Xt&P5w$DH*KD5$)xN2Io<$KT`Xha6&KS#5PPqjfs9&QQz(7mHqundx5{Kj>y!S1ct_<_{ zT@kj}QK#MoYAi>>{YwtR?7p?$SQWz#8k6Q|P@!DPIcWp>Ss5r?D%FBjM4we9$!B*7 zP8?oKhVypKP0aLK_^=k`W^S*Lq~fM0?o{%Z)u+(txAAt$j$6{t4m-SV#y*MgtwvaF zyH9l-2s?q`miAF3#51H7+{N4XyhSMfYG9Q?4l#VEP3$y~lz8GA7O9qiBVeuy7Bl>A z>k&M~B$8@sYt|`H+@MjYcsM^6G&=gys5$rbvlpR|Q~J{TZHeFDr>L~+$PMp8Q~P4yII<*G#zN(4{q!e-#JN{93^>?-kT|*qgDjkR z&MnQ>N4qME*KE}))Xoy%V#q4<_rn} zCuf>I4_&9fTU7MEc~pvZ{cPs9!E@9`4ixxSYM7%mc*sM$DqZa;g^uk2ks)tPQ#Sp~ zVvOaijNNr+@sa9ZrgOJTQM${*F6L-78BwPmPtmihzf!)#11Qbr8w8N{orX@QGDB1Z zSK-s+s@j04oIJD84pv=ml!jhbUt3n-=VT<>88prKI;bBJJr%nX085|6{^R;Y(5@y* zm#TO?i7CEFdWX6x9t9~{eDQG$pna6Mb@YVFX5~r{fQ;-^$Z?0I>X{z=A88z}f>934 zgl)GyHqhNg+c_FS-YoB1ksTjSZKB|5lF9M~y_OYatQ2ulilC*90zSC4Bz1UjX7Tkm z?K=a6gvjdWR-pT!mcudz%z~dB5CIpS=$Lo`FD0l->$}aVqeA#Op)Ag^=q`h6ul_X+ zwT|c;#;({m0|@~hIjc?Em02hj0gtI1S_8tSA6LgDIScO(ER^X&<|Y^pErHB(-=5gx z-g+gUHf<;<9@|&65E|?OP%_YE`@87K=F#3!Q{u2YmS7JsC#xw~TS@@(`vK*B;l&e!QIF5Ktg$;ysOl~q?s2SND3 zAPn0&j|Uo9ey1)Q9@jtls%a}M0FxawmU5^YJl~>T&(Ia?+Mha*|HavK1s)!z1WbQ0 z#|tydU}HLRV*PCceQy=jPu&%PF&~?O8!V&|8_nu7dc+;bn8`)YM`mE-$ELzY@`Tft z3JKltQ~ClIW>f@Ep&tR^iQUQt^{NA&I9`?3w?p5`2|v`79xbrPAN%*p`Mje~6uq#1 zgjxyDG__UDS2Jtu;wJorifMgg5JU=6o0HY z^<<*@(x<5LgH^RrQFy_(0%s{u?diZ&h@-1uSk&CBWK?db!~|(CVtqTCZdl;xz)ftZ zfS|@LB2xUupipvtD5RO9t<3YRcw2QRfk0A=Og}4h8Y1pY6uUO;$z3NQvXnnprE3Jx zBS_q{(R{+3M!WgY`elvjI%`Rp=oEzCmU|RXRG8D1LLw{Em#i%_yqG^Tua-}&TH2L;fL)1-vAUB)i@cN#Ddq+#OKrdvkTL}e0o#-@fU}eQ zVoJVo^R=t|Hl68@ruC1G6S0dBT~xG%B@{A@Cya6~jdaE`ZGS7qQp09nS?zVgEIHYb z3CrVxs$EVkDFX=>Q0w=ihF3zQ*#}VhA`x4ewQvbczQFj%k~ z^qWMx$0{{mttGANPvjszw|QTucy>f{fKf;Z2gL=vM%MLlFHaR zT)zdAr2PTDEP9Z5VaqIHxoM}aS#>j3g^FFsY1BBl2N7x8qc%gw)FL9tso>`_^PD=i z1l~tE6A00*#R)b$QIh@8c_mv>aQT6eIMK{xZZ+S?&+YD8EZot$WqId4g48~gxOctQ z?@09*zRTHwlIehxD3|s&_hB_N@qLa!VHpEpE%QAy zF+Ocy2v?nrT*0Xjp4^bJ4bG=)!q8EYoFG#?=Qw!KBVlcy?|h2{?bcmlaw_T~I!Emx zK^gKetgzzzHpO#^ABiF7fY62g5tSDsodyuj-y^l?4!j$Ev-r{ptRx&P( zc`X@vLHZPI?C7Ry609r>YLP)4uD3YmFy$C_cG(s)*k5WQ{-5N2CqHaQ*fnQsM~>ZU z36NG5Zb8ZQ%|K|Sd(86UtA*T!CeuA3r}dYJ$;y{)9%%J`==SkBQKE>iX_A*A;u>T>sv`f;u{j#fyQh~TAgIEZfm|U0AR@Fd zIlTJ+^a4P0gUDP6PYv~xc=P&X>``~~B7!>G?e&N%gEX2Bm;rtIB;39TJZ^ z^3mWk8!^f;h>gJlr#Kz%9DfOGYq?X=$rt5}WUf_;*hsi~EL6%PgCR$({py7dur}OZ zcsRwD^ot>4RWEzcJOTd*ENE_Kyd6P#b=xfCXu|QS?(8B1%fN>;5-YiQwgk{$X`>r4 z-jC{B-9gBybddK)XGh@)rmTj>wYi)HQADz4Et%V#!L#S*Ls__H`aS63T;0+r-GN+nR9<-8hsd}Wuu0{m3U;M z=04RAkFzSB42C0q2J+4c|4&_SCb4VY!@Uq>#yw0)UNgC#DTr1>0b-JHD|cm zfrFFhvK0cUe>0PAQvdEz zHHM%LuFLx_4rl3xNl$s_Y9lSg;)B0?)lt^RpEBJin(Sl#k`chC6ZSo1L4~JbZBvRx zxLezJQ-pYila(#`Dw z2%%fZ)iB^goEG*$S>X%|LcC>bkiYAOTmm=FbXz~^s|SOyp)w-Vh<9}v24U?e>58aQ zZazEcMdd9Z){uLZ#q8axH#iTz3+wlkHYqe2i;)pCV`}dqgiM|Zp>TuJ&^WVXoafLu zl1ZR|s_{e3vgbLwAPG2{-2o1lX?jhWMDHP7F;>!4_PMlIr#y{lZ7sSER6Dkri({oEujUAYD$n{nN-UH z8{Sd&Y=oFh!?GgJ!+P))c*a!Jyq^1O;1DM6*XH#2e5XI|Sb4RTYF#RersDBGYd3v~ z6UOpOw*Qcl6>#a_g$h!fDH%cz-8h{0^}EJVYoJZ)g7+w>xh)yni1XDJ!{$z|9@)t% zNz*Y)23&o$u!WPV)fp%ImO{l2$V9u9bnClxsNWK2 z3o87AQ m!In4kPIkPbimNf+I)e^2cv&s);_M!3po61!qsk4zG#Nbs?8P}CRusv_ z*KRd-3bWbn9yn!(p5|AJXa|L8;IFyajtV2v77_3K>(CR;6}9r;T7sVf*v}G|uUckT z|6bXC;%kDJT=E5{)M?VAw!Pnsf2uC|68@3N5LAWlFLROKP+J%DN8g9}ycTf~wK;S9 zL=ZM{3Z*%vu;M(q_MjkkvKAI+uZxc-dkyzaN?ulb2!VcA_xd~qu^|>IcK)t7U}Hg9~*1pU1QAr z^Zwwqr(N3bZmkS|2xY*Zk+FR&c2Fh(E5t9URF^rbBD0}K1xLr5zrIFNCiWz^SUGpD zJnr^1N)8F7VI7)9YH)`odYJSv#f}#{?bA(;_f`|9eksga9i*;jQSnlaWfKHVTj;rN z$@N}Xl4HM`8Vjk4c9j%SEtFKsg7Bbxrdb&EQS5jhlOZz)13782J&`-agSiz-h-A?k7N;S!M>zA?x%-l0 z*RGK@XViqTrXfCIr_PETWMr2VlH-~2yB1lYu;Qegu0avexz%O-`z;}Pftdcx{x?VG z`H9nXD^g7{7$%|)$q)8;D~KDH+vQZc)KI*lx60aKxzg2s7)l;NUPKRx9tmMV0?qsy z&F>qX#NY2~$!f_-p(ByKpl+s0sEH)Gv|{*{TkQ{oueS4$mWE@51jGvTOeN*-nfxLI zGI+5H@oZCVu%9I4f>GGy_O;ywX3h)_O3cy>KP4(_LfjkK_D2+W38J(wZqj&ve|01v z-@TGLjGmh~r6?@8MymJQRb8E^DFA3MOt>Ntx65TZY&KAquN%oaIZMA4=LsPg={6OS zN{XzmEo^ehKldgg)`bMITVVGsABWCNt~Bs!&cBIpm{D#}i*t}gfS)+@#ol}f>nCJH zGDzGIw+05U_$eDdld@lYDMe5E-F%;}L7Ztg-ws!^?Mfhf0e@rW9R8|fg5jStRxZU5 zB9WAS7vXIHYu8q8fY!`Dd&?nf63QW-p!6Gz`YTIbGjIY#02CWGnk1r+cQtwNE!aAb zFr^?8(Sb)$6=M!^#J5Hs0ic|D|W28TA}Y%~*zZZk9d5*dKa0_dha0j%gA!Ox#JR+Ta>Yv6g( zt;y7x?Lv8?kPrTm@2nf{`GLVf4wR>0c2^Oyd7<<|BtP!=Vs?g!L@1B_R<^ae^VEQ2 zGjts*R_+eGv{si9-!K)7a)=50;$&0GP($Ci>7fkm|pA z7?SYOvtv1>W3d_5%MhBH?9_+Y{Nv`4=>aFAXNqCbxiih>&2@!sYq&i7X9efN*kz;G zJtwl!9p=Q0aQ5T-*9C{ylE*$AjB+W=%{WxHMc6Ej@ksODTMR|BWE{1!vy=Uc&Zbl8 zPzg3xI7q}CLh_K5h#`X3T3PwKy^N@*Q{!W8lY_IT`E~8Yz%bqSRj%ciCpWv1GsVL?@b)J41 zKkmnxJ%o!^MRW|&Be~#*$sx5*@2ub}B-keVe%*j_>j~ALE&hpQ0Xiau5@7CymmKUm ztbqDS!t^n0d2v#j-qoWB0;=kx{d26H_> zM~ss_ttc;hwge&NNdc__6UFXHlYnIO?ADV?CfsdjWIPQ~O0jIWt!cF`7KRiU}Hbb;Dn|GFO$%2Gn{akX$G%)fEd zefd{SN}XBdllN+#Ug3eJ74E<;_v%AKviKsYR{||AqNT^AveN_F zt*bhXsR@1GD4k!|9e-XymJt#>cg%LN*E-_XfYwR+#DK;!LIkD-J25aFf*rsQ>S8}L z=VFZ&8Lfk&O7k$R8S?C?74Bt{mzfcf)Vl1GwTVzwyY^87*)bKjJ;}%GeB7M;gxfVD z#&=d>b^4jk$7rzRxt>CT?5_F5G#5+xH_P{dGvK1cSv=xX?CHsn-9jAqfB3m4IhDxt zlbWH*a!tU@j?+HVz5eTk+-fM@p$$!nHpF9^PA`F{RVrZNeQjL|Vrqv~l?%{{sEk|~ z30{y_f*)W#Jop}VSg0ba2Hk~a&1}__EJR=wzx6@@+5|3S{jd;@xvz&dGp2(b8b4N7 z)0Zd2;2y;TXr+x4fY`iBSiWj3sUAUw4bOl^F4%op!KEO}k-Ua7O^!>HkgMe;Z*xI6 z&c7Q^!+F3nzmH?)Nv*=RU#CqOIPK`GTKn5t(lT!QF_;+NR!0Ee-qr)&H(qsqQK9+y zrlNTsZx^yeIN~0goA@!ZrL_f6A2`YoG(uV+=c^vV(1)k~j=G`LVDYf#?PsnuEYGINubKR<#}ErI3!dWMw++ahcJIa%~pNsM;Y z$|ci&%BhgOXeV4ijPBb3Uv?aJ`P2>9m3j0=ch));bvo86tq`ny?P)kW!0P00v{wEe2!6-Ek~1-7*I<;ob$ zU9mq}-ldn-HDg^fRMCE-|V0GuF1#_|FiA*K<(b4E8g+BS5ao(y;Ld zS0|epIUCs1$-V+=JzwPL06}PX+rsN?&o5b#a1;?;8k&ryZ!EhB9%GeC>KX@h(&?37 z9a|b}@S)m)B|1FQYa%S($ke17Got8kP3bOKWkKmqG5d;9+rYU`h1^reAvI9yhp?$3 zfl-;$PHyz-5N=MJukNAyjLa=5#)^vTvqPo~9o7_(dd#?Q_^w;%Kfi`ek)&>mEb!g9 zjtM19z3WUH^s&(?o;4Uc_{m@g{3Mzh#n9;hkA3t*5R&3M1RIJ@GE{vBY+@niNf3LL z1$>j}l!jn?Y3yWvdcw;13ltyed^2Vew1Z)95z&W6^`MK3MuI?rD?{4A^ROd-JQC_Q zg-k6Hg@lUg-XpaMCWQCv$RigEYhj&Mtpz1c!308_kB;Z3P*Knx*&Jh*ng2l5AUZY{ zN6ro(S2+%x7~ZAKIRfRXcGY~UDHXY>6~m~T6#U>y4p#Y!@4AhC9k(kL48`cjr&NUg zu|kfrQpCai!I^yc50dB#4>FpcE8B4iO&qzrHKNCnHM84xka_RqlD(FhRZG+Lr(7(H zv3u3B*?WOBxLK%_ z*#xhJjG{JuiKeL*KjtX6;a|WwsD#6ug`RQCWMw6|BkrwA8Zun|Cvhx$qhr5bc$?^T zf1n&@9`?f`ZEc~+Hjf^eh0dD^x@tav3zb&;&59arW?oaqwv>qDd?-%mec)2|SAFBg z!0owi=Z_%lut>B5-G#-|nOD`_bGuci%$w+hYS@90?SF1h(0X;1%V=I&Vm%?Q`wanz zcb+HI%vQXpBIbJEy~%l1PGm`F7HJzk>um*uTBc5Vsh8>(0POk5vFK?k$oXSC9H5P% z(I1|$$GE51| zEJk?K5zSFVe!51=il1K>SFM)(aD5U_v4FWCg(2*yhK_N z-2hBOQ*0m@y3Bh-%C&EirQ6b9hFd6M$Lkk{f0si@(DYJgeiUI5I8~VMZ&Om&{S80` z%u!9y!cW~dA6a!imy=}RP?_=X{y5}A5A2Ry7#vAG-E#)UiM6ZJN4ef!r6ggXw z4=IyP7AXUl9r6I(c}T%oHAg@!cL=;kpcfh4d-)VB%?P1`2rzx49h|!N+#osHGkNR( z+NFjB=#75r5DTK4gmb>zzsNs1=^v)dwHGm*zn(Krw+C`iq#P?azK~ldY{Ch)Z&W(6 zSup1#BQWK?z@O4YK(~OQP((A#zgldce$i@4%7F>`2>?kr)1(#hFWy2C-FX zYgT+L;PUXvcRL$Qn7KJvB9TE+@rtTvkaXeMl9&~3=peXkKqPuaTeuvFvQHu%5%ExG~V@>WvI}an(FknuCWP ze{6hZTG8*je**C-lVepi|8BrKj@}2KTA8gFh4xO-9NK>QWlxO~zpaH;fvkyAzQ$sH zJ1}p7flL4nb#9jJR^W8I0@6$eD!7CZ**d{Ho*e!4*QddssAMZ~DmC za?+8cj?yjL2F!_v-0!=?Jyv+T(3KAxA%b`j%SNi}kLyRDSGKyA22D2=3F-s~sJNrI zo!LX625Fm@K)4q&OPC7%;jJFQLF;An{GOoVYKmNhLXm-B(?g}l3wPiUay@cxr4P6zo z*p>0XGwTiE+LZ}c@iLPcO=QF+#<6eDP4mmL)x7I|_c*87Hcv*RXJy=s&GEH&r2aU8PtWJofUEMg zMN<1fqp|i0TvZ{aUbjczC)|dq@cO$U^tXoZ$-nj2T!3NMZJGCP7w2|}D|!3dii^|~ z7`MWmlE}d?&z7b$?&%@XPr77vq&y)X@Vr68mxJ=;<2r;wvwb+o*kN`G?+}yZp~5X> z!{bCKukJte*Q*tu3{Y2x7LTeu2R?RRE5h3WqB5er@ai-Yt_R%tIz%Yba-?k^54=Ei z`%wgQgnfT^pD|C}EX)>Dn4FiME<8y-(I&e8;KOO0hy<(s&gN8Ri-QnB1odVW)sc`T zmhU_`xhsq0nof&~BI{^ps2PfEpe4QybW;2ppM_6+Au##uNQosD7~cBC+gNCdayq2p zH(6?yUH=>E-@1z9oo6b}bPSsfMo!t+oQ%FeHz_mQuBCCVX%MEhG6wAJJkf_zdF(Lw zjH@r6W!MI6V1G{^(R61Ot0~Fl`PnhLO~dwG7+>BAi?OOePcuvuuUfO3pT;w;Hec?X zL&57O@5}P;mU(KaoNxJp9ik6#Z^}+bn+b@vR6f6BbX+jef_<>%@Sy&uJvR3GzAqo- zR*#Vpc~`Pj*A?A!3_!zs@_(a<69%7O*PQ2-n!n;k{xp%|y{<&4nhdn8+@TRbTT+mdY7} zor5QZSkQyA8y>cg;q75qCeoe!xKQEp^{k-sgPa1jCl<6vVOtux*Zosr^^pr=vT+`D z-4gGJxZry+@b0Zbzh~3R=@LvZH1UTD{h5IMo`BQ7*bjE`jVcgYccmYrJ!T2`z*Rjag|Bvz;12GUycW! z=Cot@nL!_vgMxqT0UGeTk<)k5Pd?Ur&tiUFG>;#jWi3|PeXrGA7H68EUTg}DU(^YA z`#Fr_=Qb7cq~Z+Y5G1-!t)kcgw&-OKq$ufJ!F>YAqGKdno+p`peD_al<|}RgkLq;f zSjD8mNCjxip-bGuewvi}@?52-_Gxm2yPgOPjEA`VTzaG#j3E&wwaW zZ!P4T2)iAf#O4=ix!*}3u0bXr2P~k^hXnc-f5(r40~}0RODmK4xWtd0XlPP%m3b=@ z#l?%Xr>SO@mX_WMD3?o~x)I+wtQ`-&)5>Z}kBF%0MZrKWo_%&%agFW=? znpC96g|oZ_s;ycN4aI~6Ap^6{%=Voj_!xHGPw=#)-PeyQUJG`!hX+RUSb66@S$tf; z$G(cnXKQuAQPh~(%g4?yugZK%&h_Pnm)`Qt8JUgQ1-Wtf+Y=W)-x4tk4^ zj}Jf2+(-51n2-q5a{ok@P(=zjc}UA%+^pg@Lh9Q?mAco9+66o;EL(anc8QJusv6Z8f4vr1td^yyle}BI+xk@#P z#kGTvhg}mO1X7HA+V)ND$M^F78kY_=6Ro009EG2+{<)v0 zi~5BifVho+K;D*bu7;=w&Y*7ARa--=@v+#CtksBrS881|N1``A_dB|ot_61~9r~mu zSAPpeyb(Kwk}GsGu==T%J#CWAHS@k6^@#T|WiTA47?E}ZN@wcfbw-d7d=`VdW|doW zBzPNMyUAZ@8JTI~vE$tSl%?7*haR)FkH}fG(rT~T#Rp*^$JPAJ_5y?Z<{Zn-2cUSF z6Z;puVyYQ3{};0HPvj+32{HOu(MNkLW%isT@ZKmieO#3jyW;S}UrwFRrHDX;`EU{f zpnqNXzu$`lTi3tu$an$R?==jlKStLXJM#(?Ck`5((a7pt_-$&~wpQI**c(teZSHYK z;nh)Qa={@&@kLyzwz zzSZ}>U-a9K15+8FU!M8iMDhkISLzu8GaeijfjhE&4?0GC94QJ@ zCFgyGMR#7&OK{M;rc%|jAV+Vv1${ZCnBz3byWcf{a*AZldqh@Z24)vb>Ajk1P{z=I zaYKYJClsM>Yt@tDakXLrb6iw@TV3!OcJZri1<0 z-*dFOJb!;i2$y0kn}78^er@d1p&r&%(^{b~2ig0zYhcY*5;DM-i&k0h=f9j-?Pvjl@FthiJiO{Fy}MsC83?tntb)9_Q{0 zhbsJcMVC^tau7Nf5ADA^uRq7?l>L;V{=B(Lb0gOJre&o0!~-YxJrI+LZS~&x25X~* zqd^0$1_dMNY(KKYmoYYbPCPihU6^!m9GmvLnEy4|diy7txXy7Y`RS$8Yuyym|EG#G zkB6!a`}iOsTRpbyMUgCF%#17zl_yDv9+kmZGL|v+U5u1elcgeC8ss7S)>twc3S*f; zp~)^{ERAi9oq3PvegAp?IRBmVIrn{^>%Q)5IlnJRW^Qu}FkY=-5kR{x=!S{Ui2NP0 zz|-LsE=LQOA+MU{zdGtgWK6Me5(XW8d$t#`3Cr&c<7^!MoQfFl9lhe{(8E-(vt>`3}F{6hgL?pYHq$ zXPU4}<3e$A>1|$0c^5z+Vdfzh;NJHmK?<3nYx1ukfe7{6+#cT~GZ#OZW_ikpEt6>( zU)`?3%TeyZW#ZT?dcQny}C)FDE61O#S)L6btchI>++LIYAOc zkuy0aGBeW*%84V8sJ7;Q_U`JJLd}5@$l5FmEi}rXeVZDAafZJi38_5DdHe`JAs`4c zb!YYwpB7-@AcA8&D3iau{4(e#)LMVbconNaGTg;(Hy{!*NBM4I=>3MEyJ1#9;iowD zSd8O-=~#J0@4c%}pcqYkv#78^p^n0=B3AK9yZfh@2o(a3rv!c)Pul;-+x(_Xzpz&? zb{pfOO^<8j13h_(_}P1EjZ(me3T46-3Va-W_KYWERYSy0cC6BJ;LVsqp%o{V^8K46 zaU`{{cYky{NH`u&BJ}Nw=qy0)rrK>yNa5-_ug_Q1`K>Q6n{!iQN*MI-5ykwJlmuRn z798|2J@5J2aPDa+kEpb{hdB;%OG2NZb z(8_RZ;As&*K}8;LwsE6_NzEma@x#CeF~ z0Q2youjfmhy(2+oOx_tbpB`UOu6mS-)pD!V*4=7E{M^oR@Cc7O{b^!{zn?xfBRa&E zUiN*gU8DQc4p78C8pJ0z{V9{vTwF{zC#@m*;l}Z{q=k3hDvEK9+wvzsdw_hhsvh6c zc4h(265|3aRvpO28Z4~@WAC1Sol&xR4fp|jH_K*TdqkM>Wj0Nl+oK8$VdqbaI*uv# zOz}X3PX!#^0OU^d)*;RcIVin;mM%<$t^KM22(=xY#NE&I3!{KN8_{Au^!o+@7kA`d z=Q+UlHuBPs#Ylk;{Uep_;k8ugZlV+W(;0OdMt(W#HX0cH zkXCCpa*}EP_?BOx2nRJ^yB;Th;&wq{5l2jebHu0NZuaubC<8qo3bq*2C{nI&O&b&R?Z8U4-`RWVsBt=apg1OgCE&%P>EP_!6`=r>s?D5ZvaBbYw;f z2$owi2892%LTiCkigm^xb9;03is^QCz*9hUG{}uQSUxAD87M>U28(1$(urWaMn>BQ zW`JE_^etMg_yXy_avv_Dyt$164D%ZN^lUilyqmRy+GIs-^7(?5sWeOfy*914#i>sn zQkA%CzBHNunPSY;ttw@b+R`$LOl+ID@W8CLdKdUwM9D;h3)AnI{KQ(wa-zTIp@<#* zvS+65#mkoLsrc5?tUX~mDG}&i|7#7h3M-6RZX_i#+jO%3O$lxdi8ex_< z6{Jton!VnlQg(g1ti zbXv^*W2Nx06 z^R9d}#02e9#D?kFX4C4)R)RNwMW*F(_tzc9AqT%@X0Y2r7qCp1h2WgLOy{UToUae^ z>v+rQ@Ppr4Y$lB@rFsQ%v12n>%ax{MQaCiVpGz^nXAT37v;Yn&mV7*^7d>GPEYpd` z5JJLqZ+F-Z@*Rc3%}VoX`*+bZTo&*&s9BdCeJaXYk{flb?^X8zXfl`~dEj>-yhqp% zTL6#zKl!8M7WM9zyF(kwjX+&1_9ZMv1xo~qeIrHklOI-M@?WHIg1J39d0-&jy75V* z<-tpM&B0^O6f^F!gHMTT^om(+cT8z#WCo&kzjNt!Z7P2ar~2y1wyTly)7~9pkDdD}vSzj%xJ>g6xLC&_Irl>L9C^YTf-zV+sy#iE?5Y|@j zMax3?lNOO{6{;k%nnF%=?ZzKC+~H|r{bf~Exw4i~%_|O+`bIZRj|WK7^uKOaR)@=z za?9+Ou22_?4(1o<1^G$!P!w|?QRG`F3_2<=l~1!V?Lccu6u!Q$?FQVuZ6v7Shm!5p zxqB+6Y^QV~)q=`}P&{hlqYSGdYLkE-3kkWU<%60~*6Zh~uAc01Uht1d`u(lun!Ur* zc>|&T!Oz8eu!DTo%_&vSO+o=iN#G{umm#h$=d89(MEK*tZHO9AP{v$ z6`h>=bdvI-G%b#yTqNh-+9x_dNh?=6&)+kqoiWQP6dOMwXt=*48q)TBX4GedqkF!C z@tb($-WwE{3;fGPE`8I_mnCxHo^6JUM^|3#(99UpVCS{phy{)k;J-W8hog&mHY>%L zBO!*H)yVY#I}N42Y&EphtQgb!1a+I|Be_>j)hJ6*BNYBcELM=d;AeRje{Fa~tTB z9wqVQukO>aLUvnauf-krb`ZA@0umRxz3w|HLOE!oyTXB5CjJfN^wd6* zlK`X5b-XQ4MRVgnGE+D|Z;W!lb9@~CPFJ+S;6iM)+Vwf~;f4gL1kDj6Qpda%@ZS3^ zwi7xpJgcjtH3~xaxmBe%_MOd`e#3OTW>x_RBh)*iuC%}ft(%UG9@(qQxGf>TSgb_3#gbvnoq3|U?D`jg))Qqr6pE}POA&whGZls5H za%ueE(BjzY%|Aeso-^pZqBZ?!7kE}gvy-Tk$P4fB7>d74={#)UeD^MK?syS?2eI= zxwmQ^UVkBYbxiBCZz~*z3Ml8c_mwrWfzreW`dfS7xczdQzOZF86ACWlc6%Yn{oz9| zju{1Hm2l1FUmwEoqEu=w?aol%QSKCV-s3%1R93SF zY0Ge?JutC(u_9^zC?xZyrp!J0KC%zU`S(;G| z4}xbli3{(P+67sSX+UIarpj*~me#l$jSYGp7*`DG^ZnEC_8?BPM>mMGO~;llg?;ct zuf5J!{y)3~E~n*;(qH#s2~nl@ZJRG9v34bOEEXEXF@nj37w`eBe>KPr=W(98XgA=mD^ovP0CRFEul+QyzA1Ie5_xIHMSCmi+byz#-S}g&HT_lO zpUJcfr9VFW@?@$WeB6PcG8&R%7v6&6#VHY8qqiubgiJr8U4 zABm*mNWIYJ*$IA|x%)1mYsUNzLu(nFAJ1|_*;C4oo2%8|B7A4htI+T=2<>vkv`!8q z;p9U;8m7~jT4Bgr+kP>g@iWXJ@`*bkUapdwC${mVHc7f+;wqD4NAr6?+@O;!c!dLCqtTABcGkeAsYdpqUcvv~E=%E^zaRAU!w1t%K$ET;+T}>I|Mg1T zmj&9tnUi|LV5x8J^_?mFN8PfZ^_*; z3%Dr&ksIxf20<(Ez!uS>#VAEf4nY2vjrUabPZ(_Yoj7d}VgeebZY0*0tn~rk;f<(`z#+>HSjt049!KUOKd - 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 1ad30e8..0000000 --- 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 e69de29..0000000 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 540382a..0000000 --- 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 d844b9a..0000000 --- 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 0000000..9dc9778 --- /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 0000000..303180d --- /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 0000000..0003413 --- /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 fa6f3c3..0000000 --- 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 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 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 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-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 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 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 308982d..0000000 --- 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 805f39b..0000000 --- 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 418f481..0000000 --- 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 6663ee0..0000000 --- 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 012e6f9..0000000 --- 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 99b2afb..0000000 --- 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 db7b923..0000000 --- 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 e8710ef..0000000 --- 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 7fe9a33..0000000 --- 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 66f5bf9..0000000 --- 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 f8616d3..0000000 --- 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 a8427af..0000000 --- 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 39c7ef8..0000000 --- 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 622583e..0000000 --- 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 33e310d..0000000 --- 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 a7ce983..0000000 --- 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 72aec3d..0000000 --- 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 f37baf4..0000000 --- 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 631b6e3..0000000 --- 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 8db3c74..0000000 --- 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 8843b98..0000000 --- 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 6d896dd..0000000 --- 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 e1fe3ae..0000000 --- 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 20dcfc4..0000000 --- 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 cfc1490..0000000 --- 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 52b597b..0000000 --- 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 6c49ec1..0000000 --- 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 4b6ac65..0000000 --- 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 f082c2a..0000000 --- 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 ef432b5..0000000 --- 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 f84c594..0000000 --- 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 d8d38fe..0000000 --- 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 4681601..0000000 --- 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 30f554d..0000000 --- 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 04578ed..0000000 --- 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 efba945..0000000 --- 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 ba3b3f9..0000000 --- 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 45876c6..0000000 --- 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 bb98d32..0000000 --- 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 1a29e6d..0000000 --- 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 e014e9a..0000000 --- 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 c2ef483..0000000 --- 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 c04aef4..0000000 --- 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 79fa90b..0000000 --- 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 6cdaf94..0000000 --- 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 0f18e73..0000000 --- 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 7a59e6e..0000000 --- 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 0000000..19e69f9 --- /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 0000000..0b25c77 --- /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 0000000..bd32ffb --- /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 0000000..3df7dbf --- /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 e8e2fd0..492158b 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 0000000..2e72593 --- /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 0000000..f447d17 --- /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 61882e3..0000000 --- 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 1562815..0000000 --- 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 4bbd8ee..0000000 --- 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 0b2ad00..0000000 --- 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 1d04eab..0000000 --- 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 3fe0e48..0000000 --- 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 0000000..065a6eb --- /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 a7afbbc..c64d288 --- 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 921723b..aa939b3 --- 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 0000000..357c109 --- /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 0000000..c00f6c9 --- /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 0000000..4edce9e --- /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 0000000..8537dc5 --- /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 0000000..d66dd36 --- /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 0000000..4fc35a5 --- /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 0000000..c24fcca --- /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 0000000..a063d07 --- /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 0000000..f479682 --- /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 cdb3010..5d96eb0 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 0000000..eb0d2b5 --- /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 0000000..e9ec1c2 --- /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 a9212ef..43d12bc 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 0000000..9f2d3df --- /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 0000000..061ab11 --- /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 6ed309d..909409c 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 0000000..c63d8fe --- /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 0000000..c79b627 --- /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 efceae8..9ae94f2 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 0000000..ff839d0 --- /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&<<+ 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/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&<<+ 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 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 0000000..a67c238 --- /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 18d029f..f753c17 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 0000000..7310d23 --- /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 0000000..ef0e874 --- /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 13d3e49..9370956 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 0000000..6d2187f --- /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 0000000..41aac6c --- /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 904710a..7910f32 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 93854d8..11b9845 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 0000000..08b7566 --- /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 0000000..d7765e0 --- /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 8b7ca42..4010cb0 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 0000000..5380258 --- /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 0000000..5a8953d --- /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 1351f93..72b3793 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 0000000..3cd3b2c --- /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 0000000..14491d4 --- /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 a279fa2..6787567 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 0000000..163ec4a --- /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 0000000..e4bb205 --- /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 0000000..d7425b9 --- /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 28c1b33..abe7781 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 0000000..4b12502 --- /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 399084c..038051b 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 0e6cf5a..f36b391 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: "" + 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 + # 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 0000000..39fcc50 --- /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 5245c86..d4ad97d 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 0000000..c4d4039 --- /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 0000000..617d7ff --- /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 cfc1d1a..a13662a 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 1d8d0ef..ce39913 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 5ebc548..c20042f 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 5f86d74..0326bd2 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 0000000..8f41c53 --- /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 0000000..32e4030 --- /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 e816034..9a24956 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 85f754f..abbf6af 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 0000000..c62cdd0 --- /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 0000000..4cdd61e --- /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 65a4216..6c5be2a 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 c322907..023d37e 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 0000000..28b4e73 --- /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 938949f..138be73 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 0000000..1ba1007 --- /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 0000000..31925f9 --- /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 8e6b01c..48d7964 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 0000000..3af2976 --- /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 0000000..cc32f6e --- /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 68ac3a7..8374ba7 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 35080e3..fb7fc3f 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 0000000..d8aca6f --- /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 71e3d70..0489d5e 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 427ae0b..4791de4 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 0000000..4f2fec9 --- /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 44cfc24..1a192c0 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 6845d02..f89bbd9 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 0000000..6e3b333 --- /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 65dfbf1..5215809 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 3950980..207843b 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 0000000..9734c91 --- /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 c793410..e79c65d 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 3f29e61..525dfae 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 0000000..e5f3549 --- /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 dfa9bbb..90f5da0 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 a8dccab..0d47dca 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' - ## percentage of total pods to target + ## 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: '' + 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 + ## 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 0000000..6698a18 --- /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 c211c73..047908d 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 0000000..67d6e56 --- /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 0000000..2f30ef2 --- /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 83fd6bb..c927738 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 fc21808..21524ad 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 0000000..8bd22fe --- /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 a468d88..f6b1f5f 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 0e6cf5a..2fcfb41 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 0000000..e612f81 --- /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 ed00d91..a3c47ac 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 0000000..61084e9 --- /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 0000000..4f8ff4e --- /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 918ae07..36fc8f9 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 0000000..b9e3838 --- /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 0000000..3cbface --- /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 84ee278..d9233e3 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 0000000..fca5bbb --- /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 0000000..c80fef8 --- /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 a052368..2c234cf 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 0000000..0d8535b --- /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 0000000..9f83a09 --- /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 95f368e..f819c01 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 0000000..6e58693 --- /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 0000000..05cb062 --- /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 4b49e1d..c9de57f 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 ea37036..1ec5864 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 0000000..445e8c4 --- /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 5bc6b0d..a7ec850 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 6f22101..0e8d1cc 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 0000000..01cbf41 --- /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 d039dee..799d502 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 2c7afff..d461020 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 0000000..0697740 --- /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 63570ea..2b9310e 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 fc21808..9d2f187 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: '' - # provide the name of container runtime, it supports docker, containerd, crio + # 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' + - 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 0000000..eec89d3 --- /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 7c1faed..5141f52 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 0000000..d1fe39e --- /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 0000000..6520a1f --- /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 aa4396c..3529ae2 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 0000000..88a3f53 --- /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 0000000..ac56fd9 --- /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 96599ae..8dda8d7 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 4594342..e257b50 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: TARGET_CONTAINER + value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'chaosnative/go-runner:ci' + + - 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: '120' + value: '60' # in seconds - ## 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 + # time period to wait before and after injection of chaos in sec + - name: RAMP_TIME value: '' - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Percentage of total pods to target + ## 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: 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 lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## provide the cluster runtime + # 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: '' + + # 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 0000000..d93c10e --- /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 ef656e1..30c3bc2 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 0000000..1cea58a --- /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 0000000..759b0a0 --- /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 81def27..86be567 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 0000000..2266ac0 --- /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 0000000..de56716 --- /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 e79586d..4bf5283 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 0000000..c33668f --- /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 0000000..d7df006 --- /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 fb496bc..f4366d4 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 0000000..80682ec --- /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 0000000..dc877e1 --- /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 ce886a0..a869d92 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 0000000..a273466 --- /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 0000000..4a02c76 --- /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 d34469c..61d4590 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 0000000..dcc566c --- /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 0000000..9bfc331 --- /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 16da3a5..042c2ba 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 0000000..0b1e02f --- /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 0000000..e5a2cf4 --- /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 0000000..49109e0 --- /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 0347743..7119887 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 a9fa88a..974b97c 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 46b9162..49ab0c9 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 0000000..fcec5e0 --- /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 0000000..85798b2 --- /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 3fe0e48..812c39e 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 5d23cfc..0000000 --- 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 fc67c5f..0000000 --- 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 c565503..0000000 --- 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 bc4c726..0000000 --- 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 zWU0r>RXQ81Z zL|rN)t(qyi2vgp|5?#SWQL1*OIcY#rw{A9Or{t{?^iO}n!St8r(;fc(bxqRqG1~bl zY`%mj5n_L}6TGI6Xmvc|*ExxQPC=q2%^EIDG)Y7_cC+_R)t3ogL?06Sy6+F#B^<-0 z&vyZjcHo+}tzKb=rPoKJm!{f~&{%wZAVO*tgIgWfO~xs|bUbLtO#mCx=#*oF^gBgcWRF>2)?J=2zcL)1Mw_#`Tg3|GLU!06SK;A zJXU3Luw}9@mOu~O<%15^#mchQVGCY=O8mSt0*8kX)X9seA~*JdmUQHgb8JQAsy>Y( z-x{E$vM1judM7bQzwijUi)IVdOu)u2cnJ3KoZj*^8u&>Nd4`G*Othg*AN*B(@c%cU zvEs!wZM+q15<*sVVE9vZQ>3eFckHWE^RR-@9j|%Or_k^rQMEhy{g`1x5`#3GA%AL* z*$h4iL*ha-hK$E_@GNjh@v=oUgUW%j0~9z#cRMSz2Xmc3=lH9QO~5 zCgcb_)+&hz(eMcxA?jacsiDej#l>(a!d}z+j#h3%{CkzhXDB_o5?i0HlMdAmQ0Z{Ne!QLc%zS`5^kcnlY zXq^4vW_Q5%iHZX(`aV>q*Ur0~vHJ6UXQbTRuU&f_`Wu2N58Zkm8uhv7cm!Ps)&Gkn z96|IQM07_87Q7HTvN;QL3Ef7lkZGcxBAx;ximrcriNiHCTY4!!am=x~4e&vaK*h@v5>4&YsfbD+f~^PxaBl1$==Fcr z(tUvZN#paPd8(xih%QgBkJzQ1vo#H%>8M zz5aZnAoyBts%_JUA(_>!B5|SeK#GRVhgWQspX<_;yrhp!=53d|*Y)1|Z2cUzmT8|c zFN;y?T_9Dr6bV--Kz3ZolW<50oM9yV)p+<=Gm zpJ19~X-_xup3LoW&-*)T)5UpWB#_MDn=Y~Q>3**#7YUG2rsMES{e^aJ)LnwO5`i28 zZ|3%zV?#>jsr^Zzk7ZL4)gW z!_E+FxfvtW4dJ_y_D1&@Sm6s2#TS&P$%!4E;fL1`M-CK z!fvqeuc|?ioF?~2+Tz%W?__}+yQ>!r_8z%HX^;>*&zH8PU1E;FYdbGM&|vR%F*=J! zK!QqWa!jy1jAMURFJ{=i0KQW^ps0+D$;|SfCw2qC7}O~9jxoPTz@cV zLr!R7#Q!1wTOLP8JMNp{ZOjn)X;oQsy=(!mGHZzLp_e#<>!;Uu*n#9h_S{MkaO-vY z759DWeb(=NqHLq*hUeWON@9|kOJIdX2|hVs5bEs~x>vkplL4oSaKOI9KuWpHu|X{X z6gZ2hLYbx@V>r3zZ67w82OnD;ou$HRE1|p7e9xAp=fK*;05~2t7<0!XkIUzLOC#%PggWbaiCoYvI#ERysY8-(AhKYtXEpT&+&pfRSBY$H=qlnyzCx_)0 z|cY%%}oX z<-R|faxjHFonjFas`U@ZFSr>*P=sM~NcZZ~RP0%G5b3kCE7;|mUzRAb*5y-Yk3HhU z#~xk8ZC0H2V;dDvB4xBp?m&supx>)puu_iGkoD9bC^-f^@z(|aiq}#dCUlzl@(@f2 zZpl3O-jV~#n&hT)@)!Kicl34?aOs57b7l4J%Aq$rCyS2jlIkg4u3O;nO~L|S^sE*W zW&Kp=-*HnD*4QqG^q-+WknXjhlC`xJn3(O3qLEdopP8Q1EMF9L>SQAP?f*FUK=u3v zg_OH@tUBi#b)Fk$_G~j3yv}u?WR81KC+kn@nIQ>g*ym!@tN`*zNvBUO%{E>)alCsr z=XF+ByXx$Nc5RuFlHx_sd=`IVyht`oL+X zc}vO6zFDZZ&Rp)j!TyORHPfNuc^8ttlNf4Y(^WL=DT-saKdMfYim9A?G|mhFdUQIY z?~M)?I@q+tPY=rzvq?af;hhj_F%r2|M> znvbLL-XbGKOv!1B8%;)O^IY%RpK+M_0h_kgYtO7EFtT;L5Z+O;Os0&`3R=iD$>Nf{ zB0OvY*3i6*ggGjk+P?CB*Lfs77jeBpo0D>7wMLXB8ebGE4PT?5ph-aUPWLq=3nLEn3rGx5WETIb3YH8SIL9F*bVALu1oY`@5pK#;WGD*3wmuy7%>%VJgdH^iA|@uVh;dvYT!X&(P$~Rs@DiE%UT3{we~2 ziN~{h+FB2VH@E(-#e;Dbd~?;p?p2i~xQ@}DkX~CADkj3OmV)UPSwD$~ExkjqJM&`a zj%Kx}-*f}2e(`LNar*lIsRU4Kne-IBbt8r$BPvTS*kPnR0<+z{2#ZdTN^Ug_^=hX& zKQy<2Tnn=2SKi0e-hs;%tDV0>$FKMZIF8w)TwO#88f_5D+zfb+tH#-yA}n;27-`R) z3&ufR+}nhtQvNAv;hc9`2pw9A$1#HEd!Xe1>81{_VS7rBf+Q0+YKw!bjGE1S>F~nv z06!zW65^6if@$Z+TVEBk5zhB#3eJQF&~~t)xNX2lFDb`z7Usy3iDsOhrfvU*lPKFx zr(16WGiD0ve|?rM$WCM!Wxrl`DL$xL9Ht!kBVkZAU*11kT=?Mo6;X+Wgh7fxY7RLn zRZXzjJlQ1<$rh*Yq9gG+R0eb7_ayo>g0s2=oS&zdy2a^}I=I#N>sH5I-r2k6=!Wm5 z1n}Y%`+H3^_|YogMXOfdHP#zDVelHtIr(9Te#BexvcN5~sOAj!SiI5Qa^_-g zmFZ^8<{lF6)RAosvmjZVZ{y&g;C?}kBAS=ecRjajjDV)=~gE%7oc99&g16buOodv zeu5!Wg;DLy-03IAv>5tj%&<85qe(n~0*t$E_QP8c1bF>!*S03z4a}mfWS@1k3>2L+ zPH9GGJN)o z9vYM(q+5-0n{@vPxsxy+W~7X>PLIe$2wt!xfBx7YDu#1WsL-Ow1+brLRsA4G^;vIY z2^3*d_40L#u6K(fma9TzV*W?KE@V-xY+&Pwbu({?s-i`itSMontU2jxU$$nWRodZ; z-Jzm1j(b^_*Dl2FK!2#x@C&dFi=OtC+0uC7w*B{YwLDhua54*$O~1QN9tJ5knPQux zfrRf6dV?MG&mh5TZwaR*?nB<$bF1my6Y1sxC>DR$Q%4Oc&-wHA&uzl4dgz>6U3Y2O zzXJD5&ZaIKXM;0q+DCGm7(sZJd_KbY`(~67yVW5&(1e776h}B+`zT| z<*k?4E$2GlofcciR^d`K(b;lR9|b`!fOGfn}|%P3wHRzu!;&7FY;UyIc%Ofa)T0Erd2`oRI$o;FYY%` z0|?t5t**(Wb;4KF()iQ&b8Q^BaliDD?D|_eJF7+yjKjQ3(Y-AkT~T&8Ev5M+Szad+ zD57}y8%Msn&NSy0IX%4Ijw5f}DN)dx>rgr1LDORw{h3jTN%TTj{iGU+js@N_D2*Y* zcF7>kG!+gsU6ERHakxg6gy8Vz5Y$}FuC37!&?_D zS&Qi1`7dSsGbiG<-T)2`j>Ub^kYH2h0lJ3UCM2Fw>*K82SWbC5Wt;0eP`JPlU1v+;puHNd&`3`JR1xlF`iT<6;wap@z z!Iq1H8lU;j3{$T;7eSBT2Hfv}vST+=ej4i;?0+KPYmv;`RR>4icV?m3zjB>q{& zB$n{SLf>S;zz8c0Lb*RAe4->PB25jo`+Mx7d?icK8{gu7L#LjtE;mxyhoDRklXD0N zO23Ba{ngOlW9hCPOV77r$9Zf-s{DJ<%E#wSx_xqgxT**w#;G?0A1JU#I%KXF_I6Fr z3FK(2Iau0i3ql9#+CP123x^U*z72a}QNG1thJy8GDq^&&)@WdxIDad+JMbzW(EYlh z_hIxr!#<<`UbCnuZPFbqs4T8`LQxapmwn3`mhI&k+V`jbiOmw92D=-J&k(Jyn9W<1 zt<>N*#?=u%}o;D>ijU>-tJy>Go0M=U;!Becsv5=-e- zUZ)UZs278$3aN3W-i1(DztxN#xt6+75=C}d(`j@J#&9$u8g}->xmL=DA(V%F`^e1l z;hK7m{wIc}%6JPoHeS2nB;n|TM}tIij6zmd?qTio_F#Bz)0Wh`Vbk9vuSU~oj(H`quYB|@%Qt=+jUF|(5N@h{9_U6C5PeC{L@fkyT6P(L8y3Gbt@&>68`Ax92>9@0a)7l6@IWP8zz;fiUI2xh1O?Uz~8GOD4 zEPyVDg{j^AqDI9Unj!|j^*Bd=oGch%kfTrId$qWi#2b05YSF+Mwb>c-!(u&hov|1> z1hv`Ll4Q@zYk>6e4hj}d_aLCEFist6F}9}!_dF@d(CL0d7?X-GV12p$qWk90{kqZ1 zfRVGvV{%R6RyM321fVbFn3S^;-jIBAAY zyWiV51D;(NLq4jp&1Wt2b?0qGsnP&%v`4x2sPF@An=+`ct?jJEV&Lgk99XyYw(R}p z=vc^c_8kiAggJh7epyKtj!f8qfZmp_7|4){-xkOXF1gWKm$!b8Quj_Vsg2UbD(04? z0#b*AyJmj**xhieU)DY!05@Gh5t3z$n0Ked#Jf*4bC%;Fuvn>%X_rxt5F69M-n@%E z@_4Elh>6SK#$s@K65Dj)AHJ|j(D?4mB_=kA0C}Uw`>-%y8=#nJHaRt+cd8X_kLXc( zZ+GDVFvVUfx_6HHRI#_u*M_qi^J#ZMkn>T$VrP(Pyo%?3g$w(~XHUuEAb|+KCBU+c zXPB)aQ=Pbi%!ZiNR%)llQiddMM7Ij44$FJQy~Ld9_PaG3HKXN4f2SOwHIVKppk-GM zD@Wg}7M#|(H*4Y~_>oQ2k9_4)4cQm^k7KxsC=^d@}HvnE}Zm2|Cq?uH4ZbLktxFo#f00v!yHc-7)nv5QSf|>`XMN$JL zl~6twkG-VcIlw7CLw+atFNtV5`7?{Z9y}82HY8VZHy1$k$t)rjI(IUqgnq8J1;uMl z3a2?fq!Jpjx?CIG*=ALA8HAx=5Azc0)rMx+4b4;M>Ls!C|j-Dre$JZ z#{S82Vm@vO0=m>-is?&b%Wt0xH(Zx7UWqo=z;)ry`?s%0^(ZRv(`ei%tn$g_^S8Mfl(T0KQ~|ZwT*$!CkrkK$qP(!U2Kuv)YO;6Kgb)nB1 zB;X)p)C3CL3vv|oo&_1_o3an)S zm6>uqaHj!~%zbNngQ777=wo-%!hJ7TMNjJ0>cP#6(NwZ4d&)9&S4+EMH=~kb%H(H7N9SG?L z2e#W{b}<&d_Ly;)z+1#+{6Z5K2dhdRCnB$nKVWg8V%i{_IJY3Rx)Bh4e!6-r*j&HR zZJCHh(^k9Xy7lzRW8I?W7F{(4>E@pVL#PErn!h}JiV97EIFpsRjklHYsR!C{1{aRG zVSd8xVhw(eoq;NyXO>2($nt1{uAR$c`RpLvR*&?M$K(X&%3l@YRrn1c9kNy4DB$TR^fmWv=8NL=5Ny7OA zU>0dIFHq%g6K<%ts?garNZ-M4aHCG3j1@fM2^_aEIse_}veoGm zDlQwOYtaP{U@NgkWfkW|Y2YX_255c{Wfc#pR2aNmYz7_^%@n3b-qQgt(232RmK$R7 zerah-_?2!w|2YG{-fy~+`W~%;Z>D;-{ojuKH@V2NZ}E#!#(SN?K)2ewd@AIT1k@`# zYN@mc2W5jSpwa8gjbnOW7nJ3)fHn*fL-ZntPln)+zP0*_0XtmJdaJ!0C69IJrx(5Z z56#AuaQgGZUVMJ%?H40IMz(8pK=1pG$V<;*&l|)0gnk)UCjJ~f_w&2erAUGK#9Wio zRV>OSMc34s!N$MZsxFNxD&2xVGFkYP#{C}zM1Iy~w%)%)#yV)>8=-v2S=f&FqPjWg zWEFZ$Evi5*pq55@&t~a8K7QiP##`Qfbh#Y%?0N4m$Ci1Fg_Zlw@t6pfx2^lvkA1jT z{*jl>0Zx&6MYqrFd92dJaHDRl?rQx)tqU^q{$CnIt z0{ttG)Oat$oU3t+V-H?Wxw`f`0O*qr1kTpr8`*;4v_G|utw~7YBLx`W=PZM1)cVd{ zjZtAr*Ti+S@jT2h;8jC!!>9#1tINAaaV?WPfZcKx37j<57TScLc)qg(HMCMMprz4> zW1txRWo6-jS$_XFgKSQ8dn}qtybs+AVMHVs-#76<^;f0uXm+>3=W&Nh<7+1zxQv5% zOUs`oOVlgl)|Sgh=hk~=2}>4$FFo%kPT}vT@q&+ew<0f!P0%Qx-Fcz=Fdk}&g5>kx zUT46Y|Gu$cDDqUCb7uA1LJjVYKT}lGIG}hFd(R>y(g&d_8!_{Jzkz+TzrN9>rB&<> z#eAmhU)#w2=_T}SVZtc*{WLJcP_jyKn$iT8X~pknB2$X6OcWG#CV+q%`DaU9u25D{7Isd{5v4xN*{mGbH$ z_*YHc`jCpN3^~Fhs9E>IxHVAP>~6cmHlepu1_>YAURxqf-^sCnQEXtyWk2*Gr)7*@ zZI;!G{ZlV(Tf%?|M?v#{pz7ay6s8CUG>W+t~NhZ@H-=u~O?H zi!1 zmu+yb45YO0nes#?XO1W*wKpW!&*(+RPVjX5Kp9u*$9arOn^Ck_3J#1!7qB6Y)b|cd zG7qPv;Y`0P@_TEY%ZFmxr*DiG>^GCf}yOS4i@ zyc`KI*419`!xKi+m2Nd+T*R0cOdBVutLx_6+*!koc88vP5{1hc1>cSIA z6@jb&`LDL}j~FC>D}Xu0B76`{RLSUKv{^vjg-v#>Eaoq3AeWR>f+t534{e$xPjQwE zuJLm}cq8C74_n||ocEA_7=m73iW=+bLzO9xSEShZuy`!gF6q=KG1?&p`7#O*DDWf` zcDzgBNOfhXm_Mtfk96pYXCX^R=I)PEj$>_QR+>5ck$ln2(S-Dzfkk-F8WlFW?`eg5?suT1qpW4u_`uYqZpw0XB|4vY;=DwDEs6iWk@0fN?xe zKcZA5jG#S=x-SlG?I0V=(_${EFFDRk{dKP{V5T15w!CtUymlZ2u zL9`>e#Y^*2v6JfZeMsxm)*u~dArez3BBvuTN3RvnqOFlYF~MYdT%Io$NRuW*&8k+_ zSUUOh6Qd(->|o>|yHU_iuSyES*vWS%0RD-SeEl<4mAh7z+R#W(suGp~@%U6cD?-Qq zEBkpROvGHim~+ehR>EQJJD*;)!=$^nMgsP#o+E1Er(kA!rsYob5H+~SxqrHI!tW(h zE5c`oG$L0fKJQIa=t10{&Jdibz!uxGDiwVFJ<_bzmIWN9=#;V7ov;0*kHHXS;rD0= zGK=p54hOPkknF}9=mM#MH_Q8k1+MvSQc(jAhLyNhi(W0;u4*O!p(23fO)uaIC^F4; zE$|cSeD zT{9<{MbwXEKKA$0;r9`kkFS$aM8DzcNO+#+Nlzu$9kW|4LU`+AfD&PsQ1<{NHXbkp-hRwUYU42yXd1F$N;2G3jMt zep0}VE);G~P?tt#;xmNox|p_l@Su?XpWS5Z^9_1eU7)5V*cfK}B9KHa+n_8TpX?;ekmgf7~D(yi-ICQu|SJeWB9#cv_O+YUMI=BIG7$uR5A1sHpcqOK{RWop-}{cy^4mY-I+L&{fjGND1b}< zH-WoB+F@!;%r(k>r9LY-Rm&ABb645Vc-?MCtu;F@HCnb}W7u0IusUMF(a#S(q1){4 zO&RbHx#6!M-Y#>u>DHu+itu^}QjPl5A{yi()Q87D6|lF&qve3xV7YW5Ahv{Vv-);V z!rYE+bS$bIM;R%cN?E*U4Xp(RJBwCndUWcTB7Wx>5r)l?HZ=oePRl|C)@vN?|89{cFE$?*<0AHpL?uyT40dCcvg$O9_QlH<5MInxAP^w7+@IZEXyW@lU-%-`$B~`E>7I{VVx5`_K(J4Zgc%`nQuo?Oz}F;!Wyb(3E^A42bh)D-q;%!`K!^5QJtB zJ5i^yngKYD21Xoz{pxCvH(FJEQdxP(W(`WQ9XY*gQ8AA7U>VURDat*2fOVzWm#A%+ zJw36Ox%g(roke=5WOPvUlTf!1k7H2EDw1BHQ4u<2X^97*1?ba^l;oIZieki&-AV9J z$=qw{!fk|Mc_ky`z4akb`&u7@h$(D`^0VRBZ8&^gV%mqimmf1fi6KA>=Qx!c)tb8_a{t8Zilq`{FvEY*tcAAVr6}=R$m>uYR7U43>?}Npd<)~G1JP~;QEBGH=3vaD#g3Vj z@bVvo7vHeJwHwnI`O16}7zX;Mgw>??eVoDYJJ1%;m9GE1%cOCq8oRF9QtjxLS4;{M zRWfiroQEfBt%>eJVZqnF4H2#aiP^X51U<*m}1y{b%I`d5fqK;KsXaF40!AiZ? zL{Bt7ZX*}VsK1Fe80F!>(LfiwhQO25Ye@DPNokeWxsb15QGMN&c)G9U^h8G`_c8_i z&CG5Vm=r3;Q?d)>&5g1z(ja~+rw*r2FAsTmb_>rc!A=82zZBs85(C6ls z0QVL{Dl$>Z=t?!0=tkyno%plr$a@H_K#$T9LmW*vVPm}SEd^wrLm5iJ8z1ImX8%%%DRR9 z;`@pHS@~`6-b^il6cc{X!6!g3`<@MELr!1yJl~y3 zW1;Ke!xZ&h(l@Zv6O9ytbEq~@dPo4bU+B=w&~2H`otj{bT_=b@#KcxVk5jM`=~SJT ziY^dia!1F{$qHY&IZ1H$yajA-ej+bzB`=Yt1hy?L{+w;wnh(;Hkis`eKod#LFQ(pl z&E}l{yl{RDd=^y$6{6sFdn#g{@e^+@(Ve;>0xDUYS&q9mmbB{a64exf6aZF1nnB;X z(mC>9^0Z|_y(`VvcT3S_Vx-W7EDI`Cjx{(#uaC_;)V;lbv%YEML6Z{+hf%Qpe+9-0 z9Ut&c8pqRmsla}O3*8$|P54*bZfT9p)USRq9RYQ*RIJ77O4l&=G#M*+YbGCtj294x z5fkCad%GoMsDmt;+I7hWt^<#pcN$vWz0nMwJ;{h4E@I42;6bVj=M~Ad> zfMV^dikFXBv?EayfQ@`=J_icILT~d0Heu1EAxuZNm!6{SQ!<+{Ur?>{C>olSgAZf) zW1)4pz?wRo4HA@+_0=1@7cH|iVCqj+fHQ{tQwVf8)UrE5Q=naVJKkXWBm;>~5n?Ad z=3O5(vEuZTAGm~NP3bIQ(MiK+%S;(s`^K*kR&<=da%u&tAl!}4iK)%qcAfe#pF+9a z=3oljCUMlN#xa4pT#}m>3W!g7|C#m!2pKJ{n|q=H1GH}N+>#53u-b@%wVAk7m%z`6_ko5CFMb_PJr+Vq0u0^6G_BmhJ}8& z!_5Twuo|KEDq^%=9xiq|q(uMymxHAg5z?wJIE&}~ZcJ<1VBIrA0TA({+_IX0DT?sK z3I*9${l5Z0Ye|PJl4|b^&4xf!40PJVk2-@vkarI z2;#&_ccX8$ecylwdYf2Bh^DXcq5FgX+j!{kHA+K#(eBX=d++C%LhmfgVmDazPeE49 zys!*5Gz%MS(d^~PtL8!h6JS)4(HReI@1^9?6WLh5FD*cOU1Bv+-*&-nR^Werp`7hu ztwR!QTLh5ZXNFM^t@C~2E%t0sv7!$+I_f@9dB&o5cSe^rmpzg+w@3ChdcmLc-G21M z5E+;JvFpe!oC2f%Eec*2tHZk6+Iu+T)Gk`Mfz$~1cYDfuV_C0uRaT#-{y$8e19v6R zvaNTVbZpzUZKq?~wz;E@Z5tiiwylnB+x`07ckX!aKh#*OYSuSr6&lgBS(gl+SV&7Z z8tzhA&G!lY($wBoB92lTet_fGZ;g=_lPj(*GUAB^>Q98wNCMoKJz?(2n3z_WB`Uxo zCaM_{4woTA<^fGS(qf?%W!J<%vY%J9g8a3XNNz|qZ5~CPToz6R}LEtFe zxwTCDCYbf#HLySX$0z1KUI(-~`C1H<=8NT5KupsyL=M+}-#v`%rTY0?m3FuJ%~tO< zLBWJnxxSt{DapK@h|hid;FXO+-Ml@&xE2(68FCU8&_EajRD;)MOb@(MlSZI9tugj8 zJsqto5b8EVJQmX;ora97L};(~;9TaX3u)+5CBXnrRl7rK*SQtVS3;-EN_HG&t2Y;o z*7u<4CaP(XXhAN*dE;N5U7#Ek%*_G&pmv70if5ds%+z`zz=oc|&M^~0fY8>M-@C3K z!dGmnp1xl)HvzWA5S}{>{c=rpFuWjzI;Njkii;xs%_z;dr2sO&_b%oKSWoLO2hRWd z6733lg44vfXY#en#(0x5u2!y*tLcNPh~^{Sh~nh+LV*L1??Aw~=6rpu8vdQ0_sJzR zY&%$>kaYV#BANy<>jQruoa_U24<7jeDirvd~Z}eovf?^98`TT zZl;3y87Hs&L!e=6+HK?5#=|3tK}}NKDnIK*CS|2VsF3YdH&Gm7Z|%HVt`()P&|hh^ z=9S}1m;N$S?5s}vPs-Is%ZHbCW}?u&XxM_8v3NHc}XG5-*McAgMrI)44S z{WyW&A)21bH|)o=Z0(=kFYg8W>z&5#^O`W>R?lEDT?Z<76EOGU3-!|57PGKn5rg$kxMKpCbK)t2H#GKA zm-aib*y063Zmkv*tSBb~ubzh?RF`7^5a+HFIVky{t0(&>k0auSszPI%gk)73Nw*5_-MatB5GMh%FNabQkP)jrF(n|`W6!!|Y79GWwkE$X7$NzvZdbax-&v9+r+rc+G&*L_;obs4 z=6-^w%P#izT5r^ivM+Nq{e|W*D4`38p=ie1Q7gD%nx4Q-%Vp5M61IYkL zWU;m@ZB~GU{b|P~;R&99VRy_3?cx970U2vFo~}Cn!=E4Edh_pUSK(4nUVGo%AEs&@ z1w3d^9&RMdMX+4OV|aS;e&+Iu6tZivQ7y_Ck)5b9UE&t_>2_dw$T>b-H0kN3lI~rH zFNgCdjwyV_JK8Ve%34=ji0Z#&N850F3zRmp?q~a6I-1!}Zq9ywF;CSn!a={{*yW~? zS;mt~mNG&lkgc!=P=pu$`4ye8l?_3aj^xp;toFfzz@bQO1h?8>^>Op77wT7^y zH!H16l<#G{7DuF!xyfE`cl@p~t2yjS#@HLDx&;_4R|RV4A>hDI1Ci; z|Ic5DKT%h(27Q~4k4;}}=j$D2 zSTo~~y<=aDS^MQjmajNnqT7iFW@KI4*RJ_(UrCt~y=Q-EpWe<*Cm%GDx$SAF5?ps? zcx9Bb`E3rJsg8W$MV{BPDkxQbE+|Ragy+xq(@Q05q;Ldf3Ft#Aa?fI67^yr`+xB$p6_2pang;p$~i$cf=!$Lk;UvcuZkwWu4M5+o91{K0) zxmub~wb2U(oZwtINCF_3$}o!5jz5$NyO**HMmtWm9V(;r$0~3c$8n-_#exCh zVXexuidE@LjfRtosk^u@1aSGmM;DXQn6&q2{J<-o#4?pG>vk|3sg?G6NmKV9*5C9S zuesK3-1*oD7$OkxT0d`UoeUY#BJGDkUoq)Favd8vf$4xG{kA;k=7p$#itD+jbvLt^ zRzJ8G=?tlc;o_%Pmp^J+ zqQ~AYW;UBfoSsbAg81pfnTMVeGm`pgDo@S)ze81Pd(eE=7wn*GC?y03Ur>osTbH-a z01*af5EB?ruW1gLU-ZV?)tq0S}O!O~Z`Wc#ORq$8*p z6TD2eNG=Xy4#f;PJjZT^E91J(hl8Upo`%4?k_eGMAv89v)RZrW-V{&WxId4c5#khj z91q;DGaf8%?-Bn$scg!m?7(NTHm7}gE$>|QwD&-X~m=s=p4p)wpD&&fC!FGo=I6x{Ib*?I)QcFmNesf6`=+*%Bu}VTvGU-ix zODUar|2fpv436-YyYer`cA>hmqQs54&@F_JV;s4vzb}PY^4Y`vDqdiS#fOf8p}?9% zF#ceRf}rM_*{sTpl(GsaOeSN~);&m)Um+^a;NbTDdJRHUDZZX{-%+CkZi~^6kr2Hy z)ARi^Q!rLoS%6YAS!>MVC9#vnHaagn^~Zgcdy$F5c87WI<1*tyB!hL@KcVcj4gF@{ z%-NyzQcNw{&B0i}I*!kOL_ooI9aM=Uuk)RJV-t+cST*KI!nV^NsWi{Y!0>JNI`{?} z0R0O4wEtVt-kX6BK2zZ+sm*6%=KJdE3c}Cxqg?_lllKSFKZk|6}c*8198e@#YKGq_*TfjxbYV&s4#|ziMgr?fhmmVqYnen4# zCARyg6j(ZZ6webuwf(Dc#rD_zOD&_|$9u|#;Napfz-|B5&7cQPY@Z`|Pp~8r z3XMfYN_E+K^}Z(bTT(iU-GU7ZLxZqJs8mK3r~>lOYh_6N$^LCy-6~vsPEB(OOLhK8fp|!zYFrZGSBVIjG>@W4@$9SMfX0gKQPoklI8I_1?V)n& zVG%Q>v!#nfEMnnvr)ay_%7IKa3{oh??ocCA=_j>OHG>B+(7Eq%{Aug5=6{ZZq%)-$_rp*T&ylI91qtVDBY(Kjpe@ysPJvo0P%F%xjPbf+qL)j?I7 z2Vq!p_(n?pvKw+kjo#gy@jphGIe74P>Np(<|Ja;d_haI)W0>Pe3X1I~54b*4`-2%? zzCE!nfByw(f`1}{A7^Hpo$486?hS+9%dI?FG@2bgHyUriaLdd3$0>-x$_K23aPJoi zpz1Euv8w+%CafWyM)N2R>1jd$@w0`Qg4PU*<5fR=wKA^Q3JOhTanQb|OCvSs{5rUO zDeQ*jzXJ=e54iiY2jxp7)Co?Gx`fblQD@Vm)d9jonHxR4V-#3J;<{%e#^C_W^_4NjRsFFz_4vpi*ORp=3r*Y{?nkM#{EyHE^X61*YFpO`qrm2q12{dSqF!17%}W*2Juzv0hEdhoug%RA2_5OBo-c)} z6clUXC;arJFGs9k$6H1C2OeMrXL~zz@KdveDRxf@i-Jjyr{QT`Kg#3`*}0m;bxI+2 z_RqzN;7no*p~+iD6WkM3%uE)RCJg`oxtnrevikd1Z|i#dFmbpx#^XgGyBL7FF&#-kwN`F z@JE@DWj6P+pW*84hFjuq<;3(=1Z6N(&xkR<)b(9bkbL0i#~429);-|)CPS6UWR&OE zT0c2DEy)&YL>BRlk{XI@1nXQ)C8~Fjx#(-+nB(FIU;XW~O=7&wlLT>jq2RZ3{yQC= z`OiO_Eb|rj z;ZjH)7;%;|ww+-SS32ZE`%K_|!Ek)o6$>{*yKvbg*2Qt+1MeyoNo16ac!ef=raQd1 z+--3UHH8_-R&I!7Jg9+b+R4i4%`6gqEjYx`jtv-8hcl}zX1g$ZR&L01C`6C1%qz?( zsc%`p+T_FYnLSsi+9Hhd60pYz$>fk$POY@@XK@COX2$_%CO_v@>uP0tBb3EG&s0kz zDKcc@f2aUz*=+rYgcHoo`uPY>UhUa3Z6LQGMnA`_;sxO%pqQpY;%LvmU0WU_C{la% z`5fxGveti5|NEKKuF~1E-gRasn+w)6bOsfh3pK_s?|Uv+2fDa~zFUG2Etm3jHiqW-pi&~!tBT>vnv_n4_g*w8 zedho)RCsv5bHI-%K}anqk74|C3rsUwcrXvIrKYb7KRRJ=J3AVUDs{Qku2l2eLqR%$ zjRuH-o+K|9KYc>a2{@KHkdEu1fT*WM`9jg?F{fhODMrd>O;MzZ8PZe84w|Uvq)iC( zWyp~~;yeCb)87P)%!mx(Ag7lk<}nL`^ENw$likx{44U?M*nDk%h59Wq8+_I7scq8W z-y?%oGKbQAM4e>z)uZ$lMW<90s9rq9rsLAdsM=LjNg>vtED21+&{DB|klI-}C1`{>&N50N}dY+Z`|Z*aJFt@SFzP`x^=QD+Pb{xbHuP(!CE{T@1|m$$0a3U{K|Y1%eNieOKJH8=jdm z*IIjIVEFCw-k>vu;Aqd)sxC#U7q`*nXltW+PZ{#OJ`<~L{l_?ZT@5>rz$Qy1#|5W+ zJyL;^jqM3{zyFxR(RzepB?n*W@vd#W@Vw{C(H_q-qRux5YR3K*4s|h_H5;+x(W{dj zRRHxI*#w_Aymi2m7cD z-|PcRossR^{H>%fhoHG-=#1F@AeF9$N!XwK-a64raJh*%yyP!;r1MqyB74aibpxIs zeB-0Z%G*``{&LRE;||{GWqFIHP?9~-cG+W&9fw_YSN7^6E#I60xJUC^G#V(MzY|aA zJGO~*oVQ1IOcNXIbApj;@$5meg#%!bPdVqySaQrB2pNzeB0cF%H6-Jg&})YGe$VIZ3x*F$s-vKQgu~Vw-4l@Rgh%8Vtt%Puuu! z?GKRL{rln2i__zN6jO44e7z`5ZJ}BcC_W%%?P7a)VujB$zR5d`#~ZfDHZGC*CqpY| z0zrr|oKx66*uF-RT6F}LoZKc@fC!TWRA<4KRbw=zuwY#80^IK1}6Hp_`VW(xw6 zPg%QzO+3IED=GH)KA*=B!KOHit+~UeU(H4;Ki65_kf_->$9T)dggmcN+Kcz{$P$QU zvx}VRkIm>29z%O|qX|M`=WRVu@d1@Oo3A5xtEJ`z)qaTGc4i%BwN+eB`}Ss zkf$lsNEq#e=n+9B@{97A<+L|7fUE&30rdsfFprH4cvrGb^954Js)qP!I_q{tly{R5U-Ie7H=PtLq z%V*~rozpgt>5MeO45G!AW$7$9OZdwRs-6~sICR zqFX5=6yhJ|ii(+7B!1)hS#-&+kRBbw-pO(4YVo5pHZ#;zSL7P5XqyOQhj-X zo=7B`jIp%R5|EGhc%*NTs%0QX2$|T;t)~V_osNTpdKJV3#I0sw5jHXd7L4sC2t@4N z=0>KZ;~%cpW9d;Lp3PlWQ#;MD#AODzB{fJG%n-bfmIL!I@FD6|2h_1ww%SN+APtp@ zGgpWLneZEVLX1ocWK$DqVxO5~cM)>4djUowkn|S{0%>;`m6G5RoK)yPqhr^n9?{Il zVyhSQ)gWa8rKa3Z z#UxnMe*MS3h;EIUQY6SWPzZ3g2=jUY` zl1Fb!SY6Bm(H7~HjjFK}85W}%KUJhG5~q%o0O{di8T1vvOcLS=x8s9`=x`}lrg%+k zl6-fuF05TgQ#$xNA?b`}>X}}%kud;Z5eY;Lz9ZKcCI1w=Ch?Vu1hS8cG)xGAwpub~ zSUBQbv!omgq?dt6Ex{o3y!!)cy$@+8>aLh>c481~rX@*r`&=E!oo!z<4)ti)uNpZ3 zV%6UOM56D9puOdF0B%7O+|v_iu4szAE7wrr-yn{9t4_XMt!t}U-R7X; za#B?i&c3om6}W)Baz`<5BTwVHFoo${tP_u``OodC_9yFwSaD=>9|2H;`VathbCF=5 zoka9R!sJ!X_m9moi6xDI?bNc`_&PG{^mt*w0^Zk3p?I*n5O5)k7k6j}&nuL|YGoOu zw@S+_{{d&>1)YX9J*o~uz(m}=%LVKEm&5Swd3rrzZER!Fs1Cw~PQ6S}xU530JhRRO zm&#zQ2k1a5YA}QS1ibHWVl~b)cdBYOG!`x9s^}AM7l&Xy9be;j20qt%h8%=t6;CUW zQfy^2aL!b&iE{@U1BF^kWuXdSWzE$847|x-)jWP>r?Vq<>Z2B)ZZyG2;T8f)-Tc#*! zG`sf9dWm9$$Xhox(T<1N9rven^3|2uuKXj+exM_o-8Thf{$uEr?ezmkzFwogop4N# zE-i&OqQnMC10h~@rLgMZaxD?`;8cgsawdbbsPnK9+Rj?7JtyTy&hyP_u|0uC0sam3Y>#a4|74bbeHi=2rBEzlhC z&$_cDBj|ase$mq8nE2%Pt2r#;$Ws;xZ`W9Mk5ei-W+JI?e9xYlv1x#C{P`}~sow=7j4qg9ak z3-!=#P-MVWvmqo)`vm5sB|UArf#1V;-M?X_`SOs|OZI0>x?}Kt( zKAOf2YMVKuOYjD~L_ArEXQ6{0ld_1f%u}K4UTWGtWpc4aktkSmJA%u#tjbo~zlJ*x zA4@%ShPR-l)BVNSjr#AZ7p(0L!S|iLl`>PGxl}urz2KKhjDDpG$ZTI|*bWzkU4&LR zILURDZGI)#Xl4Z9(oiDWi2cbUKbaXoy}_YFhr6g}BM>R7g(d45F24_}&|l$}soU?h zA5PB*q~p9YK7K=%!n@mR*)LJsFY$3UJwh5kpBsV9bI@CvODkKX70~7|s~NhAv@6O4 zp6H;Iw4kKh8A@^D>OOWi*paN!gCug+z1%!lMQ$pF`PT0=^4s^>oqm#*+aJAJ4csQ6 zAc2=hlDvG938)k++?qw;h9Af>m7W}&=y@D8`D=|mvmTH%BOX#Y1K$u6(Q-H zvKa$=L9T_c;~+ay476NHFz-DR4r|xQs6lx3b(!f{GXM)-mNJ(KeXsP5{DmuVO(@=? z8;ofp@KdRMyuLJ=gIR-R_2*JUs(7AY%!*@^_=1F4^tm#qsLT)ZL}kjiPHb$5Wv}z{ z$Y1f!RNPJcz@JppFXCvozQgTPeLrUA7oK!Ymjt5aP7$8_95$+|Ln07NuJo%fH!iAJ zhMDYsGFynf;y8rA5(B-!IUGRQKh7X{9Ofw8!}NQM8{()K*G-8{$$t4feJ|M{pG5)hvmW0=gkN|26D#i3Qh8m<3H&i~ zmm$dDCO&-f zS%Hee8UE2M4ZP5B4B0ho@b7e=nrvOI`|}=M8lMl$XYR!XtBiWI*u`*?o|iX4x3J{)%00V zkaPOCA#3t7%OC+H(;Y45YMXlG_0c&6{Ax}neF-RH&``&H-6t4UJg!{r$~fJhr&JD%mPJ!3OwwW&?Nkz5}t&5RavG6 zzbLt>{Gpq|9o%qCd?5=yVuwDh-G$tYztXPDZVy|6XCu0aaYxAbyx<;$RS%kPUc+kj zvkBtW5UP2FCIP1?KP^o&PS?J83A)cL`x=Y2E}V6m*@ueNx^leqYC&xGX&Wbx%1nbP zuIcnQ?SoVHiCB3$J_^4|5v`P~4U{uDeopQ3x$E-JJjZFj_~y!rJp!{`96R;6Q-y_J zzv%|&rl%O&!8Gd(-?o1p^&$M8ugfVia3ISNC%O4qg<(B;VJX}jZY9}ouy8S_92JtfA&0=SwT60JjRgJ^s;T@Cjm(`mYJSG%K zBy_an#F=#Q4hV3X!bg}AD|yiF(NWgZ*rE@LfeM__C9}jxNkRkXfih1FES()JC~=AZ zR;>0`eMLW5g-YHol*bI3*xC$dzQ!DGq;pIV0I};H6Mx%VYSObEc*gIyH#ek6p)G#4 z1#-J7A{13G+U2N{+6c%)AyLYYabO-}aK00}zT3GcuOg3Z7ai(Ifcvm3Kg5R1q})iX zZ|}60AdtTUeEnhcx`(c6Y@VW*swFrP8NNfJiJhJ9c-V8x6qOi3q*Uo}yZ41sVg|=y zAJ&n{dmk?KutvIbH`SwIjzTWabJ5Q^AO0?n&t}icH$LHm_U%P-{bz6Biy0%-t(hCy zLD!@UZmcTC)s+i75OzzD6&cNz;c6cj2d+ z+JZJEhLRO3zyC{hi^U8m%?abFPp_+IH0=EoGqfazDV~yzN=H1K(*prO#-^ZxQc5=k zl8`B_ge(g%71ILyTr}_Xozs$W8!|0A7&8&R-@tJSy^=->9YMqGS;R&hUg@lcpaYU) zNStNLZoM&FPtM!eX}h!8Yf;O7BPw;dA<F&%d<8Kcvv ze$QKlUOK-OE0)L)KtI8hNtpE!bhWNGQv&Q_k?IIZy{#!(_2LT=eQe>9&qVfdP=t`ih4nMY>yEXiut{3*!L(M3(zMGAxJ($T zM>tYe^#d%&C3ka}i$n9I%5qtA6-H_w?p>u$f-T)>y{z3!19*pmok|qHVEDWo

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

jP 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 - 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 b3d24ae..0000000 --- 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 97bfb15..0000000 --- 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 3cdda68..0000000 --- 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 842cfa3..0000000 --- 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 d28a523..0000000 --- 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 10e5e5b..0000000 --- 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 b8165d4..0000000 --- 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 099a050..0000000 --- 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 065a6eb..ed08e80 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 357c109..834ce90 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 4edce9e..f26d694 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 8537dc5..fda10bb 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 4fc35a5..219675b 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 c24fcca..0a57129 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 f479682..7eae2e5 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 eb0d2b5..186f86e 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 e9ec1c2..cd3bf7d 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 9f2d3df..a65a965 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 061ab11..574364d 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 c63d8fe..d2e5bbf 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 c79b627..c2be4b8 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 ff839d0..1af2377 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 a67c238..34e6ae6 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 7310d23..ba25816 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 ef0e874..e87bbf9 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 6d2187f..9153894 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 41aac6c..6abde3e 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 08b7566..c618e4e 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 d7765e0..f9ef170 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 5380258..a9a69df 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 5a8953d..c884909 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 3cd3b2c..5d3a692 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 14491d4..be696a1 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 163ec4a..7f8e5df 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 e4bb205..dedbfe4 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 d7425b9..79ed799 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 4b12502..26643a3 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 f36b391..6afd4ed 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 39fcc50..4df0db5 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 c4d4039..bf905f1 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 617d7ff..1c58745 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 ce39913..b7870c0 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 0326bd2..d0526f6 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 8f41c53..991864a 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 9a24956..3db6bac 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 c62cdd0..679b677 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 4cdd61e..ddc962c 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 023d37e..75e8cb1 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 28b4e73..4b6568d 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 1ba1007..8cb1549 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 31925f9..ccd0a44 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 3af2976..5e53f3c 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 cc32f6e..172987f 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 d8aca6f..d879473 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 4791de4..5192667 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 4f2fec9..89ecde7 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 f89bbd9..bc328a9 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 6e3b333..bfe3484 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 207843b..84e8d01 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 9734c91..0e4b791 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 525dfae..49dd2b2 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 e5f3549..f44feea 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 0d47dca..76f9240 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 6698a18..ec0a5a5 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 67d6e56..922e1b6 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 2f30ef2..b85ce7e 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 21524ad..0cbc752 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 8bd22fe..852d085 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 2fcfb41..1748480 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 e612f81..2569931 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 61084e9..8a30b27 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 4f8ff4e..b95f09b 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 b9e3838..aedfe01 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 3cbface..8b36a5a 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 fca5bbb..e67c5bc 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 c80fef8..20df729 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 0d8535b..c6fa912 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 9f83a09..3a74e46 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 6e58693..87bc2b3 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 05cb062..cfde04d 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 1ec5864..ddbcba1 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 445e8c4..099efc3 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 0e8d1cc..b0bf3f9 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 01cbf41..258a8ca 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 d461020..75c0124 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 0697740..464b307 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 9d2f187..827a274 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 eec89d3..2e80257 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 d1fe39e..2438f6d 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 6520a1f..fe24d5f 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 88a3f53..1673ab5 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 ac56fd9..56d084a 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 e257b50..68ae9b5 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 d93c10e..6593f69 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 1cea58a..ce724ee 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 759b0a0..51bab8e 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 2266ac0..52db133 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 de56716..fcb35b1 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 c33668f..a98431c 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 d7df006..9575b11 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 80682ec..5ee073e 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 dc877e1..97a16a6 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 a273466..5e50268 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 4a02c76..ab74fb8 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 dcc566c..eb62756 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 9bfc331..40d8343 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 0b1e02f..7f708d7 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 e5a2cf4..821e35a 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 49ab0c9..89b1041 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 fcec5e0..5fd7567 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 85798b2..ae0c6da 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 f4f105f..0d043e5 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 e9adbcb..ca52519 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 129273c..f0e739b 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 1f44c80..2d464a3 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 53cfa75..9403662 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 a626185..ff144c8 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 8bb7db8..08c609d 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 9dfc80e..6325c6f 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 c7f1638..c35bd28 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 1e77fb9..ddf9b68 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 460d0ed..0665ac3 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 8da977c..4cccd5f 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 c429b58..4d37388 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 1ba2b18..119c897 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 b8165d4..8418751 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 099a050..b91480a 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 43117ca..b0b6ced 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 ff24599..c5292c6 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 24076ce..8304876 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 48417d9..19db013 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 0d043e5..56bc2a7 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 ca52519..d542511 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 f0e739b..4c962ef 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 2d464a3..9d41f98 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 9403662..0e949bf 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 ff144c8..64586d8 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 08c609d..b5f7eb3 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 6325c6f..9816375 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 c35bd28..b0b5067 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 ddf9b68..6ccc7ac 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 0665ac3..a7fbe30 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 4cccd5f..200df80 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 4d37388..cef318f 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 119c897..26bc167 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 8418751..00836ed 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 b91480a..cdd470c 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 b0b6ced..af7b036 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 c5292c6..cdc68e9 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 8304876..1343349 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 19db013..ddd87f7 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 92cb131..61a3582 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 56bc2a7..7d086dc 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 d542511..3222b99 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 4c962ef..f6b4182 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 0e949bf..9dca37e 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 b5f7eb3..9dafa96 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 b0b5067..1a30127 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 a7fbe30..b36dd89 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 cef318f..ec1b991 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 00836ed..21c91e9 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 af7b036..6c6f74e 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 cdc68e9..ab218e3 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 1343349..4a3c544 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 ddd87f7..0966740 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 61a3582..140ec20 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 f6b4182..d52fef5 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 9d41f98..7527adb 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 9dca37e..3ddec4f 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 64586d8..2837ed8 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 9dafa96..2fcab66 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 9816375..88292e7 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 1a30127..28c5eaa 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 6ccc7ac..b5c085c 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 b36dd89..9cc33be 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 200df80..49b6599 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 ec1b991..61b19e9 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 26bc167..a4b70ed 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 f26d694..ee99102 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 219675b..aae4bf7 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 186f86e..ca094aa 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 a65a965..9a7629d 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 d2e5bbf..55741fc 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 1af2377..8213a4a 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 ba25816..2bd659f 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 9153894..099a562 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 c618e4e..e173d72 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 a9a69df..eeca9a8 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 5d3a692..45645f4 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 7f8e5df..73ac9ca 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 6afd4ed..4df4f6f 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 bf905f1..2dfaca1 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 b7870c0..38cf171 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 d0526f6..39ea495 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 679b677..0dae260 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 75e8cb1..da0ecf3 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 8cb1549..4deeacd 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 5e53f3c..137b5cb 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 fb7fc3f..9da2dbe 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 5192667..b82b684 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 bc328a9..1ec22d0 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 84e8d01..19fe55a 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 49dd2b2..fe1691d 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 76f9240..5906ed4 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 922e1b6..47a3347 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 0cbc752..fbaea49 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 1748480..6695743 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 8a30b27..70a309b 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 aedfe01..118c8f5 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 e67c5bc..525d1f8 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 c6fa912..f4d05ff 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 87bc2b3..bc9cd93 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 ddbcba1..94a77bb 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 b0bf3f9..11e1382 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 75c0124..d094412 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 827a274..831c7f1 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 2438f6d..1e91ef1 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 1673ab5..fea616d 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 68ae9b5..b14a9dc 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 ce724ee..d373ebf 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 52db133..7c9cf9a 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 a98431c..4e5b4f1 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 5ee073e..d2089b5 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 5e50268..1dbe94f 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 eb62756..cf9b40a 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 7f708d7..729b0e5 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 89b1041..09f23ad 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 d52fef5..d53ff5e 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 7527adb..89d5f1d 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 3ddec4f..d35e7c5 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 2837ed8..f23a962 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 2fcab66..5e2837e 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 88292e7..b5cc8c2 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 28c5eaa..448b2c4 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 b5c085c..4ff0a8b 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 9cc33be..910bd7c 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 49b6599..f7791ef 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 61b19e9..6ee6516 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 a4b70ed..a1a2476 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 ee99102..91e0b4f 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 aae4bf7..c726885 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 ca094aa..5f2df48 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 9a7629d..770ad52 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 55741fc..1405f68 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 8213a4a..5f207ec 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 2bd659f..5d3a04f 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 099a562..d833645 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 e173d72..3869879 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 eeca9a8..afb65a6 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 45645f4..514641c 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 73ac9ca..78ae5a0 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 4df4f6f..19d170e 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 2dfaca1..22b8ae2 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 38cf171..d2eb9ea 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 39ea495..85570dd 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 0dae260..ba02794 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 da0ecf3..785c80b 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 4deeacd..75f8622 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 137b5cb..1505e79 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 9da2dbe..5825311 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 b82b684..ce8c492 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 1ec22d0..6dd935d 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 19fe55a..f589d57 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 fe1691d..faaa46c 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 5906ed4..9fc054d 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 47a3347..5b6ba57 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 fbaea49..8985b6a 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 6695743..ff1acc0 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 70a309b..15c216d 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 118c8f5..66d82fb 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 525d1f8..6d6164d 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 f4d05ff..c3bf945 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 bc9cd93..20736f4 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 94a77bb..37c9cfe 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 11e1382..f1ae477 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 d094412..385508b 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 831c7f1..9f4c653 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 1e91ef1..4014dec 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 fea616d..3e3ff5b 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 b14a9dc..6bfc055 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 d373ebf..65f9a2c 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 7c9cf9a..49aea86 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 4e5b4f1..433ce79 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 d2089b5..5a0e342 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 1dbe94f..2702c43 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 cf9b40a..40cd813 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 729b0e5..06b2b88 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 09f23ad..dc1d20a 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 d53ff5e..73273d9 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 89d5f1d..5f4fde0 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 d35e7c5..4a63807 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 f23a962..d8b574b 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 5e2837e..1003d46 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 b5cc8c2..67ce99d 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 448b2c4..40e7eb5 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 4ff0a8b..2925ff2 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 910bd7c..5e38c34 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 f7791ef..9016fee 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 6ee6516..35e4d6f 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 a1a2476..979365f 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 91e0b4f..429cb6f 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 c726885..f258222 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 5f2df48..4f9eb73 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 770ad52..e588343 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 1405f68..68665a0 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 5f207ec..4c6711c 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 5d3a04f..9106ea1 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 d833645..86a0b49 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 3869879..59c2220 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 afb65a6..53b2d89 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 514641c..e8f6f96 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 78ae5a0..395cae2 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 19d170e..65333ab 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 22b8ae2..638e480 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 d2eb9ea..601a96c 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 85570dd..2f9c56e 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 ba02794..15d3c3d 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 785c80b..e0de21d 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 75f8622..1adba99 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 1505e79..ed06bcd 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 5825311..238f6a0 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 ce8c492..aa8d8f5 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 6dd935d..60aac57 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 f589d57..6e152aa 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 faaa46c..f3ea4dd 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 9fc054d..03722ff 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 5b6ba57..7db0c13 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 8985b6a..edad300 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 ff1acc0..e4309bc 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 15c216d..ce04985 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 66d82fb..13cccf1 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 6d6164d..18f5980 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 c3bf945..fa7e3ba 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 20736f4..088b8d7 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 37c9cfe..8441093 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 f1ae477..142f019 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 385508b..f3a4667 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 9f4c653..3e23a07 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 4014dec..6478737 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 3e3ff5b..92d92bb 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 6bfc055..5095fe9 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 65f9a2c..6fbc1e4 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 49aea86..c18511b 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 433ce79..a86043d 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 5a0e342..1346377 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 2702c43..cefa263 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 40cd813..149f8c2 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 06b2b88..43ba3c1 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 dc1d20a..5cd52ba 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 9df0b2b..202812a 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) }